Commit graph

33 commits

Author SHA1 Message Date
Dmitry Lenev
6bf6272fda Patch that refactors global read lock implementation and fixes
bug #57006 "Deadlock between HANDLER and FLUSH TABLES WITH READ
LOCK" and bug #54673 "It takes too long to get readlock for
'FLUSH TABLES WITH READ LOCK'".

The first bug manifested itself as a deadlock which occurred
when a connection, which had some table open through HANDLER
statement, tried to update some data through DML statement
while another connection tried to execute FLUSH TABLES WITH
READ LOCK concurrently.

What happened was that FTWRL in the second connection managed
to perform first step of GRL acquisition and thus blocked all
upcoming DML. After that it started to wait for table open
through HANDLER statement to be flushed. When the first connection
tried to execute DML it has started to wait for GRL/the second
connection creating deadlock.

The second bug manifested itself as starvation of FLUSH TABLES
WITH READ LOCK statements in cases when there was a constant
stream of concurrent DML statements (in two or more
connections).

This has happened because requests for protection against GRL
which were acquired by DML statements were ignoring presence of
pending GRL and thus the latter was starved.

This patch solves both these problems by re-implementing GRL
using metadata locks.

Similar to the old implementation acquisition of GRL in new
implementation is two-step. During the first step we block
all concurrent DML and DDL statements by acquiring global S
metadata lock (each DML and DDL statement acquires global IX
lock for its duration). During the second step we block commits
by acquiring global S lock in COMMIT namespace (commit code
acquires global IX lock in this namespace).

Note that unlike in old implementation acquisition of
protection against GRL in DML and DDL is semi-automatic.
We assume that any statement which should be blocked by GRL
will either open and acquires write-lock on tables or acquires
metadata locks on objects it is going to modify. For any such
statement global IX metadata lock is automatically acquired
for its duration.

The first problem is solved because waits for GRL become
visible to deadlock detector in metadata locking subsystem
and thus deadlocks like one in the first bug become impossible.

The second problem is solved because global S locks which
are used for GRL implementation are given preference over
IX locks which are acquired by concurrent DML (and we can
switch to fair scheduling in future if needed).

Important change:
FTWRL/GRL no longer blocks DML and DDL on temporary tables.
Before this patch behavior was not consistent in this respect:
in some cases DML/DDL statements on temporary tables were
blocked while in others they were not. Since the main use cases
for FTWRL are various forms of backups and temporary tables are
not preserved during backups we have opted for consistently
allowing DML/DDL on temporary tables during FTWRL/GRL.

Important change:
This patch changes thread state names which are used when
DML/DDL of FTWRL is waiting for global read lock. It is now
either "Waiting for global read lock" or "Waiting for commit
lock" depending on the stage on which FTWRL is.

Incompatible change:
To solve deadlock in events code which was exposed by this
patch we have to replace LOCK_event_metadata mutex with
metadata locks on events. As result we have to prohibit
DDL on events under LOCK TABLES.

This patch also adds extensive test coverage for interaction
of DML/DDL and FTWRL.

Performance of new and old global read lock implementations
in sysbench tests were compared. There were no significant
difference between new and old implementations.

mysql-test/include/check_ftwrl_compatible.inc:
  Added helper script which allows to check that a statement is
  compatible with FLUSH TABLES WITH READ LOCK.
mysql-test/include/check_ftwrl_incompatible.inc:
  Added helper script which allows to check that a statement is
  incompatible with FLUSH TABLES WITH READ LOCK.
mysql-test/include/handler.inc:
  Adjusted test case to the fact that now DROP TABLE closes
  open HANDLERs for the table to be dropped before checking
  if there active FTWRL in this connection.
mysql-test/include/wait_show_condition.inc:
  Fixed small error in the timeout message. The correct name
  of variable used as parameter for this script is "$condition"
  and not "$wait_condition".
mysql-test/r/delayed.result:
  Added test coverage for scenario which triggered assert in
  metadata locking subsystem.
mysql-test/r/events_2.result:
  Updated test results after prohibiting event DDL operations
  under LOCK TABLES.
mysql-test/r/flush.result:
  Added test coverage for bug #57006 "Deadlock between HANDLER
  and FLUSH TABLES WITH READ LOCK".
mysql-test/r/flush_read_lock.result:
  Added test coverage for various aspects of FLUSH TABLES WITH
  READ LOCK functionality.
mysql-test/r/flush_read_lock_kill.result:
  Adjusted test case after replacing custom global read lock
  implementation with one based on metadata locks. Use new
  debug_sync point. Do not disable concurrent inserts as now
  InnoDB we always use InnoDB table.
mysql-test/r/handler_innodb.result:
  Adjusted test case to the fact that now DROP TABLE closes
  open HANDLERs for the table to be dropped before checking
  if there active FTWRL in this connection.
mysql-test/r/handler_myisam.result:
  Adjusted test case to the fact that now DROP TABLE closes
  open HANDLERs for the table to be dropped before checking
  if there active FTWRL in this connection.
mysql-test/r/mdl_sync.result:
  Adjusted test case after replacing custom global read lock
  implementation with one based on metadata locks. Replaced
  usage of GRL-specific debug_sync's with appropriate sync
  points in MDL subsystem.
mysql-test/suite/perfschema/r/dml_setup_instruments.result:
  Updated test results after removing global
  COND_global_read_lock condition variable.
mysql-test/suite/perfschema/r/func_file_io.result:
  Ensure that this test doesn't affect subsequent tests.
  At the end of its execution enable back P_S instrumentation
  which this test disables at some point.
mysql-test/suite/perfschema/r/func_mutex.result:
  Ensure that this test doesn't affect subsequent tests.
  At the end of its execution enable back P_S instrumentation
  which this test disables at some point.
mysql-test/suite/perfschema/r/global_read_lock.result:
  Adjusted test case to take into account that new GRL
  implementation is based on MDL.
mysql-test/suite/perfschema/r/server_init.result:
  Adjusted test case after replacing custom global read
  lock implementation with one based on MDL and replacing
  LOCK_event_metadata mutex with metadata lock.
mysql-test/suite/perfschema/t/func_file_io.test:
  Ensure that this test doesn't affect subsequent tests.
  At the end of its execution enable back P_S instrumentation
  which this test disables at some point.
mysql-test/suite/perfschema/t/func_mutex.test:
  Ensure that this test doesn't affect subsequent tests.
  At the end of its execution enable back P_S instrumentation
  which this test disables at some point.
mysql-test/suite/perfschema/t/global_read_lock.test:
  Adjusted test case to take into account that new GRL
  implementation is based on MDL.
mysql-test/suite/perfschema/t/server_init.test:
  Adjusted test case after replacing custom global read
  lock implementation with one based on MDL and replacing
  LOCK_event_metadata mutex with metadata lock.
mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL.result:
  Updated test results after prohibiting event DDL under
  LOCK TABLES.
mysql-test/t/delayed.test:
  Added test coverage for scenario which triggered assert in
  metadata locking subsystem.
mysql-test/t/events_2.test:
  Updated test case after prohibiting event DDL operations
  under LOCK TABLES.
mysql-test/t/flush.test:
  Added test coverage for bug #57006 "Deadlock between HANDLER
  and FLUSH TABLES WITH READ LOCK".
mysql-test/t/flush_block_commit.test:
  Adjusted test case after changing thread state name which
  is used when COMMIT waits for FLUSH TABLES WITH READ LOCK
  from "Waiting for release of readlock" to "Waiting for commit
  lock".
mysql-test/t/flush_block_commit_notembedded.test:
  Adjusted test case after changing thread state name which is
  used when DML waits for FLUSH TABLES WITH READ LOCK. Now we
  use "Waiting for global read lock" in this case.
mysql-test/t/flush_read_lock.test:
  Added test coverage for various aspects of FLUSH TABLES WITH
  READ LOCK functionality.
mysql-test/t/flush_read_lock_kill-master.opt:
  We no longer need to use make_global_read_lock_block_commit_loop
  debug tag in this test. Instead we rely on an appropriate
  debug_sync point in MDL code.
mysql-test/t/flush_read_lock_kill.test:
  Adjusted test case after replacing custom global read lock
  implementation with one based on metadata locks. Use new
  debug_sync point. Do not disable concurrent inserts as now
  InnoDB we always use InnoDB table.
mysql-test/t/lock_multi.test:
  Adjusted test case after changing thread state names which
  are used when DML or DDL waits for FLUSH TABLES WITH READ
  LOCK to "Waiting for global read lock".
mysql-test/t/mdl_sync.test:
  Adjusted test case after replacing custom global read lock
  implementation with one based on metadata locks. Replaced
  usage of GRL-specific debug_sync's with appropriate sync
  points in MDL subsystem. Updated thread state names which
  are used when DDL waits for FTWRL.
mysql-test/t/trigger_notembedded.test:
  Adjusted test case after changing thread state names which
  are used when DML or DDL waits for FLUSH TABLES WITH READ
  LOCK to "Waiting for global read lock".
sql/event_data_objects.cc:
  Removed Event_queue_element::status/last_executed_changed
  members and Event_queue_element::update_timing_fields()
  method. We no longer use this class for updating mysql.events
  once event is chosen for execution. Accesses to instances of
  this class in scheduler thread require protection by
  Event_queue::LOCK_event_queue mutex and we try to avoid
  updating table while holding this lock.
sql/event_data_objects.h:
  Removed Event_queue_element::status/last_executed_changed
  members and Event_queue_element::update_timing_fields()
  method. We no longer use this class for updating mysql.events
  once event is chosen for execution. Accesses to instances of
  this class in scheduler thread require protection by
  Event_queue::LOCK_event_queue mutex and we try to avoid
  updating table while holding this lock.
sql/event_db_repository.cc:
  - Changed Event_db_repository methods to not release all
    metadata locks once they are done updating mysql.events
    table. This allows to keep metadata lock protecting
    against GRL and lock protecting particular event around
    until corresponding DDL statement is written to the binary
    log.
  - Removed logic for conditional update of "status" and
    "last_executed" fields from update_timing_fields_for_event()
    method. In the only case when this method is called now
    "last_executed" is always modified and tracking change
    of "status" is too much hassle.
sql/event_db_repository.h:
  Removed logic for conditional update of "status" and
  "last_executed" fields from Event_db_repository::
  update_timing_fields_for_event() method.
  In the only case when this method is called now "last_executed"
  is always modified and tracking change of "status" field is
  too much hassle.
sql/event_queue.cc:
  Changed event scheduler code not to update mysql.events
  table while holding Event_queue::LOCK_event_queue mutex.
  Doing so led to a deadlock with a new GRL implementation.
  This deadlock didn't occur with old implementation due to
  fact that code acquiring protection against GRL ignored
  pending GRL requests (which lead to GRL starvation).
  One of goals of new implementation is to disallow GRL
  starvation and so we have to solve problem with this
  deadlock in a different way.
sql/events.cc:
  Changed methods of Events class to acquire protection
  against GRL while perfoming DDL statement and keep it
  until statement is written to the binary log.
  Unfortunately this step together with new GRL implementation
  exposed deadlock involving Events::LOCK_event_metadata
  and GRL. To solve it Events::LOCK_event_metadata mutex was
  replaced with a metadata lock on event. As a side-effect
  events DDL has to be prohibited under LOCK TABLES even in
  cases when mysql.events table was explicitly locked for
  write.
sql/events.h:
  Replaced Events::LOCK_event_metadata mutex with a metadata
  lock on event.
sql/ha_ndbcluster.cc:
  Updated code after replacing custom global read lock
  implementation with one based on MDL. Since MDL subsystem
  should now be able to detect deadlocks involving metadata
  locks and GRL there is no need for special handling of
  active GRL.
sql/handler.cc:
  Replaced custom implementation of global read lock with
  one based on metadata locks. Consequently when doing
  commit instead of calling method of Global_read_lock
  class to acquire protection against GRL we simply acquire
  IX in COMMIT namespace.
sql/lock.cc:
  Replaced custom implementation of global read lock with
  one based on metadata locks. This step allows to expose
  wait for GRL to deadlock detector of MDL subsystem and
  thus succesfully resolve deadlocks similar to one behind
  bug #57006 "Deadlock between HANDLER and FLUSH TABLES
  WITH READ LOCK". It also solves problem with GRL starvation
  described in bug #54673 "It takes too long to get readlock
  for 'FLUSH TABLES WITH READ LOCK'" since metadata locks used
  by GRL give preference to FTWRL statement instead of DML
  statements (if needed in future this can be changed to
  fair scheduling).
  
  Similar to old implementation of acquisition of GRL is
  two-step. During the first step we block all concurrent
  DML and DDL statements by acquiring global S metadata lock
  (each DML and DDL statement acquires global IX lock for
  its duration). During the second step we block commits by
  acquiring global S lock in COMMIT namespace (commit code
  acquires global IX lock in this namespace).
  
  Note that unlike in old implementation acquisition of
  protection against GRL in DML and DDL is semi-automatic.
  We assume that any statement which should be blocked by GRL
  will either open and acquires write-lock on tables or acquires
  metadata locks on objects it is going to modify. For any such
  statement global IX metadata lock is automatically acquired
  for its duration.
  
  To support this change:
  - Global_read_lock::lock/unlock_global_read_lock and
    make_global_read_lock_block_commit methods were changed
    accordingly.
  - Global_read_lock::wait_if_global_read_lock() and
    start_waiting_global_read_lock() methods were dropped.
    It is now responsibility of code acquiring metadata locks
    opening tables to acquire protection against GRL by
    explicitly taking global IX lock with statement duration.
  - Global variables, mutex and condition variable used by
    old implementation was removed.
  - lock_routine_name() was changed to use statement duration for
    its global IX lock. It was also renamed to lock_object_name()
    as it now also used to take metadata locks on events.
  - Global_read_lock::set_explicit_lock_duration() was added which
    allows not to release locks used for GRL when leaving prelocked
    mode.
sql/lock.h:
  - Renamed lock_routine_name() to lock_object_name() and changed
    its signature to allow its usage for events.
  - Removed broadcast_refresh() function. It is no longer needed
    with new GRL implementation.
sql/log_event.cc:
  Release metadata locks with statement duration at the end
  of processing legacy event for LOAD DATA. This ensures that
  replication thread processing such event properly releases
  its protection against global read lock.
sql/mdl.cc:
  Changed MDL subsystem to support new MDL-based implementation
  of global read lock.
  
  Added COMMIT and EVENTS namespaces for metadata locks. Changed
  thread state name for GLOBAL namespace to "Waiting for global
  read lock".
  
  Optimized MDL_map::find_or_insert() method to avoid taking
  m_mutex mutex when looking up MDL_lock objects for GLOBAL
  or COMMIT namespaces. We keep pre-created MDL_lock objects
  for these namespaces around and simply return pointers to
  these global objects when needed.
  
  Changed MDL_lock/MDL_scoped_lock to properly handle
  notification of insert delayed handler threads when FTWRL
  takes global S lock.
  
  Introduced concept of lock duration. In addition to locks with
  transaction duration which work in the way which is similar to
  how locks worked before (i.e. they are released at the end of
  transaction), locks with statement and explicit duration were
  introduced.
  Locks with statement duration are automatically released at the
  end of statement. Locks with explicit duration require explicit
  release and obsolete concept of transactional sentinel.
  
  * Changed MDL_request and MDL_ticket classes to support notion
    of duration.
  * Changed MDL_context to keep locks with different duration in
    different lists. Changed code handling ticket list to take
    this into account.
  * Changed methods responsible for releasing locks to take into
    account duration of tickets. Particularly public
    MDL_context::release_lock() method now only can release
    tickets with explicit duration (there is still internal
    method which allows to specify duration). To release locks
    with statement or transaction duration one have to use
    release_statement/transactional_locks() methods.
  * Concept of savepoint for MDL subsystem now has to take into
    account locks with statement duration. Consequently
    MDL_savepoint class was introduced and methods working with
    savepoints were updated accordingly.
  * Added methods which allow to set duration for one or all
    locks in the context.
sql/mdl.h:
  Changed MDL subsystem to support new MDL-based implementation
  of global read lock.
  
  Added COMMIT and EVENTS namespaces for metadata locks.
  
  Introduced concept of lock duration. In addition to locks with
  transaction duration which work in the way which is similar to
  how locks worked before (i.e. they are released at the end of
  transaction), locks with statement and explicit duration were
  introduced.
  Locks with statement duration are automatically released at the
  end of statement. Locks with explicit duration require explicit
  release and obsolete concept of transactional sentinel.
  
  * Changed MDL_request and MDL_ticket classes to support notion
    of duration.
  * Changed MDL_context to keep locks with different duration in
    different lists. Changed code handling ticket list to take
    this into account.
  * Changed methods responsible for releasing locks to take into
    account duration of tickets. Particularly public
    MDL_context::release_lock() method now only can release
    tickets with explicit duration (there is still internal
    method which allows to specify duration). To release locks
    with statement or transaction duration one have to use
    release_statement/transactional_locks() methods.
  * Concept of savepoint for MDL subsystem now has to take into
    account locks with statement duration. Consequently
    MDL_savepoint class was introduced and methods working with
    savepoints were updated accordingly.
  * Added methods which allow to set duration for one or all
    locks in the context.
sql/mysqld.cc:
  Removed global mutex and condition variables which were used
  by old implementation of GRL.
  Also we no longer need to initialize Events::LOCK_event_metadata
  mutex as it was replaced with metadata locks on events.
sql/mysqld.h:
  Removed global variable, mutex and condition variables which
  were used by old implementation of GRL.
sql/rpl_rli.cc:
  When slave thread closes tables which were open for handling
  of RBR events ensure that it releases global IX lock which
  was acquired as protection against GRL.
sql/sp.cc:
  Adjusted code to the new signature of lock_object/routine_name(),
  to the fact that one now needs specify duration of lock when
  initializing MDL_request and to the fact that savepoints for MDL
  subsystem are now represented by MDL_savepoint class.
sql/sp_head.cc:
  Ensure that statements in stored procedures release statement
  metadata locks and thus release their protectiong against GRL
  in proper moment in time.
  Adjusted code to the fact that one now needs specify duration
  of lock when initializing MDL_request.
sql/sql_admin.cc:
  Adjusted code to the fact that one now needs specify duration
  of lock when initializing MDL_request.
sql/sql_base.cc:
  - Implemented support for new approach to acquiring protection
    against global read lock. We no longer acquire such protection
    explicitly on the basis of statement flags. Instead we always
    rely on code which is responsible for acquiring metadata locks
    on object to be changed acquiring this protection. This is
    achieved by acquiring global IX metadata lock with statement
    duration. Code doing this also responsible for checking that
    current connection has no active GRL by calling an
    Global_read_lock::can_acquire_protection() method.
    Changed code in open_table() and lock_table_names()
    accordingly.
    Note that as result of this change DDL and DML on temporary
    tables is always compatible with GRL (before it was
    incompatible in some cases and compatible in other cases).
  - To speed-up code acquiring protection against GRL introduced
    m_has_protection_against_grl member in Open_table_context
    class. It indicates that protection was already acquired
    sometime during open_tables() execution and new attempts
    can be skipped.
  - Thanks to new GRL implementation calls to broadcast_refresh()
    became unnecessary and were removed.
  - Adjusted code to the fact that one now needs specify duration
    of lock when initializing MDL_request and to the fact that
    savepoints for MDL subsystem are now represented by
    MDL_savepoint class.
sql/sql_base.h:
  Adjusted code to the fact that savepoints for MDL subsystem are
  now represented by MDL_savepoint class.
  Also introduced Open_table_context::m_has_protection_against_grl
  member which allows to avoid acquiring protection against GRL
  while opening tables if such protection was already acquired.
sql/sql_class.cc:
  Changed THD::leave_locked_tables_mode() after transactional
  sentinel for metadata locks was obsoleted by introduction of
  locks with explicit duration.
sql/sql_class.h:
  - Adjusted code to the fact that savepoints for MDL subsystem
    are now represented by MDL_savepoint class.
  - Changed Global_read_lock class according to changes in
    global read lock implementation:
    * wait_if_global_read_lock and start_waiting_global_read_lock
      are now gone. Instead code needing protection against GRL
      has to acquire global IX metadata lock with statement
      duration itself. To help it new can_acquire_protection()
      was introduced. Also as result of the above change
      m_protection_count member is gone too.
    * Added m_mdl_blocks_commits_lock member to store metadata
      lock blocking commits.
    * Adjusted code to the fact that concept of transactional
      sentinel was obsoleted by concept of lock duration.
  - Removed CF_PROTECT_AGAINST_GRL flag as it is no longer
    necessary. New GRL implementation acquires protection
    against global read lock automagically when statement
    acquires metadata locks on tables or other objects it
    is going to change.
sql/sql_db.cc:
  Adjusted code to the fact that one now needs specify duration
  of lock when initializing MDL_request.
sql/sql_handler.cc:
  Removed call to broadcast_refresh() function. It is no longer
  needed with new GRL implementation.
  Adjusted code after introducing duration concept for metadata
  locks. Particularly to the fact transactional sentinel was
  replaced with explicit duration.
sql/sql_handler.h:
  Renamed mysql_ha_move_tickets_after_trans_sentinel() to
  mysql_ha_set_explicit_lock_duration() after transactional
  sentinel was obsoleted by locks with explicit duration.
sql/sql_insert.cc:
  Adjusted code handling delaying inserts after switching to
  new GRL implementation. Now connection thread initiating
  delayed insert has to acquire global IX lock in addition
  to metadata lock on table being inserted into. This IX lock
  protects against GRL and similarly to SW lock on table being
  inserted into has to be passed to handler thread in order to
  avoid deadlocks.
sql/sql_lex.cc:
  LEX::protect_against_global_read_lock member is no longer
  necessary since protection against GRL is automatically
  taken by code acquiring metadata locks/opening tables.
sql/sql_lex.h:
  LEX::protect_against_global_read_lock member is no longer
  necessary since protection against GRL is automatically
  taken by code acquiring metadata locks/opening tables.
sql/sql_parse.cc:
  - Implemented support for new approach to acquiring protection
    against global read lock. We no longer acquire such protection
    explicitly on the basis of statement flags. Instead we always
    rely on code which is responsible for acquiring metadata locks
    on object to be changed acquiring this protection. This is
    achieved by acquiring global IX metadata lock with statement
    duration. This lock is automatically released at the end of
    statement execution.
  - Changed implementation of CREATE/DROP PROCEDURE/FUNCTION not
    to release metadata locks and thus protection against of GRL
    in the middle of statement execution.
  - Adjusted code to the fact that one now needs specify duration
    of lock when initializing MDL_request and to the fact that
    savepoints for MDL subsystem are now represented by
    MDL_savepoint class.
sql/sql_prepare.cc:
  Adjusted code to the to the fact that savepoints for MDL
  subsystem are now represented by MDL_savepoint class.
sql/sql_rename.cc:
  With new GRL implementation there is no need to explicitly
  acquire protection against GRL before renaming tables.
  This happens automatically in code which acquires metadata
  locks on tables being renamed.
sql/sql_show.cc:
  Adjusted code to the fact that one now needs specify duration
  of lock when initializing MDL_request and to the fact that
  savepoints for MDL subsystem are now represented by
  MDL_savepoint class.
sql/sql_table.cc:
  - With new GRL implementation there is no need to explicitly
    acquire protection against GRL before dropping tables.
    This happens automatically in code which acquires metadata
    locks on tables being dropped.
  - Changed mysql_alter_table() not to release lock on new table
    name explicitly and to rely on automatic release of locks
    at the end of statement instead. This was necessary since
    now MDL_context::release_lock() is supported only for locks
    for explicit duration.
sql/sql_trigger.cc:
  With new GRL implementation there is no need to explicitly
  acquire protection against GRL before changing table triggers.
  This happens automatically in code which acquires metadata
  locks on tables which triggers are to be changed.
sql/sql_update.cc:
  Fix bug exposed by GRL testing. During prepare phase acquire
  only S metadata locks instead of SW locks to keep prepare of
  multi-UPDATE compatible with concurrent LOCK TABLES WRITE
  and global read lock.
sql/sql_view.cc:
  With new GRL implementation there is no need to explicitly
  acquire protection against GRL before creating view.
  This happens automatically in code which acquires metadata
  lock on view to be created.
sql/sql_yacc.yy:
  LEX::protect_against_global_read_lock member is no longer
  necessary since protection against GRL is automatically
  taken by code acquiring metadata locks/opening tables.
sql/table.cc:
  Adjusted code to the fact that one now needs specify duration
  of lock when initializing MDL_request.
sql/table.h:
  Adjusted code to the fact that one now needs specify duration
  of lock when initializing MDL_request.
sql/transaction.cc:
  Replaced custom implementation of global read lock with
  one based on metadata locks. Consequently when doing
  commit instead of calling method of Global_read_lock
  class to acquire protection against GRL we simply acquire
  IX in COMMIT namespace.
  Also adjusted code to the fact that MDL savepoint is now
  represented by MDL_savepoint class.
2010-11-11 20:11:05 +03:00
Dmitry Lenev
be2061c051 Fix for merge.test failures in mysql-5.5-runtime
tree for embedded server

Test case for bug #56251 "Deadlock with INSERT
DELAYED and MERGE tables" can't be run against
embedded server. Embedded server converts all
DELAYED INSERTs into ordinary INSERTs and this
test can't work properly if such conversion
happens.

Moved this test from merge.test to delayed.test
which is skipped if test suite is run with
--embedded-server option.
2010-09-16 18:06:46 +04:00
Dmitry Lenev
ab4a92f99f Fixed --ps-protocol failures of test for bug#54332 "Deadlock
with two connections doing LOCK TABLE+INSERT DELAYED".

Disabled --ps-protocol for this part of the test as INSERT
DELAYED simply doesn't work with it under LOCK TABLES.
2010-08-24 20:20:00 +04:00
Jon Olav Hauglid
3592489cae Bug #54332 Deadlock with two connections doing LOCK TABLE+INSERT DELAYED
The problem was that deadlocks involving INSERT DELAYED were not detected.

The reason for this is that two threads are involved in INSERT DELAYED:
the connection thread and the handler thread. The connection thread would
wait while the handler thread acquired locks and opened the table.
In essence, this adds an edge to the wait-for-graph between the 
connection thread and the handler thread that the deadlock detector is
unaware of. Therefore many deadlocks involving INSERT DELAYED were not 
detected.

This patch fixes the problem by having the connection thread acquire the
metadata lock the table before starting the handler thread. This allows the
deadlock detector to detect any possible deadlocks resulting from trying to
acquire a metadata lock the table. If a metadata lock is successfully acquired,
the handler thread is started and given a copy of the ticket representing the
metadata lock. When the handler thread then tries to lock and open the table,
it will find that it already has the metadata lock and therefore not acquire
any new metadata locks.

Test cases added to delayed.test.
2010-08-23 17:42:53 +02:00
Alexander Nozdrin
5676713687 Manual merge from mysql-trunk.
Conflicts:
  - client/mysqltest.cc
  - mysql-test/collections/default.experimental
  - mysql-test/suite/rpl/t/disabled.def
  - sql/mysqld.cc
  - sql/opt_range.cc
  - sql/sp.cc
  - sql/sql_acl.cc
  - sql/sql_partition.cc
  - sql/sql_table.cc
2009-12-11 12:39:38 +03:00
Jon Olav Hauglid
7524b96102 Postfix for Bug #47682 strange behaviour of INSERT DELAYED
Fixed a problem with the test case when executed with ps-protocol.
There the conflicing lock would be noticed during prepare, not
during execution of the insert - leading to a different (but 
equally appropriate) error message.
2009-11-18 13:49:45 +01:00
Jon Olav Hauglid
41ba429286 Bug #47682 strange behaviour of INSERT DELAYED
The problem was a "self-deadlock" if the connection issuing INSERT DELAYED
had both the global read lock (FLUSH TABLES WITH READ LOCK) and LOCK TABLES
mode active. The table being inserted into had to be different from the 
table(s) locked by LOCK TABLES.

For INSERT DELAYED, the connection thread waits until the handler thread has
opened and locked its table before returning. But since the global read lock
was active, the handler thread would be unable to lock and would wait for the
global read lock to go away.

So the handler thread would be waiting for the connection thread to release
the global read lock while the connection thread was waiting for the handler
thread to lock the table. This gave a "self-deadlock" (same connection,
different threads).

The deadlock would only happen if we also had LOCK TABLES mode since the
INSERT otherwise will try to get protection against global read lock before
starting the handler thread. It will then notice that the global read lock
is owned by the same connection and report ER_CANT_UPDATE_WITH_READLOCK.

This patch removes the deadlock by reporting ER_CANT_UPDATE_WITH_READLOCK
also if we are inside LOCK TABLES mode.

Test case added to delayed.test.
2009-11-18 10:02:21 +01:00
Alexander Nozdrin
a708ba6524 Manual merge from mysql-next-mr. 2009-11-02 14:10:04 +03:00
Evgeny Potemkin
4349a4726e #41760 Inserting into multiple-table views is not working
During insert, we are not reading the rows in a referring table but
instead using the last read row that happens to be in table->record[0].

Now INSERT into such view is denied. 


mysql-test/r/delayed.result:
  A test case result is adjusted after fixing bug#41760.
mysql-test/r/insert.result:
  A test case result is adjusted after fixing bug#41760.
mysql-test/t/delayed.test:
  A test case is adjusted after fixing bug#41760.
mysql-test/t/insert.test:
  A test case is adjusted after fixing bug#41760.
2009-10-20 11:30:41 +04:00
Jon Olav Hauglid
3dce051cc5 Backport of revno: 2617.81.4
Bug #47274 assert in open_table on CREATE TABLE <already existing>

The problem was an assertion during execution of CREATE TABLES. 
This assertion would occur if INSERT DELAYED or REPLACE DELAYED
were used to update a table containing an AUTO_INCREMENT column
and if the inserted row had a user-supplied value for that column.
Any CREATE TABLE statement (including CREATE TABLE SELECT and
CREATE TABLE LIKE) trying to create the same table and 
which followed the INSERT/REPLACED would cause the assertion.

The problem was only noticeable on debug builds of the server
and not present in the mysql-5.1 tree.

The cause of the problem was that the code for delayed insert did
not properly reset the TABLE->auto_increment_if_null flag after 
The flag is used to indicate that a non-null value of an auto_increment field
has been provided by the user or retrieved from a current record.
Open_tables() contains an assertion that tests this flag, and this
was triggered by CREATE TABLE.

This patch fixes the problem by resetting the auto_increment_if_null
field to FALSE once INSERT/REPLACE DELAYED has updated the table, 
similar to what is done already for regular INSERT statements.

Test case added to delayed.test.
2009-10-14 14:50:26 +02:00
Davi Arnaut
c9dc936a2b Bug#40536: SELECT is blocked by INSERT DELAYED waiting on
upgrading lock, even with low_priority_updates

The problem is that there is no mechanism to control whether a
delayed insert takes a high or low priority lock on a table.

The solution is to modify the delayed insert thread ("handler")
to take into account the global value of low_priority_updates
when taking table locks. The value of low_priority_updates is
retrieved when the insert delayed thread is created and will
remain the same for the duration of the thread.


include/thr_lock.h:
  Update prototype.
mysql-test/r/delayed.result:
  Add test case result for Bug#40536
mysql-test/t/delayed.test:
  Add test case for Bug#40536
mysys/thr_lock.c:
  Add function parameter which specifies the write lock type.
sql/sql_insert.cc:
  Take a low priority write lock if global value of low_priority_updates
  was ON when the thread was created.
2009-02-03 15:16:24 -02:00
unknown
b908c2228d Merge mysql.com:/home/ram/work/b32676/b32676.5.0
into  mysql.com:/home/ram/work/b32676/b32676.5.1


sql/sql_insert.cc:
  Auto merged
mysql-test/r/delayed.result:
  manual merge.
mysql-test/t/delayed.test:
  manual merge.
2007-11-28 12:49:48 +04:00
unknown
58316f2964 Merge stella.local:/home2/mydev/mysql-5.0-axmrg
into  stella.local:/home2/mydev/mysql-5.1-axmrg


mysql-test/r/delayed.result:
  Auto merged
mysql-test/t/delayed.test:
  Auto merged
2007-11-26 19:18:21 +01:00
unknown
6cbb7d2f76 Bug#20830 - INSERT DELAYED does not honour SET INSERT_ID
Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables
Fixed wrong variable assignment.
2007-11-26 19:16:23 +01:00
unknown
503755256d Fix for bug #32676: insert delayed crash with wrong column and function specified
Problem: using wrong local lock type value in the mysql_insert() results in a crash. 

Fix: use a proper value.


mysql-test/r/delayed.result:
  Fix for bug #32676: insert delayed crash with wrong column and function specified
    - test result.
mysql-test/t/delayed.test:
  Fix for bug #32676: insert delayed crash with wrong column and function specified
    - test case.
sql/sql_insert.cc:
  Fix for bug #32676: insert delayed crash with wrong column and function specified
    - the local lock_type var assigment displaced just after the line 
      where the table_list->lock_type is filnally defined in the mysql_insert() 
      to avoid using its old value.
2007-11-26 13:29:26 +04:00
unknown
c8450b278d Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
corrupts a MERGE table
Bug 26867 - LOCK TABLES + REPAIR + merge table result in
            memory/cpu hogging
Bug 26377 - Deadlock with MERGE and FLUSH TABLE
Bug 25038 - Waiting TRUNCATE
Bug 25700 - merge base tables get corrupted by
            optimize/analyze/repair table
Bug 30275 - Merge tables: flush tables or unlock tables
            causes server to crash
Bug 19627 - temporary merge table locking
Bug 27660 - Falcon: merge table possible
Bug 30273 - merge tables: Can't lock file (errno: 155)

The problems were:

Bug 26379 - Combination of FLUSH TABLE and REPAIR TABLE
                corrupts a MERGE table

  1. A thread trying to lock a MERGE table performs busy waiting while
     REPAIR TABLE or a similar table administration task is ongoing on
     one or more of its MyISAM tables.
  
  2. A thread trying to lock a MERGE table performs busy waiting until all
     threads that did REPAIR TABLE or similar table administration tasks
     on one or more of its MyISAM tables in LOCK TABLES segments do UNLOCK
     TABLES. The difference against problem #1 is that the busy waiting
     takes place *after* the administration task. It is terminated by
     UNLOCK TABLES only.
  
  3. Two FLUSH TABLES within a LOCK TABLES segment can invalidate the
     lock. This does *not* require a MERGE table. The first FLUSH TABLES
     can be replaced by any statement that requires other threads to
     reopen the table. In 5.0 and 5.1 a single FLUSH TABLES can provoke
     the problem.

Bug 26867 - LOCK TABLES + REPAIR + merge table result in
            memory/cpu hogging

  Trying DML on a MERGE table, which has a child locked and
  repaired by another thread, made an infinite loop in the server.

Bug 26377 - Deadlock with MERGE and FLUSH TABLE

  Locking a MERGE table and its children in parent-child order
  and flushing the child deadlocked the server.

Bug 25038 - Waiting TRUNCATE

  Truncating a MERGE child, while the MERGE table was in use,
  let the truncate fail instead of waiting for the table to
  become free.

Bug 25700 - merge base tables get corrupted by
            optimize/analyze/repair table

  Repairing a child of an open MERGE table corrupted the child.
  It was necessary to FLUSH the child first.

Bug 30275 - Merge tables: flush tables or unlock tables
            causes server to crash

  Flushing and optimizing locked MERGE children crashed the server.

Bug 19627 - temporary merge table locking

  Use of a temporary MERGE table with non-temporary children
  could corrupt the children.

  Temporary tables are never locked. So we do now prohibit
  non-temporary chidlren of a temporary MERGE table.

Bug 27660 - Falcon: merge table possible

  It was possible to create a MERGE table with non-MyISAM children.

Bug 30273 - merge tables: Can't lock file (errno: 155)

  This was a Windows-only bug. Table administration statements
  sometimes failed with "Can't lock file (errno: 155)".

These bugs are fixed by a new implementation of MERGE table open.

When opening a MERGE table in open_tables() we do now add the
child tables to the list of tables to be opened by open_tables()
(the "query_list"). The children are not opened in the handler at
this stage.

After opening the parent, open_tables() opens each child from the
now extended query_list. When the last child is opened, we remove
the children from the query_list again and attach the children to
the parent. This behaves similar to the old open. However it does
not open the MyISAM tables directly, but grabs them from the already
open children.

When closing a MERGE table in close_thread_table() we detach the
children only. Closing of the children is done implicitly because
they are in thd->open_tables.

For more detail see the comment at the top of ha_myisammrg.cc.

Changed from open_ltable() to open_and_lock_tables() in all places
that can be relevant for MERGE tables. The latter can handle tables
added to the list on the fly. When open_ltable() was used in a loop
over a list of tables, the list must be temporarily terminated
after every table for open_and_lock_tables().
table_list->required_type is set to FRMTYPE_TABLE to avoid open of
special tables. Handling of derived tables is suppressed.
These details are handled by the new function
open_n_lock_single_table(), which has nearly the same signature as
open_ltable() and can replace it in most cases.

In reopen_tables() some of the tables open by a thread can be
closed and reopened. When a MERGE child is affected, the parent
must be closed and reopened too. Closing of the parent is forced
before the first child is closed. Reopen happens in the order of
thd->open_tables. MERGE parents do not attach their children
automatically at open. This is done after all tables are reopened.
So all children are open when attaching them.

Special lock handling like mysql_lock_abort() or mysql_lock_remove()
needs to be suppressed for MERGE children or forwarded to the parent.
This depends on the situation. In loops over all open tables one
suppresses child lock handling. When a single table is touched,
forwarding is done.

Behavioral changes:
===================

This patch changes the behavior of temporary MERGE tables.
Temporary MERGE must have temporary children.
The old behavior was wrong. A temporary table is not locked. Hence
even non-temporary children were not locked. See
Bug 19627 - temporary merge table locking.

You cannot change the union list of a non-temporary MERGE table
when LOCK TABLES is in effect. The following does *not* work:
CREATE TABLE m1 ... ENGINE=MRG_MYISAM ...;
LOCK TABLES t1 WRITE, t2 WRITE, m1 WRITE;
ALTER TABLE m1 ... UNION=(t1,t2) ...;
However, you can do this with a temporary MERGE table.

You cannot create a MERGE table with CREATE ... SELECT, neither
as a temporary MERGE table, nor as a non-temporary MERGE table.
CREATE TABLE m1 ... ENGINE=MRG_MYISAM ... SELECT ...;
Gives error message: table is not BASE TABLE.


include/my_base.h:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added HA_EXTRA_ATTACH_CHILDREN and HA_EXTRA_DETACH_CHILDREN.
include/myisammrg.h:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added element 'children_attached' to MYRG_INFO.
  Added declarations for myrg_parent_open(),
  myrg_attach_children() and myrg_detach_children()
  for the new MERGE table open approach.
mysql-test/extra/binlog_tests/blackhole.test:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Preliminarily added new error message with a comment.
mysql-test/r/create.result:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Fixed test result.
mysql-test/r/delayed.result:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Moved test result from here to merge.result.
mysql-test/r/merge.result:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Fixed/added test result.
mysql-test/r/myisam.result:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Moved test result for bug 8306 from here to merge.result.
mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Fixed test result.
mysql-test/t/create.test:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Fixed error number.
mysql-test/t/delayed.test:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Moved test from here to merge.test.
mysql-test/t/merge.test:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Fixed test for new temporary MERGE table behavior.
  Exchanged error numbers by symbolic codes.
  Added tests. Included are tests for bugs
  8306 (moved from myisam.test), 26379, 19627, 25038, 25700, 26377,
  26867, 27660, 30275, and 30273.
  Fixed changes resulting from disabled CREATE...SELECT.
  Integrated tests moved from delayed.test and myisam.test to here.
mysql-test/t/myisam.test:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Moved test for bug 8306 from here to merge.test.
mysys/thr_lock.c:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added code to let the owner of a high priority lock (TL_WRITE_ONLY)
  to bypass its own lock.
sql/ha_ndbcluster_binlog.cc:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added 'thd' argument to init_tmp_table_share().
sql/handler.cc:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added 'thd' argument to init_tmp_table_share().
sql/mysql_priv.h:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Removed declaration of check_merge_table_access(). It is now static
  in sql_parse.cc.
  Added declaration for fix_merge_after_open().
  Renamed open_and_lock_tables() to open_and_lock_tables_derived()
  with additional parameter 'derived'.
  Added inline functions simple_open_n_lock_tables() and
  open_and_lock_tables(), which call open_and_lock_tables_derived()
  and add the argument for 'derived'.
  Added new function open_n_lock_single_table(), which can be used
  as an replacement for open_ltable() in most situations. Internally
  it calls simple_open_n_lock_tables() so hat it is appropriate for
  MERGE tables.
  Added 'thd' argument to init_tmp_table_share().
sql/slave.cc:
  ug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added comment.
sql/sql_base.cc:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  
  Defined new functions add_merge_table_list(),
  attach_merge_children(), detach_merge_children(), and
  fix_merge_after_open() for the new MERGE table open approach.
  
  Added calls of the new functions to
  close_handle_and_leave_table_as_lock(), close_thread_tables(),
  close_thread_table(), unlink_open_table(), reopen_name_locked_table(),
  reopen_table(), drop_locked_tables(), close_temporary_table(),
  and open_tables() respectively.
  
  Prevented special lock handling of merge children (like
  mysql_lock_remove, mysql_lock_merge or mysql_lock_abort)
  at many places. Some of these calls are forwarded to the
  parent table instead.
  
  Added code to set thd->some_tables_deleted for every thread that has
  a table open that we are flushing.
  Added code for MERGE tables to unlink_open_table().
  Added MERGE children to the list of unusable tables in open_table().
  Added MERGE table handling to reopen_table().
  Added lock handling and closing of a parent before the children
  in close_data_files_and_morph_locks().
  Added code for re-attaching children in reopen_tables().
  Added MYSQL_LOCK_NOTIFY_IF_NEED_REOPEN to the locking flags and
  error reporting after mysql_lock_tables() in reopen_tables().
  Added lock handling and closing of a parent before the children
  in close_old_data_files().
  Added lock handling and detaching in drop_locked_tables().
  Added code for removing the children list from the statement list
  to prepare for a repetition in open_tables().
  Added new function open_n_lock_single_table(), which can be used
  as an replacement for open_ltable() in most situations. Internally
  it calls simple_open_n_lock_tables() so hat it is appropriate for
  MERGE tables.
  Disabled use of open_ltable() for MERGE tables.
  Removed function simple_open_n_lock_tables(). It is now inline
  declared in mysql_priv.h.
  Renamed open_and_lock_tables() to open_and_lock_tables_derived()
  with additional parameter 'derived'. open_and_lock_tables() is now
  inline declared in mysql_priv.h.
  Added a check for end-of-list in two loops in lock_tables().
  Added 'thd' argument to init_tmp_table_share().
sql/sql_insert.cc:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Changed from open_ltable() to open_n_lock_single_table() in
  handle_delayed_insert().
  Reestablished LEX settings after lex initialization.
  Added 'thd' argument to init_tmp_table_share().
sql/sql_parse.cc:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Made check_merge_table_access() a static function.
  Disabled use of CREATE...SELECT for MERGE tables.
sql/sql_partition.cc:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Fixed comment typo.
sql/sql_select.cc:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added 'thd' argument to init_tmp_table_share().
sql/sql_table.cc:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Optimized use of mysql_ha_flush() in mysql_rm_table_part2().
  Disabled the use of MERGE tables with prepare_for_restore() and
  prepare_for_repair().
  Changed from open_ltable() to open_n_lock_single_table() in
  mysql_alter_table() and mysql_checksum_table().
  Disabled change of child list under LOCK TABLES.
  Initialized table_list->table in mysql_recreate_table().
sql/sql_trigger.cc:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added code for allowing CREATE TRIGGER under LOCK TABLE, to be able
  to test it with MERGE tables.
sql/table.cc:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added 'thd' argument to init_tmp_table_share().
  Setting table_map_id from query_id in init_tmp_table_share().
  Added member function TABLE::is_children_attached().
sql/table.h:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added access method get_table_def_version() to TABLE_SHARE.
  Added elements for MERGE tables to TABLE and TABLE_LIST.
storage/myisam/ha_myisam.cc:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added an unrelated comment to the function comment of table2myisam().
storage/myisam/ha_myisam.h:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added new member function MI_INFO::file_ptr().
storage/myisammrg/ha_myisammrg.cc:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added callback functions to support parent open and children attach
  of MERGE tables.
  Changed ha_myisammrg::open() to initialize storage engine structures
  and create a list of child tables only. Child tables are not opened.
  Added ha_myisammrg::attach_children(), which does now the main part
  of MERGE open.
  Added ha_myisammrg::detach_children().
  Added calls to ::attach_children() and ::detach_children() to
  ::extra() on HA_EXTRA_ATTACH_CHILDREN and HA_EXTRA_DETACH_CHILDREN
  respectively.
  Added a check for matching TEMPORARY type for children against
  parent.
  Added a check for table def version.
  Added support for thd->open_options to attach_children().
  Changed child path name generation for temporary tables so that
  it does nothing special for temporary tables.
storage/myisammrg/ha_myisammrg.h:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added elements to class ha_myisammrg to support the new
  open approach.
  Changed empty destructor definition to a declaration.
  Implemented in ha_myisammrg.cc.
  Added declaration for methods attach_children() and
  detach_children().
  Added definition for method table_ptr() for use with
  callback functions.
storage/myisammrg/myrg_close.c:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Added a check to avoid closing of MyISAM tables when the
  child tables are not attached.
  Added freeing of rec_per_key_part when the child tables
  are not attached.
storage/myisammrg/myrg_extra.c:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  Some ::extra() functions and ::reset() can be called when
  children are detached.
storage/myisammrg/myrg_open.c:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
              corrupts a MERGE table
  
  Kept old myrg_open() for MERGE use independent from MySQL.
  Removed an always true condition in myrg_open().
  Set children_attached for independent MERGE use in myrg_open().
  
  Added myrg_parent_open(), myrg_attach_children(), and
  myrg_detach_children() for the new MERGE table open approach.
mysql-test/r/merge-big.result:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE corrupts a MERGE table
  New test result
mysql-test/t/merge-big.test:
  Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE corrupts a MERGE table
  New test case
2007-11-15 20:25:43 +01:00
unknown
22436c86e0 Merge adventure.(none):/home/thek/Development/cpp/bug27358/my50-bug27358
into  adventure.(none):/home/thek/Development/cpp/bug27358/my51-bug27358


mysql-test/r/delayed.result:
  Auto merged
mysql-test/t/delayed.test:
  Auto merged
sql/sql_insert.cc:
  SCCS merged
2007-09-10 11:38:23 +02:00
unknown
44d04c81ac Bug#27358 INSERT DELAYED does not honour SQL_MODE of the client
SQL_MODE was ignored when a client issued INSERT DELAYED.

Some system settings weren't copied as intended when a record was saved for
a delayed insert. 


mysql-test/r/delayed.result:
  Added test case
mysql-test/t/delayed.test:
  Added test case
sql/sql_insert.cc:
  - Added two new variables (sql_mode, auto_increment_field_not_null) to support
    SQL_MODE in INSERT DELAYED statements.
2007-08-23 10:22:20 +02:00
unknown
5578506302 Merge mysql.com:/home/kent/bk/tmp/mysql-5.0-build
into  mysql.com:/home/kent/bk/tmp/mysql-5.1-build


BitKeeper/etc/ignore:
  auto-union
BitKeeper/deleted/.del-comp_err.vcproj~45c167ae5ddd5a96:
  Auto merged
BitKeeper/deleted/.del-gen_lex_hash.vcproj~544be6b6:
  Auto merged
BitKeeper/deleted/.del-heap.vcproj~4382203ba03f4038:
  Auto merged
BitKeeper/deleted/.del-myTest.vcproj~dba5adc4fad3c06:
  Auto merged
BitKeeper/deleted/.del-my_print_defaults.vcproj~c8aa2bd86e13c3f9:
  Auto merged
BitKeeper/deleted/.del-myisam_ftdump.vcproj~409c19b0274b7f8e:
  Auto merged
BitKeeper/deleted/.del-myisamchk.vcproj~982ebe5673e58fb6:
  Auto merged
BitKeeper/deleted/.del-myisamlog.vcproj~daa6596ea386e5a7:
  Auto merged
BitKeeper/deleted/.del-myisampack.vcproj~3f7d4ec0cb56a9a0:
  Auto merged
BitKeeper/deleted/.del-mysql.vcproj~f7bfe13a8836eea0:
  Auto merged
BitKeeper/deleted/.del-mysql_client_test.vcproj~22188dcd372bc9de:
  Auto merged
BitKeeper/deleted/.del-mysql_upgrade.vcproj~54815b7265120589:
  Auto merged
BitKeeper/deleted/.del-mysqladmin.vcproj~178fa55cba442d50:
  Auto merged
BitKeeper/deleted/.del-mysqlbinlog.vcproj~b2a5b1868f5d6596:
  Auto merged
BitKeeper/deleted/.del-mysqlcheck.vcproj~7022581c8b8a7ea2:
  Auto merged
BitKeeper/deleted/.del-mysqlclient.vcproj~e78a73e31368a44a:
  Auto merged
BitKeeper/deleted/.del-mysqlimport.vcproj~5a30228ef641c081:
  Auto merged
BitKeeper/deleted/.del-mysqlshow.vcproj~797d4fa322faa148:
  Auto merged
BitKeeper/deleted/.del-mysqltest.vcproj~21878840704179ef:
  Auto merged
BitKeeper/deleted/.del-perror.vcproj~86ad9dc660a048ad:
  Auto merged
BitKeeper/deleted/.del-regex.vcproj~9dea9caafa801b26:
  Auto merged
BitKeeper/deleted/.del-replace.vcproj~9620b1ced86e527a:
  Auto merged
BitKeeper/deleted/.del-strings.vcproj~6d1126ae59e4bf82:
  Auto merged
BitKeeper/deleted/.del-test1.vcproj~c474b4614c67e2d2:
  Auto merged
BitKeeper/deleted/.del-test_libmysqld.vcproj~fb301d42d5c4e6f4:
  Auto merged
BitKeeper/deleted/.del-thr_test.vcproj~fc0e15c1e6880160:
  Auto merged
BitKeeper/deleted/.del-vio.vcproj~b7c21b4e2d6a9b85:
  Auto merged
BitKeeper/deleted/.del-zlib.vcproj~9b1a681d56dae190:
  Auto merged
extra/yassl/taocrypt/taocrypt.vcproj:
  Auto merged
extra/yassl/yassl.vcproj:
  Auto merged
mysql-test/mysql-test-run.pl:
  Auto merged
mysql-test/r/delayed.result:
  Auto merged
mysql-test/r/loaddata.result:
  Auto merged
mysql-test/r/merge.result:
  Auto merged
mysql-test/t/delayed.test:
  Auto merged
mysql-test/t/init_connect.test:
  Auto merged
mysql-test/t/loaddata.test:
  Auto merged
mysql-test/t/merge.test:
  Auto merged
netware/Makefile.am:
  Auto merged
scripts/make_binary_distribution.sh:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
sql/mysql_priv.h:
  Auto merged
storage/ndb/src/cw/cpcc-win32/C++/CPC_GUI.vcproj:
  Auto merged
mysql-test/install_test_db.sh:
  SCCS merged
2007-03-20 17:58:30 +01:00
unknown
089fca6bb6 tests fixed to work in embedded server
mysql-test/r/delayed.result:
  result fixed
mysql-test/r/merge.result:
  result fixed
mysql-test/t/delayed.test:
  moved here from merge.test
mysql-test/t/init_connect.test:
  test fixed as it created users, then stopped without deletion, what caused
  problems in consequent tests
mysql-test/t/merge.test:
  moved to delayed.test
mysql-test/t/mysqlbinlog-cp932.test:
  disabled in embedded server
2007-03-20 17:53:55 +04:00
unknown
8bf4983331 Merge mysql.com:/home/svoj/devel/mysql/BUG26238/mysql-5.0-engines
into  mysql.com:/home/svoj/devel/mysql/BUG26238/mysql-5.1-engines


mysql-test/r/delayed.result:
  Auto merged
mysql-test/t/delayed.test:
  Auto merged
sql/field.h:
  Use local.
2007-03-02 14:19:11 +04:00
unknown
af44be2d25 BUG#26238 - inserted delayed always inserts 0 for BIT columns
INSERT DELAYED inserts garbage for BIT columns.

When delayed thread clones TABLE object, it didn't adjusted bit_ptr
to newly created record (though it correctly adjusts ptr and null_ptr).

This is fixed by correctly adjusting bit_ptr when performing a clone.
With this fix BIT values are stored correctly by INSERT DELAYED.


mysql-test/r/delayed.result:
  A test case for BUG#26238.
mysql-test/t/delayed.test:
  A test case for BUG#26238.
sql/field.h:
  Added move_field() to Field_bit class. When moving a field, adjust
  bit_ptr also, which is specific to Field_bit class.
2007-02-28 18:34:35 +04:00
unknown
837ba8cc23 Bug#20830 - INSERT DELAYED does not honour SET INSERT_ID
Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables
Merge from 5.0.
Changed auto_increment handling to the 5.1 pattern.


mysql-test/r/delayed.result:
  Bug#20830 - INSERT DELAYED does not honour SET INSERT_ID
  Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables
  Merge from 5.0.
  Updated the test result.
2006-09-29 13:23:33 +02:00
unknown
15b1ee2fcf Bug#20830 - INSERT DELAYED does not honour SET INSERT_ID
Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables

INSERT DELAYED ignored an explicitly set INSERT_ID and session
specific auto_increment_* variables.

The problem was that the inserts are done by a system thread,
which does not have access to the session variables of the user
thread.

On a proposal of Guilhem I fixed it so that the variables are
copied to the data structure for every delayed row. The system
thread sets its session variables from these values.


mysql-test/r/delayed.result:
  Bug#20830 - INSERT DELAYED does not honour SET INSERT_ID
  Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables
  Turned some sleeps into FLUSH TABLEs.
  Added test cases.
mysql-test/t/delayed.test:
  Bug#20830 - INSERT DELAYED does not honour SET INSERT_ID
  Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables
  Turned some sleeps into FLUSH TABLEs.
  Added test cases.
sql/sql_insert.cc:
  Bug#20830 - INSERT DELAYED does not honour SET INSERT_ID
  Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables
  Added auto_increment/insert_id related variables to 'delayed_row'.
  The session values are copied to 'delayed_row' by the user thread.
  The delayed insert thread copies them to his session variables.
2006-09-20 11:05:11 +02:00
unknown
01c9fd31d7 Bug #20195: INSERT DELAYED with auto_increment is assigned wrong values
The INSERT DELAYED should not maintain its own private auto-increment
counter, because this is assuming that other threads cannot insert
into the table while the INSERT DELAYED thread is inserting, which is
a wrong assumption.

So the start of processing of a batch of INSERT rows in the 
INSERT DELAYED thread must be treated as a start of a new statement
and cached next_insert_id must be cleared.


mysql-test/r/delayed.result:
  test suite for the bug
mysql-test/t/delayed.test:
  test suite for the bug
sql/sql_insert.cc:
  Reset auto-increment cacheing before processing
  the next batch of inserts in the handler thread
2006-06-13 18:18:32 +03:00
unknown
c33f7f9f90 Fix crash in 'INSERT DELAYED' statement that failed due to a
conflict in a unique key. (Bug #12226)


mysql-test/r/delayed.result:
  Add results
mysql-test/t/delayed.test:
  Add new regression test
sql/sql_insert.cc:
  Fix crash in error handling of 'INSERT DELAYED' statement
2005-08-01 17:00:03 -07:00
unknown
615cd4ff75 Fixed a bug in prepared statements error handling
After merge fixes


libmysql/libmysql.c:
  Fixed a bug in prepared statements error handling introduced by me on a recent patch
mysql-test/r/delayed.result:
  Updated results
mysql-test/t/delayed.test:
  Bigger timeout needed when using --ps-protocol (don't understand why yet)
  Added output of not_flushed_dealyed_rows for easier debugging
sql/sql_base.cc:
  USE tables_share fix for prepared statements
sql/sql_prepare.cc:
  After merge fix
2005-01-06 16:59:29 +02:00
unknown
b388eb004d Added SQLSTATE to client/server protocol
bmove_allign -> bmove_align
Added OLAP function ROLLUP
Split mysql_fix_privilege_tables to a script and a .sql data file
Added new (MEMROOT*) functions to avoid calling current_thd() when creating some common objects.
Added table_alias_charset, for easier --lower-case-table-name handling
Better SQL_MODE handling (Setting complex options also sets sub options)
New (faster) assembler string functions for x86


BitKeeper/etc/ignore:
  added libmysqld/sql_state.c
client/mysql.cc:
  Added SQLSTATE to error messages
  Added new function put_error() to be able to clean up some old code.
client/mysqltest.c:
  Write ERROR SQLSTATE for all errors
dbug/dbug.c:
  Portability fixes
include/m_string.h:
  Rename bmove_allign as bmove_align
include/mysql.h:
  Added SQLSTATE (for embedded version)
include/mysql_com.h:
  Send correct SQLSTATE for the error to the client
libmysql/libmysql.c:
  Changed default error state to HY000
  Applied code cleanup patch
libmysqld/Makefile.am:
  Added sql_state.cc
libmysqld/libmysqld.c:
  Added sqlstate
mysql-test/r/analyse.result:
  Updated results
mysql-test/r/ansi.result:
  Updated results
mysql-test/r/auto_increment.result:
  Updated results
mysql-test/r/bdb-deadlock.result:
  Updated results
mysql-test/r/bdb.result:
  Updated results
mysql-test/r/comments.result:
  Updated results
mysql-test/r/create.result:
  Updated results
mysql-test/r/ctype_collate.result:
  Updated results
mysql-test/r/delayed.result:
  Updated results
mysql-test/r/delete.result:
  Updated results
mysql-test/r/derived.result:
  Updated results
mysql-test/r/distinct.result:
  Updated results
mysql-test/r/drop.result:
  Updated results
mysql-test/r/err000001.result:
  Updated results
mysql-test/r/explain.result:
  Updated results
mysql-test/r/flush.result:
  Updated results
mysql-test/r/fulltext.result:
  Updated results
mysql-test/r/func_gconcat.result:
  Updated results
mysql-test/r/func_system.result:
  Updated results
mysql-test/r/grant_cache.result:
  Updated results
mysql-test/r/group_by.result:
  Updated results
mysql-test/r/handler.result:
  Updated results
mysql-test/r/heap.result:
  Updated results
mysql-test/r/heap_btree.result:
  Updated results
mysql-test/r/heap_hash.result:
  Updated results
mysql-test/r/innodb.result:
  Updated results
mysql-test/r/innodb_handler.result:
  Updated results
mysql-test/r/insert_select.result:
  Updated results
mysql-test/r/insert_update.result:
  Updated results
mysql-test/r/join.result:
  Updated results
mysql-test/r/join_outer.result:
  Updated results
mysql-test/r/key.result:
  Updated results
mysql-test/r/lock.result:
  Updated results
mysql-test/r/lock_multi.result:
  Updated results
mysql-test/r/merge.result:
  Updated results
mysql-test/r/multi_update.result:
  Updated results
mysql-test/r/myisam.result:
  Updated results
mysql-test/r/null.result:
  Updated results
mysql-test/r/olap.result:
  Updated results
mysql-test/r/order_by.result:
  Updated results
mysql-test/r/packet.result:
  Updated results
mysql-test/r/query_cache.result:
  Updated results
mysql-test/r/row.result:
  Updated results
mysql-test/r/rpl000001.result:
  Updated results
mysql-test/r/rpl000009.result:
  Updated results
mysql-test/r/rpl_empty_master_crash.result:
  Updated results
mysql-test/r/rpl_log.result:
  Updated results
mysql-test/r/rpl_replicate_do.result:
  Updated results
mysql-test/r/rpl_rotate_logs.result:
  Updated results
mysql-test/r/select.result:
  Updated results
mysql-test/r/select_safe.result:
  Updated results
mysql-test/r/show_check.result:
  Updated results
mysql-test/r/sql_mode.result:
  Updated results
mysql-test/r/subselect.result:
  Updated results
mysql-test/r/temp_table.result:
  Updated results
mysql-test/r/truncate.result:
  Updated results
mysql-test/r/type_blob.result:
  Updated results
mysql-test/r/type_decimal.result:
  Updated results
mysql-test/r/type_float.result:
  Updated results
mysql-test/r/type_ranges.result:
  Updated results
mysql-test/r/union.result:
  Updated results
mysql-test/r/update.result:
  Updated results
mysql-test/r/user_var.result:
  Updated results
mysql-test/r/varbinary.result:
  Updated results
mysql-test/r/variables.result:
  Updated results
mysql-test/t/ansi.test:
  Test of sql_mode
mysql-test/t/derived.test:
  Updated results
mysql-test/t/func_system.test:
  Make this independen of the MySQL server name
mysql-test/t/lowercase_table.test:
  Cleanup
mysql-test/t/olap.test:
  A lot of new tests
mysql-test/t/sql_mode.test:
  More test for sql_mode
mysql-test/t/subselect.test:
  Added a few new tests (to find a bug in the item_ref code)
scripts/Makefile.am:
  Added mysql_fix_privilege_tables.sql
scripts/mysql_fix_privilege_tables.sh:
  Totally new script.  This bascily just pipes mysql_fix_privilege_tables.sql through 'mysql' to 'mysqld'
sql/Makefile.am:
  Added sql_state.cc
sql/item.cc:
  Extended Item_field::eq() to be able to better match GROUP BY fields on the command line.
  Needed for ROLLUP
sql/item.h:
  Added function to be able to avoid calling current_thd() when doing new Item.
sql/item_sum.cc:
  Moved copy_or_same() and some reset() functions from item_sum.h
  Needed to be able to access thd->mem_root.
sql/item_sum.h:
  Moved some functions to item_sum.cc
  Added make_unique() for ROLLUP
sql/item_uniq.h:
  Fixed return value
sql/mysql_priv.h:
  Updated MODE flags
sql/mysqld.cc:
  Added ANSI as it's own mode
  Moved charset_info variables here
  Cleaned up handler_count handling (for NT)
  Added table_alias_charset, for easier --lower-case-table-name handling
sql/net_serv.cc:
  New comment
sql/protocol.cc:
  Send SQLSTATE to client
sql/set_var.cc:
  Better SQL_MODE handling (Setting complex options also sets sub options)
sql/set_var.h:
  Better SQL_MODE handling
sql/sql_base.cc:
  Make alias depend on --lower-case-table-names
  Make find_item_in_list also check database name
sql/sql_cache.cc:
  Indentation cleanup
sql/sql_list.h:
  Added safety assert
  Addes support of alloc without current_thd()
sql/sql_prepare.cc:
  Update after prototype change
sql/sql_select.cc:
  Added ROLLUP
sql/sql_select.h:
  structures for rollup
sql/sql_show.cc:
  Easier SQL_MODE handling
sql/sql_string.cc:
  Move CHARSET_INFO to mysqld (to be together with all other global variables)
sql/sql_string.h:
  Added function to be able to avoid calling current_thd() when doing new Item.
sql/sql_table.cc:
  Simpler --lower-case-table-name handling
sql/sql_union.cc:
  Update after prototype change
sql/sql_yacc.yy:
  ROLLUP
sql/unireg.h:
  bmove_allign ->bmove_align
strings/Makefile.am:
  Fix to be able to compile str_test.c
strings/ctype.c:
  Removed empty lines
strings/str_test.c:
  Added test of bmove_align
strings/strings-x86.s:
  Faster bmove_align, bmove_upp and strmake
strings/strings.asm:
  move_allg
2003-06-04 18:28:51 +03:00
unknown
f935c6a286 Fixes for binary protocol (complement to last push)
Changed timestamp to return string in YYYY-MM-DD HH:MM:SS format.
DATE_ADD() and related functions now returns correct DATE/DATETIME type depending on argument types.
Now all tests passes, still some work left to remove warnings in log files from mysql-test-run


mysql-test/r/cast.result:
  New result for time
mysql-test/r/delayed.result:
  Timestamp update
mysql-test/r/derived.result:
  Fix after bulk insert change
mysql-test/r/explain.result:
  Fix after bulk insert change
mysql-test/r/func_date_add.result:
  Timestamp change
mysql-test/r/func_str.result:
  Timestamp change
mysql-test/r/func_time.result:
  Timestamp change
mysql-test/r/innodb.result:
  Timestamp change
mysql-test/r/join_outer.result:
  Fix after bulk insert change
mysql-test/r/key_primary.result:
  Fix after bulk insert change
mysql-test/r/keywords.result:
  Timestamp change
mysql-test/r/merge.result:
  Removed warning
mysql-test/r/odbc.result:
  Fix after bulk insert change
mysql-test/r/range.result:
  Fix after bulk insert change
mysql-test/r/select.result:
  Fix after bulk insert change
mysql-test/r/subselect.result:
  Fixed EXPLAIN output
mysql-test/r/type_datetime.result:
  Timestamp update
mysql-test/r/type_ranges.result:
  Timestamp update
mysql-test/r/type_timestamp.result:
  Timestamp update
mysql-test/r/union.result:
  EXPLAIN UPDATE
mysql-test/t/func_str.test:
  Timestamp update
mysql-test/t/func_time.test:
  New test for interval type result
mysql-test/t/merge.test:
  Remove warnings of wrong drop table
mysql-test/t/type_datetime.test:
  Timestamp change
mysql-test/t/type_timestamp.test:
  Timestamp change
sql/field.cc:
  Changed timestamp to return string in YYYY-MM-DD HH:MM:SS format
sql/field.h:
  Changed timestamp to return string in YYYY-MM-DD HH:MM:SS format
sql/item.cc:
  Binary protocol update
sql/item.h:
  Binary protocol update
sql/item_func.cc:
  Added comment
sql/item_func.h:
  @variables are always returned to the client as strings
sql/item_timefunc.cc:
  Changed INTERVAL to return correct type
sql/item_timefunc.h:
  Changed INTERVAL to return correct type
sql/mysqld.cc:
  Changed default pthread_attr_setstacksize to 129K
sql/protocol.cc:
  More type checking
sql/set_var.cc:
  Fixed that @convert works ok with new protocol
sql/sql_analyse.cc:
  Fixed bug in analyze
sql/sql_class.cc:
  Fixed bug from last push in LIMIT
sql/sql_error.cc:
  More optimal types
sql/sql_repl.cc:
  Binary protocol changes
sql/sql_select.cc:
  Fixed bug in multi-table-update
  Changed EXPLAIN to return NULL instead of empty strings
sql/sql_show.cc:
  Binary protocol
2002-12-14 17:43:01 +02:00
unknown
db951c2fa2 fixed tests to be independed from environment
mysql-test/r/binary.result:
  fixed test to be independed from environment
mysql-test/r/delayed.result:
  fixed test to be independed from environment
mysql-test/r/fulltext_left_join.result:
  fixed test to be independed from environment
mysql-test/r/func_group.result:
  fixed test to be independed from environment
mysql-test/r/func_in.result:
  fixed test to be independed from environment
mysql-test/r/key_primary.result:
  fixed test to be independed from environment
mysql-test/r/lock_multi.result:
  fixed test to be independed from environment
mysql-test/r/odbc.result:
  fixed test to be independed from environment
mysql-test/r/type_set.result:
  fixed test to be independed from environment
mysql-test/r/type_time.result:
  fixed test to be independed from environment
mysql-test/r/type_timestamp.result:
  fixed test to be independed from environment
mysql-test/r/type_year.result:
  fixed test to be independed from environment
mysql-test/r/varbinary.result:
  fixed test to be independed from environment
mysql-test/r/warnings.result:
  fixed test to be independed from environment
mysql-test/t/binary.test:
  fixed test to be independed from environment
mysql-test/t/delayed.test:
  fixed test to be independed from environment
mysql-test/t/flush_table.test:
  fixed test to be independed from environment
mysql-test/t/fulltext_left_join.test:
  fixed test to be independed from environment
mysql-test/t/func_group.test:
  fixed test to be independed from environment
mysql-test/t/func_in.test:
  fixed test to be independed from environment
mysql-test/t/key_primary.test:
  fixed test to be independed from environment
mysql-test/t/lock_multi.test:
  fixed test to be independed from environment
mysql-test/t/odbc.test:
  fixed test to be independed from environment
mysql-test/t/type_set.test:
  fixed test to be independed from environment
mysql-test/t/type_time.test:
  fixed test to be independed from environment
mysql-test/t/type_timestamp.test:
  fixed test to be independed from environment
mysql-test/t/type_year.test:
  fixed test to be independed from environment
mysql-test/t/varbinary.test:
  fixed test to be independed from environment
mysql-test/t/warnings.test:
  fixed test to be independed from environment
2002-08-30 21:32:59 +03:00
unknown
29f148bd36 client/mysqlmanagerc.c
added support for quiet
    increased line buffer size
client/mysqltest.c
    fixed memory leak
    added query logging to result file
    added error message logging to result file
    added enable_query_log/disable_query_log
mysql-test/mysql-test-run.sh
    converted tests to use mysqlmanager

Updated test results


BitKeeper/etc/ignore:
  added *.reject
client/mysqlmanagerc.c:
  added support for quiet
  increased line buffer size
client/mysqltest.c:
  fixed memory leak
  added query logging to result file
  added error message logging to result file
  added enable_query_log/disable_query_log
mysql-test/mysql-test-run.sh:
  converted tests to use mysqlmanager
mysql-test/r/alias.result:
  log queries
mysql-test/r/alter_table.result:
  log queries
mysql-test/r/analyse.result:
  log queries
mysql-test/r/auto_increment.result:
  log queries
mysql-test/r/backup.result:
  log queries
mysql-test/r/bdb-crash.result:
  log queries
mysql-test/r/bench_count_distinct.result:
  log queries
mysql-test/r/bigint.result:
  log queries
mysql-test/r/binary.result:
  log queries
mysql-test/r/bulk_replace.result:
  log queries
mysql-test/r/case.result:
  log queries
mysql-test/r/check.result:
  log queries
mysql-test/r/comments.result:
  log queries
mysql-test/r/compare.result:
  log queries
mysql-test/r/count_distinct.result:
  log queries
mysql-test/r/count_distinct2.result:
  log queries
mysql-test/r/create.result:
  log queries
mysql-test/r/ctype_latin1_de.result:
  log queries
mysql-test/r/delayed.result:
  log queries
mysql-test/r/dirty-close.result:
  log queries
mysql-test/r/distinct.result:
  log queries
mysql-test/r/drop.result:
  log queries
mysql-test/r/empty_table.result:
  log queries
mysql-test/r/explain.result:
  log queries
mysql-test/r/flush.result:
  log queries
mysql-test/r/fulltext.result:
  log queries
mysql-test/r/fulltext_cache.result:
  log queries
mysql-test/r/fulltext_distinct.result:
  log queries
mysql-test/r/fulltext_left_join.result:
  log queries
mysql-test/r/fulltext_multi.result:
  log queries
mysql-test/r/fulltext_order_by.result:
  log queries
mysql-test/r/fulltext_update.result:
  log queries
mysql-test/r/fulltext_var.result:
  log queries
mysql-test/r/func_crypt.result:
  log queries
mysql-test/r/func_date_add.result:
  log queries
mysql-test/r/func_equal.result:
  log queries
mysql-test/r/func_group.result:
  log queries
mysql-test/r/func_in.result:
  log queries
mysql-test/r/func_like.result:
  log queries
mysql-test/r/func_math.result:
  log queries
mysql-test/r/func_misc.result:
  log queries
mysql-test/r/func_op.result:
  log queries
mysql-test/r/func_regexp.result:
  log queries
mysql-test/r/func_set.result:
  log queries
mysql-test/r/func_str.result:
  log queries
mysql-test/r/func_system.result:
  log queries
mysql-test/r/func_test.result:
  log queries
mysql-test/r/func_time.result:
  log queries
mysql-test/r/func_timestamp.result:
  log queries
mysql-test/r/group_by.result:
  log queries
mysql-test/r/handler.result:
  log queries
mysql-test/r/having.result:
  log queries
mysql-test/r/heap.result:
  log queries
mysql-test/r/identity.result:
  log queries
mysql-test/r/ins000001.result:
  log queries
mysql-test/r/insert.result:
  log queries
mysql-test/r/insert_select.result:
  log queries
mysql-test/r/isam.result:
  log queries
mysql-test/r/join.result:
  log queries
mysql-test/r/join_crash.result:
  log queries
mysql-test/r/join_outer.result:
  log queries
mysql-test/r/key.result:
  log queries
mysql-test/r/key_diff.result:
  log queries
mysql-test/r/key_primary.result:
  log queries
mysql-test/r/keywords.result:
  log queries
mysql-test/r/kill.result:
  log queries
mysql-test/r/limit.result:
  log queries
mysql-test/r/lock.result:
  log queries
mysql-test/r/merge.result:
  log queries
mysql-test/r/multi_update.result:
  log queries
mysql-test/r/myisam.result:
  log queries
mysql-test/r/null.result:
  log queries
mysql-test/r/null_key.result:
  log queries
mysql-test/r/odbc.result:
  log queries
mysql-test/r/openssl_1.result:
  log queries
mysql-test/r/openssl_2.result:
  log queries
mysql-test/r/order_by.result:
  log queries
mysql-test/r/order_fill_sortbuf.result:
  log queries
mysql-test/r/raid.result:
  log queries
mysql-test/r/range.result:
  log queries
mysql-test/r/rename.result:
  log queries
mysql-test/r/replace.result:
  log queries
mysql-test/r/rollback.result:
  log queries
mysql-test/r/rpl000001.result:
  log queries
mysql-test/r/rpl000002.result:
  log queries
mysql-test/r/rpl000003.result:
  log queries
mysql-test/r/rpl000004.result:
  log queries
mysql-test/r/rpl000005.result:
  log queries
mysql-test/r/rpl000006.result:
  log queries
mysql-test/r/rpl000007.result:
  log queries
mysql-test/r/rpl000008.result:
  log queries
mysql-test/r/rpl000009.result:
  log queries
mysql-test/r/rpl000010.result:
  log queries
mysql-test/r/rpl000011.result:
  log queries
mysql-test/r/rpl000012.result:
  log queries
mysql-test/r/rpl000013.result:
  log queries
mysql-test/r/rpl000014.result:
  log queries
mysql-test/r/rpl000015.result:
  log queries
mysql-test/r/rpl000016.result:
  log queries
mysql-test/r/rpl000017.result:
  log queries
mysql-test/r/rpl000018.result:
  log queries
mysql-test/r/rpl_get_lock.result:
  log queries
mysql-test/r/rpl_log.result:
  log queries
mysql-test/r/rpl_magic.result:
  log queries
mysql-test/r/rpl_mystery22.result:
  log queries
mysql-test/r/rpl_sporadic_master.result:
  log queries
mysql-test/r/sel000001.result:
  log queries
mysql-test/r/sel000002.result:
  log queries
mysql-test/r/sel000003.result:
  log queries
mysql-test/r/sel000031.result:
  log queries
mysql-test/r/sel000032.result:
  log queries
mysql-test/r/sel000033.result:
  log queries
mysql-test/r/sel000100.result:
  log queries
mysql-test/r/select.result:
  log queries
mysql-test/r/select_found.result:
  log queries
mysql-test/r/select_safe.result:
  log queries
mysql-test/r/show_check.result:
  log queries
mysql-test/r/slave-running.result:
  log queries
mysql-test/r/slave-stopped.result:
  log queries
mysql-test/r/status.result:
  log queries
mysql-test/r/symlink.result:
  log queries
mysql-test/r/tablelock.result:
  log queries
mysql-test/r/temp_table.result:
  log queries
mysql-test/r/truncate.result:
  log queries
mysql-test/r/type_blob.result:
  log queries
mysql-test/r/type_date.result:
  log queries
mysql-test/r/type_datetime.result:
  log queries
mysql-test/r/type_decimal.result:
  log queries
mysql-test/r/type_enum.result:
  log queries
mysql-test/r/type_float.result:
  log queries
mysql-test/r/type_ranges.result:
  log queries
mysql-test/r/type_time.result:
  log queries
mysql-test/r/type_timestamp.result:
  log queries
mysql-test/r/type_uint.result:
  log queries
mysql-test/r/type_year.result:
  log queries
mysql-test/r/union.result:
  log queries
mysql-test/r/update.result:
  log queries
mysql-test/r/user_var.result:
  log queries
mysql-test/r/varbinary.result:
  log queries
mysql-test/r/variables.result:
  log queries
mysql-test/t/bench_count_distinct.test:
  log queries
mysql-test/t/check.test:
  log queries
mysql-test/t/count_distinct2.test:
  log queries
mysql-test/t/flush.test:
  log queries
mysql-test/t/isam.test:
  log queries
mysql-test/t/multi_update.test:
  log queries
mysql-test/t/myisam.test:
  log queries
mysql-test/t/order_fill_sortbuf.test:
  log queries
mysql-test/t/rpl000016.test:
  log queries
tools/managertest1.nc:
  test for def_exec overwrite
tools/mysqlmanager.c:
  support def_exec overwrite and queries on running server
2001-09-27 23:05:54 -06:00
unknown
740465fc5b Fixed bug in INSERT DELAYED when INSERT generated an error
Docs/manual.texi:
  Splitted INSERT syntax to different sub-sections
mysql-test/r/delayed.result:
  Added new test that hanged INSERT DELAYED
mysql-test/t/delayed.test:
  Added new test that hanged INSERT DELAYED
scripts/mysqldumpslow.sh:
  Fix for new slow query log format
sql/field_conv.cc:
  cleanup
2001-03-08 21:49:15 +02:00
unknown
f537319d42 Added support for hex strings to mysqlimport
A lot of new tests to mysqltest
Fixed bug with BDB tables and autocommit


BitKeeper/deleted/.del-delete.test~389410e29f2cebe5:
  Delete: mysql-test/t/delete.test
BitKeeper/deleted/.del-delete.result~e866a6678e29f186:
  Delete: mysql-test/r/delete.result
BitKeeper/deleted/.del-sel000014.test~74cb8c70f1d73fcc:
  Delete: mysql-test/t/sel000014.test
BitKeeper/deleted/.del-sel000015.test~7442bf9cbc96fe07:
  Delete: mysql-test/t/sel000015.test
BitKeeper/deleted/.del-sel000016.test~f495235f14c47ec:
  Delete: mysql-test/t/sel000016.test
BitKeeper/deleted/.del-sel000017.test~7c39f2b45a6aa780:
  Delete: mysql-test/t/sel000017.test
BitKeeper/deleted/.del-sel000018.test~16207f3ad74de75e:
  Delete: mysql-test/t/sel000018.test
BitKeeper/deleted/.del-sel000014.result~fc8de0ec89d9e35:
  Delete: mysql-test/r/sel000014.result
BitKeeper/deleted/.del-sel000015.result~cadbc52051d47bac:
  Delete: mysql-test/r/sel000015.result
BitKeeper/deleted/.del-sel000016.result~6177851869bd5b07:
  Delete: mysql-test/r/sel000016.result
BitKeeper/deleted/.del-sel000017.result~84ebf147850ff31c:
  Delete: mysql-test/r/sel000017.result
BitKeeper/deleted/.del-sel000018.result~562ac9094cf53aba:
  Delete: mysql-test/r/sel000018.result
BitKeeper/deleted/.del-sel000005.test~982fde89a4d6d886:
  Delete: mysql-test/t/sel000005.test
BitKeeper/deleted/.del-sel000006.test~291cc6c8d85e51df:
  Delete: mysql-test/t/sel000006.test
BitKeeper/deleted/.del-sel000005.result~d5410bb765199cc5:
  Delete: mysql-test/r/sel000005.result
BitKeeper/deleted/.del-sel000006.result~d38004d1acfc11a5:
  Delete: mysql-test/r/sel000006.result
BitKeeper/deleted/.del-sel000004.test~daf9ad4a1a31cd3c:
  Delete: mysql-test/t/sel000004.test
BitKeeper/deleted/.del-sel000007.test~f431e4f4739a24c3:
  Delete: mysql-test/t/sel000007.test
BitKeeper/deleted/.del-sel000008.test~b338ef585cadf7ae:
  Delete: mysql-test/t/sel000008.test
BitKeeper/deleted/.del-sel000009.test~a455c38f5c942cd1:
  Delete: mysql-test/t/sel000009.test
BitKeeper/deleted/.del-sel000010.test~ca07085ae92255f1:
  Delete: mysql-test/t/sel000010.test
BitKeeper/deleted/.del-sel000011.test~c2a971726c9d18d6:
  Delete: mysql-test/t/sel000011.test
BitKeeper/deleted/.del-sel000012.test~ae64bff363c42e92:
  Delete: mysql-test/t/sel000012.test
BitKeeper/deleted/.del-sel000013.test~ce8aa504ba4f74ba:
  Delete: mysql-test/t/sel000013.test
BitKeeper/deleted/.del-sel000019.test~8fd63c8dc6be8dbc:
  Delete: mysql-test/t/sel000019.test
BitKeeper/deleted/.del-sel000020.test~c5758ad18a6dff1e:
  Delete: mysql-test/t/sel000020.test
BitKeeper/deleted/.del-sel000021.test~94dd47de2872264a:
  Delete: mysql-test/t/sel000021.test
BitKeeper/deleted/.del-sel000022.test~6e3e5435e66875e9:
  Delete: mysql-test/t/sel000022.test
BitKeeper/deleted/.del-sel000023.test~7bdfcfaa278f837d:
  Delete: mysql-test/t/sel000023.test
BitKeeper/deleted/.del-sel000024.test~849f47e6cbdc4fe3:
  Delete: mysql-test/t/sel000024.test
BitKeeper/deleted/.del-sel000025.test~65b32b4b67e4c77:
  Delete: mysql-test/t/sel000025.test
BitKeeper/deleted/.del-sel000026.test~d8aa2d614f23b1:
  Delete: mysql-test/t/sel000026.test
BitKeeper/deleted/.del-sel000027.test~ab44bb57a580de9:
  Delete: mysql-test/t/sel000027.test
BitKeeper/deleted/.del-sel000028.test~db9bfc0a808fb629:
  Delete: mysql-test/t/sel000028.test
BitKeeper/deleted/.del-sel000029.test~6aae34dbb3ee86d9:
  Delete: mysql-test/t/sel000029.test
BitKeeper/deleted/.del-sel000030.test~a29683eac3e7b706:
  Delete: mysql-test/t/sel000030.test
BitKeeper/deleted/.del-sel000004.result~1f8d1265be521c17:
  Delete: mysql-test/r/sel000004.result
BitKeeper/deleted/.del-sel000007.result~df455e49f9727c4f:
  Delete: mysql-test/r/sel000007.result
BitKeeper/deleted/.del-sel000008.result~67a459ff62c84d6a:
  Delete: mysql-test/r/sel000008.result
BitKeeper/deleted/.del-sel000009.result~e042b35ab131fb3:
  Delete: mysql-test/r/sel000009.result
BitKeeper/deleted/.del-sel000010.result~eee5b9631a1e0066:
  Delete: mysql-test/r/sel000010.result
BitKeeper/deleted/.del-sel000011.result~6907fe356973ed25:
  Delete: mysql-test/r/sel000011.result
BitKeeper/deleted/.del-sel000012.result~be18991fc28954c2:
  Delete: mysql-test/r/sel000012.result
BitKeeper/deleted/.del-sel000013.result~513389e06c96af73:
  Delete: mysql-test/r/sel000013.result
BitKeeper/deleted/.del-sel000019.result~2870fe1c4998d929:
  Delete: mysql-test/r/sel000019.result
BitKeeper/deleted/.del-sel000020.result~faa670294ef5fa91:
  Delete: mysql-test/r/sel000020.result
BitKeeper/deleted/.del-sel000021.result~8f0ce4ec26e0c21d:
  Delete: mysql-test/r/sel000021.result
BitKeeper/deleted/.del-sel000022.result~34828a43753ee767:
  Delete: mysql-test/r/sel000022.result
BitKeeper/deleted/.del-sel000023.result~13e112d77573bf17:
  Delete: mysql-test/r/sel000023.result
BitKeeper/deleted/.del-sel000024.result~b10d449624f48d07:
  Delete: mysql-test/r/sel000024.result
BitKeeper/deleted/.del-sel000025.result~f31e08fcca805f35:
  Delete: mysql-test/r/sel000025.result
BitKeeper/deleted/.del-sel000026.result~854fa951666b7982:
  Delete: mysql-test/r/sel000026.result
BitKeeper/deleted/.del-sel000027.result~cfd73fe738f27da:
  Delete: mysql-test/r/sel000027.result
BitKeeper/deleted/.del-sel000028.result~13ff5add6ac24908:
  Delete: mysql-test/r/sel000028.result
BitKeeper/deleted/.del-sel000029.result~c6d071781808aa26:
  Delete: mysql-test/r/sel000029.result
BitKeeper/deleted/.del-sel000030.result~98d496948e15064d:
  Delete: mysql-test/r/sel000030.result
BitKeeper/deleted/.del-alt000001.test~633aed61c4bad94c:
  Delete: mysql-test/t/alt000001.test
BitKeeper/deleted/.del-alt000001.result~393103dbf15f35c9:
  Delete: mysql-test/r/alt000001.result
BitKeeper/deleted/.del-mrg000001.dummy.result~bf7e6d609f22b897:
  Delete: mysql-test/r/mrg000001.dummy.result
BitKeeper/deleted/.del-mrg000001.result~db2ef2e717ab8332:
  Delete: mysql-test/r/mrg000001.result
BitKeeper/deleted/.del-mrg000002.result~745be0854aaaaf5e:
  Delete: mysql-test/r/mrg000002.result
BitKeeper/deleted/.del-mrg000001.test~e0327f9d1e6cb4e:
  Delete: mysql-test/t/mrg000001.test
BitKeeper/deleted/.del-mrg000002.test~16b3a176adc0f311:
  Delete: mysql-test/t/mrg000002.test
Docs/manual.texi:
  Changelog
client/mysqlimport.c:
  Added support for hex strings
client/mysqltest.c:
  Added linenumbers in output
  Only allow '{' first on a row (Conflicts with ODBC {} syntax).
  Handle bigger queries.
  Handle double ''
  Truncate result files.
mysql-test/mysql-test-run.sh:
  Added --verbose
  cleanup
mysql-test/r/bdb.result:
  Updating of test
mysql-test/r/func_crypt.result:
  Updating of test
mysql-test/r/func_equal.result:
  Updating of test
mysql-test/r/func_str.result:
  Updating of test
mysql-test/r/ins000001.result:
  Updating of test
mysql-test/t/bdb.test:
  Updating of test
mysql-test/t/err000001.test:
  Updating of test
mysql-test/t/func_crypt.test:
  Updating of test
mysql-test/t/func_equal.test:
  Updating of test
mysql-test/t/func_str.test:
  Updating of test
mysql-test/t/ins000001.test:
  Updating of test
sql/gen_lex_hash.cc:
  Smaller table
sql/handler.cc:
  Fixed bug in auto_commit
2000-12-28 03:56:38 +02:00