1. 07 Mar, 2007 1 commit
    • unknown's avatar
      A fix for Bug#26750 "valgrind leak in sp_head" (and post-review · b4558c5d
      unknown 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.
      
      
      sql/log_event.cc:
        THD::main_lex is private and should not be used.
      sql/mysqld.cc:
        Move MYSQLerror to sql_yacc.yy as it depends on LEX headers now.
      sql/sql_class.cc:
        Cleanup: move main_lex and main_mem_root to THD and Prepared_statement
      sql/sql_class.h:
        Cleanup: move main_lex and main_mem_root to THD and Prepared_statement
      sql/sql_lex.cc:
        Implement st_lex::restore_lex()
      sql/sql_lex.h:
        Declare st_lex::restore_lex().
      sql/sql_parse.cc:
        Consolidate the calls to unit.cleanup() and deletion of lex->sphead
        in mysql_parse (COM_QUERY handler)
      sql/sql_prepare.cc:
        No need to delete lex->sphead to restore memory roots now in case of a 
        parse error - this is done automatically inside MYSQLparse
      sql/sql_trigger.cc:
        This code could lead to double deletion apparently, as in case
        of an error lex.sphead was never reset.
      sql/sql_yacc.yy:
        Trap all returns from the parser to ensure that MySQL-specific cleanup
        is invoked: we need to restore the global state of THD and LEX in 
        case of a parsing error. In case of a parsing success this happens as 
        part of normal grammar reduction process.
      b4558c5d
  2. 02 Mar, 2007 4 commits
    • unknown's avatar
      Freeze the number of conflicts. We should not introduce any more · ad66b7c8
      unknown authored
      conflicts without proper analysis and documentation of the nature of
      the conflict.
      
      ad66b7c8
    • unknown's avatar
      Rename a macro to better reflect the action taken. · 6867fded
      unknown authored
      
      sql/sql_yacc.yy:
        Rename: YYERROR_UNLESS -> YYABORT_UNLESS
        yyerror doesn't have to abort of the parser, whereas this macro
        does explicitly call YYABORT.
      6867fded
    • unknown's avatar
      Merge malff@bk-internal.mysql.com:/home/bk/mysql-5.0-runtime · e011b102
      unknown authored
      into  weblab.(none):/home/marcsql/TREE/mysql-5.0-26093
      
      
      sql/item_func.cc:
        Auto merged
      e011b102
    • unknown's avatar
      Bug#26093 (SELECT BENCHMARK() for SELECT statements does not produce valid · 8c791007
      unknown 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.
      
      
      mysql-test/r/func_misc.result:
        Added support for DECIMAL_RESULT in Item_func_benchmark::val_int()
      mysql-test/t/func_misc.test:
        Added support for DECIMAL_RESULT in Item_func_benchmark::val_int()
      sql/item_func.cc:
        Added support for DECIMAL_RESULT in Item_func_benchmark::val_int()
      8c791007
  3. 01 Mar, 2007 15 commits
    • unknown's avatar
      Manual merge of 5.0 into 5.0-runtime · 01be573f
      unknown authored
      
      mysql-test/r/subselect.result:
        Manual merge
      mysql-test/t/subselect.test:
        Manual merge
      01be573f
    • unknown's avatar
      Merge weblab.(none):/home/marcsql/TREE/mysql-5.0-base · c4c5100f
      unknown authored
      into  weblab.(none):/home/marcsql/TREE/mysql-5.0-rt-merge
      
      
      mysql-test/mysql-test-run.pl:
        Auto merged
      mysql-test/t/disabled.def:
        Auto merged
      server-tools/instance-manager/instance_options.cc:
        Auto merged
      server-tools/instance-manager/mysqlmanager.cc:
        Auto merged
      sql/item_cmpfunc.cc:
        Auto merged
      sql/item_cmpfunc.h:
        Auto merged
      sql/item_subselect.cc:
        Auto merged
      sql/item_subselect.h:
        Auto merged
      sql/sp_head.cc:
        Auto merged
      sql/sql_base.cc:
        Auto merged
      sql/sql_class.cc:
        Auto merged
      sql/sql_lex.cc:
        Auto merged
      sql/sql_lex.h:
        Auto merged
      sql/sql_parse.cc:
        Auto merged
      sql/sql_yacc.yy:
        Auto merged
      c4c5100f
    • unknown's avatar
      Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.0 · 1993ca9a
      unknown authored
      into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
      
      
      sql/field.cc:
        Auto merged
      sql/log.cc:
        Auto merged
      sql/slave.cc:
        Auto merged
      sql/sql_repl.cc:
        Auto merged
      1993ca9a
    • unknown's avatar
      Merge quant.(none):/ext/mysql/bk/mysql-5.0-rpl-warnings · 9f44726a
      unknown authored
      into  quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl
      
      9f44726a
    • unknown's avatar
      Merge bk-internal.mysql.com:/data0/bk/mysql-5.0 · b50a29e9
      unknown authored
      into  bk-internal.mysql.com:/data0/bk/mysql-5.0-marvel
      
      b50a29e9
    • unknown's avatar
      Removing two more compilation warnings. · 08cae43b
      unknown authored
      
      sql/slave.cc:
        Guard declaration of variable to avoid "unused variable" warning.
      sql/sql_repl.cc:
        Guard declaration of variable to avoid "unused variable" warning.
      08cae43b
    • unknown's avatar
      Fixed compiler warnings. · dd1966cc
      unknown authored
      
      client/mysqltest.c:
        Fixed a compiler warning.
      support-files/compiler_warnings.supp:
        Suppressed compiler warnings on Win 64.
      dd1966cc
    • unknown's avatar
      Disabled compiler warnings. · 93122bd6
      unknown authored
      
      sql/ha_archive.cc:
        Fixed a warning from unused computed value. This block is
        only used in debug mode and changes nothing.
      support-files/compiler_warnings.supp:
        Disabled a warning from BDB.
      93122bd6
    • unknown's avatar
      Fix for wrong replace command. · 044fcfab
      unknown authored
      044fcfab
    • unknown's avatar
      Merge quant.(none):/ext/mysql/bk/mysql-5.0-bug25463 · 96627d48
      unknown authored
      into  quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl
      
      96627d48
    • unknown's avatar
      Merge quant.(none):/ext/mysql/bk/mysql-5.0-rpl-warnings · b77fd4c1
      unknown authored
      into  quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl
      
      b77fd4c1
    • unknown's avatar
      Renaming recenly added test case, because of name conflict · 16012fe8
      unknown authored
      when merging into 5.1.
      
      
      mysql-test/t/rpl_loaddata_charset.test:
        Rename: mysql-test/t/rpl_loaddata2.test -> mysql-test/t/rpl_loaddata_charset.test
      mysql-test/r/rpl_loaddata_charset.result:
        Rename: mysql-test/r/rpl_loaddata2.result -> mysql-test/r/rpl_loaddata_charset.result
      16012fe8
    • unknown's avatar
      Merge quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl · 1a2d2d5f
      unknown authored
      into  quant.(none):/ext/mysql/bk/mysql-5.0-rpl-warnings
      
      
      sql/mysql_priv.h:
        Auto merged
      sql/sql_insert.cc:
        Auto merged
      sql/sql_yacc.yy:
        Auto merged
      1a2d2d5f
    • unknown's avatar
      Fixes of compilation warnings and errors. · 223e78d1
      unknown authored
      
      sql/mysql_priv.h:
        Removing compiler warning "NULL used in arithmetic"
      sql/mysqld.cc:
        First argument to WARN_DEPRECATED is supposed to be a pointer (to THD structure)
      sql/sql_insert.cc:
        Removing compiler warning "unused variable". Apparently query is not used when compiling libmysqld.
      sql/sql_yacc.yy:
        Removing compiler error "Macro already defined"
      223e78d1
    • unknown's avatar
      Additional fix for bug N 15126 · c9264a1b
      unknown authored
      Replacing local directory.
      
      
      mysql-test/r/mysqlbinlog.result:
        Additional fix for bug N 15126
      mysql-test/t/mysqlbinlog.test:
        Additional fix for bug N 15126
      c9264a1b
  4. 28 Feb, 2007 9 commits
    • unknown's avatar
      Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.0-rpl · 2c615cc4
      unknown authored
      into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
      
      
      sql/mysql_priv.h:
        Auto merged
      sql/sql_insert.cc:
        Auto merged
      sql/sql_yacc.yy:
        Auto merged
      2c615cc4
    • unknown's avatar
      Fixed compiler warnings. · 0e90ed8e
      unknown authored
      
      client/mysql_upgrade.c:
        Fixed problem with mysql_upgrade being dependent
        on local my.cnf files and problem with memory not being freed.
      client/mysqltest.c:
        Changed type to avoid warning.
      cmd-line-utils/readline/xmalloc.c:
        Fix to avoid warning.
      include/my_dbug.h:
        To disable parts from code in non-debug more.
      sql/field.cc:
        Fixed warning.
      sql/ha_archive.cc:
        Fixed warning.
      sql/ha_berkeley.cc:
        Added casts to avoid warnings.
      sql/ha_ndbcluster.cc:
        Fixed warnings.
      sql/log.cc:
        Added casts to avoid warnings.
      sql/slave.cc:
        Avoid warning.
      sql/sql_repl.cc:
        Avoid warning.
      support-files/compiler_warnings.supp:
        Added disabled warnings to compiler_warnings.supp file.
        These are backported mainly from 5.1 suppress file, but there
        are some additional new ones.
      0e90ed8e
    • unknown's avatar
      Merge abarkov@bk-internal.mysql.com:/home/bk/mysql-5.0-rpl · bbff12fa
      unknown authored
      into  mysql.com:/home/bar/mysql-5.0.b24478
      
      bbff12fa
    • unknown's avatar
      Additional test changes for · f0fea788
      unknown 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.
      
      f0fea788
    • unknown's avatar
      After merge fix · f36a82c6
      unknown authored
      f36a82c6
    • unknown's avatar
      Merge abarkov@bk-internal.mysql.com:/home/bk/mysql-5.0-rpl · a0dfc7ac
      unknown authored
      into  mysql.com:/home/bar/mysql-5.0.b15126
      
      
      sql/log_event.cc:
        Auto merged
      sql/log_event.h:
        Auto merged
      sql/sql_class.cc:
        Auto merged
      sql/sql_class.h:
        Auto merged
      sql/sql_load.cc:
        Auto merged
      sql/sql_yacc.yy:
        Auto merged
      mysql-test/r/mysqlbinlog.result:
        After merge fix
      mysql-test/t/mysqlbinlog.test:
        After merge fix
      a0dfc7ac
    • unknown's avatar
      Bug#15126 character_set_database is not replicated (LOAD DATA INFILE need it) · b8931c53
      unknown 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.
      
      
      mysql-test/r/mysqlbinlog.result:
        Adding test case
      mysql-test/t/mysqlbinlog.test:
        Adding test case
      sql/log_event.cc:
        Adding logging of thd->variables.collation_database
      sql/log_event.h:
        Adding declarations
      sql/sql_class.cc:
        Exchange character set is null by default
      sql/sql_class.h:
        Adding character set into sql_exchange
      sql/sql_load.cc:
        - Using exchange character set (if it was specified in LOAD DATA syntax)
        - Using thd->variables.collation_database by default
      sql/sql_yacc.yy:
        Adding optional character set clause into LOAD DATA syntax
      mysql-test/r/rpl_loaddata2.result:
        New BitKeeper file ``mysql-test/r/rpl_loaddata2.result''
      mysql-test/std_data/loaddata6.dat:
        New BitKeeper file ``mysql-test/std_data/loaddata6.dat''
      mysql-test/t/rpl_loaddata2.test:
        New BitKeeper file ``mysql-test/t/rpl_loaddata2.test''
      b8931c53
    • unknown's avatar
    • unknown's avatar
      Merge quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl · 41e926f0
      unknown authored
      into  quant.(none):/ext/mysql/bk/mysql-5.0-bug25306
      
      41e926f0
  5. 27 Feb, 2007 6 commits
    • unknown's avatar
      Merge quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl · 860da7a3
      unknown authored
      into  quant.(none):/ext/mysql/bk/mysql-5.0-bug25306
      
      
      sql/slave.cc:
        Auto merged
      sql/sql_repl.cc:
        Auto merged
      860da7a3
    • unknown's avatar
      Merge mysql.com:/nfsdisk1/lars/MERGE/mysql-4.1-merge · 8c5c0095
      unknown authored
      into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
      
      
      sql/sql_load.cc:
        Manual merge
      8c5c0095
    • unknown's avatar
      Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.0-rpl · 19c33150
      unknown authored
      into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
      
      19c33150
    • unknown's avatar
      BUG#20141 "User-defined variables are not replicated properly for · 0c395743
      unknown 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.
      
      
      sql/sp_head.cc:
        BUG#20141 "User-defined variables are not replicated properly for 
                  SF/Triggers in SBR mode."
        
        This patch corrects a minor error in the previous patch for BUG#20141. The code:
        
        q= ::query_id; 
        
        was an errant line of code that was not intended to be in the patch. Instead, the
        correct line of code is:
        
        q= global_query_id;
      0c395743
    • unknown's avatar
      Merge abarkov@bk-internal.mysql.com:/home/bk/mysql-5.0-rpl · 6625a885
      unknown authored
      into  mysql.com:/home/bar/mysql-5.0.b24478
      
      
      sql/sql_parse.cc:
        Auto merged
      sql/sql_trigger.cc:
        Auto merged
      sql/sql_trigger.h:
        Auto merged
      6625a885
    • unknown's avatar
      removed unused variable · 1e70a722
      unknown authored
      1e70a722
  6. 26 Feb, 2007 5 commits
    • unknown's avatar
      Fix for BUG#26050 "LOAD DATA INFILE breaks ACID"; the ok must be sent · 0be532a4
      unknown 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.
      
      
      sql/sql_load.cc:
        D in ACID means that once the client got the ok from the server, the data
        is durable on disk. Implies that the ok must be sent after the binlog write
        and after the engine commit, not before.
      0be532a4
    • unknown's avatar
      Merge cbell@bk-internal.mysql.com:/home/bk/mysql-5.0-rpl · 404ae87a
      unknown authored
      into  mysql_cab_desk.:C:/source/c++/mysql-5.0-rpl
      
      
      sql/item_func.cc:
        Auto merged
      sql/log.cc:
        Auto merged
      sql/sp_head.cc:
        Auto merged
      sql/sql_class.cc:
        Auto merged
      sql/sql_class.h:
        Auto merged
      404ae87a
    • unknown's avatar
      Merge mysql.com:/home/gluh/MySQL/Merge/5.0 · 9f0865f0
      unknown authored
      into  mysql.com:/home/gluh/MySQL/Merge/5.0-opt
      
      
      sql/item.cc:
        Auto merged
      sql/item.h:
        Auto merged
      sql/mysql_priv.h:
        Auto merged
      sql/sql_base.cc:
        Auto merged
      sql/sql_insert.cc:
        Auto merged
      sql/sql_lex.cc:
        Auto merged
      sql/sql_lex.h:
        Auto merged
      sql/sql_prepare.cc:
        Auto merged
      sql/sql_select.cc:
        Auto merged
      sql/sql_union.cc:
        Auto merged
      sql/sql_update.cc:
        Auto merged
      sql/sql_yacc.yy:
        Auto merged
      9f0865f0
    • unknown's avatar
      Bug#24478 DROP TRIGGER is not caught by replicate-*-table filters · f534fc5e
      unknown 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.
      
      
      mysql-test/r/rpl_replicate_do.result:
        Adding test case
      mysql-test/t/rpl_replicate_do.test:
        Adding test case
      sql/sql_parse.cc:
        Loading table name when dropping a trigger
        before checking slave filtering rules.
      sql/sql_trigger.cc:
        Making add_table_for_trigger() public
      sql/sql_trigger.h:
        Making add_table_for_trigger() public
      f534fc5e
    • unknown's avatar
      Compiler warning suppression fix: Add missing file to 'make dist'. · 6c707f8a
      unknown authored
      
      support-files/Makefile.am:
        Add missing file to 'make dist'.
      6c707f8a