Commit graph

160 commits

Author SHA1 Message Date
Monty
8be53a389c MDEV-6112 multiple triggers per table
This is similar to MysQL Worklog 3253, but with
a different implementation. The disk format and
SQL syntax is identical with MySQL 5.7.

Fetures supported:
- "Any" ammount of any trigger
- Supports FOLLOWS and PRECEDES to be
  able to put triggers in a certain execution order.

Implementation details:
- Class Trigger added to hold information about a trigger.
  Before this trigger information was stored in a set of lists in
  Table_triggers_list and in Table_triggers_list::bodies
- Each Trigger has a next field that poinst to the next Trigger with the
  same action and time.
- When accessing a trigger, we now always access all linked triggers
- The list are now only used to load and save trigger files.
- MySQL trigger test case (trigger_wl3253) added and we execute these
  identically.
- Even more gracefully handling of wrong trigger files than before. This
  is useful if a trigger file uses functions or syntax not provided by
  the server.
- Each trigger now has a "Created" field that shows when the trigger was
  created, with 2 decimals.

Other comments:
- Many of the changes in test files was done because of the new "Created"
  field in the trigger file. This shows up in SHOW ... TRIGGER and when
  using information_schema.trigger.
- Don't check if all memory is released if on uses --gdb;  This is needed
  to be able to get a list from safemalloc of not freed memory while
  debugging.
- Added option to trim_whitespace() to know how many prefix characters
  was skipped.
- Changed a few ulonglong sql_mode to sql_mode_t, to find some wrong usage
  of sql_mode.
2016-10-05 01:11:07 +03:00
Sergei Golubchik
0686c34d22 MDEV-8605 MariaDB not use DEFAULT value even when inserted NULL for NOT NULLABLE column
NOT NULL constraint must be checked *after* the BEFORE triggers.
That is for INSERT and UPDATE statements even NOT NULL fields
must be able to store a NULL temporarily at least while
BEFORE INSERT/UPDATE triggers are running.
2015-12-21 21:30:54 +01:00
Alexey Botchkov
836275bb20 MDEV-4829 BEFORE INSERT triggers dont issue 1406 error.
Turn the 'abort_on_warning' on for assigning value to fields.
2015-11-17 22:09:42 +04:00
Alexander Barkov
87b0cc9912 MDEV-7286 TRIGGER: CREATE OR REPLACE, CREATE IF NOT EXISTS
Based on the patch by Sriram Patil, made under terms of GSoC 2014.
2015-03-04 09:52:01 +04:00
Sergei Golubchik
5c9d2c6c9f MDEV-4332 Increase username length from 16 characters
10.0 part of the task, fix system tables
2013-11-03 16:31:52 +01:00
Sergei Golubchik
4f435bddfd 5.3 merge 2012-01-13 15:50:02 +01:00
Igor Babaev
cd55894a52 Fixed LP bug #910083.
The patch for bug 685411 erroneously removed a call of engine->set_thd()
from Item_subselect::fix_fields().
2012-01-02 20:06:36 -08:00
Sergei Golubchik
d2755a2c9c 5.3->5.5 merge 2011-11-22 18:04:38 +01:00
Michael Widenius
9c32088322 Fixed that when using a trigger mysql.proc is now accessed
Cleanup:  Changed procedure type from a int/char to an enum for easier to manage and debug code.

mysql-test/r/trigger.result:
  Test that mysql.proc is not used as part of creating or using a trigger.
mysql-test/t/trigger.test:
  Test that mysql.proc is not used as part of creating or using a trigger.
sql/sp.cc:
  The main bug fix is to not look up triggers in mysql.proc; This is done by ignoreing type == TYPE_ENUM_TRIGGER in sp_add_used_routine()
  Cleanup:  Changed procedure type from a int/char to an enum.
sql/sp.h:
  Cleanup:  Changed procedure type from a int/char to an enum.
sql/sp_head.h:
  Cleanup:  Changed procedure type from a int/char to an enum.
sql/sql_db.cc:
  Fix include order
sql/sql_lex.cc:
  Fix include order
sql/sql_parse.cc:
  Cleanup:  Changed procedure type from a int/char to an enum.
sql/sql_show.cc:
  Fix include order
sql/sql_view.cc:
  Fix include order
2011-10-06 16:56:59 +03:00
Sergei Golubchik
9809f05199 5.5-merge 2011-07-02 22:08:51 +02:00
Alexander Nozdrin
8f79579925 Patch for Bug#12362125 (SP INOUT HANDLING IS BROKEN FOR TEXT TYPE).
Attempts to assign value to a table column from trigger by using
NEW.column_name pseudo-variable might result in garbled data.
That happened when:
  - the column had a BLOB-based type (e.g. TEXT)
    and
  - the value being assigned was retrieved from stored routine variable
    of the same type.

The problem was that BLOB values were not copied correctly in this
case. Instead of doing a copy of a real value, the value's representation
in record buffer was copied. This representation is essentially a
pointer to a buffer associated with the virtual table for routine
variables where the real value is stored. Since this buffer got
freed once trigger was left or could have changed its contents when
new value was assigned to corresponding routine variable such a shallow
copying resulted in garbled data in NEW.colum_name column.

It worked in 5.1 due to a subtle bug in create_virtual_tmp_table():
  - in 5.1 create_virtual_tmp_table() returned a table which
    had db_low_byte_first == false.
  - in 5.5 and up create_virtual_tmp_table() returns a table which
    has db_low_byte_first == true.
Actually, db_low_byte_first == false only for ISAM storage engine,
which was deprecated and removed in 5.0.

Having db_low_byte_first == false led to getting false in the
complex condition for the 2nd "if" in field_conv(), which in turn
led to copy-blob-behavior as a fall-back strategy:
  - to->table->s->db_low_byte_first was true (correct value)
  - from->table->s->db_low_byte_first was false (incorrect value)

In 5.5 and up that condition is true, which means blob-values are
not copied.
2011-05-09 12:29:23 +04:00
Alexander Nozdrin
5653a71d3e Patch for Bug#11765684 (58674: SP-cache does not detect changes in
pre-locking list caused by triggers).

The thing is that CREATE TRIGGER / DROP TRIGGER may actually
change pre-locking list of (some) stored routines.

The SP-cache does not detect such changes. Thus if sp_head-instance
is cached in SP-cache, subsequent executions of the cached
sp_head will use inaccurate pre-locking list.

The patch is to invalidate SP-cache on CREATE TRIGGER / DROP TRIGGER.
2011-03-10 11:07:57 +03:00
Sergei Golubchik
65ca700def merge.
checkpoint.
does not compile.
2010-11-25 18:17:28 +01:00
unknown
d0d8bbed5e WL#5370 Keep forward-compatibility when changing
'CREATE TABLE IF NOT EXISTS ... SELECT' behaviour
BUG#47132, BUG#47442, BUG49494, BUG#23992 and BUG#48814 will disappear
automatically after the this patch.
BUG#55617 is fixed by this patch too.
            
This is the 5.5 part.
It implements:
- 'CREATE TABLE IF NOT EXISTS ... SELECT' statement will not insert
  anything and binlog anything if the table already exists.
  It only generate a warning that table already exists.
- A couple of test cases for the behavior changing.
2010-08-18 17:35:41 +08:00
Michael Widenius
4aa9d903c1 Merge with MySQL 5.1.47
Fixed some bugs introduced in 5.1.47
Disabled some tests until we have merged with latest Xtradb

configure.in:
  Added testing if valgrind/memcheck.h exists
storage/pbxt/src/ha_pbxt.cc:
  LOCK_plugin is not anymore locked in init
2010-05-26 21:55:40 +03:00
Alexey Kopytov
77b0e89328 Manual merge of mysql-5.1-bugteam to mysql-trunk-merge.
Conflicts:

Text conflict in mysql-test/r/explain.result
Text conflict in mysql-test/t/explain.test
Text conflict in sql/net_serv.cc
Text conflict in sql/sp_head.cc
Text conflict in sql/sql_priv.h
2010-05-07 20:17:55 +04:00
unknown
b1e00b6be8 Merge MySQL 5.1.46 into MariaDB.
Still two test failures to be solved: main.myisam and main.subselect.
2010-04-28 14:52:24 +02:00
Alexey Kopytov
3df8e88dd8 Manual merge of mysql-5.1-bugteam into mysql-trunk-merge.
Conflicts:

Text conflict in mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result
Text conflict in sql/log.cc
Text conflict in sql/set_var.cc
Text conflict in sql/sql_class.cc
2010-04-03 21:35:51 +04:00
Davi Arnaut
7ecad98c45 Bug#50755: Crash if stored routine def contains version comments
The problem was that a syntactically invalid trigger could cause
the server to crash when trying to list triggers. The crash would
happen due to a mishap in the backup/restore procedure that should
protect parser items which are not associated with the trigger. The
backup/restore is used to isolate the parse tree (and context) of
a statement from the load (and parsing) of a trigger. In this case,
a error during the parsing of a trigger could cause the improper
backup/restore sequence.

The solution is to properly restore the original statement context
before the parser is exited due to syntax errors in the trigger body.

mysql-test/r/trigger.result:
  Add test case result for Bug#50755
mysql-test/t/trigger.test:
  Add test case for Bug#50755
sql/sp_head.cc:
  Merge sp_head::destroy() and sp_head destructor. Retrieve THD
  from the LEX so that m_thd is not necessary.
sql/sql_lex.cc:
  Explicitly restore the original environment.
2010-04-01 10:15:22 -03:00
Alexey Kopytov
d95c1e3b47 Manual merge of mysql-trunk into mysql-trunk-merge.
Conflicts:

Text conflict in client/mysqlbinlog.cc
Text conflict in mysql-test/Makefile.am
Text conflict in mysql-test/collections/default.daily
Text conflict in mysql-test/r/mysqlbinlog_row_innodb.result
Text conflict in mysql-test/suite/rpl/r/rpl_typeconv_innodb.result
Text conflict in mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test
Text conflict in mysql-test/suite/rpl/t/rpl_row_create_table.test
Text conflict in mysql-test/suite/rpl/t/rpl_slave_skip.test
Text conflict in mysql-test/suite/rpl/t/rpl_typeconv_innodb.test
Text conflict in mysys/charset.c
Text conflict in sql/field.cc
Text conflict in sql/field.h
Text conflict in sql/item.h
Text conflict in sql/item_func.cc
Text conflict in sql/log.cc
Text conflict in sql/log_event.cc
Text conflict in sql/log_event_old.cc
Text conflict in sql/mysqld.cc
Text conflict in sql/rpl_utility.cc
Text conflict in sql/rpl_utility.h
Text conflict in sql/set_var.cc
Text conflict in sql/share/Makefile.am
Text conflict in sql/sql_delete.cc
Text conflict in sql/sql_plugin.cc
Text conflict in sql/sql_select.cc
Text conflict in sql/sql_table.cc
Text conflict in storage/example/ha_example.h
Text conflict in storage/federated/ha_federated.cc
Text conflict in storage/myisammrg/ha_myisammrg.cc
Text conflict in storage/myisammrg/myrg_open.c
2010-03-24 18:03:44 +03:00
Tatiana A. Nurnberg
28e95ba535 Bug#48525: trigger changes "Column 'id' cannot be null" behaviour
CHECK_FIELD_IGNORE was treated as CHECK_FIELD_ERROR_FOR_NULL;
UPDATE...SET...NULL on NOT NULL fields behaved differently after
a trigger.

Now distinguishes between IGNORE and ERROR_FOR_NULL and save/restores
check-field options.


mysql-test/r/trigger.result:
  Show that UPDATE...SET...NULL on NOT NULL columns doesn't behave differently
  when run after a trigger.
mysql-test/t/trigger.test:
  Show that UPDATE...SET...NULL on NOT NULL columns doesn't behave differently
  when run after a trigger.
sql/field_conv.cc:
  CHECK_FIELD_IGNORE was treated as CHECK_FIELD_ERROR_FOR_NULL.
  Distinguish between the two.
sql/sp_head.cc:
  Raise error as needed.
sql/sql_class.cc:
  Save and restore check-fields options.
sql/sql_class.h:
  Make room so we can save check-fields options.
sql/sql_insert.cc:
  Raise error as needed.
2010-03-29 03:32:30 +01:00
Alexey Kopytov
dbbdc4b196 Manual merge of mysql-5.1-bugteam to mysql-trunk-merge.
Conflicts:

Text conflict in client/mysqlbinlog.cc
Text conflict in mysql-test/r/explain.result
Text conflict in mysql-test/r/subselect.result
Text conflict in mysql-test/r/subselect3.result
Text conflict in mysql-test/r/type_datetime.result
Text conflict in sql/share/Makefile.am
2010-03-12 12:51:53 +03:00
Davi Arnaut
02ac873ccf Bug#51650: crash with user variables and triggers
The problem was that bits of the destructive equality propagation
optimization weren't being undone after the execution of a stored
program. Modifications to the parse tree that are based on transient
properties must be undone to enable the re-execution of stored
programs.

The solution is to cleanup any references to predicates generated
by the equality propagation during the execution of a stored program.

mysql-test/r/trigger.result:
  Add test case result for Bug#51650.
mysql-test/t/trigger.test:
  Add test case for Bug#51650.
sql/item.cc:
  Remove reference to a equality predicate.
2010-03-09 18:55:08 -03:00
Tatiana A. Nurnberg
dad7b3c55e revert 48525 2010-02-22 16:58:56 +00:00
Tatiana A. Nurnberg
e0fbc5d248 Bug#48525: trigger changes "Column 'id' cannot be null" behaviour
CHECK_FIELD_IGNORE was treated as CHECK_FIELD_ERROR_FOR_NULL;
UPDATE...SET...NULL on NOT NULL fields behaved differently after
a trigger.

Now distinguishes between IGNORE and ERROR_FOR_NULL and save/restores
check-field options.

mysql-test/r/trigger.result:
  Show that UPDATE...SET...NULL on NOT NULL columns doesn't behave differently
  when run after a trigger.
mysql-test/t/trigger.test:
  Show that UPDATE...SET...NULL on NOT NULL columns doesn't behave differently
  when run after a trigger.
sql/field_conv.cc:
  CHECK_FIELD_IGNORE was treated as CHECK_FIELD_ERROR_FOR_NULL.
  Distinguish between the two.
sql/sp_head.cc:
  raise error as needed
sql/sql_class.cc:
  Save and restore check-fields options.
sql/sql_class.h:
  Make room so we can save check-fields options.
sql/sql_insert.cc:
  raise error as needed
2010-02-18 17:02:17 +00:00
unknown
03854661c5 Move test from main.trigger to main.trigger_notembedded, as it now depends on INFORMATION_SCHEMA.PROCESSLIST (rather than sleeps) to synchronise. 2010-01-12 09:19:48 +01:00
unknown
37d9810d01 Make test case deterministic by replacing sleep with include/wait_condition.inc 2010-01-11 23:27:39 +01:00
Konstantin Osipov
59f82702a1 Backport of:
------------------------------------------------------------
revno: 2617.69.32
committer: Dmitry Lenev <dlenev@mysql.com>
branch nick: mysql-next-bg46747
timestamp: Wed 2009-08-19 18:12:27 +0400
message:
  Fix for bug #46747 "Crash in MDL_ticket::upgrade_shared_lock_to_exclusive
  on TRIGGER + TEMP table".

  Server crashed when one tried to drop trigger which had its subject
  table shadowed by a temporary table with the same name.

  This problem occured because in such situation DROP TRIGGER has opened
  temporary table instead of base table on which trigger was defined.
  Attempt to upgrade metadata lock on this temporary table led to crash
  (we don't acquire metadata locks for temporary tables).

  This fix ensures that DROP TRIGGER ignores temporary tables when
  trying to open table on which trigger to be dropped is defined.


mysql-test/r/trigger.result:
  Added test case for bug #46747 "Crash in
  MDL_ticket::upgrade_shared_lock_to_exclusive
  on TRIGGER + TEMP table".
mysql-test/t/trigger.test:
  Added test case for bug #46747 "Crash in
  MDL_ticket::upgrade_shared_lock_to_exclusive
  on TRIGGER + TEMP table".
sql/sql_trigger.cc:
  Prevent DROP TRIGGER from opening temporary table which might
  shadow base table on which trigger to be dropped is defined.
2009-12-09 12:37:54 +03:00
Davi Arnaut
9cfd2fce0c Backport of Bug#36649 to mysql-next-mr
------------------------------------------------------------
revno: 2630.39.3
revision-id: davi.arnaut@sun.com-20081210215359-i876m4zgc2d6rzs3
parent: kostja@sun.com-20081208222938-9es7wl61moli71ht
committer: Davi Arnaut <Davi.Arnaut@Sun.COM>
branch nick: 36649-6.0
timestamp: Wed 2008-12-10 19:53:59 -0200
message:
  Bug#36649: Condition area is not properly cleaned up after stored routine invocation

  The problem is that the diagnostics area of a trigger is not
  isolated from the area of the statement that caused the trigger
  invocation. In MySQL terms, it means that warnings generated
  during the execution of the trigger are not removed from the
  "warning area" at the end of the execution.

  Before this fix, the rules for MySQL message list life cycle (see
  manual entry for SHOW WARNINGS) did not apply to statements
  inside stored programs:

    - The manual says that the list of messages is cleared by a
      statement that uses a table (any table). However, such
      statement, if run inside a stored program did not clear the
      message list.
    - The manual says that the list is cleared by a statement that
      generates a new error or a warning, but this was not the case
      with stored program statements either and is changed to be the
      case as well.

  In other words, after this fix, a statement has the same effect
  on the message list regardless of whether it's executed inside a
  stored program/sub-statement or not.

  This introduces an incompatible change:

    - before this fix, a, e.g. statement inside a trigger could
      never clear the global warning list
    - after this fix, a trigger that generates a warning or uses a
      table, clears the global warning list
    - however, when we leave a trigger or a function, the caller's
      warning information is restored (see more on this below).

  This change is not backward compatible as it is intended to make
  MySQL behavior similar to the SQL standard behavior:

  A stored function or trigger will get its own "warning area" (or,
  in standard terminology, diagnostics area).  At the beginning of
  the stored function or trigger, all messages from the caller area
  will be copied to the area of the trigger.  During execution, the
  message list will be cleared according to the MySQL rules
  described on the manual (SHOW WARNINGS entry).  At the end of the
  function/trigger, the "warning area" will be destroyed along with
  all warnings it contains, except that if the last statement of
  the function/trigger generated messages, these are copied into
  the "warning area" of the caller.

  Consequently, statements that use a table or generate a warning
  *will* clear warnings inside the trigger, but that will have no
  effect to the warning list of the calling (outer) statement.

mysql-test/r/sp.result:
  Fix test case results.
mysql-test/r/trigger.result:
  Fix test case results.
mysql-test/t/sp.test:
  Add test case for Bug#36649
mysql-test/t/trigger.test:
  Add test case for Bug#36649
sql/sp_head.cc:
  Emulate multiple warning areas -- one per stored program instance.
sql/sql_parse.cc:
  Message list reset rules are the same for statements inside
  or outside compound statements.
2009-11-10 16:11:27 -02:00
Jon Olav Hauglid
1186f5ec18 Bug #34453 Can't change size of file (Errcode: 1224)
Unable to reproduce error on current version of the 5.5.0
codebase. Test case based on the bug report added to trigger.test.

Backport of revno: 2617.52.11.
2009-10-12 12:59:55 +02:00
Martin Hansson
543885d1b1 Bug#44653: Server crash noticed when executing random queries with partitions.
When opening a table, it is imperative that the flag
TABLE::auto_increment_field_not_null be false. But if an error occured during
the creation of a table (e.g. the table exists already) with an auto_increment
column and a BEFORE trigger that used the INSERT ... SELECT construct, the
flag was not reset until after error checking. Thus if an error occured,
select_insert::send_data() returned immediately and it was not reset (see * in
pseudocode below).  Crash happened if the table was opened again. Fixed by
resetting the flag after error checking.

nested-loops_join():
  for each row in SELECT table {
    select_insert::send_data():
      if a values is supplied for AUTO_INCREMENT column
         table->auto_increment_field_not_null= TRUE
       else
         table->auto_increment_field_not_null= FALSE
       if (error)
         return 1; *
       if (table->auto_increment_field_not_null == FALSE)
         ...
       table->auto_increment_field_not_null == FALSE 
  }
<-- table returned to table cache and later retrieved by open_table: 
open_table():
  assert(table->auto_increment_field_not_null)


mysql-test/r/trigger.result:
  Bug#44653: Test result
mysql-test/t/trigger.test:
  Bug#44653: Test case
sql/sql_insert.cc:
  Bug#44653: Fix: Make sure to unset this field before returning in case of error
2009-06-22 14:51:33 +02:00
Staale Smedseng
722fb72a4d Merge from 5.0-bugteam 2009-03-27 13:55:14 +01:00
Staale Smedseng
50ed1ef752 Bug#39953 Triggers are not working properly with multi table
updates

Attempt to execute trigger or stored function with multi-UPDATE
which used - but didn't update - a table that was also used by
the calling statement led to an error. Read-only reference to
tables used in the calling statement should be allowed.
 
This problem was caused by the fact that check for conflicting
use of tables in SP/triggers was performed in open_tables(),
and in case of multi-UPDATE we didn't know exact lock type at
this stage.

We solve the problem by moving this check to lock_tables(), so
it can be performed after exact lock types for tables used by
multi-UPDATE are determined.


mysql-test/r/trigger.result:
  Results for the added test case is added.
mysql-test/t/trigger.test:
  A new test case is added, verifying correct table multi-update
  conflict resolution, both read-only and write.
sql/sql_base.cc:
  The check for conflicting use of tables in SP/triggers is moved
  to lock_tables(), to be performed after the exact lock types
  have been determined. Also, an assert is added to open_ltable()
  to ensure this func is not used in a prelocked context.
2009-03-27 12:09:15 +01:00
Magnus Svensson
867b60e08b Merge 5.1->5.1-rpl
Fix paths and name of a few files to make it work with new mtr.pl
2008-05-30 11:12:07 +02:00
unknown
a63dde5a5b Tentative implementation of
WL#4165 Prepared statements: validation 
WL#4166 Prepared statements: automatic re-prepare
Fixes
Bug#27430 Crash in subquery code when in PS and table DDL changed after PREPARE
Bug#27690 Re-execution of prepared statement after table was replaced with a view crashes
Bug#27420 A combination of PS and view operations cause error + assertion on shutdown

The basic idea of the patch is to keep track of table metadata between
prepared statement prepare and execute. If some table used in the statement
has changed, the prepared statement is re-prepared before execution.

See WL#4165 and WL#4166 contents and comments in the code for details
of the implementation.


include/my_global.h:
  Remove 'register' keyword to avoid warnings when swapping large structures
  that don't fit into a register. Any modern compiler is capable of placing
  a variable in a register when that would benefit performance.
mysql-test/r/ps_1general.result:
  Update test results: since now we re-prepare automatically,
  more correct results are produced in prepare-ddl-execute scenario.
mysql-test/r/query_cache_merge.result:
  Ensure that the table definition cache is large enough for
  the test to pass in --ps-protocol
mysql-test/r/trigger.result:
  Update test results to reflect automatic statement reprepare.
mysql-test/t/disabled.def:
  Enable ps_ddl.test, which now passes.
mysql-test/t/ps_1general.test:
  Since now we re-execute prepared statements after DDL successfully,
  change the test to produce repeatable results. Remove expectancy of
  an error in one place where now we automatically reprepare the prepared
  statement.
mysql-test/t/query_cache_merge.test:
  Ensure the table definition cache is large enough for the test to pass
  in --ps-protocol
mysql-test/t/trigger.test:
  Sinc
sql/item.cc:
  Implement Item_param "copy" functionality, used at re-prepare of
  a prepared statement.
  We copy the type of the original parameter, and move the assigned value,
  if any. Sic, the value is "moved", since it can be quite big --
  e.g. in case we deal with a LONG DATA parameter.
  It's essential to move the value from the old parameter since
  at the time of re-prepare the client packet with the necessary information
  may be not available.
sql/item.h:
  Declare a new method used for reprepare.
sql/my_decimal.h:
  Implement "swap()" functionality of class my_decimal to be
  able to easily swap two decimal values.
sql/mysql_priv.h:
  Declare enum_metadata_type.
sql/mysqld.cc:
  Implement a status variable for the number of reprepared statements.
sql/sql_base.cc:
  Implement metadata version validation.
sql/share/errmsg.txt:
  Add two new error messages: ER_NEED_REPREPARE and ER_PS_REBIND.
  The first error (theoretically) never reaches the user.
  It is issued by the metadata validation framework when a metadata version
  has changed between prepare and execute. Later on it's intercepted
  and the statement is automatically re-prepared. Only if the error
  has occurred repeatedly MAX_REPREPARE_ATTEMTS (3) times do we
  return it to the user.
  
  The second error is issued when after re-prepare we discover
  that the metadata we sent over to the client using the binary
  protocol differs drammatically from the new result set metadata 
  that the reprepared statement produces (e.g. number of result
  set columns is different).
sql/sql_class.cc:
  Implement metadata version validation framework.
sql/sql_class.h:
  Declarations for metadata version validation framework.
sql/sql_parse.cc:
  Mark commands for which we must invalidate and reprepare a prepared
  statement when metadata has changed.
sql/sql_prepare.cc:
  Implement WL#4165 and WL#4166 (limited support of metadata validation
  and re-prepare).
sql/table.h:
  Implement metadata validation.
tests/mysql_client_test.c:
  Add a test case for WL#4166
2008-04-08 20:01:20 +04:00
unknown
9cf8329833 Merge pilot.mysql.com:/data/msvensson/mysql/mysql-5.1-rpl
into  pilot.mysql.com:/data/msvensson/mysql/mysql-5.1-mtr


client/mysqltest.c:
  Auto merged
configure.in:
  Auto merged
mysql-test/extra/rpl_tests/rpl_loaddata.test:
  Auto merged
mysql-test/extra/rpl_tests/rpl_log.test:
  Auto merged
mysql-test/include/mix1.inc:
  Auto merged
mysql-test/lib/mtr_report.pm:
  Auto merged
mysql-test/r/create.result:
  Auto merged
mysql-test/r/gis.result:
  Auto merged
mysql-test/r/mysqlbinlog.result:
  Auto merged
mysql-test/r/trigger.result:
  Auto merged
mysql-test/r/view.result:
  Auto merged
mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result:
  Auto merged
mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
  Auto merged
mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
  Auto merged
mysql-test/suite/rpl/r/rpl_flushlog_loop.result:
  Auto merged
mysql-test/suite/rpl/t/disabled.def:
  Auto merged
mysql-test/suite/rpl/t/rpl_flushlog_loop.test:
  Auto merged
mysql-test/t/create.test:
  Auto merged
mysql-test/t/disabled.def:
  Auto merged
mysql-test/t/mysqldump.test:
  Auto merged
mysql-test/t/show_check.test:
  Auto merged
mysql-test/t/trigger.test:
  Auto merged
mysql-test/t/view.test:
  Auto merged
sql/ha_ndbcluster.cc:
  Auto merged
sql/ha_ndbcluster_binlog.cc:
  Auto merged
mysql-test/mysql-test-run.pl:
  Use local
mysql-test/r/type_blob.result:
  Manual merge
mysql-test/suite/binlog/r/binlog_multi_engine.result:
  Manual merge
mysql-test/suite/binlog/r/binlog_unsafe.result:
  Manual merge
mysql-test/suite/binlog/t/binlog_unsafe.test:
  Manual merge
mysql-test/suite/rpl/r/rpl_loaddata.result:
  Manual merge
mysql-test/t/mysqlbinlog2.test:
  Manual merge
2008-03-25 18:40:49 +01:00
unknown
3320c165cf Merge pilot.mysql.com:/data/msvensson/mysql/mysql-5.1-rpl
into  pilot.mysql.com:/data/msvensson/mysql/mysql-5.1-mtr


BitKeeper/etc/ignore:
  auto-union
BitKeeper/deleted/.del-rpl_row_charset.test:
  Auto merged
BitKeeper/deleted/.del-rpl_row_charset_innodb.test:
  Auto merged
CMakeLists.txt:
  Auto merged
client/mysqltest.c:
  Auto merged
configure.in:
  Auto merged
mysql-test/extra/binlog_tests/blackhole.test:
  Auto merged
mysql-test/extra/binlog_tests/mix_innodb_myisam_side_effects.test:
  Auto merged
mysql-test/include/mix1.inc:
  Auto merged
mysql-test/r/ctype_big5.result:
  Auto merged
mysql-test/r/gis.result:
  Auto merged
mysql-test/r/mysqlbinlog.result:
  Auto merged
mysql-test/r/query_cache.result:
  Auto merged
mysql-test/r/sp.result:
  Auto merged
mysql-test/r/system_mysql_db.result:
  Auto merged
mysql-test/r/trigger.result:
  Auto merged
mysql-test/r/type_blob.result:
  Auto merged
mysql-test/r/view.result:
  Auto merged
mysql-test/r/warnings.result:
  Auto merged
mysql-test/suite/federated/federated.result:
  Auto merged
mysql-test/suite/federated/federated.test:
  Auto merged
mysql-test/suite/ndb_team/r/ndb_dd_backuprestore.result:
  Auto merged
mysql-test/suite/ndb_team/r/rpl_ndb_dd_advance.result:
  Auto merged
mysql-test/suite/ndb_team/t/rpl_ndb_dd_advance.test:
  Auto merged
mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result:
  Auto merged
mysql-test/suite/rpl/r/rpl_row_log_innodb.result:
  Auto merged
mysql-test/suite/rpl/r/rpl_timezone.result:
  Auto merged
mysql-test/suite/rpl/t/rpl_load_from_master.test:
  Auto merged
mysql-test/suite/rpl/t/rpl_rotate_logs.test:
  Auto merged
mysql-test/suite/rpl/t/rpl_trigger.test:
  Auto merged
mysql-test/t/csv.test:
  Auto merged
mysql-test/t/ctype_big5.test:
  Auto merged
mysql-test/t/gis.test:
  Auto merged
mysql-test/t/innodb.test:
  Auto merged
mysql-test/t/mysqldump.test:
  Auto merged
mysql-test/t/partition.test:
  Auto merged
mysql-test/t/query_cache.test:
  Auto merged
mysql-test/t/show_check.test:
  Auto merged
mysql-test/t/sp.test:
  Auto merged
mysql-test/t/system_mysql_db_fix50117.test:
  Auto merged
mysql-test/t/trigger.test:
  Auto merged
mysql-test/t/trigger_notembedded.test:
  Auto merged
mysql-test/t/type_blob.test:
  Auto merged
mysql-test/t/view.test:
  Auto merged
mysql-test/t/warnings.test:
  Auto merged
sql/ha_ndbcluster.cc:
  Auto merged
mysql-test/Makefile.am:
  SCCS merged
mysql-test/mysql-test-run.pl:
  Use local version of mtr.pl
mysql-test/lib/mtr_cases.pm:
  Use local mtr_cases.pm
mysql-test/suite/rpl/t/disabled.def:
  Use remote disabled file
mysql-test/t/disabled.def:
  Use remote disabled file
sql/ha_ndbcluster_binlog.cc:
  Use remote
mysql-test/extra/rpl_tests/rpl_charset.test:
  Manual merge
mysql-test/lib/mtr_report.pm:
  Manual merge
mysql-test/suite/binlog/r/binlog_killed_simulate.result:
  Manual merge
mysql-test/suite/binlog/r/binlog_multi_engine.result:
  Manual merge
mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result:
  Manual merge
mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
  Manual merge
mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
  Manual merge
mysql-test/suite/binlog/t/binlog_killed.test:
  Manual merge
mysql-test/suite/binlog/t/binlog_killed_simulate.test:
  Manual merge
mysql-test/suite/binlog/t/binlog_row_mix_innodb_myisam.test:
  Manual merge
mysql-test/suite/binlog/t/binlog_stm_mix_innodb_myisam.test:
  Manual merge
mysql-test/suite/ndb/r/ndb_binlog_format.result:
  Manual merge
mysql-test/suite/ndb/r/ndb_restore.result:
  Manual merge
mysql-test/suite/ndb/t/ndb_restore.test:
  Manual merge
mysql-test/suite/rpl/include/rpl_mixed_dml.inc:
  Manual merge
mysql-test/suite/rpl/r/rpl_stm_log.result:
  Manual merge
mysql-test/suite/rpl/t/rpl_row_sp005.test:
  Manual merge
mysql-test/t/log_state.test:
  Manual merge
mysql-test/t/mysqlbinlog.test:
  Manual merge
mysql-test/t/mysqlbinlog2.test:
  Manual merge
mysql-test/t/upgrade.test:
  Manual merge
2008-02-28 12:21:44 +01:00
unknown
78100d80ea Only uise one file for current test
Don't retry by default
Fixes for --embedded


mysql-test/lib/My/ConfigFactory.pm:
  Don't copy log-error to [embedded] section
mysql-test/lib/mtr_cases.pm:
  Auto skip all not_embedded when running with embedded
mysql-test/mysql-test-run.pl:
  Only uise one file for current test
  Don't retry by default
mysql-test/t/csv.test:
  Change master-data -> mysqld.1/data
mysql-test/t/innodb.test:
  Change master-data -> mysqld.1/data
mysql-test/t/ps_1general.test:
  Change master-data -> mysqld.1/data
mysql-test/t/trigger.test:
  Change master-data -> mysqld.1/data
2008-02-25 16:41:59 +01:00
unknown
8d51c6ad68 Bug#23771 AFTER UPDATE trigger not invoked when there are no changes of the data
The problem is that AFTER UPDATE triggers will fire only if the
new data is different from the old data on the row. The trigger
should fire regardless of whether there are changes to the data.

The solution is to fire the trigger on UPDATE even if there are
no changes to the value (because the value is the same).


mysql-test/r/trigger.result:
  Add test case result for Bug#23771
mysql-test/t/trigger.test:
  Add test case for Bug#23771
sql/sql_update.cc:
  Move the invocation of the after update trigger so that
  the trigger will fire even if the records are the same.
2008-02-12 09:44:27 -02:00
unknown
1370500c0d WL#4189
- dynamic configuration support
 - safe process
 - cleanups
 - create new suite for fedarated


BitKeeper/deleted/.del-basic.test:
  Rename: mysql-test/ndb/basic.test -> BitKeeper/deleted/.del-basic.test
BitKeeper/deleted/.del-basic_log.result:
  Rename: mysql-test/ndb/basic_log.result -> BitKeeper/deleted/.del-basic_log.result
mysql-test/suite/federated/federated_transactions.result:
  Rename: mysql-test/r/federated_transactions.result -> mysql-test/suite/federated/federated_transactions.result
BitKeeper/deleted/.del-have_bug25714.require:
  Rename: mysql-test/r/have_bug25714.require -> BitKeeper/deleted/.del-have_bug25714.require
BitKeeper/deleted/.del-kill_master.sh:
  Rename: mysql-test/misc/kill_master.sh -> BitKeeper/deleted/.del-kill_master.sh
BitKeeper/deleted/.del-ndb_config_4_node.ini~d8e572e9b68f933a:
  Rename: mysql-test/ndb/ndb_config_4_node.ini -> BitKeeper/deleted/.del-ndb_config_4_node.ini~d8e572e9b68f933a
BitKeeper/deleted/.del-restart.result:
  Rename: mysql-test/ndb/restart.result -> BitKeeper/deleted/.del-restart.result
mysql-test/suite/federated/federated_cleanup.inc:
  Rename: mysql-test/include/federated_cleanup.inc -> mysql-test/suite/federated/federated_cleanup.inc
mysql-test/suite/rpl/t/rpl_rotate_logs-slave.opt:
  Rename: mysql-test/suite/rpl/t/rpl_rotate_logs.slave-mi -> mysql-test/suite/rpl/t/rpl_rotate_logs-slave.opt
BitKeeper/deleted/.del-install_test_db.sh:
  Rename: mysql-test/install_test_db.sh -> BitKeeper/deleted/.del-install_test_db.sh
BitKeeper/deleted/.del-ndb_config_1_node.ini~7ec640ed25570e16:
  Rename: mysql-test/ndb/ndb_config_1_node.ini -> BitKeeper/deleted/.del-ndb_config_1_node.ini~7ec640ed25570e16
BitKeeper/deleted/.del-mtr_timer.pl:
  Rename: mysql-test/lib/mtr_timer.pl -> BitKeeper/deleted/.del-mtr_timer.pl
BitKeeper/deleted/.del-create-test-result:
  Rename: mysql-test/create-test-result -> BitKeeper/deleted/.del-create-test-result
BitKeeper/deleted/.del-fix-result:
  Rename: mysql-test/fix-result -> BitKeeper/deleted/.del-fix-result
BitKeeper/deleted/.del-mysql-test-run-shell.sh:
  Rename: mysql-test/mysql-test-run-shell.sh -> BitKeeper/deleted/.del-mysql-test-run-shell.sh
BitKeeper/deleted/.del-mysql-test_V1.9.pl:
  Rename: mysql-test/misc/mysql-test_V1.9.pl -> BitKeeper/deleted/.del-mysql-test_V1.9.pl
BitKeeper/deleted/.del-resolve-stack:
  Rename: mysql-test/resolve-stack -> BitKeeper/deleted/.del-resolve-stack
BitKeeper/deleted/.del-restart_log.result:
  Rename: mysql-test/ndb/restart_log.result -> BitKeeper/deleted/.del-restart_log.result
mysql-test/suite/rpl/t/rpl_000015-slave.opt:
  Rename: mysql-test/suite/rpl/t/rpl_000015.slave-mi -> mysql-test/suite/rpl/t/rpl_000015-slave.opt
BitKeeper/deleted/.del-ndb_config_2_node.ini:
  Rename: mysql-test/ndb/ndb_config_2_node.ini -> BitKeeper/deleted/.del-ndb_config_2_node.ini
BitKeeper/deleted/.del-ndbcluster.sh:
  Rename: mysql-test/ndb/ndbcluster.sh -> BitKeeper/deleted/.del-ndbcluster.sh
BitKeeper/deleted/.del-basic.result:
  Rename: mysql-test/ndb/basic.result -> BitKeeper/deleted/.del-basic.result
BitKeeper/deleted/.del-restart.test:
  Rename: mysql-test/ndb/restart.test -> BitKeeper/deleted/.del-restart.test
BitKeeper/deleted/.del-have_bug25714.inc:
  Rename: mysql-test/include/have_bug25714.inc -> BitKeeper/deleted/.del-have_bug25714.inc
BitKeeper/deleted/.del-mtr_diff.pl:
  Rename: mysql-test/lib/mtr_diff.pl -> BitKeeper/deleted/.del-mtr_diff.pl
mysql-test/suite/federated/federated_transactions-slave.opt:
  Rename: mysql-test/t/federated_transactions-slave.opt -> mysql-test/suite/federated/federated_transactions-slave.opt
BitKeeper/deleted/.del-Makefile.am~343467da4d0f211b:
  Rename: mysql-test/ndb/Makefile.am -> BitKeeper/deleted/.del-Makefile.am~343467da4d0f211b
BitKeeper/deleted/.del-mtr_im.pl~9762b0336c28949:
  Rename: mysql-test/lib/mtr_im.pl -> BitKeeper/deleted/.del-mtr_im.pl~9762b0336c28949
mysql-test/suite/federated/federated_innodb-slave.opt:
  Rename: mysql-test/t/federated_innodb-slave.opt -> mysql-test/suite/federated/federated_innodb-slave.opt
client/mysqltest.c:
  Use current files path first when looking for include file
configure.in:
  Remove mysql-test/nbd
mysql-test/Makefile.am:
  Cleanup mysql-test/Makefile.am
mysql-test/extra/binlog_tests/blackhole.test:
  Use new paths
mysql-test/extra/binlog_tests/ctype_ucs_binlog.test:
  Use new paths
mysql-test/mysql-test-run.pl:
  Dynamic configuration support
  Safe process
mysql-test/extra/binlog_tests/mix_innodb_myisam_side_effects.test:
  Use new paths
mysql-test/extra/rpl_tests/rpl_EE_err.test:
  Use new paths
mysql-test/extra/rpl_tests/rpl_loaddata.test:
  Use new paths
mysql-test/extra/rpl_tests/rpl_log.test:
  Use new paths
mysql-test/extra/rpl_tests/rpl_row_001.test:
  Use new paths
mysql-test/extra/rpl_tests/rpl_row_charset.test:
  Use new paths
mysql-test/extra/rpl_tests/rpl_stm_000001.test:
  Use new paths
mysql-test/extra/rpl_tests/rpl_stm_charset.test:
  Use new paths
mysql-test/include/have_blackhole.inc:
  Use new paths
mysql-test/include/have_ndbapi_examples.inc:
  Use new paths
mysql-test/include/loaddata_autocom.inc:
  Use new paths
mysql-test/include/mix1.inc:
  Use new paths
mysql-test/include/ndb_backup.inc:
  Use new paths
mysql-test/include/ndb_restore_master.inc:
  Use new paths
mysql-test/include/ndb_restore_slave_eoption.inc:
  Use new paths
mysql-test/include/testdb_only.inc:
  Use new paths
mysql-test/lib/My/Config.pm:
  dynamic configuration
  safe process
  cleanups
mysql-test/lib/mtr_cases.pm:
  dynamic configuration
  safe process
  cleanups
mysql-test/lib/mtr_io.pl:
  dynamic configuration
  safe process
  cleanups
mysql-test/lib/mtr_misc.pl:
  dynamic configuration
  safe process
  cleanups
mysql-test/lib/mtr_process.pl:
  dynamic configuration
  safe process
  cleanups
mysql-test/lib/mtr_report.pl:
  dynamic configuration
  safe process
  cleanups
mysql-test/lib/mtr_stress.pl:
  dynamic configuration
  safe process
  cleanups
mysql-test/r/backup.result:
  Use new paths
mysql-test/r/ctype_big5.result:
  Use new paths
mysql-test/r/gis.result:
  Use new paths
mysql-test/r/loaddata.result:
  Use new paths
mysql-test/r/loaddata_autocom_innodb.result:
  Use new paths
mysql-test/r/mysqlbinlog.result:
  Use new paths
mysql-test/r/mysqlbinlog_base64.result:
  Use new paths
mysql-test/r/outfile.result:
  Use new paths
mysql-test/r/partition_error.result:
  Use new paths
mysql-test/r/partition_not_windows.result:
  Use new paths
mysql-test/r/partition_symlink.result:
  Use new paths
mysql-test/r/query_cache.result:
  Use new paths
mysql-test/r/sp.result:
  Use new paths
mysql-test/r/symlink.result:
  Use new paths
mysql-test/r/system_mysql_db.result:
  Use new paths
mysql-test/r/trigger.result:
  Use new paths
mysql-test/r/type_blob.result:
  Use new paths
mysql-test/r/view.result:
  Use new paths
mysql-test/r/warnings.result:
  Use new paths
mysql-test/suite/binlog/r/binlog_killed_simulate.result:
  Use new paths
mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result:
  Use new paths
mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
  Use new paths
mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
  Use new paths
mysql-test/suite/binlog/t/binlog_killed.test:
  Use new paths
mysql-test/suite/binlog/t/binlog_killed_simulate.test:
  Use new paths
mysql-test/suite/binlog/t/binlog_row_mix_innodb_myisam.test:
  Use new paths
mysql-test/suite/binlog/t/binlog_stm_mix_innodb_myisam.test:
  Use new paths
mysql-test/suite/federated/federated.inc:
  Use new paths
mysql-test/suite/federated/federated.result:
  Use new paths
mysql-test/suite/federated/federated.test:
  Use new paths
mysql-test/suite/federated/federated_archive.result:
  Use new paths
mysql-test/suite/federated/federated_archive.test:
  Use new paths
mysql-test/suite/federated/federated_bug_13118.result:
  Use new paths
mysql-test/suite/federated/federated_bug_13118.test:
  Use new paths
mysql-test/suite/federated/federated_bug_25714.result:
  Use new paths
mysql-test/suite/federated/federated_bug_25714.test:
  Use new paths
mysql-test/suite/federated/federated_innodb.result:
  Use new paths
mysql-test/suite/federated/federated_innodb.test:
  Use new paths
mysql-test/suite/federated/federated_server.result:
  Use new paths
mysql-test/suite/federated/federated_server.test:
  Use new paths
mysql-test/suite/federated/federated_transactions.test:
  Use new paths
mysql-test/suite/federated/have_federated_db.inc:
  Use new paths
mysql-test/suite/ndb/r/loaddata_autocom_ndb.result:
  Use new paths
mysql-test/suite/ndb/r/ndb_config.result:
  Use new paths
mysql-test/suite/ndb/r/ndb_dd_backuprestore.result:
  Use new paths
mysql-test/suite/ndb/r/ndb_load.result:
  Use new paths
mysql-test/suite/ndb/r/ndb_loaddatalocal.result:
  Use new paths
mysql-test/suite/ndb/r/ndb_replace.result:
  Use new paths
mysql-test/suite/ndb/r/ndb_restore.result:
  Use new paths
mysql-test/suite/ndb/r/ndb_restore_partition.result:
  Use new paths
mysql-test/suite/ndb/r/ndb_restore_print.result:
  Use new paths
mysql-test/suite/ndb/r/ndb_trigger.result:
  Use new paths
mysql-test/suite/ndb/t/ndb_alter_table.test:
  Use new paths
mysql-test/suite/ndb/t/ndb_config.test:
  Use new paths
mysql-test/suite/ndb/t/ndb_load.test:
  Use new paths
mysql-test/suite/ndb/t/ndb_loaddatalocal.test:
  Use new paths
mysql-test/suite/ndb/t/ndb_replace.test:
  Use new paths
mysql-test/suite/ndb/t/ndb_restore.test:
  Use new paths
mysql-test/suite/ndb/t/ndb_single_user.test:
  Use new paths
mysql-test/suite/ndb/t/ndb_trigger.test:
  Use new paths
mysql-test/suite/ndb/t/ndbapi.test:
  Use new paths
mysql-test/suite/rpl/include/rpl_mixed_dml.inc:
  Use new paths
mysql-test/suite/rpl/r/rpl_LD_INFILE.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_flushlog_loop.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_innodb.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_load_table_from_master.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_loaddata.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_loaddata_charset.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_loaddata_fatal.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_loaddata_m.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_loaddata_s.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_loaddata_simple.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_loaddatalocal.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_loadfile.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_misc_functions.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_replicate_do.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_rewrt_db.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_row_001.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_row_loaddata_m.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_row_log.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_row_log_innodb.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_row_stop_middle_update.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_stm_000001.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_stm_log.result:
  Use new paths
mysql-test/suite/rpl/r/rpl_timezone.result:
  Use new paths
mysql-test/suite/rpl/t/disabled.def:
  Use new paths
mysql-test/suite/rpl/t/rpl000017-slave.sh:
  Use new paths
mysql-test/suite/rpl/t/rpl_LD_INFILE.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_drop_db.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_flushlog_loop-master.opt:
  Use new paths
mysql-test/suite/rpl/t/rpl_flushlog_loop-slave.opt:
  Use new paths
mysql-test/suite/rpl/t/rpl_flushlog_loop.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_innodb.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_innodb_bug30919.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_load_from_master.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_load_table_from_master.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_loaddata_charset.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_loaddata_fatal.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_loaddata_m.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_loaddata_s.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_loaddata_simple.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_loaddatalocal.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_loadfile.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_misc_functions.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_replicate_do.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_rewrt_db.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_rotate_logs-master.opt:
  Use new paths
mysql-test/suite/rpl/t/rpl_rotate_logs.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_row_charset_innodb.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_row_stop_middle_update.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_timezone.test:
  Use new paths
mysql-test/suite/rpl/t/rpl_trigger.test:
  Use new paths
mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_advance.result:
  Use new paths
mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb_trans.result:
  Use new paths
mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result:
  Use new paths
mysql-test/suite/rpl_ndb/r/rpl_ndb_multi.result:
  Use new paths
mysql-test/suite/rpl_ndb/r/rpl_ndb_row_001.result:
  Use new paths
mysql-test/suite/rpl_ndb/r/rpl_ndb_sync.result:
  Use new paths
mysql-test/suite/rpl_ndb/t/rpl_ndb_bank.test:
  Use new paths
mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_advance.test:
  Use new paths
mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb_trans.test:
  Use new paths
mysql-test/suite/rpl_ndb/t/rpl_ndb_load.test:
  Use new paths
mysql-test/suite/rpl_ndb/t/rpl_ndb_sync.test:
  Use new paths
mysql-test/suite/rpl_ndb/t/rpl_ndbapi_multi.test:
  Use new paths
mysql-test/t/backup.test:
  Use new paths
mysql-test/t/bootstrap.test:
  Use new paths
mysql-test/t/crash_commit_before.test:
  Use new paths
mysql-test/t/create_not_windows.test:
  Use new paths
mysql-test/t/csv.test:
  Use new paths
mysql-test/t/ctype_big5.test:
  Use new paths
mysql-test/t/disabled.def:
  Use new paths
mysql-test/t/distinct.test:
  Use new paths
mysql-test/t/gis.test:
  Use new paths
mysql-test/t/grant_cache_no_prot.test:
  Use new paths
mysql-test/t/grant_cache_ps_prot.test:
  Use new paths
mysql-test/t/information_schema_chmod.test:
  Use new paths
mysql-test/t/loaddata.test:
  Use new paths
mysql-test/t/log_state.test:
  Use new paths
mysql-test/t/myisam-system.test:
  Use new paths
mysql-test/t/mysql_upgrade.test:
  Use new paths
mysql-test/t/mysqlbinlog-cp932.test:
  Use new paths
mysql-test/t/mysqlbinlog.test:
  Use new paths
mysql-test/t/mysqlbinlog2.test:
  Use new paths
mysql-test/t/mysqlbinlog_base64.test:
  Use new paths
mysql-test/t/mysqldump.test:
  Use new paths
mysql-test/t/outfile.test:
  Use new paths
mysql-test/t/partition.test:
  Use new paths
mysql-test/t/partition_error.test:
  Use new paths
mysql-test/t/partition_federated.test:
  Use new paths
mysql-test/t/partition_mgm.test:
  Use new paths
mysql-test/t/partition_not_windows.test:
  Use new paths
mysql-test/t/partition_symlink.test:
  Use new paths
mysql-test/t/query_cache.test:
  Use new paths
mysql-test/t/repair.test:
  Use new paths
mysql-test/t/show_check.test:
  Use new paths
mysql-test/t/sp-destruct.test:
  Use new paths
mysql-test/t/sp.test:
  Use new paths
mysql-test/t/symlink.test:
  Use new paths
mysql-test/t/system_mysql_db.test:
  Use new paths
mysql-test/t/system_mysql_db_fix30020.test:
  Use new paths
mysql-test/t/system_mysql_db_fix40123.test:
  Use new paths
mysql-test/t/system_mysql_db_fix50030.test:
  Use new paths
mysql-test/t/system_mysql_db_fix50117.test:
  Use new paths
mysql-test/t/trigger-compat.test:
  Use new paths
mysql-test/t/trigger-grant.test:
  Use new paths
mysql-test/t/trigger.test:
  Use new paths
mysql-test/t/type_blob.test:
  Use new paths
mysql-test/t/type_varchar.test:
  Use new paths
mysql-test/t/upgrade.test:
  Use new paths
mysql-test/t/user_var-binlog.test:
  Use new paths
mysql-test/t/varbinary.test:
  Use new paths
mysql-test/t/view.test:
  Use new paths
mysql-test/t/warnings.test:
  Use new paths
mysql-test/lib/My/ConfigFactory.pm:
  Initial version
mysql-test/lib/My/Find.pm:
  Initial version
mysql-test/lib/My/SafeProcess.pm:
  Initial version
mysql-test/std_data/ndb_config_config.ini:
  Add "old" style config.ini for ndb
mysql-test/suite/federated/disabled.def:
  Move disabled federated to it's new suite
mysql-test/suite/federated/my.cnf:
  Add config for federated
mysql-test/suite/ndb/my.cnf:
  Add config for ndb
mysql-test/suite/rpl/my.cnf:
  Add config for rpl
mysql-test/suite/rpl/rpl_1slave_base.cnf:
  Add base config for rpl
mysql-test/suite/rpl/t/rpl_000015-master.opt:
  Use new paths
mysql-test/suite/rpl_ndb/my.cnf:
  Add config for rpl_ndb
mysql-test/lib/My/File/Path.pm:
  Initial version
mysql-test/lib/My/SafeProcess/Base.pm:
  Initial version
mysql-test/lib/My/SafeProcess/safe_kill_win.cc:
  Initial version
mysql-test/lib/My/SafeProcess/safe_process.pl:
  Initial version
mysql-test/lib/My/SafeProcess/safe_process_win.cc:
  Initial version
mysql-test/lib/t/Base.t:
  Initial version
mysql-test/lib/t/Find.t:
  Initial version
mysql-test/lib/t/SafeProcess.t:
  Initial version
mysql-test/lib/t/SafeProcessStress.pl:
  Initial version
mysql-test/lib/t/copytree.t:
  Initial version
mysql-test/lib/t/dummyd.pl:
  Initial version
mysql-test/lib/t/rmtree.t:
  Initial version
mysql-test/lib/t/testMyConfig.t:
  Initial version
mysql-test/lib/t/testMyConfigFactory.t:
  Initial version
mysql-test/lib/t/test_child.pl:
  Initial version
mysql-test/include/default_my.cnf:
  Add default config file used when no suite specific file is found
mysql-test/include/default_mysqld.cnf:
  New BitKeeper file ``mysql-test/include/default_mysqld.cnf''
mysql-test/include/default_ndbd.cnf:
  Add default settings for all ndbds
mysql-test/lib/mtr_settings.pl:
  Initial version
2007-12-12 18:19:24 +01:00
unknown
87143063d3 Bug#23713 LOCK TABLES + CREATE TRIGGER + FLUSH TABLES WITH READ LOCK = deadlock
This bug is actually two bugs in one, one of which is CREATE TRIGGER under
LOCK TABLES and the other is CREATE TRIGGER under LOCK TABLES simultaneous
to a FLUSH TABLES WITH READ LOCK (global read lock). Both situations could
lead to a server crash or deadlock.

The first problem arises from the fact that when under LOCK TABLES, if the
table is in the set of locked tables, the table is already open and it doesn't
need to be reopened (not a placeholder). Also in this case, if the table is
not write locked, a exclusive lock can't be acquired because of a possible
deadlock with another thread also holding a (read) lock on the table. The
second issue arises from the fact that one should never wait for a global
read lock if it's holding any locked tables, because the global read lock
is waiting for these tables and this leads to a circular wait deadlock.

The solution for the first case is to check if the table is write locked
and upgraded the write lock to a exclusive lock and fail otherwise for non
write locked tables. Grabbin the exclusive lock in this case also means
to ensure that the table is opened only by the calling thread. The second
issue is partly fixed by not waiting for the global read lock if the thread
is holding any locked tables.

The second issue is only partly addressed in this patch because it turned
out to be much wider and also affects other DDL statements. Reported as
Bug#32395


mysql-test/r/trigger.result:
  Add test case result for Bug#23713
mysql-test/r/trigger_notembedded.result:
  Add test case result for Bug#23713
mysql-test/t/trigger.test:
  Add test case for Bug#23713
mysql-test/t/trigger_notembedded.test:
  Add test case for Bug#23713
sql/mysql_priv.h:
  Locally export wait_while_table_is_used and name_lock_locked_table
  and add flag to mysql_ha_rm_tables to signal that LOCK_open is locked.
sql/sql_base.cc:
  Introduce name_lock_locked_table function and match
  close_old_data_files function declaration and definition.
sql/sql_handler.cc:
  Add flag to mysql_ha_rm_tables to signal that LOCK_open is locked.
sql/sql_rename.cc:
  Fix mysql_ha_rm_tables caller.
sql/sql_table.cc:
  Export wait_while_table_is_used and assert that LOCK_open is locked
  and fix mysql_ha_rm_tables caller.
sql/sql_trigger.cc:
  Upgrade write locked tables to a exclusive lock and fail if
  the table is not write locked. Also, don't wait for the global
  read lock if under LOCK TABLES.
2007-11-29 09:42:26 -02:00
unknown
7622b4233c Bug#32443 - trigger.test produces warnings files
Wrong syntax for mysqltest commands was used in test file.

Fixed test.


mysql-test/r/trigger.result:
  Bug#32443 - trigger.test produces warnings files
  Fixed test result
mysql-test/t/trigger.test:
  Bug#32443 - trigger.test produces warnings files
  Fixed test
2007-11-16 18:05:30 +01:00
unknown
124af3f873 Bug #31866: MySQL Server crashes on SHOW CREATE TRIGGER statement
SHOW CREATE TRIGGER was not checking for detected errors 
opening/reading the trigger file. 
Fixed to return the already generated error.


mysql-test/r/trigger.result:
  Bug #31866: test case
mysql-test/t/trigger.test:
  Bug #31866: test case
sql/sql_show.cc:
  Bug #31866: test for error and return it.
2007-11-01 14:42:14 +02:00
unknown
2adb4942e4 Update result formatting for embedded runs of ps_1general and
trigger tests, to match build_table_filename behavior.


mysql-test/t/ps_1general.test:
  Adjust how the datadir file name is normalized, to match new
  build_table_filename behavior.  This fixes the test result
  when run with the embedded server.
mysql-test/t/trigger.test:
  Adjust how the datadir file name is normalized, to match new
  build_table_filename behavior.  This fixes the test result
  when run with the embedded server.
2007-08-15 02:18:41 -06:00
unknown
346ea19be7 Merge bodhi.(none):/opt/local/work/mysql-5.0-runtime
into  bodhi.(none):/opt/local/work/mysql-5.1-runtime


mysql-test/r/sp-prelocking.result:
  Auto merged
mysql-test/r/trigger.result:
  Auto merged
mysql-test/t/create.test:
  Auto merged
mysql-test/t/innodb.test:
  Auto merged
mysql-test/t/sp-prelocking.test:
  Auto merged
mysql-test/t/trigger.test:
  Auto merged
sql/sql_class.h:
  Auto merged
mysql-test/r/create.result:
  Use local.
mysql-test/r/innodb.result:
  Manual merge.
2007-07-19 19:42:24 +04:00
unknown
5f462f9626 Add a test case for Bug#27248 Triggers: error if insert affects temporary
table.
The bug itself is yet another manifestation of Bug 26141.


mysql-test/r/trigger.result:
  Update results.
mysql-test/t/trigger.test:
  Add a test case for Bug#27248 Triggers: error if insert affects temporary
  table
2007-07-18 14:42:06 +04:00
unknown
9562c54a5c Merge bodhi.(none):/opt/local/work/mysql-5.0-runtime
into  bodhi.(none):/opt/local/work/mysql-5.1-runtime


mysql-test/r/trigger.result:
  Auto merged
mysql-test/t/query_cache.test:
  Auto merged
mysql-test/t/sp.test:
  Auto merged
mysql-test/t/trigger.test:
  Auto merged
sql/item.cc:
  Auto merged
sql/item.h:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/sp_head.h:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/sql_db.cc:
  Auto merged
sql/sql_lex.cc:
  Auto merged
sql/sql_lex.h:
  Auto merged
sql/sql_parse.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
sql/sql_show.cc:
  Auto merged
sql/sql_trigger.h:
  Auto merged
sql/sql_view.cc:
  Auto merged
sql/table.cc:
  Auto merged
storage/myisam/ha_myisam.h:
  Auto merged
mysql-test/include/mix1.inc:
  Manual merge.
mysql-test/r/information_schema.result:
  Manual merge.
mysql-test/r/innodb_mysql.result:
  Manual merge.
mysql-test/r/query_cache.result:
  Manual merge.
mysql-test/r/sp.result:
  Manual merge.
mysql-test/t/information_schema.test:
  Manual merge.
sql/handler.h:
  Manual merge.
sql/sp.cc:
  Manual merge.
sql/sp_head.cc:
  Manual merge.
sql/sql_prepare.cc:
  Manual merge.
sql/sql_trigger.cc:
  Manual merge.
sql/sql_yacc.yy:
  Manual merge.
sql/table.h:
  Manual merge.
storage/myisam/ha_myisam.cc:
  Manual merge.
2007-07-16 23:31:36 +04:00
unknown
9dc3088f9e A fix and a test case for Bug#26141 mixing table types in trigger
causes full table lock on innodb table.
Also fixes Bug#28502 Triggers that update another innodb table 
will block on X lock unnecessarily (duplciate).
Code review fixes.

Both bugs' synopses are misleading: InnoDB table is
not X locked. The statements, however, cannot proceed concurrently, 
but this happens due to lock conflicts for tables used in triggers,
not for the InnoDB table. 

If a user had an InnoDB table, and two triggers, AFTER UPDATE and 
AFTER INSERT, competing for different resources (e.g. two distinct
MyISAM tables), then these two triggers would not be able to execute
concurrently. Moreover, INSERTS/UPDATES of the InnoDB table would
not be able to run concurrently. 
The problem had other side-effects (see respective bug reports).

This behavior was a consequence of a shortcoming of the pre-locking
algorithm, which would not distinguish between different DML operations
(e.g. INSERT and DELETE) and pre-lock all the tables
that are used by any trigger defined on the subject table.

The idea of the fix is to extend the pre-locking algorithm to keep track,
for each table, what DML operation it is used for and not
load triggers that are known to never be fired.


mysql-test/r/trigger-trans.result:
  Update results (Bug#26141)
mysql-test/r/trigger.result:
  Update results (Bug#28502)
mysql-test/t/trigger-trans.test:
  Add a test case for Bug#26141 mixing table types in trigger causes 
  full table lock on innodb table.
mysql-test/t/trigger.test:
  Add a test case for Bug#28502 Triggers that update another innodb 
  table will block echo on X lock unnecessarily. Add more test 
  coverage for triggers.
sql/item.h:
  enum trg_event_type is needed in table.h
sql/sp.cc:
  Take into account table_list->trg_event_map when determining
  what tables to pre-lock. 
  
  After this change, if we attempt to fire a 
  trigger for which we had not pre-locked any tables, error
  'Table was not locked with LOCK TABLES' will be printed.
  This, however, should never happen, provided the pre-locking
  algorithm has no programming bugs.
  
  Previously a trigger key in the sroutines hash was based on the name 
  of the table the trigger belongs to. This was possible because we would
  always add to the pre-locking list all the triggers defined for a table when
  handling this table.
  Now the key is based on the name of the trigger, owing
  to the fact that a trigger name must be unique in the database it
  belongs to.
sql/sp_head.cc:
  Generate sroutines hash key in init_spname(). This is a convenient
  place since there we have all the necessary information and can
  avoid an extra alloc.
  
  Maintain and merge trg_event_map when adding and merging elements
  of the pre-locking list.
sql/sp_head.h:
  Add ,m_sroutines_key member, used when inserting the sphead for a
  trigger into the cache of routines used by a statement.
  Previously the key was based on the table name the trigger belonged
  to, since for a given table we would add to the sroutines list
  all the triggers defined on it.
sql/sql_lex.cc:
  Introduce a new lex step: set_trg_event_type_for_tables().
  It is called when we have finished parsing but before opening
  and locking tables. Now this step is used to evaluate for each
  TABLE_LIST instance which INSERT/UPDATE/DELETE operation, if any,
  it is used in.
  In future this method could be extended to aggregate other information
  that is hard to aggregate during parsing.
sql/sql_lex.h:
  Add declaration for set_trg_event_type_for_tables().
sql/sql_parse.cc:
  Call set_trg_event_type_for_tables() after MYSQLparse(). Remove tabs.
sql/sql_prepare.cc:
  Call set_trg_event_type_for_tables() after  MYSQLparse().
sql/sql_trigger.cc:
  Call set_trg_event_type_for_tables() after MYSQLparse().
sql/sql_trigger.h:
  Remove an obsolete member.
sql/sql_view.cc:
  Call set_trg_event_type_for_tables() after MYSQLparse().
sql/sql_yacc.yy:
  Move assignment of sp_head::m_type before calling sp_head::init_spname(), 
  one is now used inside another.
sql/table.cc:
  Implement TABLE_LIST::set_trg_event_map() - a method that calculates
  wh triggers may be fired on this table when executing a statement.
sql/table.h:
  Add missing declarations.
  Move declaration of trg_event_type from item.h (it will be needed for 
  trg_event_map bitmap when we start using Bitmap template instead
  of uint8).
2007-07-12 22:26:41 +04:00
unknown
e8966deecc A fix and a test case for Bug#29050 Creation of a legal stored procedure
fails if a database is not selected prior.

The problem manifested itself when a user tried to
create a routine that had non-fully-qualified identifiers in its bodies
and there was no current database selected.

This is a regression introduced by the fix for Bug 19022:

The patch for Bug 19022 changes the code to always produce a warning
if we can't resolve the current database in the parser. 
In this case this was not necessary, since even though the produced
parsed tree was incorrect, we never re-use sphead
that was obtained at first parsing of CREATE PROCEDURE.
The sphead that is anyhow used is always obtained through db_load_routine,
and there we change the current database to sphead->m_db before
calling yyparse.

The idea of the fix is to resolve the current database directly using 
lex->sphead->m_db member when parsing a stored routine body, when
such is present.

This patch removes the need to reset the current database
when loading a trigger or routine definition into SP cache.
The redundant code will be removed in 5.1.


mysql-test/r/sp.result:
  Update test results (Bug#29050)
mysql-test/r/trigger.result:
  Update results.
mysql-test/t/sp.test:
  Add a test case for Bug#29050
mysql-test/t/trigger.test:
  Fix wrong behavior covered with tests.
sql/sql_lex.cc:
  Implement st_lex::copy_db_to().
sql/sql_lex.h:
  Declare st_lex::copy_db_to().
sql/sql_parse.cc:
  Use st_lex::copy_db_to() in add_table_to_list, rather than
  THD::copy_db_to(). The former will use the database of the sphead,
  if we're parsing a stored routine, not the default database in
  THD. The default database is needed to initialize tables->db
  when the database part was not explicitly specified in the identifier.
sql/sql_yacc.yy:
  Use st_lex::copy_db_to() in the parser, rather than
  THD::copy_db_to(). The former will use the database of the sphead,
  if we're parsing a stored routine, not the default database in
  THD.
2007-07-05 11:34:04 +04:00
unknown
a43723673f Merge weblab.(none):/home/marcsql/TREE/mysql-5.1-base
into  weblab.(none):/home/marcsql/TREE/mysql-5.1-rt-merge


mysql-test/r/trigger.result:
  Auto merged
mysql-test/t/trigger.test:
  Auto merged
sql/field.cc:
  Auto merged
sql/field.h:
  Auto merged
sql/handler.cc:
  Auto merged
sql/item.h:
  Auto merged
sql/log.cc:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/sql_class.h:
  Auto merged
sql/sql_insert.cc:
  Auto merged
sql/sql_parse.cc:
  Auto merged
sql/sql_partition.cc:
  Auto merged
sql/sql_prepare.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
2007-06-15 11:36:31 -06:00