- 24 May, 2005 1 commit
-
-
unknown authored
#5860 "Multi-table UPDATE does not activate update triggers" #6812 "Triggers are not activated for INSERT ... SELECT" #8755 "Trigger is not activated by LOAD DATA". This patch also implements proper handling of triggers for special forms of insert like REPLACE or INSERT ... ON DUPLICATE KEY UPDATE. Also now we don't call after trigger in case when we have failed to inserted/update or delete row. Trigger failure should stop statement execution. I have not properly tested handling of errors which happen inside of triggers in this patch, since it is simplier to do this once we will be able to access tables from triggers. mysql-test/r/trigger.result: Added tests for triggers behavior for various non-standard forms of INSERT such as REPLACE and INSERT ... ON DUPLICATE KEY UPDATE. Also added tests for bugs #5860 "Multi-table UPDATE does not activate update triggers", #6812 "Triggers are not activated for INSERT ... SELECT" and #8755 "Trigger is not activated by LOAD DATA". mysql-test/t/trigger.test: Added tests for triggers behavior for various non-standard forms of INSERT such as REPLACE and INSERT ... ON DUPLICATE KEY UPDATE. Also added tests for bugs #5860 "Multi-table UPDATE does not activate update triggers", #6812 "Triggers are not activated for INSERT ... SELECT" and #8755 "Trigger is not activated by LOAD DATA". sql/item.cc: Since it turned out that at trigger loading time we can't say in which buffer TABLE::record[0] or record[1] old version of row will be stored we have to change our approach to binding of Item_trigger_field to Field instances. Now after trigger parsing (in Item_trigger_field::setup_table()) we only find index of proper Field in the TABLE::field array. Then before trigger is invoked we set Table_triggers_list::old_field/new_field so they point to arrays holding Field instances bound to buffers with proper row versions. And as last step in Item_trigger_field::fix_fields() we get pointer to Field from those arrays using saved field index. Item_trigger_field::setup_field()/fix_fields() were changed to implement this approach. sql/item.h: Since it turned out that at trigger loading time we can't say in which buffer TABLE::record[0] or record[1] old version of row will be stored we have to change our approach to binding of Item_trigger_field to Field instances. Now after trigger parsing (in Item_trigger_field::setup_table()) we only find index of proper Field in the TABLE::field array. Then before trigger is invoked we set Table_triggers_list::old_field/new_field so they point to arrays holding Field instances bound to buffers with proper row versions. And as last step in Item_trigger_field::fix_fields() we get pointer to Field from those arrays using saved field index. Item_trigger_field: - Added field_idx member to store index of Field object corresponding to this Item in TABLE::field array. - Added triggers member to be able to access to parent Table_trigger_list object from fix_fields() method. - setup_field() no longer needs to know for which type of event this trigger is, since it does not make decision Field for which buffer (record[0] or record[1] is appropriate for this Item_trigger_field) sql/mysql_priv.h: Added fill_record_n_invoke_before_triggers() methods. They are simple wrappers around fill_record() which invoke proper before trigger right after filling record with values. sql/sql_base.cc: Added fill_record_n_invoke_before_triggers() methods. They are simple wrappers around fill_record() which invoke proper before trigger right after filling record with values. sql/sql_delete.cc: mysql_delete(): Now we stop statement execution if one of triggers failed, we also don't execute after delete trigger if we failed to delete row from the table (We also pass information about which buffer contains old version of row to process_triggers()). multi_delete::send_data()/do_deletes(): Now we also invoke triggers in case of multi-delete. sql/sql_insert.cc: mysql_insert(): Moved invocation of before triggers to fill_record_n_invoke_before_triggers() method. After triggers are now executed as part of write_record(). (as nice side effect now we also stop statement execution if one of triggers fail). write_record(): Invoke after insert trigger after performing insert. Also invoke proper triggers if insert is converted to update or conflicting row is deleted. Cleaned up error handling a bit - no sense to report error via handler::print_error if it was not generated by handler method and was reported before. Also now we will execute after trigger only if we really have written row to the table. select_insert::send_data()/store_values(): We should also execute INSERT triggers for INSERT ... SELECT statement. sql/sql_load.cc: read_fixed_length()/read_sep_field(): We should execute INSERT triggers when processing LOAD DATA statement. Small cleanup in auto-increment related code. Also moved check for thd->killed which is used to abort LOAD DATA in case of problems in 'traditional' mode to better place.. sql/sql_trigger.cc: Since it turned out that at trigger loading time we can't say in which buffer TABLE::record[0] or record[1] old version of row will be stored we have to change our approach to binding of Item_trigger_field to Field instances. Now after trigger parsing (in Item_trigger_field::setup_table()) we only find index of proper Field in the TABLE::field array. Then before trigger is invoked we set Table_triggers_list::old_field/new_field so they point to arrays holding Field instances bound to buffers with proper row versions. And as last step in Item_trigger_field::fix_fields() we get pointer to Field from those arrays using saved field index. Table_triggers_list methods were changed to implement this approach (see also comments for sql_trigger.h). sql/sql_trigger.h: Since it turned out that at trigger loading time we can't say in which buffer TABLE::record[0] or record[1] old version of row will be stored we have to change our approach to binding of Item_trigger_field to Field instances. Now after trigger parsing (in Item_trigger_field::setup_table()) we only find index of proper Field in the TABLE::field array. Then before trigger is invoked we set Table_triggers_list::old_field/new_field so they point to arrays holding Field instances bound to buffers with proper row versions. And as last step in Item_trigger_field::fix_fields() we get pointer to Field from those arrays using saved field index. Changed Table_triggers_list to implement this new approach: - Added record1_field member to store array of Field objects bound to TABLE::record[1] buffer (instead of existing old_field member) - Added new_field member and changed meaning of old_field member. During trigger execution they should point to arrays of Field objects bound to buffers holding new and old versions of row respectively. - Added 'table' member to be able to get access to TABLE instance (for which this trigger list object was created) from process_triggers() method. - Now process_triggers() method sets old_field and new_field members properly before executing triggers body (basing on new old_row_is_record1 parameter value). - Renamed prepare_old_row_accessors_method() to prepare_record1_accessors() Also added has_before_update_triggers() method which allows to check whenever any before update triggers exist for table. sql/sql_update.cc: mysql_update(): Now we invoke before triggers in fill_record_n_invoke_before_triggers() method. Also now we abort statement execution when one of triggers fail. safe_update_on_fly(): When we are trying to understand if we can update first table in multi update on the fly we should take into account that BEFORE UPDATE trigger can change field values. multi_update::send_data()/do_updates() We should execute proper triggers when doing multi-update (in both cases when we do it on the fly and using temporary tables).
-
- 12 May, 2005 5 commits
-
-
unknown authored
-
unknown authored
mysys/default.c: if we check for error, we should set it.
-
unknown authored
select, gis & gis-tree tests fails at the moment, but I will push this CS because it was tested before and I'm absolutely sure it's right. mysql-test/r/strict.result: fix (Bugs #8295 and #8296: varchar and varbinary conversion) mysql-test/r/type_blob.result: fix (Bugs #8295 and #8296: varchar and varbinary conversion) mysql-test/t/strict.test: fix (Bugs #8295 and #8296: varchar and varbinary conversion) sql/sql_table.cc: fix (Bugs #8295 and #8296: varchar and varbinary conversion): 1. fon't convert datatypes if it's strict mode; 2. better warning.
-
unknown authored
into mysql.com:/media/sda1/mysql/mysql-5.0-9478 sql/sql_prepare.cc: Auto merged sql/sql_select.cc: Auto merged
-
unknown authored
(crash on attempt to re-execute a statement with an open cursor) + post-review fixes. include/errmsg.h: Add a special error message when we attempt to mysql_stmt_fetch from a statement which has no result set. libmysql/errmsg.c: Error message text for CR_NO_RESULT_SET libmysql/libmysql.c: Move the code which frees result sets on client and closes the cursor on server, resets long data state on client and server. This makes one function out of two (mysql_stmt_reset and mysql_stmt_free_result), thus aggregating all related reset work in one place. sql-common/client.c: Fix one place where we flushed the pending result set of a statement, but didn't set unbuffered_fetch_cancelled flag. sql/share/errmsg.txt: Fix format of ER_UNKNOWN_STMT_HANDLER error message (needs to be fixed separately in 4.1). Add two new error messages for the case when we fetch from when there is no cursor and for the case when we attempt to execute a statement while there is a cursor. sql/sql_prepare.cc: Return error when we fetch while there is no open cursor and when we call execute while there is a pending cursor. Fix mysql_stmt_reset to close the open cursor if there is any. sql/sql_select.cc: free_items and free_root moved to Cursor::close(). sql/sql_select.h: A comment added. tests/mysql_client_test.c: A test case for Bug#9478, test the case of mysql_stmt_reset called for client-side cached result set and for the case with open cursor. All strcpy replaced with strmov (review request).
-
- 10 May, 2005 14 commits
-
-
unknown authored
sql/sql_base.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_prepare.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_view.cc: Auto merged sql/table.cc: Auto merged sql/table.h: Auto merged
-
unknown authored
Fixed bug #8528. Representation for single-table views was made similar to representation for multi-table views. view.test: Added test case for bug #8528. view.result: Added test case for bug #8528. Fixed other test cases. mysql-test/r/view.result: Added test case for bug #8528. Fixed other test cases. mysql-test/t/view.test: Added test case for bug #8528. sql/sql_base.cc: Fixed bug #8528. Representation for single-table views was made similar to representation for multi-table views. sql/sql_delete.cc: Fixed bug #8528. Representation for single-table views was made similar to representation for multi-table views. sql/sql_insert.cc: Fixed bug #8528. Representation for single-table views was made similar to representation for multi-table views. sql/sql_parse.cc: Fixed bug #8528. Representation for single-table views was made similar to representation for multi-table views. sql/sql_prepare.cc: Fixed bug #8528. Representation for single-table views was made similar to representation for multi-table views. sql/sql_select.cc: Fixed bug #8528. Representation for single-table views was made similar to representation for multi-table views. sql/sql_update.cc: Fixed bug #8528. Representation for single-table views was made similar to representation for multi-table views. sql/sql_view.cc: Fixed bug #8528. Representation for single-table views was made similar to representation for multi-table views. sql/table.cc: Fixed bug #8528. Representation for single-table views was made similar to representation for multi-table views. sql/table.h: Fixed bug #8528. Representation for single-table views was made similar to representation for multi-table views.
-
unknown authored
into quadita2.mysql.com:/nfstmp1/guilhem/mysql-5.0-4ita
-
unknown authored
into mysql.com:/home/gluh/MySQL/Devel/mysql-5.0 sql/sql_show.cc: Auto merged
-
unknown authored
additional fix after review
-
unknown authored
comment change (post-review of "replication of triggers"). Btw date_formats segfaults with --ps-protocol - not caused by my changes though; I'll file a bug report. sql/sql_trigger.h: changing comment
-
unknown authored
into quadita2.mysql.com:/nfstmp1/guilhem/mysql-5.0-4ita
-
unknown authored
into ibmlab.site:/home/my/bk/mysql-5.0
-
unknown authored
BitKeeper/etc/logging_ok: auto-union include/my_global.h: Auto merged ndb/src/kernel/blocks/dbtc/Dbtc.hpp: Auto merged ndb/src/kernel/blocks/dbtc/DbtcMain.cpp: Auto merged ndb/src/mgmapi/mgmapi.cpp: Auto merged ndb/src/ndbapi/NdbIndexOperation.cpp: Auto merged ndb/src/ndbapi/ndberror.c: Auto merged ndb/test/ndbapi/testNodeRestart.cpp: Auto merged ndb/test/run-test/Makefile.am: Auto merged sql/item.h: Auto merged sql/item_func.h: Auto merged sql/item_sum.h: Auto merged sql/sql_udf.h: Auto merged ndb/src/ndbapi/ClusterMgr.cpp: SCCS merged
-
unknown authored
into quadita2.mysql.com:/nfstmp1/guilhem/mysql-5.0-4ita
-
unknown authored
into neptunus.(none):/home/msvensson/mysql/mysql-5.0 mysql-test/t/range.test: Auto merged sql/item_strfunc.h: Auto merged
-
unknown authored
into neptunus.(none):/home/msvensson/mysql/mysql-4.1
-
unknown authored
sql/item_strfunc.h: Remove the testcode
-
unknown authored
another column gets rotten value. mysql-test/r/type_newdecimal.result: Added a test case for Bug#10232: update with subquery, precision math, another column gets rotten value. mysql-test/t/type_newdecimal.test: Added a test case for Bug#10232: update with subquery, precision math, another column gets rotten value.
-
- 09 May, 2005 20 commits
-
-
unknown authored
into mysql.com:/home/psergey/mysql-4.1-bug10095 mysql-test/t/range.test: Auto merged
-
unknown authored
-
unknown authored
into mysql.com:/home/hf/work/mysql-5.0.clean BitKeeper/etc/logging_ok: auto-union strings/ctype-sjis.c: Auto merged
-
unknown authored
into mysql.com:/home/hf/work/mysql-4.1.ssj
-
unknown authored
strings/ctype-sjis.c: pos should be decreased BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
-
unknown authored
into neptunus.(none):/home/msvensson/mysql/mysql-4.1
-
unknown authored
BUILD/check-cpu: Pentium M
-
unknown authored
include/my_global.h: Auto merged mysql-test/r/ctype_utf8.result: Auto merged mysql-test/r/select.result: Auto merged mysql-test/t/select.test: Auto merged ndb/src/kernel/blocks/dbtc/Dbtc.hpp: Auto merged ndb/src/mgmapi/mgmapi.cpp: Auto merged ndb/src/ndbapi/NdbIndexOperation.cpp: Auto merged ndb/src/ndbapi/ndberror.c: Auto merged ndb/test/ndbapi/testNodeRestart.cpp: Auto merged sql/item.h: Auto merged sql/item_func.h: Auto merged sql/item_strfunc.cc: Auto merged sql/item_sum.h: Auto merged sql/sql_udf.h: Auto merged sql/sql_yacc.yy: Auto merged configure.in: Ignore 4.1 version change ndb/src/kernel/blocks/dbtc/DbtcMain.cpp: merge 4.1 ndb/src/ndbapi/ClusterMgr.cpp: merge ndb/test/run-test/Makefile.am: merge sql/mysql_priv.h: merge from 4.1 sql/table.cc: Merge from 4.1
-
unknown authored
include/my_global.h: Auto merged ndb/src/cw/cpcd/Process.cpp: Auto merged ndb/src/kernel/error/ErrorReporter.cpp: Auto merged sql/item.h: Auto merged sql/item_func.h: Auto merged sql/item_sum.h: Auto merged sql/sql_udf.h: Auto merged
-
unknown authored
into mysql.com:/home/jonas/src/mysql-5.0
-
unknown authored
into mysql.com:/home/gluh/MySQL/Bugs/5.0.9404
-
unknown authored
into mysql.com:/home/gluh/MySQL/Bugs/5.0.9404
-
unknown authored
-
unknown authored
into mysql.com:/home/gluh/MySQL/Bugs/5.0.9404
-
unknown authored
-
unknown authored
heap/hp_hash.c: Fix for bug #9404: information_schema: Weird error messages with SELECT SUM() ... GROUP BY queries use length in symbols instead of length in bytes to calculate record length and key length
-
unknown authored
Bumped up version number to indicate 4.1.12 was branched off configure.in: Bumped up version number to indicate 4.1.12 was branched off
-
unknown authored
with multi-byte strings, length() instead of numchars() where used in a mistake.
-
unknown authored
into mysql.com:/home/jonas/src/mysql-4.1
-
unknown authored
into mysql.com:/home/jonas/src/mysql-5.0
-