- 01 Jul, 2006 1 commit
-
-
unknown authored
NDB table". SQL-layer was not marking fields which were used in triggers as such. As result these fields were not always properly retrieved/stored by handler layer. So one might got wrong values or lost changes in triggers for NDB, Federated and possibly InnoDB tables. This fix solves the problem by marking fields used in triggers appropriately. Also this patch contains the following cleanup of ha_ndbcluster code: We no longer rely on reading LEX::sql_command value in handler in order to determine if we can enable optimization which allows us to handle REPLACE statement in more efficient way by doing replaces directly in write_row() method without reporting error to SQL-layer. Instead we rely on SQL-layer informing us whether this optimization applicable by calling handler::extra() method with HA_EXTRA_WRITE_CAN_REPLACE flag. As result we no longer apply this optimzation in cases when it should not be used (e.g. if we have on delete triggers on table) and use in some additional cases when it is applicable (e.g. for LOAD DATA REPLACE). Finally this patch includes fix for bug#20728 "REPLACE does not work correctly for NDB table with PK and unique index". This was yet another problem which was caused by improper field mark-up. During row replacement fields which weren't explicity used in REPLACE statement were not marked as fields to be saved (updated) so they have retained values from old row version. The fix is to mark all table fields as set for REPLACE statement. Note that in 5.1 we already solve this problem by notifying handler that it should save values from all fields only in case when real replacement happens. include/my_base.h: Added HA_EXTRA_WRITE_CAN_REPLACE, HA_EXTRA_WRITE_CANNOT_REPLACE - new parameters for ha_extra() method. We use them to inform handler that write_row() which tries to insert new row into the table and encounters some already existing row with same primary/unique key can replace old row with new row instead of reporting error. mysql-test/r/federated.result: Additional test for bug#18437 "Wrong values inserted with a before update trigger on NDB table". mysql-test/r/ndb_replace.result: Added test for bug #20728 "REPLACE does not work correctly for NDB table with PK and unique index". Updated wrong results from older test. mysql-test/t/federated.test: Additional test for bug#18437 "Wrong values inserted with a before update trigger on NDB table". mysql-test/t/ndb_replace.test: Added test for bug #20728 "REPLACE does not work correctly for NDB table with PK and unique index". sql/ha_ndbcluster.cc: We no longer rely on reading LEX::sql_command value in handler in order to determine if we can enable optimization which allows us to handle REPLACE statement in more efficient way by doing replaces directly in write_row() method without reporting error to SQL-layer. Instead we rely on SQL-layer informing us whether this optimization applicable by calling handler::extra() method with HA_EXTRA_WRITE_CAN_REPLACE flag. As result we no longer apply this optimization in cases when it should not be used (e.g. if we have on delete triggers on table) and use in some additional cases when it is applicable (e.g. for LOAD DATA REPLACE). sql/item.cc: Item_trigger_field::setup_field(): Added comment explaining why we don't set Field::query_id in this method. sql/mysql_priv.h: mysql_alter_table() function no longer takes handle_duplicates argument. Added declaration of mark_fields_used_by_triggers_for_insert_stmt() function. sql/sql_delete.cc: Mark fields which are used by ON DELETE triggers so handler will retrieve values for these fields. sql/sql_insert.cc: Explicitly inform handler that we are doing REPLACE (using ha_extra() method) in cases when it can promote insert operation done by write_row() to replace. Also when we do REPLACE we want to store values for all columns so we should inform handler about it. Finally we should mark fields used by ON UPDATE/ON DELETE triggers as such so handler can properly retrieve/restore values in these fields during execution of REPLACE and INSERT ... ON DUPLICATE KEY UPDATE statements. sql/sql_load.cc: Explicitly inform handler that we are doing LOAD DATA REPLACE (using ha_extra() method) in cases when it can promote insert operation done by write_row() to replace. Also when we do replace we want to save (replace) values for all columns so we should inform handler about it. Finally to properly execute LOAD DATA for table with triggers we should mark fields used by ON INSERT triggers as such so handler can properly store values for these fields. sql/sql_parse.cc: mysql_alter_table() function no longer takes handle_duplicates argument. sql/sql_table.cc: Got rid of handle_duplicates argument in mysql_alter_table() and copy_data_between_tables() functions. These functions were always called with handle_duplicates == DUP_ERROR and thus contained dead (and probably incorrect) code. sql/sql_trigger.cc: Added Table_triggers_list::mark_fields_used() method which is used to mark fields read/set by triggers as such so handlers will be able properly retrieve/store values in these fields. sql/sql_trigger.h: Table_triggers_list: Added mark_fields_used() method which is used to mark fields read/set by triggers as such so handlers will be able properly retrieve/store values in these fields. To implement this method added 'trigger_fields' member which is array of lists linking items for all fields used in triggers grouped by event and action time. sql/sql_update.cc: Mark fields which are used by ON UPDATE triggers so handler will retrieve and save values for these fields. mysql-test/r/ndb_trigger.result: Added test for bug#18437 "Wrong values inserted with a before update trigger on NDB table". mysql-test/t/ndb_trigger.test: Added test for bug#18437 "Wrong values inserted with a before update trigger on NDB table".
-
- 24 Jun, 2006 2 commits
-
-
unknown authored
into mysql.com:/data0/knielsen/tmp-5.0
-
unknown authored
Sometimes the helper connection (that is watching for the main connection to time out) would itself time out first, causing the test to fail. mysql-test/t/wait_timeout.test: Increase connection timeout in connection wait_con so we will not loose the connection that is watching for the real wait_timeout to trigger.
-
- 23 Jun, 2006 4 commits
-
-
unknown authored
After merge fix mysql-test/r/key.result: After merge fix
-
unknown authored
into moonbone.local:/work/tmp_merge-5.0-opt-mysql sql/sql_parse.cc: Auto merged
-
unknown authored
into moonbone.local:/work/tmp_merge-5.0-opt-mysql mysql-test/r/key.result: Auto merged mysql-test/t/key.test: Auto merged sql/table.cc: Auto merged support-files/mysql.spec.sh: Auto merged
-
unknown authored
An UNIQUE KEY consisting of NOT NULL columns was displayed as PRIMARY KEY in "DESC t1". According to the code, that was intentional behaviour for some reasons unknown to me. This code was written before bitkeeper time, so I cannot check who and why made this. After discussing on dev-public, a decision was made to remove this code mysql-test/r/key.result: Adding test case. mysql-test/t/key.test: Adding test case. sql/table.cc: Removing old wrong code
-
- 22 Jun, 2006 9 commits
-
-
unknown authored
Disable the simplistic auto dependency scan for test/bench (bug#20078) support-files/mysql.spec.sh: Disable the simplistic auto dependency scan for test/bench (bug#20078)
-
unknown authored
into mysql.com:/opt/local/work/mysql-5.0-runtime
-
unknown authored
into clam.ndb.mysql.com:/space/pekka/ndb/version/my50-bug18781 ndb/src/kernel/blocks/dbdih/DbdihMain.cpp: Auto merged ndb/src/ndbapi/ndberror.c: Auto merged
-
unknown authored
into mysql.com:/home/tomash/src/mysql_ab/mysql-5.0-bug15811
-
unknown authored
into mysql.com:/opt/local/work/mysql-5.0-runtime
-
unknown authored
into mysql.com:/home/tomash/src/mysql_ab/mysql-5.0-bug15811
-
unknown authored
with PREPARE fails with weird error". More generally, re-executing a stored procedure with a complex SP cursor query could lead to a crash. The cause of the problem was that SP cursor queries were not optimized properly at first execution: their parse tree belongs to sp_instr_cpush, not sp_instr_copen, and thus the tree was tagged "EXECUTED" when the cursor was declared, not when it was opened. This led to loss of optimization transformations performed at first execution, as sp_instr_copen saw that the query is already "EXECUTED" and therefore either not ran first-execution related blocks or wrongly rolled back the transformations caused by first-execution code. The fix is to update the state of the parsed tree only when the tree is executed, as opposed to when the instruction containing the tree is executed. Assignment if i->state is moved to reset_lex_and_exec_core. mysql-test/r/sp.result: Test results fixed (Bug#15217) mysql-test/t/sp.test: Add a test case for Bug#15217 sql/sp_head.cc: Move assignment of stmt_arena->state to reset_lex_and_exec_core
-
unknown authored
The problem was in redundant calls to strlen() in string functions, where we may then return after checking only the small number of characters. No test case is provided since it's a performance fix. strings/ctype-mb.c: Do not use strlen() where arbitrary horizon of at least CHARSET_INFO::mbmaxlen character is sufficient.
-
unknown authored
into moonbone.local:/work/tmp_merge-5.0-opt-mysql
-
- 21 Jun, 2006 24 commits
-
-
unknown authored
into moonbone.local:/work/tmp_merge-5.0-opt-mysql
-
unknown authored
into a193-229-222-105.elisa-laajakaista.fi:/home/jani/mysql-5.0
-
unknown authored
mysql-test/r/ctype_utf8.result: Auto merged mysql-test/t/ctype_utf8.test: Auto merged
-
unknown authored
into moonbone.local:/work/tmp_merge-5.0-opt-mysql
-
unknown authored
into moonbone.local:/work/tmp_merge-4.1-opt-mysql
-
unknown authored
This bug in Field_string::cmp resulted in a wrong comparison with keys in partial indexes over multi-byte character fields. Given field a is declared as a varchar(16) collate utf8_unicode_ci INDEX(a(4)) gives us an example of such an index. Wrong key comparisons could lead to wrong result sets if the selected query execution plan used a range scan by a partial index over a utf8 character field. This also caused wrong results in many other cases. mysql-test/t/ctype_utf8.test: Added test cases for bug #14896. mysql-test/r/ctype_utf8.result: Added test cases for bug #14896. sql/field.cc: Fixed bug #14896. This bug in Field_string::cmp resulted in a wrong comparison with keys in partial indexes over multi-byte character fields. Given field a is declared as a varchar(16) collate utf8_unicode_ci INDEX(a(4)) gives us an example of such an index. Wrong key comparisons could lead to wrong result sets if the selected query execution plan used a range scan by a partial index over a utf8 character field. This also caused wrong results in many other cases.
-
unknown authored
into mysql.com:/home/bk/fix-mysql-5.0
-
unknown authored
into a193-229-222-105.elisa-laajakaista.fi:/home/jani/mysql-5.0
-
bk://localhost:5559unknown authored
into a193-229-222-105.elisa-laajakaista.fi:/home/jani/mysql-5.0
-
unknown authored
include/my_libwrap.h: Changed includes to the header file. mysys/my_libwrap.c: Added comment and .c file now takes needed includes from the corresponding .h file. sql/mysqld.cc: Include this block from my_libwra.h now. Moved two variables out of the otherwise same block.
-
unknown authored
into may.pils.ru:/home/svoj/devel/mysql/BUG20357/mysql-5.0 mysql-test/r/myisam.result: Auto merged mysql-test/t/myisam.test: Auto merged sql/opt_sum.cc: Auto merged mysql-test/mysql-test-run.sh: Auto merged
-
unknown authored
into may.pils.ru:/home/svoj/devel/mysql/BUG20357/mysql-4.1
-
unknown authored
-
unknown authored
into a193-229-222-105.elisa-laajakaista.fi:/home/jani/mysql-5.0
-
unknown authored
into may.pils.ru:/home/svoj/devel/mysql/BUG20357/mysql-4.1 sql/opt_sum.cc: Auto merged mysql-test/r/myisam.result: SCCS merged mysql-test/t/myisam.test: SCCS merged
-
unknown authored
functions in queries Using MAX()/MIN() on table with disabled indexes (by ALTER TABLE) results in error 124 (wrong index) from storage engine. The problem was that optimizer use disabled index to optimize MAX()/MIN(). Normally it must skip disabled index and perform table scan. This patch skips disabled indexes for min/max optimization. mysql-test/r/myisam.result: Test case for BUG#20357. mysql-test/t/myisam.test: Test case for BUG#20357. sql/opt_sum.cc: Skip disabled/ignored indexes for min/max optimization.
-
unknown authored
into a193-229-222-105.elisa-laajakaista.fi:/home/jani/mysql-5.0
-
unknown authored
into mysql.com:/data0/knielsen/mysql-5.0
-
unknown authored
Backport Valgrind suppression from mysql-5.1: D 1.4 05/11/23 22:44:54+02:00 monty@mysql.com 5 4 12/0/154 P mysql-test/valgrind.supp C Remove warning that may happens becasue threads dies in different order mysql-test/valgrind.supp: Add suppression for Valgrind warning.
-
unknown authored
-
unknown authored
into mysql.com:/home/kgeorge/mysql/5.0/B18080 sql/sql_parse.cc: Auto merged
-
unknown authored
into mysql.com:/home/marty/MySQL/mysql-5.0
-
unknown authored
into poseidon.ndb.mysql.com:/home/tomas/mysql-5.0-main
-
unknown authored
mysql-test/t/insert_select.test: Auto merged mysql-test/r/insert_select.result: manual merge
-