- 07 Mar, 2007 1 commit
-
-
kostja@bodhi.local authored
fixes). The legend: on a replication slave, in case a trigger creation was filtered out because of application of replicate-do-table/ replicate-ignore-table rule, the parsed definition of a trigger was not cleaned up properly. LEX::sphead member was left around and leaked memory. Until the actual implementation of support of replicate-ignore-table rules for triggers by the patch for Bug 24478 it was never the case that "case SQLCOM_CREATE_TRIGGER" was not executed once a trigger was parsed, so the deletion of lex->sphead there worked and the memory did not leak. The fix: The real cause of the bug is that there is no 1 or 2 places where we can clean up the main LEX after parse. And the reason we can not have just one or two places where we clean up the LEX is asymmetric behaviour of MYSQLparse in case of success or error. One of the root causes of this behaviour is the code in Item::Item() constructor. There, a newly created item adds itself to THD::free_list - a single-linked list of Items used in a statement. Yuck. This code is unaware that we may have more than one statement active at a time, and always assumes that the free_list of the current statement is located in THD::free_list. One day we need to be able to explicitly allocate an item in a given Query_arena. Thus, when parsing a definition of a stored procedure, like CREATE PROCEDURE p1() BEGIN SELECT a FROM t1; SELECT b FROM t1; END; we actually need to reset THD::mem_root, THD::free_list and THD::lex to parse the nested procedure statement (SELECT *). The actual reset and restore is implemented in semantic actions attached to sp_proc_stmt grammar rule. The problem is that in case of a parsing error inside a nested statement Bison generated parser would abort immediately, without executing the restore part of the semantic action. This would leave THD in an in-the-middle-of-parsing state. This is why we couldn't have had a single place where we clean up the LEX after MYSQLparse - in case of an error we needed to do a clean up immediately, in case of success a clean up could have been delayed. This left the door open for a memory leak. One of the following possibilities were considered when working on a fix: - patch the replication logic to do the clean up. Rejected as breaks module borders, replication code should not need to know the gory details of clean up procedure after CREATE TRIGGER. - wrap MYSQLparse with a function that would do a clean up. Rejected as ideally we should fix the problem when it happens, not adjust for it outside of the problematic code. - make sure MYSQLparse cleans up after itself by invoking the clean up functionality in the appropriate places before return. Implemented in this patch. - use %destructor rule for sp_proc_stmt to restore THD - cleaner than the prevoius approach, but rejected because needs a careful analysis of the side effects, and this patch is for 5.0, and long term we need to use the next alternative anyway - make sure that sp_proc_stmt doesn't juggle with THD - this is a large work that will affect many modules. Cleanup: move main_lex and main_mem_root from Statement to its only two descendants Prepared_statement and THD. This ensures that when a Statement instance was created for purposes of statement backup, we do not involve LEX constructor/destructor, which is fairly expensive. In order to track that the transformation produces equivalent functionality please check the respective constructors and destructors of Statement, Prepared_statement and THD - these members were used only there. This cleanup is unrelated to the patch.
-
- 02 Mar, 2007 4 commits
-
-
kostja@bodhi.local authored
conflicts without proper analysis and documentation of the nature of the conflict.
-
kostja@bodhi.local authored
-
malff/marcsql@weblab.(none) authored
into weblab.(none):/home/marcsql/TREE/mysql-5.0-26093
-
malff/marcsql@weblab.(none) authored
results) Before this fix, the function BENCHMARK() would fail to evaluate expressions like "(select avg(a) from t1)" in debug builds (with an assert), or would report a time of zero in non debug builds. The root cause is that evaluation of DECIMAL_RESULT expressions was not supported in Item_func_benchmark::val_int(). This has been fixed by this change.
-
- 01 Mar, 2007 15 commits
-
-
malff/marcsql@weblab.(none) authored
-
malff/marcsql@weblab.(none) authored
into weblab.(none):/home/marcsql/TREE/mysql-5.0-rt-merge
-
into mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
-
rafal@quant.(none) authored
into quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl
-
jamppa@bk-internal.mysql.com authored
into bk-internal.mysql.com:/data0/bk/mysql-5.0-marvel
-
rafal@quant.(none) authored
-
-
-
bar@mysql.com authored
-
rafal@quant.(none) authored
into quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl
-
rafal@quant.(none) authored
into quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl
-
bar@mysql.com authored
when merging into 5.1.
-
rafal@quant.(none) authored
into quant.(none):/ext/mysql/bk/mysql-5.0-rpl-warnings
-
rafal@quant.(none) authored
-
bar@mysql.com authored
Replacing local directory.
-
- 28 Feb, 2007 9 commits
-
-
into mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
-
jani@ua141d10.elisa.omakaista.fi authored
-
bar@mysql.com authored
into mysql.com:/home/bar/mysql-5.0.b24478
-
bar@mysql.com authored
Bug N 15126 character_set_database is not replicated (LOAD DATA INFILE need it) Positions of some binlog events were changed because of additional logging of @@collation_database.
-
bar@mysql.com authored
-
bar@mysql.com authored
into mysql.com:/home/bar/mysql-5.0.b15126
-
bar@mysql.com authored
This patch fixes problem that LOAD DATA could use different character sets when loading files on master and on slave sides: - Adding replication of thd->variables.collation_database - Adding optional character set clause into LOAD DATA Note, the second way, with explicit CHARACTER SET clause should be the recommended way to load data using an alternative character set. The old way, using "SET @@character_set_database=xxx" should be gradually depricated.
-
kostja@bodhi.local authored
-
rafal@quant.(none) authored
into quant.(none):/ext/mysql/bk/mysql-5.0-bug25306
-
- 27 Feb, 2007 6 commits
-
-
rafal@quant.(none) authored
into quant.(none):/ext/mysql/bk/mysql-5.0-bug25306
-
into mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
-
into mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
-
cbell/Chuck@mysql_cab_desk. authored
SF/Triggers in SBR mode." BUG#14914 "SP: Uses of session variables in routines are not always replicated" BUG#25167 "Dupl. usage of user-variables in trigger/function is not replicated correctly" This patch corrects a minor error in the previous patch for BUG#20141. This patch corrects an errant code change to sp_head.cc. The comments for the first patch follow: User-defined variables used inside of stored functions/triggers in statements which did not update tables directly were not replicated. We also had problems with replication of user-defined variables which were used in triggers (or stored functions called from table-updating statements) more than once. This patch addresses the first issue by enabling logging of all references to user-defined variables in triggers/stored functions and not only references from table-updating statements. The second issue stemmed from the fact that for user-defined variables used from triggers or stored functions called from table-updating statements we were writing binlog events for each reference instead of only one event for the first reference. This problem is already solved for stored functions called from non-updating statements with help of "event unioning" mechanism. So the patch simply extends this mechanism to the case affected. It also fixes small problem in this mechanism which caused wrong logging of references to user-variables in cases when non-updating statement called several stored functions which used the same variable and some of these function calls were omitted from binlog as they were not updating any tables.
-
bar@mysql.com authored
into mysql.com:/home/bar/mysql-5.0.b24478
-
gluh@mysql.com/eagle.(none) authored
-
- 26 Feb, 2007 5 commits
-
-
gbichot@dl145h.mysql.com authored
to the client only after the binlog write and engine commit. No testcase for this bug, as to reproduce it, we need to "kill -9" mysqld, which we cannot do in the testsuite. But, I tested by hand.
-
cbell/Chuck@mysql_cab_desk. authored
into mysql_cab_desk.:C:/source/c++/mysql-5.0-rpl
-
gluh@mysql.com/eagle.(none) authored
into mysql.com:/home/gluh/MySQL/Merge/5.0-opt
-
bar@mysql.com authored
Problem: DROP TRIGGER was not properly handled in combination with slave filters, which made replication stop Fix: loading table name before checking slave filters when dropping a trigger.
-
knielsen@ymer.(none) authored
-