An error occurred fetching the project authors.
  1. 12 Aug, 2008 1 commit
    • Marc Alff's avatar
      Bug#38296 (low memory crash with many conditions in a query) · 7ea370d2
      Marc Alff authored
      This fix is for 5.1 only : back porting the 6.0 patch manually
      
      The parser code in sql/sql_yacc.yy needs to be more robust to out of
      memory conditions, so that when parsing a query fails due to OOM,
      the thread gracefully returns an error.
      
      Before this fix, a new/alloc returning NULL could:
      - cause a crash, if dereferencing the NULL pointer,
      - produce a corrupted parsed tree, containing NULL nodes,
      - alter the semantic of a query, by silently dropping token values or nodes
      
      With this fix:
      - C++ constructors are *not* executed with a NULL "this" pointer
      when operator new fails.
      This is achieved by declaring "operator new" with a "throw ()" clause,
      so that a failed new gracefully returns NULL on OOM conditions.
      
      - calls to new/alloc are tested for a NULL result,
      
      - The thread diagnostic area is set to an error status when OOM occurs.
      This ensures that a request failing in the server properly returns an
      ER_OUT_OF_RESOURCES error to the client.
      
      - OOM conditions cause the parser to stop immediately (MYSQL_YYABORT).
      This prevents causing further crashes when using a partially built parsed
      tree in further rules in the parser.
      
      No test scripts are provided, since automating OOM failures is not
      instrumented in the server.
      Tested under the debugger, to verify that an error in alloc_root cause the
      thread to returns gracefully all the way to the client application, with
      an ER_OUT_OF_RESOURCES error.
      7ea370d2
  2. 11 Aug, 2008 2 commits
    • Mattias Jonsson's avatar
      Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that · f50c4207
      Mattias Jonsson authored
      partition is corrupt
      
      The main problem was that ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR
      PARTITION took another code path (over mysql_alter_table instead of
      mysql_admin_table) which differs in two ways:
      1) alter table opens the tables in a different way than admin tables do
         resulting in returning with error before it tried the command
      2) alter table does not start to send any diagnostic rows to the client
         which the lower admin functions continue to use -> resulting in
         assertion crash
      
      The fix:
      Remapped ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR PARTITION to use
      the same code path as ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE t.
      Adding check in mysql_admin_table to setup the partition list for
      which partitions that should be used.
      
      
      Partitioned tables will still not work with
      REPAIR TABLE/PARTITION USE_FRM, since that requires moving partitions
      to tables, REPAIR TABLE t USE_FRM, and check that the data still
      fulfills the partitioning function and then move the table back to
      being a partition.
      
      NOTE: I have removed the following functions from the handler
      interface:
      analyze_partitions, check_partitions, optimize_partitions,
      repair_partitions
      Since they are not longer needed.
      THIS ALTERS THE STORAGE ENGINE API
      
      mysql-test/r/handler_innodb.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a note result row.
      mysql-test/r/innodb.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a note result row.
      mysql-test/r/innodb_mysql.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a note result row.
      mysql-test/r/partition.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      mysql-test/r/trigger-trans.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a note result row.
      mysql-test/suite/ndb/r/ndb_partition_key.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      mysql-test/suite/ndb/t/ndb_partition_key.test:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      mysql-test/suite/parts/inc/partition_alter4.inc:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      mysql-test/suite/parts/r/partition_alter4_innodb.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      mysql-test/suite/parts/r/partition_alter4_myisam.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      mysql-test/suite/rpl/r/rpl_failed_optimize.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a note result row.
      mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a note result row.
      mysql-test/t/partition.test:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      sql/ha_partition.cc:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a function for returning admin commands result rows
        Updated handle_opt_partitions to handle admin commands result rows,
        and some error filtering (as mysql_admin_table do).
        
        Removed the functions analyze/check/optimize/repair_partitions
        since they have no longer any use.
      sql/ha_partition.h:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Removed analyze/check/optimize/repair_partitions since they
        are no longer are needed.
      sql/handler.cc:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Removed analyze/check/optimize/repair_partitions since they
        are no longer are needed.
      sql/handler.h:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Removed analyze/check/optimize/repair_partitions since they
        are no longer are needed.
      sql/mysql_priv.h:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added set_part_state for reuse of code in mysql_admin_table.
        (Originally fond in sql/sql_partition.cc:prep_alter_part_table)
      sql/protocol.cc:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added one assert and a debug print.
      sql/sql_partition.cc:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Refactored code for setting up partition state, set_part_state,
        now used in both prep_alter_part_table and
        sql_table.cc:mysql_admin_table.
        Removed code for handling ANALYZE/CHECK/OPTIMIZE/REPAIR partitions,
        since it is now handled by mysql_admin_table.
      sql/sql_table.cc:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added functionality in mysql_admin_table to work with partitioned
        tables.
        Fixed a possible assertion bug for HA_ADMIN_TRY_ALTER
        (If analyze would output a row, it fails since the row was already
        started).
      sql/sql_yacc.yy:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Remapped ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR PARTITION
        to use the same code path as ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE
        instead of taking the ALTER TABLE path.
        Added reset of alter_info for ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE
        since it is now used by partitioned tables.
      storage/myisam/mi_check.c:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Changed warning message from "Found X parts  Should be: Y parts"
        to "Found X key parts. Should be Y", since it could be confusing
        with partitioned tables.
      f50c4207
    • Marc Alff's avatar
      Bug#38296 (low memory crash with many conditions in a query) · e04dfffb
      Marc Alff authored
      This fix is for 5.0 only : back porting the 6.0 patch manually
      
      The parser code in sql/sql_yacc.yy needs to be more robust to out of
      memory conditions, so that when parsing a query fails due to OOM,
      the thread gracefully returns an error.
      
      Before this fix, a new/alloc returning NULL could:
      - cause a crash, if dereferencing the NULL pointer,
      - produce a corrupted parsed tree, containing NULL nodes,
      - alter the semantic of a query, by silently dropping token values or nodes
      
      With this fix:
      - C++ constructors are *not* executed with a NULL "this" pointer
      when operator new fails.
      This is achieved by declaring "operator new" with a "throw ()" clause,
      so that a failed new gracefully returns NULL on OOM conditions.
      
      - calls to new/alloc are tested for a NULL result,
      
      - The thread diagnostic area is set to an error status when OOM occurs.
      This ensures that a request failing in the server properly returns an
      ER_OUT_OF_RESOURCES error to the client.
      
      - OOM conditions cause the parser to stop immediately (MYSQL_YYABORT).
      This prevents causing further crashes when using a partially built parsed
      tree in further rules in the parser.
      
      No test scripts are provided, since automating OOM failures is not
      instrumented in the server.
      Tested under the debugger, to verify that an error in alloc_root cause the
      thread to returns gracefully all the way to the client application, with
      an ER_OUT_OF_RESOURCES error.
      e04dfffb
  3. 14 Jul, 2008 1 commit
    • Marc Alff's avatar
      Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on · e73e7bb9
      Marc Alff authored
      build)
      
      The crash was caused by freeing the internal parser stack during the parser
      execution.
      This occured only for complex stored procedures, after reallocating the parser
      stack using my_yyoverflow(), with the following C call stack:
      - MYSQLparse()
      - any rule calling sp_head::restore_lex()
      - lex_end()
      - x_free(lex->yacc_yyss), xfree(lex->yacc_yyvs)
      
      The root cause is the implementation of stored procedures, which breaks the
      assumption from 4.1 that there is only one LEX structure per parser call.
      
      The solution is to separate the LEX structure into:
      - attributes that represent a statement (the current LEX structure),
      - attributes that relate to the syntax parser itself (Yacc_state),
      so that parsing multiple statements in stored programs can create multiple
      LEX structures while not changing the unique Yacc_state.
      
      Now, Yacc_state and the existing Lex_input_stream are aggregated into
      Parser_state, a structure that represent the complete state of the (Lexical +
      Syntax) parser.
      
      
      mysql-test/r/parser_stack.result:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      mysql-test/t/parser_stack.test:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      sql/sp.cc:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      sql/sp_head.cc:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      sql/sql_class.cc:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      sql/sql_class.h:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      sql/sql_lex.cc:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      sql/sql_lex.h:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      sql/sql_parse.cc:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      sql/sql_prepare.cc:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      sql/sql_trigger.cc:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      sql/sql_view.cc:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      sql/sql_yacc.yy:
        Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
        build)
      e73e7bb9
  4. 07 Jul, 2008 1 commit
    • Marc Alff's avatar
      Bug#26030 (Parsing fails for stored routine w/multi-statement execution · c7724872
      Marc Alff authored
      enabled)
      
      Before this fix, the lexer and parser would treat the ';' character as a
      different token (either ';' or END_OF_INPUT), based on convoluted logic,
      which failed in simple cases where a stored procedure is implemented as a
      single statement, and used in a multi query.
      
      With this fix:
      - the character ';' is always parsed as a ';' token in the lexer,
      - parsing multi queries is implemented in the parser, in the 'query:' rules,
      - the value of thd->client_capabilities, which is the capabilities
        negotiated between the client and the server during bootstrap,
        is immutable and not arbitrarily modified during parsing (which was the
        root cause of the bug)
      
      c7724872
  5. 13 May, 2008 1 commit
    • unknown's avatar
      Bug #32858: Erro: "Incorrect usage of UNION and INTO" does not take · 2cc7999b
      unknown authored
      subselects into account
        
      It is forbidden to use the SELECT INTO construction inside UNION statements
      unless on the last SELECT of the union. The parser records whether it 
      has seen INTO or not when parsing a UNION statement. But if the INTO was
      legally used in an outer query, an error is thrown if UNION is seen in a
      subquery. Fixed in 5.0 by remembering the nesting level of INTO tokens and 
      mitigate the error unless it collides with the UNION.
      
      
      mysql-test/r/union.result:
        Bug#32858: Test result
      mysql-test/t/union.test:
        Bug#32858: Test case
      sql/sql_class.cc:
        Bug#32858: Initializing new member
      sql/sql_class.h:
        Bug#32858: Added property nest_level to select_result class.
      sql/sql_yacc.yy:
        Bug#32858: The fix.
      2cc7999b
  6. 09 May, 2008 1 commit
    • unknown's avatar
      Bug#35997 Event scheduler seems to let the server crash, if it is embedded. · 3cf9e6eb
      unknown authored
      The event scheduler was not designed to work in embedded mode. This
      patch disables and excludes the event scheduler when the server is
      compiled for embedded build.
      
      
      libmysqld/Makefile.am:
        Reduce the amount of event code in an embedded build.
      mysql-test/t/events_trans.test:
        Disable test if run in embedded mode.
      sql/Makefile.am:
        Introduce definition HAVE_EVENT_SCHEDULER and one new source file.
      sql/event_data_objects.cc:
        Refactor Event_parse_data to new file.
      sql/event_data_objects.h:
        Refactor Event_parse_data to new file.
        Move global definitions to new file.
      sql/event_queue.cc:
        Move all parsed items to Event_parse_data for easier modularization.
      sql/events.cc:
        Move all parsed items to Event_parse_data for easier modularization.
      sql/mysqld.cc:
        Disable the event schedular subsystem if the server is compiled in
        embedded mode.
      sql/set_var.cc:
        Disable the event schedular subsystem if the server is compiled in
        embedded mode.
      sql/set_var.h:
        Disable the event schedular subsystem if the server is compiled in
        embedded mode.
      sql/sql_db.cc:
        Disable the event schedular subsystem if the server is compiled in
        embedded mode.
      sql/sql_parse.cc:
        Disable the event schedular subsystem if the server is compiled in
        embedded mode.
      sql/sql_show.cc:
        Disable the event schedular subsystem if the server is compiled in
        embedded mode.
      sql/sql_test.cc:
        Disable the event schedular subsystem if the server is compiled in
        embedded mode.
      sql/sql_yacc.yy:
        Only include event-code needed for parsing to reduce impact on embedded
        build.
        Move all constants to Event_parse_data class.
      mysql-test/r/events_embedded.result:
        Add test case to make sure the 'event_scheduler' can't be activated
        in embedded mode.
      mysql-test/r/is_embedded.require:
        Add test case to make sure the 'event_scheduler' can't be activated
        in embedded mode.
      mysql-test/t/events_embedded.test:
        Add test case to make sure the 'event_scheduler' can't be activated
        in embedded mode.
      sql/event_parse_data.cc:
        New file. Extracted Event_parse data into a new file.
      sql/event_parse_data.h:
        New file. Extracted Event_parse data into a new file.
      3cf9e6eb
  7. 16 Apr, 2008 1 commit
    • unknown's avatar
      Fix create.test in --ps-protocol broken by the previous push. · 95909188
      unknown authored
      sql/sql_table.cc:
        Fix create.test in --ps-protocol broken by the previous push,
        that added prepared statement validation of CREATE TABLE LIKE:
        move assignment of src_table->required_type to the parser.
      sql/sql_yacc.yy:
        Fix create.test in --ps-protocol broken by the previous push,
        that added prepared statement validation of CREATE TABLE LIKE:
        move assignment of src_table->required_type to the parser.
      95909188
  8. 01 Apr, 2008 1 commit
    • unknown's avatar
      Bug#15776: 32-bit signed int used for length of blob · 9efddcf6
      unknown authored
      Based on contributed patch from Martin Friebe, CLA from 2007-02-24.
      
      The parser lacked support for field sizes after signed long,
      when it should extend to 2**32-1.
      
      Now, we correct that limitation, and also make the error handling
      consistent for casts.
      ---
      Fix minor complaints of Marc Alff, for patch against B-g#15776.
      ---
      Merge zippy.cornsilk.net:/home/cmiller/work/mysql/bug15776/my50-bug15776
      into  zippy.cornsilk.net:/home/cmiller/work/mysql/bug15776/my51-bug15776
      ---
      Merge zippy.cornsilk.net:/home/cmiller/work/mysql/bug15776/my51-bug15776
      into  zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.1-build
      ---
      testing
      
      
      mysql-test/r/type_blob.result:
        Verify that blobs may be created with the size that is already
        documented.
        
        Additionally, test the limits of several other types.
      mysql-test/t/type_blob.test:
        Verify that blobs may be created with the size that is already
        documented.
        
        Additionally, test the limits of several other types.
        ---
        Drop table in case we start from a bad state.
      sql/field.cc:
        atoi() insufficient to gauge the length of some fields.  Change
        it to strtoul().
      sql/item_create.cc:
        atoi() insufficient to gauge the length of some fields.  Change
        it to strtoul().
        
        If a casted length is too long, raise an error.
      sql/share/errmsg.txt:
        Change ER_TOO_BIG_FIELDLENGTH so that it can accept sizes larger
        than 2**15 -- instead, 2**32.
        ---
        Manual merge.
      sql/sql_yacc.yy:
        Make lengths take, in addition to NUM, LONG_NUM, ULONGLONG_NUM,
        and DECIMAL_NUM.
        ---
        yacc/bison is left-recursive, so FIXME statement is wrong.
        ---
        Manual merge and reformatting.
      sql/unireg.h:
        Define new constant.
      9efddcf6
  9. 26 Mar, 2008 1 commit
  10. 14 Mar, 2008 1 commit
    • unknown's avatar
      BUG#28248 - mysqldump results with MERGE ... UNION=() cannot be executed · 196b616a
      unknown authored
      When there are no underlying tables specified for a merge table,
      SHOW CREATE TABLE outputs a statement that cannot be executed. The
      same is true for mysqldump (it generates dumps that cannot be
      executed).
      
      This happens because SQL parser does not accept empty UNION() clause.
      
      This patch changes the following:
      - it is now possible to execute CREATE/ALTER statement with
        empty UNION() clause.
      - the same as above, but still worth noting: it is now possible to
        remove underlying tables mapping using ALTER TABLE ... UNION=().
      - SHOW CREATE TABLE does not output UNION() clause if there are
        no underlying tables specified for a merge table. This makes
        mysqldump slightly smaller.
      
      
      mysql-test/r/merge.result:
        A test case for BUG#28248.
      mysql-test/t/merge.test:
        A test case for BUG#28248.
      sql/ha_myisammrg.cc:
        Do not output UNION clause in SHOW CREATE TABLE, when there are
        no underlying tables defined.
      sql/sql_yacc.yy:
        Make underlying table list for MERGE engine optional.
        
        As for MERGE engine empty underlying tables list is valid, it should
        be valid for the parser as well.
        
        This change is mostly needed to restore dumps made by earlier MySQL
        versions. Also with this fix it is possible to remove underlying
        tables mapping by using ALTER TABLE ... UNION=().
      196b616a
  11. 07 Mar, 2008 1 commit
    • unknown's avatar
      BUG#31168: @@hostname does not replicate · 875ad6d8
      unknown authored
      Problem: in mixed and statement mode, a query that refers to a
      system variable will use the slave's value when replayed on
      slave. So if the value of a system variable is inserted into a
      table, the slave will differ from the master.
      Fix: mark statements that refer to a system variable as "unsafe",
      meaning they will be replicated by row in mixed mode and produce a warning
      in statement mode. There are some exceptions: some variables are actually
      replicated. Those should *not* be marked as unsafe.
      BUG#34732: mysqlbinlog does not print default values for auto_increment variables
      Problem: mysqlbinlog does not print default values for some variables,
      including auto_increment_increment and others. So if a client executing
      the output of mysqlbinlog has different default values, replication will
      be wrong.
      Fix: Always print default values for all variables that are replicated.
      I need to fix the two bugs at the same time, because the test cases would
      fail if I only fixed one of them.
      
      
      include/m_ctype.h:
        Added definition of ILLEGAL_CHARSET_INFO_NUMBER. We just need a symbol
        for a number that will never be used by any charset. ~0U should be safe
        since charset numbers are sequential, starting from 0.
      mysql-test/include/commit.inc:
        Upated test to avoid making statements unsafe.
      mysql-test/r/commit_1innodb.result:
        Updated test needs updated result file.
      mysql-test/r/mysqlbinlog.result:
        Updated result file.
      mysql-test/r/mysqlbinlog2.result:
        Updated result file.
      mysql-test/r/user_var-binlog.result:
        Updated result file.
      mysql-test/suite/binlog/r/binlog_base64_flag.result:
        Updated result file.
      mysql-test/suite/binlog/r/binlog_stm_ctype_ucs.result:
        Updated result file.
      mysql-test/suite/binlog/r/binlog_unsafe.result:
        Modified test file needs modified result file.
      mysql-test/suite/binlog/t/binlog_base64_flag.test:
        Need to filter out pseudo_thread_id from result since it is
        nondeterministic.
      mysql-test/suite/binlog/t/binlog_unsafe.test:
        Add tests that using variables is unsafe. The 'CREATE VIEW' tests didn't
        make sense, so I removed them. SHOW WARNINGS is not necessary either,
        because we get warnings for each statement in the result file.
      mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result:
        Updated result file.
      mysql-test/suite/rpl/r/rpl_skip_error.result:
        Updated result file.
      mysql-test/suite/rpl/t/rpl_skip_error.test:
        The test used @@server_id, which is not safe to replicate, so it would
        have given a warning. The way it used @@server_id was hackish (issue a
        query on master that removes rows only on master), so I replaced it by a
        more robust way to do the same thing (connect to slave and insert the
        rows only there).
        Also clarified what the test case does.
      mysql-test/t/mysqlbinlog2.test:
        Use --short-form instead of manually filtering out nondeterministic stuff
        from mysqlbinlog (because we added the nondeterministic @@pseudo_thread_id
        to the output).
      sql/item_func.cc:
        Added method of Item_func_get_system_var that indicates whether the given
        system variable will be written to the binlog or not.
      sql/item_func.h:
        Added method of Item_func_get_system_var that indicates whether the given
        system variable will be written to the binlog or not.
      sql/log_event.cc:
         - auto_increment_offset was not written to the binlog if
        auto_increment_increment=1
         - mysqlbinlog did not output default values for some variables
        (BUG#34732). In st_print_event_info, we remember for each variable whether
        it has been printed or not. This is achieved in different ways for
        different variables:
            - For auto_increment_*, lc_time_names, charset_database_number,
              we set the default values in st_print_event_info to something
              illegal, so that it will look like they have changed the first time
              they are seen.
            - For charset, sql_mode, pseudo_thread_id, we add a flag to
              st_print_event_info which indicates whether the variable has been
              printed.
            - Since pseudo_thread_id is now printed more often, and its value is
              not guaranteed to be constant across different runs of the same
              test script, I replaced it by a constant if --short-form is used.
         - Moved st_print_event_info constructor from log_event.h to log_event.cc,
        since it now depends on ILLEGAL_CHARSET_NUMBER, which is defined in
        m_ctype.h, which is better to include from a .cc file than from a header
        file.
      sql/log_event.h:
        Added fields to st_print_event_info that indicate whether some of the
        variables have been written or not. Since the initialization of
        charset_database_number now depends on ILLEGAL_CHARSET_INFO_NUMBER, which
        is defined in a header file, which we'd better not include from this
        header file -- I moved the constructor from here to log_event.cc.
      sql/set_var.cc:
        System variables now have a flag binlog_status, which indicates if they
        are written to the binlog. If nothing is specified, all variables are
        marked as not written to the binlog (NOT_IN_BINLOG) when created. In this
        file, the variables that are written to the binlog are marked with
        SESSION_VARIABLE_IN_BINLOG.
      sql/set_var.h:
        Added flag binlog_status to class sys_var. Added a getter and a
        constructor parameter that sets it.
        Since I had to change sys_var_thd_enum constructor anyways, I simplified
        it to use default values of arguments instead of three copies of the
        constructor.
      sql/sql_yacc.yy:
        Mark statements that refer to a system variable as "unsafe",
        meaning they will be replicated by row in mixed mode. Added comment to
        explain strange piece of code just above.
      mysql-test/include/diff_tables.inc:
        New auxiliary test file that tests whether two tables (possibly one on
        master and one on slave) differ.
      mysql-test/suite/rpl/r/rpl_variables.result:
        New test case needs new result file.
      mysql-test/suite/rpl/r/rpl_variables_stm.result:
        New test file needs new result file.
      mysql-test/suite/rpl/t/rpl_variables.test:
        Test that INSERT of @@variables is replicated correctly (by switching to
        row-based mode).
      mysql-test/suite/rpl/t/rpl_variables_stm.test:
        Test that replication of @@variables which are replicated explicitly works
        as expected in statement mode (without giving warnings).
      875ad6d8
  12. 29 Feb, 2008 1 commit
    • unknown's avatar
      Fix for Bug#31947: Declare with a reserved word succeeded. · de534f2b
      unknown authored
      READ_ONLY token was accidentally placed into wrong place
      ('ident' rule). The proper place is in the 'keyword_sp' rule.
      
      The manual should be re-generated after this patch, because
      the manual depends on the 'keyword_sp' rule.
      
      
      sql/sql_yacc.yy:
        Move READ_ONLY token to the 'keyword_sp' rule.
      de534f2b
  13. 28 Feb, 2008 1 commit
    • unknown's avatar
      Bug#33851 Passing UNSIGNED param to EXECUTE returns ERROR 1210 · 1164e2bc
      unknown authored
      The problem is that passing anything other than a integer to a limit
      clause in a prepared statement would fail. This limitation was introduced
      to avoid replication problems (e.g: replicating the statement with a
      string argument would cause a parse failure in the slave).
      
      The solution is to convert arguments to the limit clause to a integer
      value and use this converted value when persisting the query to the log.
      
      
      mysql-test/r/limit.result:
        Update test case result.
      mysql-test/r/ps.result:
        Add test case result for Bug#33851
      mysql-test/r/rpl_user_variables.result:
        Test case result for replication of prepared statement with
        limit clause.
      mysql-test/t/limit.test:
        Test parameters to limit clause.
      mysql-test/t/ps.test:
        Add test case for Bug#33851
      mysql-test/t/rpl_user_variables.test:
        Test replication of a parameter which value is converted.
      sql/item.cc:
        Convert value to integer if it's a parameter to a limit clause.
      sql/item.h:
        Flag signal that item is a parameter to a limit clause.
      sql/item_func.cc:
        Const member functions, object is not mutated.
      sql/sql_class.h:
        Const member functions, object is not mutated.
      sql/sql_yacc.yy:
        Flag that item is a parameter to a limit clause.
      1164e2bc
  14. 25 Feb, 2008 2 commits
    • unknown's avatar
      Post-merge fixes for bug #33834. · 561827e2
      unknown authored
      561827e2
    • unknown's avatar
      Fix for bug #33834: FRAC_SECOND: Applicability not clear in · 4f3eab58
      unknown authored
                          documentation
      
      While the manual mentions FRAC_SECOND only for the TIMESTAMPADD()
      function, it was also possible to use FRAC_SECOND with DATE_ADD(),
      DATE_SUB() and +/- INTERVAL.
      
      Fixed the parser to match the manual, i.e. using FRAC_SECOND for 
      anything other than TIMESTAMPADD()/TIMESTAMPDIFF() now produces a 
      syntax error.
      
      Additionally, the patch allows MICROSECOND to be used in TIMESTAMPADD/
      TIMESTAMPDIFF and marks FRAC_SECOND as deprecated.
      
      
      mysql-test/r/func_time.result:
        Added a test case for bug #33834.
      mysql-test/t/func_time.test:
        Added a test case for bug #33834.
      sql/sql_yacc.yy:
        Reject FRAC_SECOND for anything other than TIMESTAMPADD() or
        TIMESTAMPDIFF().
        Allow MICROSECOND to be used with TIMESTAMPADD()/TIMESTAMPDIFF().
        Warn about FRAC_SECOND being a deprecated unit.
      4f3eab58
  15. 22 Feb, 2008 1 commit
    • unknown's avatar
      Fix for Bug#30217: Views: changes in metadata behaviour · a3e83048
      unknown authored
      between 5.0 and 5.1.
        
      The problem was that in the patch for Bug#11986 it was decided
      to store original query in UTF8 encoding for the INFORMATION_SCHEMA.
      This approach however turned out to be quite difficult to implement
      properly. The main problem is to preserve the same IS-output after
      dump/restore.
        
      So, the fix is to rollback to the previous functionality, but also
      to fix it to support multi-character-set-queries properly. The idea
      is to generate INFORMATION_SCHEMA-query from the item-tree after
      parsing view declaration. The IS-query should:
        - be completely in UTF8;
        - not contain character set introducers.
        
      For more information, see WL4052.
      
      
      mysql-test/include/ddl_i18n.check_views.inc:
        Add a test case for Bug#30217.
      mysql-test/r/ddl_i18n_koi8r.result:
        Update result file.
      mysql-test/r/ddl_i18n_utf8.result:
        Update result file.
      mysql-test/r/information_schema.result:
        Update result file.
      mysql-test/r/information_schema_db.result:
        Update result file.
      mysql-test/r/mysqldump.result:
        Update result file.
      mysql-test/r/show_check.result:
        Update result file.
      mysql-test/t/ddl_i18n_koi8r.test:
        Add a test case for Bug#30217.
      mysql-test/t/ddl_i18n_utf8.test:
        Add a test case for Bug#30217.
      mysql-test/t/mysqldump.test:
        Add a test case for Bug#30217.
      sql/ha_ndbcluster.cc:
        Add a parameter to print().
      sql/item.cc:
        1. Add a parameter to print().
        2. Item_string::print():
              - Do not append character set introducer to the text literal
                if we're building a query for INFORMATION_SCHEMA;
              - Convert text literal to UTF8 if we're building a query
                for INFORMATION_SCHEMA.
      sql/item.h:
        Add a parameter to print().
      sql/item_cmpfunc.cc:
        Add a parameter to print().
      sql/item_cmpfunc.h:
        Add a parameter to print().
      sql/item_func.cc:
        Add a parameter to print().
      sql/item_func.h:
        Add a parameter to print().
      sql/item_geofunc.h:
        Add a parameter to print().
      sql/item_row.cc:
        Add a parameter to print().
      sql/item_row.h:
        Add a parameter to print().
      sql/item_strfunc.cc:
        Add a parameter to print().
      sql/item_strfunc.h:
        Add a parameter to print().
      sql/item_subselect.cc:
        Add a parameter to print().
      sql/item_subselect.h:
        Add a parameter to print().
      sql/item_sum.cc:
        Add a parameter to print().
      sql/item_sum.h:
        Add a parameter to print().
      sql/item_timefunc.cc:
        Add a parameter to print().
      sql/item_timefunc.h:
        Add a parameter to print().
      sql/mysql_priv.h:
        Add a parameter to print().
      sql/sp_head.cc:
        Add a parameter to print().
      sql/sql_lex.cc:
        Add a parameter to print().
      sql/sql_lex.h:
        Add a parameter to print().
      sql/sql_parse.cc:
        Add a parameter to print().
      sql/sql_select.cc:
        Add a parameter to print().
      sql/sql_show.cc:
        Add a parameter to print().
      sql/sql_test.cc:
        Add a parameter to print().
      sql/sql_view.cc:
        Build INFORMATION_SCHEMA query from Item-tree.
      sql/sql_yacc.yy:
        Build INFORMATION_SCHEMA query from Item-tree.
      sql/table.h:
        Add a parameter to print().
      a3e83048
  16. 20 Feb, 2008 1 commit
    • unknown's avatar
      Bug#34587 Creating a view inside a stored procedure leads to a server crash · 7114fbb9
      unknown authored
      The problem is that when a stored procedure is being parsed for
      the first execution, the body is copied to a temporary buffer
      which is disregarded sometime after the statement is parsed.
      And during this parsing phase, the rule for CREATE VIEW was
      holding a reference to the string being parsed for use during
      the execution of the CREATE VIEW statement, leading to invalid
      memory access later.
      
      The solution is to allocate and copy the SELECT of a CREATE
      VIEW statement using the thread memory root, which is set to
      the permanent arena of the stored procedure. 
      
      
      mysql-test/r/view.result:
        Add test case result for Bug#34587
      mysql-test/t/view.test:
        Add test case for Bug#34587
      sql/sql_lex.h:
        Remove start and end position variables. The SELECT of a
        CREATE VIEW is now allocated at parse time.
      sql/sql_view.cc:
        Remove assertion that is not true when the statement is
        being re-executed. Use string that was trimmed of leading
        and trailing whitespace at parse time.
      sql/sql_yacc.yy:
        Allocate the SELECT of a CREATE VIEW using the current thread
        memory root and remove any leading and trailing whitespace.
      7114fbb9
  17. 12 Feb, 2008 1 commit
    • unknown's avatar
      Fix for Bug#32538: View definition picks up character set, · c1d0dd94
      unknown authored
      but not collation.
      
      The problem here was that text literals in a view were always
      dumped with character set introducer. That lead to loosing
      collation information.
      
      The fix is to dump character set introducer only if it was
      in the original query. That is now possible because there 
      is no problem any more of loss of character set of string
      literals in views -- after WL#4052 the view is dumped 
      in the original character set.
      
      
      mysql-test/r/case.result:
        Update result file.
      mysql-test/r/compress.result:
        Update result file.
      mysql-test/r/ctype_collate.result:
        Update result file.
      mysql-test/r/date_formats.result:
        Update result file.
      mysql-test/r/ddl_i18n_koi8r.result:
        Update result file.
      mysql-test/r/ddl_i18n_utf8.result:
        Update result file.
      mysql-test/r/fulltext.result:
        Update result file.
      mysql-test/r/func_crypt.result:
        Update result file.
      mysql-test/r/func_encrypt.result:
        Update result file.
      mysql-test/r/func_if.result:
        Update result file.
      mysql-test/r/func_in.result:
        Update result file.
      mysql-test/r/func_like.result:
        Update result file.
      mysql-test/r/func_regexp.result:
        Update result file.
      mysql-test/r/func_set.result:
        Update result file.
      mysql-test/r/func_str.result:
        Update result file.
      mysql-test/r/func_time.result:
        Update result file.
      mysql-test/r/gis.result:
        Update result file.
      mysql-test/r/group_min_max.result:
        Update result file.
      mysql-test/r/mysqldump.result:
        Update result file.
      mysql-test/r/negation_elimination.result:
        Update result file.
      mysql-test/r/null.result:
        Update result file.
      mysql-test/r/select.result:
        Update result file.
      mysql-test/r/show_check.result:
        Update result file.
      mysql-test/r/sp-code.result:
        Update result file.
      mysql-test/r/ssl.result:
        Update result file.
      mysql-test/r/ssl_compress.result:
        Update result file.
      mysql-test/r/subselect.result:
        Update result file.
      mysql-test/r/temp_table.result:
        Update result file.
      mysql-test/r/type_blob.result:
        Update result file.
      mysql-test/r/view.result:
        Update result file.
      mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
        Update result file.
      mysql-test/suite/rpl/r/rpl_get_lock.result:
        Update result file.
      mysql-test/suite/rpl/r/rpl_master_pos_wait.result:
        Update result file.
      mysql-test/t/view.test:
        Add a test case for Bug#32538.
      sql/item.cc:
        Do not dump character set introducer if it was not specified
        explicitly in the original query.
      sql/item.h:
        Add 'cs_specified' property to Item_string.
      sql/sql_yacc.yy:
        Set Item_string::cs_specified property to TRUE
        when character set introducer is explicitly specified.
      c1d0dd94
  18. 01 Feb, 2008 1 commit
    • unknown's avatar
      Fix for bug #25162: Backing up DB from 5.1 adds 'USING BTREE' to KEYs · 4d794c23
      unknown authored
                          on table creates
      
      The problem was in incompatible syntax for key definition in CREATE
      TABLE.
      
      5.0 supports only the following syntax for key definition (see "CREATE
      TABLE syntax" in the manual):
      
      {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
      
      While 5.1 parser supports the above syntax, the "preferred" syntax was
      changed to:
      
      {INDEX|KEY} [index_name] (index_col_name,...) [index_type]
      
      The above syntax is used in 5.1 for the SHOW CREATE TABLE output, which
      led to dumps generated by 5.1 being incompatible with 5.0.
      
      Fixed by changing the parser in 5.0 to support both 5.0 and 5.1 syntax
      for key definition.
      
      
      mysql-test/r/create.result:
        Added a test case for bug #25162.
      mysql-test/t/create.test:
        Added a test case for bug #25162.
      sql/sql_yacc.yy:
        Changed the parser to support both 5.0 and 5.1 syntax for index type
        specification in CREATE TABLE.
      4d794c23
  19. 23 Jan, 2008 2 commits
    • unknown's avatar
      Manual merge · e63a0501
      unknown authored
      e63a0501
    • unknown's avatar
      Bug#33618 (Crash in sp_rcontext) · e6a077e3
      unknown authored
      Bug 33983 (Stored Procedures: wrong end <label> syntax is accepted)
      
      The server used to crash when REPEAT or another control instruction
      was used in conjunction with labels and a LEAVE instruction.
      
      The crash was caused by a missing "pop" of handlers or cursors in the
      code representing the stored program. When executing the code in a loop,
      this missing "pop" would result in a stack overflow, corrupting memory.
      
      Code generation has been fixed to produce the missing h_pop/c_pop
      instructions.
      
      Also, the logic checking that labels at the beginning and the end of a
      statement are matched was incorrect, causing Bug 33983.
      End labels, when used, must match the label used at the beginning of a block.
      
      
      mysql-test/r/sp-code.result:
        Bug#33618 (Crash in sp_rcontext)
      mysql-test/r/sp-error.result:
        Bug 33983 (Stored Procedures: wrong end <label> syntax is accepted)
      mysql-test/r/sp.result:
        Bug#33618 (Crash in sp_rcontext)
      mysql-test/t/sp-code.test:
        Bug#33618 (Crash in sp_rcontext)
      mysql-test/t/sp-error.test:
        Bug 33983 (Stored Procedures: wrong end <label> syntax is accepted)
      mysql-test/t/sp.test:
        Bug#33618 (Crash in sp_rcontext)
      sql/sp_head.cc:
        Bug#33618 (Crash in sp_rcontext)
      sql/sp_head.h:
        Bug#33618 (Crash in sp_rcontext)
      sql/sp_rcontext.cc:
        Bug#33618 (Crash in sp_rcontext)
      sql/sp_rcontext.h:
        Bug#33618 (Crash in sp_rcontext)
      sql/sql_yacc.yy:
        Bug#33618 (Crash in sp_rcontext)
      e6a077e3
  20. 19 Dec, 2007 1 commit
    • unknown's avatar
      Bug#28317 Left Outer Join with {oj outer-join} · 660e91b1
      unknown authored
      Parser rejects ODBC's escape sequences for outer joins other
      than left outer join, yet the escape sequence BNF specifies
      that this syntax can be used for left, right, and full outer
      join syntax.
      
      The problem is that although the MySQL Connector/ODBC advertises
      "Outer Join Escape Sequence" capabilities, the parsing is done
      in the server and historically it only supported this syntax
      for left outer joins and applications such as Crystal Reports
      11 tries to use this syntax for inner joins.
      
      The chosen solution is to reorganize a couple of parser rules
      to ignore any kind of SQL escape sequence. Ignoring the escape
      sequences is harmless because the various SQL join clauses
      are supported by the server.
      
      
      mysql-test/r/parser.result:
        Add test case result for Bug#28317
      mysql-test/t/parser.test:
        Add test case for Bug#28317
      sql/sql_yacc.yy:
        Reorganize rules in order to ignore SQL Escape Sequences
      660e91b1
  21. 14 Dec, 2007 1 commit
    • unknown's avatar
      Fixed bug #27848. · 3f6073ae
      unknown authored
      In a union without braces, the order by at the end is applied to the 
      overall union. It therefore should not interfere with the individual
      select parts of the union.
      
      Fixed by changing our parser rules appropriately.
      
      
      mysql-test/r/union.result:
        Added a test case for bug #27848.
      mysql-test/t/union.test:
        Added a test case for bug #27848.
      3f6073ae
  22. 13 Dec, 2007 1 commit
    • unknown's avatar
      Bug #32858: Erro: "Incorrect usage of UNION and INTO" does not take · 93e3057b
      unknown authored
      subselects into account
      
      It is forbidden to use the SELECT INTO construction inside UNION statements
      unless on the last SELECT of the union. The parser records whether it 
      has seen INTO or not when parsing a UNION statement. But if the INTO was
      legally used in an outer query, an error is thrown if UNION is seen in a
      subquery. Fixed in 5.0 by remembering the nesting level of INTO tokens and 
      mitigate the error unless it collides with the UNION.
      
      
      mysql-test/r/union.result:
        Bug#32858: Test result
      mysql-test/t/union.test:
        Bug#32858: Test case
      sql/sql_class.cc:
        Bug#32858: Initializing new member
      sql/sql_class.h:
        Bug#32858: Added property nest_level to select_result class.
      sql/sql_yacc.yy:
        Bug#32858: The fix.
      93e3057b
  23. 03 Dec, 2007 1 commit
    • unknown's avatar
      Bug#30234: Unexpected behavior using DELETE with AS and USING · b4a146a6
      unknown authored
      Anti-patch. This patch undoes the previously pushed patch. It is 
      null-merged in versions 5.1 and above since there the original 
      patch is still desired.
      
      
      mysql-test/r/delete.result:
        Bug#30234: Anti-patch
      mysql-test/t/delete.test:
        Bug#30234: Anti-patch
      sql/sql_yacc.yy:
        Bug#30234: Anti-patch
      b4a146a6
  24. 30 Nov, 2007 1 commit
    • unknown's avatar
      Bug#22312 Syntax error in expression with INTERVAL() · cdc382e7
      unknown authored
      Parser rejects valid INTERVAL() expressions when associated with
      arithmetic operators. The problem is the way in which the expression
      and interval grammar rules were organized caused shift/reduce conflicts.
      
      The solution is to tweak the interval rules to avoid shift/reduce
      conflicts by removing the broken interval_expr rule and explicitly
      specify it's content where necessary.
      
      Original fix by Davi Arnaut, revised and improved rules by Marc Alff
      
      
      mysql-test/r/parser.result:
        Add test case result for Bug#22312
      mysql-test/t/parser.test:
        Add test case for Bug#22312
      sql/sql_yacc.yy:
        Resolve shift/reduce conflicts by reorganizing the interval
        expression rules.
      cdc382e7
  25. 26 Nov, 2007 1 commit
    • unknown's avatar
      Bug #32036: EXISTS within a WHERE clause with a UNION · f3f9855d
      unknown authored
        crashes MySQL 5.122
      There was a difference in how UNIONs are handled
      on top level and when in sub-query.
      Because the rules for sub-queries were syntactically
      allowing cases that are not currently supported by
      the server we had crashes (this bug) or wrong results
      (bug 32051).
      Fixed by making the syntax rules for UNIONs match the 
      ones at top level.
      
      These rules however do not support nesting UNIONs, e.g.
      (SELECT a FROM t1 UNION ALL SELECT b FROM t2) 
       UNION
      (SELECT c FROM t3 UNION ALL SELECT d FROM t4)
      Supports for statements with nested UNIONs will be
      added in a future version.
      
      
      mysql-test/r/subselect.result:
        Bug #32036: test case
      mysql-test/t/subselect.test:
        Bug #32036: test case
      sql/sql_yacc.yy:
        Bug #32036: Make the syntax rules for UNIONs in subqueries the same
        as for top level UNIONs.
      f3f9855d
  26. 21 Nov, 2007 1 commit
    • unknown's avatar
      Fix for bug #30495: optimize table t1,t2,t3 extended errors · 18851d9e
      unknown authored
      Problem: we have CHECK TABLE options allowed (by accident?) for
      ANALYZE/OPTIMIZE TABLE.
      
      Fix: disable them.
      
      Note: it might require additional fixes in 5.1/6.0
      
      
      mysql-test/r/analyze.result:
        Fix for bug #30495: optimize table t1,t2,t3 extended errors
          - test result.
      mysql-test/t/analyze.test:
        Fix for bug #30495: optimize table t1,t2,t3 extended errors
          - test case.
      sql/sql_yacc.yy:
        Fix for bug #30495: optimize table t1,t2,t3 extended errors
          - opt_mi_check_type (CHECK TABLE options) removed from analyze: and optimize:
      18851d9e
  27. 19 Nov, 2007 1 commit
    • unknown's avatar
      Bug #31153 calling stored procedure crashes server if available memory is low · bb681dbc
      unknown authored
      When the server was out of memory it crashed because of invalid memory access.
      
      This patch adds detection for failed memory allocations and make the server
      output a proper error message.
      
      
      sql/mysqld.cc:
        Don't try to push_warning from within push_warning. It will cause a recursion
        until the stack is consumed.
        
        If my_net_init fails (for example: because of OOM) the temporary vio object 
        might have been attached to the thd object already. This will cause a double
        free on the vio object when the thd object is deleted later on and the server
        will crash.
      sql/sp_head.cc:
        Added check for out-of-memory on a 'new' operation.
        Refactored reset_lex method to return a error state code instead of void.
        Initialize the mem-root with init_sql_alloc to get a basic error handler for
        memory allocation problems. This alone won't prevent the server from crashing,
        NULL pointers have to be accounted for as well.
      sql/sp_head.h:
        Use the throw() clause in operator new, to indicate to the compiler that
        memory allocation can fail and return NULL, so that the compiler should
        generate code to check for NULL before invoking C++ constructors, to be
        crash safe.
      sql/sql_base.cc:
        Use init_sql_alloc to get basic out-of-memory error handling.
      sql/sql_lex.h:
        Use the throw() clause in operator new, to indicate to the compiler that
        memory allocation can fail and return NULL, so that the compiler should
        generate code to check for NULL before invoking C++ constructors, to be
        crash safe.
      sql/sql_prepare.cc:
        Use init_sql_alloc to get basic out-of-memory error handling.
      sql/sql_yacc.yy:
        Check for memory allocation failures where it matters.
      bb681dbc
  28. 05 Nov, 2007 1 commit
  29. 02 Nov, 2007 1 commit
    • unknown's avatar
      Fix several merge problems. There are many changes in 5.1 from 5.0 · b01c89ed
      unknown authored
      that affect profiling.
      
      
      mysql-test/r/information_schema.result:
        Merge fixed.  This result moved to a new file.
      sql/sql_parse.cc:
        Include profiling in statistics.
        
        Add hook for SHOW_PROFILE in execution.
      sql/sql_profile.cc:
        Move/add the FEATURE_DISABLED warning to the I_S filling func.
        
        Fix merge, where a new member was added to ST_FIELD_INFO.
        
        orig_sql_command method was removed from Lex structure.
      sql/sql_show.cc:
        Fix merge problem.
      sql/sql_yacc.yy:
        orig_sql_command member removed from Lex structure in 5.1 .
      b01c89ed
  30. 31 Oct, 2007 1 commit
    • unknown's avatar
      BUG#28086 (SBR of USER() becomes corrupted on slave): · cc0e5465
      unknown authored
      Marking statements containing USER() or CURRENT_USER() as unsafe, causing
      them to switch to using row-based logging in MIXED mode and generate a
      warning in STATEMENT mode.
      
      
      mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result:
        Result change.
      mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test:
        Adding test to check that USER() and CURRENT_USER() cause a switch
        to row-based logging.
      sql/sql_yacc.yy:
        Setting statements containing USER() or CURRENT_USER() to be unsafe.
      cc0e5465
  31. 30 Oct, 2007 2 commits
    • unknown's avatar
      Bug#30904 SET PASSWORD statement is non-transactional · bf18f6d4
      unknown authored
      The SET PASSWORD statement is non-transactional (no explicit transaction
      boundaries) in nature and hence is forbidden inside stored functions and
      triggers, but it weren't being effectively forbidden.
      
      The implemented fix is to issue a implicit commit with every SET PASSWORD
      statement, effectively prohibiting these statements in stored functions
      and triggers. 
      
      
      mysql-test/r/sp-error.result:
        Add test case result for Bug#30904
      mysql-test/t/sp-error.test:
        Add test case for Bug#30904
      sql/sql_lex.h:
        Add variable to set that a statement with SET PASSWORD causes a implicit
        commit.
      sql/sql_parse.cc:
        End active transaction in SET PASSWORD.
      sql/sql_yacc.yy:
        Set the correct flag on SET PASSWORD if inside a SP, thus effectively
        prohibiting SET PASSWORD statements in stored functions and triggers.
      bf18f6d4
    • unknown's avatar
      Use an inline getter method (thd->is_error()) to query if there is an error · 24370012
      unknown authored
      in THD.
      In future the error may be stored elsewhere (not in net.report_error) and 
      it's important to start using an opaque getter to simplify merges.
      
      
      sql/filesort.cc:
        net.report_error -> is_error()
      sql/ha_ndbcluster_binlog.cc:
        net.report_error -> is_error()
      sql/item_func.cc:
        net.report_error -> is_error()
      sql/item_subselect.cc:
        net.report_error -> is_error()
      sql/set_var.cc:
        net.report_error -> is_error()
      sql/sp.cc:
        net.report_error -> is_error()
      sql/sp_head.cc:
        net.report_error -> is_error()
      sql/sql_base.cc:
        net.report_error -> is_error()
      sql/sql_class.cc:
        net.report_error -> is_error()
      sql/sql_class.h:
        net.report_error -> is_error()
      sql/sql_connect.cc:
        net.report_error -> is_error()
      sql/sql_delete.cc:
        net.report_error -> is_error()
      sql/sql_insert.cc:
        net.report_error -> is_error()
      sql/sql_parse.cc:
        net.report_error -> is_error()
      sql/sql_prepare.cc:
        net.report_error -> is_error()
      sql/sql_select.cc:
        net.report_error -> is_error()
      sql/sql_union.cc:
        net.report_error -> is_error()
      sql/sql_update.cc:
        net.report_error -> is_error()
      sql/sql_view.cc:
        net.report_error -> is_error()
      sql/sql_yacc.yy:
        net.report_error -> is_error()
      24370012
  32. 26 Oct, 2007 1 commit
    • unknown's avatar
      Bug#30296 · 0bb55050
      unknown authored
        "Dynamic plugins fail to load on FreeBSD"
        ELF executables need to be linked using the -export-dynamic option to
        ld(1) for symbols defined in the executable to become visible to dlsym().
        Also, do not build plugins on an all-static build.
      
      
      configure.in:
        Bug#30296
          Use "-export-dynamic" when building executable for use with plugins.
          Add required option using MYSQLD_EXTRA_LDFLAGS variable so we do not
          affect any other binary.
      config/ac-macros/plugins.m4:
        Do not build plugins when building all-static
      sql/sql_yacc.yy:
        build fix - surplus semicolon
      0bb55050
  33. 25 Oct, 2007 1 commit
    • unknown's avatar
      Fixed bug #27695: View should not be allowed to have empty or · 04ff9d4d
      unknown authored
      all space column names.
      
      The parser has been modified to check VIEW column names
      with the check_column_name function and to report an error
      on empty and all space column names (same as for TABLE
      column names).
      
      
      sql/sql_yacc.yy:
        Fixed bug #27695.
        The parser has been modified to check VIEW column aliases
        with the check_column_name function and to report an error
        on empty columns and all space columns (same as for TABLE
        column names).
      mysql-test/t/select.test:
        Updated test case for bug #27695.
      mysql-test/r/select.result:
        Updated test case for bug #27695.
      04ff9d4d
  34. 17 Oct, 2007 1 commit
    • unknown's avatar
      Manual merge of 5.0-runtime to 5.1-runtime · 84984f91
      unknown authored
      mysql-test/r/sp-error.result:
        Manual merge
      mysql-test/r/sp.result:
        Manual merge
      mysql-test/r/udf.result:
        Manual merge
      mysql-test/t/sp.test:
        Manual merge
      mysql-test/t/udf.test:
        Manual merge
      sql/item_create.cc:
        Manual merge
      sql/sp_head.cc:
        Manual merge
      sql/sql_yacc.yy:
        Manual merge
      84984f91
  35. 16 Oct, 2007 2 commits
    • unknown's avatar
      Fixed broken call to my_error · 42b64243
      unknown authored
      sql/sql_yacc.yy:
        Fixed error message to use char*, not LEX_STRING
      42b64243
    • unknown's avatar
      Bug#28318 (CREATE FUNCTION (UDF) requires a schema) -- part II · f1d7a96b
      unknown authored
      The root cause of the issue was that the CREATE FUNCTION grammar,
      for User Defined Functions, was using the sp_name rule.
      The sp_name rule is intended for fully qualified stored procedure names,
      like either ident.ident, or just ident but with a default database
      implicitly selected.
      
      A UDF does not have a fully qualified name, only a name (ident), and should
      not use the sp_name grammar fragment during parsing.
      
      The fix is to re-organize the CREATE FUNCTION grammar, to better separate:
      - creating UDF (no definer, can have AGGREGATE, simple ident)
      - creating Stored Functions (definer, no AGGREGATE, fully qualified name)
      
      With the test case provided, another issue was exposed which is also fixed:
      the DROP FUNCTION statement was using sp_name and also failing when no database
      is implicitly selected, when droping UDF functions.
      The fix is also to change the grammar so that DROP FUNCTION works with
      both the ident.ident syntax (to drop a stored function), or just the ident
      syntax (to drop either a UDF or a Stored Function, in the current database)
      
      
      mysql-test/r/sp-error.result:
        Adjust test results
      mysql-test/r/udf.result:
        Adjust test results
      mysql-test/t/sp-error.test:
        Adjust test results
      mysql-test/t/udf.test:
        Adjust test results
      sql/sql_parse.cc:
        CREATE UDF FUNCTION does not use a fully qualified name.
      sql/sql_yacc.yy:
        Fix grammar for CREATE / DROP FUNCTION, FOR udf
        Improve error messages for select no_such_function()
      f1d7a96b