An error occurred fetching the project authors.
  1. 15 Nov, 2006 1 commit
    • unknown's avatar
      Bug#18239 (Possible to overload internal functions with stored functions) · 418fd548
      unknown authored
      Bug#21025 (misleading error message when creating functions named 'x', or 'y')
      Bug#22619 (Spaces considered harmful)
      
      This change contains a fix to report warnings or errors, and multiple tests
      cases.
      
      Before this fix, name collisions between:
      - Native functions
      - User Defined Functions
      - Stored Functions
      were not systematically reported, leading to confusing behavior.
      
      I) Native / User Defined Function
      
      Before this fix, is was possible to create a UDF named "foo", with the same
      name as a native function "foo", but it was impossible to invoke the UDF,
      since the syntax "foo()" always refer to the native function.
      After this fix, creating a UDF fails with an error if there is a name
      collision with a native function.
      
      II) Native / Stored Function
      
      Before this fix, is was possible to create a SF named "db.foo", with the same
      name as a native function "foo", but this was confusing since the syntax
      "foo()" would refer to the native function. To refer to the Stored Function,
      the user had to use the "db.foo()" syntax.
      After this fix, creating a Stored Function reports a warning if there is a
      name collision with a native function.
      
      III) User Defined Function / Stored Function
      
      Before this fix, creating a User Defined Function "foo" and a Stored Function
      "db.foo" are mutually exclusive operations. Whenever the second function is
      created, an error is reported. However, the test suite did not cover this
      behavior.
      After this fix, the  behavior is unchanged, and is now covered by test cases.
      
      Note that the code change in this patch depends on the fix for Bug 21114.
      
      
      mysql-test/r/sp.result:
        New test cases.
      mysql-test/r/udf.result:
        New test cases.
      mysql-test/t/sp.test:
        New test cases.
      mysql-test/t/udf.test:
        New test cases.
      sql/sql_lex.cc:
        Name collisions with native functions.
      sql/sql_lex.h:
        Name collisions with native functions.
      sql/sql_yacc.yy:
        Name collisions with native functions.
      sql/share/errmsg.txt:
        Name collisions with native functions.
      mysql-test/r/sp_gis.result:
        New test cases.
      mysql-test/t/sp_gis.test:
        New test cases.
      418fd548
  2. 02 Nov, 2006 1 commit
    • unknown's avatar
      Better fix for bug#22830 · 63030d76
      unknown authored
      Events: crash with procedure which alters events with function
      
      Post-review CS
      
      This fix also changes the handling of KILL command combined with
      subquery. It changes the error message given back to "not supported",
      from parse error. The error for CREATE|ALTER EVENT has also been changed
      to generate "not supported yet" instead of parse error.
      In case of a SP call, the error is "not supported yet". This change
      cleans the parser from code which should not belong to there. Still
      LEX::expr_allows_subselect is existant because it simplifies the handling
       of SQLCOM_HA_READ which forbids subselects.
      
      
      mysql-test/r/events_bugs.result:
        update resut
      mysql-test/r/events_grant.result:
        update result
      mysql-test/r/kill.result:
        the error message has been changed for KILL
      mysql-test/t/events_bugs.test:
        Update old tests with the new emitted error
        
        Add a test case for
        BUG#22830 Events: crash with procedure which alters events with function
      mysql-test/t/events_grant.test:
        add ORDER BY clause to keep the result deterministic.
      mysql-test/t/kill.test:
        use name of the error, and change the error
        from parse error, to not supported
      sql/sql_lex.cc:
        Add an auxiliary function that checks whether SP and/or
        tables are used in the statement. This function is helpful for
        statements that cannot handle subqueries ans SP calls. Adding out
        of the parser cleans the latter of handling of special cases and
        letting it do its job of parsing.
      sql/sql_lex.h:
        helper function to check whether a table or SP was used
      sql/sql_parse.cc:
        Use LEX::table_or_sp_used() for SQLCOM_CREATE_EVENT, SQLCOM_ALTER_EVENT
        and SQLCOM_KILL. SQLCOM_DROP event does not use `expr` rule and thus a check is
        not needed.
      sql/sql_yacc.yy:
        Remove usage of LEX::expr_allows_subselect for CREATE|ALTER EVENT
        and KILL. There is only one left occurence - SQLCOM_HAREAD, but it 
        adds one table to the list of tables
      63030d76
  3. 01 Nov, 2006 1 commit
    • unknown's avatar
      Small cleanup in code handling stored routines/table prelocking. · 57c2f22a
      unknown authored
      Use lazy initialization for Query_tables_list::sroutines hash.
      This step should significantly decrease amount of memory consumed
      by stored routines as we no longer will allocate chunk of memory
      required for this HASH for each statement in routine.
      
      
      include/hash.h:
        Introduced auxillary hash_init_opt() macro which simplifies
        lazy initialization of HASH objects.
      sql/sp.cc:
        Use lazy initialization for Query_tables_list::sroutines hash.
        This step should significantly decrease amount of memory consumed
        by stored routines as we no longer will allocate chunk of memory
        required for this HASH for each statement in routine.
      sql/sql_lex.cc:
        Use lazy initialization for Query_tables_list::sroutines hash.
        This step should significantly decrease amount of memory consumed
        by stored routines as we no longer will allocate chunk of memory
        required for this HASH for each statement in routine.
      sql/sql_lex.h:
        Updated comment describing Query_tables_list::sroutines to
        reflect that now we are use lazy initialization for this hash.
        Added constant for initial size of this hash.
      57c2f22a
  4. 16 Oct, 2006 1 commit
    • unknown's avatar
      Fixed bug #19579: at range analysis optimizer did not take into · 6101fd25
      unknown authored
      account predicates that become sargable after reading const tables.
      In some cases this resulted in choosing non-optimal execution plans.
      Now info of such potentially saragable predicates is saved in
      an array and after reading const tables we check whether this
      predicates has become saragable.
      
      
      
      mysql-test/r/select.result:
        Added a test case for bug #19579.
      mysql-test/t/select.test:
        Added a test case for bug #19579.
      sql/item_cmpfunc.cc:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Added a counter of between predicates.
      sql/sql_base.cc:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Added a counter of between predicates.
      sql/sql_lex.cc:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Added a counter of between predicates.
      sql/sql_lex.h:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Added a counter of between predicates.
      sql/sql_select.cc:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Now info of such potentially saragable predicates is saved in
        an array and after reading const tables we check whether this
        predicates has become saragable.
      6101fd25
  5. 12 Oct, 2006 2 commits
    • unknown's avatar
      BUG#20953: create proc with a create view that uses local vars/params · 6d1fdc73
      unknown authored
                 should fail to create
      
      The problem was that this type of errors was checked during view
      creation, which doesn't happen when CREATE VIEW is a statement of
      a created stored routine.
      
      The solution is to perform the checks at parse time.  The idea of the
      fix is that the parser checks if a construction just parsed is allowed
      in current circumstances by testing certain flags, and this flags are
      reset for VIEWs.
      
      The side effect of this change is that if the user already have
      such bogus routines, it will now get a error when trying to do
      
        SHOW CREATE PROCEDURE proc;
      
      (and some other) and when trying to execute such routine he will get
      
        ERROR 1457 (HY000): Failed to load routine test.p5. The table mysql.proc is missing, corrupt, or contains bad data (internal code -6)
      
      However there should be very few such users (if any), and they may
      (and should) drop these bogus routines.
      
      
      mysql-test/r/sp-error.result:
        Add result for bug#20953: create proc with a create view that uses
        local vars/params should fail to create.
      mysql-test/r/view.result:
        Update results.
      mysql-test/t/sp-error.test:
        Add test case for bug#20953: create proc with a create view that uses
        local vars/params should fail to create.
      mysql-test/t/view.test:
        Add second test for variable in a view.
        Remove SP variable in a view test, as it tests wrong behaviour.
        Add test for derived table in a view.
      sql/sql_lex.cc:
        Remove LEX::variables_used.
      sql/sql_lex.h:
        Remove LEX::variables_used and add st_parsing_options structure and
        LEX::parsing_options member.
      sql/sql_view.cc:
        Move some error checking to sql/sql_yacc.yy.
      sql/sql_yacc.yy:
        Check for disallowed syntax in a CREATE VIEW at parse time to rise a
        error when it is used inside CREATE PROCEDURE and CREATE FUNCTION, as
        well as by itself.
      6d1fdc73
    • unknown's avatar
      Revert patch for bug #19764, which did not work with prepared statements. · e9b7cc09
      unknown authored
      BitKeeper/deleted/.del-show_check-master.opt:
        Delete: mysql-test/t/show_check-master.opt
      e9b7cc09
  6. 04 Oct, 2006 1 commit
    • unknown's avatar
      Bug #19764: SHOW commands end up in the slow log as table scans · 0d833887
      unknown authored
      Set a flag when a SHOW command is parsed, and check it in log_slow_statement().  SHOW commands are not counted as slow queries, even if they use table scans.
      
      
      mysql-test/t/show_check-master.opt:
        BitKeeper file /usr/home/tim/m/bk/b19764/50/mysql-test/t/show_check-master.opt
      mysql-test/r/show_check.result:
        Add test for bug #19764
      mysql-test/t/show_check.test:
        Add test for bug #19764
      sql/sql_lex.cc:
        Set lex->is_show_command= FALSE in lex_start
      sql/sql_lex.h:
        Add LEX->is_slow_command flag to prevent SHOW commands from being written to the slow queries log
      sql/sql_parse.cc:
        Don't log slow statement if it is a SHOW command
      sql/sql_yacc.yy:
        Set lex->is_show_command for all SHOW commands
      0d833887
  7. 25 Sep, 2006 1 commit
    • unknown's avatar
      Fixed bug #21646. · f0bd502a
      unknown authored
      Presence of a subquery in the ON expression of a join 
      should not block merging the view that contains this join.
      Before this patch the such views were converted into 
      into temporary table views.
      
      
      mysql-test/r/view.result:
        Added a test case for bug #21646.
      mysql-test/t/view.test:
        Added a test case for bug #21646.
      sql/mysql_priv.h:
        Fixed bug #21646.
        Added a new parsing state 'IN_ON', true when
        the parser is in an ON expression of a join.
      sql/sql_lex.cc:
        Fixed bug #21646.
        Presence of a subquery in the ON expression of a join 
        should not block merging the view that contains this join.
      sql/sql_yacc.yy:
        Fixed bug #21646.
        Added a new parsing state 'IN_ON', true when
        the parser is in an ON expression of a join.
      f0bd502a
  8. 16 Sep, 2006 1 commit
    • unknown's avatar
      Fixed bug #21493: crash for the second execution of a function · 58e178c5
      unknown authored
      containing a select statement that uses an aggregating IN subquery.
      Added a parameter to the function fix_prepare_information 
      to restore correctly the having clause for the second execution.
      Saved andor structure of the having conditions at the proper moment
      before any calls of split_sum_func2 that could modify the having structure
      adding new Item_ref objects. (These additions, are produced not with 
      the statement mem_root, but rather with the execution mem_root.)
      
      
      mysql-test/r/sp.result:
        Added a test case for bug #21493.
      mysql-test/t/sp.test:
        Added a test case for bug #21493.
      sql/sql_delete.cc:
        Fixed bug #21493: crash for the second execution of a function
        containing a select statement that uses an aggregating IN subquery.
        Added a parameter to the function fix_prepare_information 
        to restore correctly the having clause for the second execution.
      sql/sql_insert.cc:
        Fixed bug #21493: crash for the second execution of a function
        containing a select statement that uses an aggregating IN subquery.
        Added a parameter to the function fix_prepare_information 
        to restore correctly the having clause for the second execution.
      sql/sql_lex.cc:
        Fixed bug #21493: crash for the second execution of a function
        containing a select statement that uses an aggregating IN subquery.
        Added a parameter to the function fix_prepare_information 
        to restore correctly the having clause for the second execution.
      sql/sql_lex.h:
        Fixed bug #21493: crash for the second execution of a function
        containing a select statement that uses an aggregating IN subquery.
        Added a parameter to the function fix_prepare_information 
        to restore correctly the having clause for the second execution.
      sql/sql_update.cc:
        Fixed bug #21493: crash for the second execution of a function
        containing a select statement that uses an aggregating IN subquery.
        Added a parameter to the function fix_prepare_information 
        to restore correctly the having clause for the second execution.
      58e178c5
  9. 01 Sep, 2006 1 commit
    • unknown's avatar
      BUG#21477 "memory overruns for certain kinds of subqueries": · dd6dc7ad
      unknown authored
      make st_select_lex::setup_ref_array() take into account that 
      Item_sum-descendant objects located within descendant SELECTs
      may be added into ref_pointer_array.
      
      
      sql/item_sum.cc:
        BUG#21477 "memory overruns for certain kinds of subqueries":
        Make SELECT_LEX::n_sum_items contain # of Item_sum-derived objects
        that exist within this SELECT.
      sql/sql_lex.h:
        BUG#21477 "memory overruns for certain kinds of subqueries":
        Add SELECT_LEX::n_sum_items and SELECT_LEXT::n_child_sum_items.
      sql/sql_yacc.yy:
        BUG#21477 "memory overruns for certain kinds of subqueries":
        Make SELECT_LEX::n_sum_items contain # of Item_sum-derived objects
        that exist within this SELECT.
      dd6dc7ad
  10. 23 Aug, 2006 2 commits
    • unknown's avatar
      Bug #20908: Crash if select @@"" · f9832bf1
      unknown authored
      Zero-length variables caused failures when using the length to look
      up the name in a hash.  Instead, signal that no zero-length name can
      ever be found and that to encounter one is a syntax error.
      
      
      mysql-test/r/variables.result:
        Results for test.
      mysql-test/t/variables.test:
        Insert tests to prove that zero-length variable names do not cause
        faults.
      sql/gen_lex_hash.cc:
        If the length is zero, then there is nothing to look-up in the 
        hash.
      sql/sql_lex.cc:
        Names of variables must not be empty.  Signal an error of that 
        happens.
      f9832bf1
    • unknown's avatar
      Cleanup patch for handling of subselects in commands which cannot · 2e1bfbd2
      unknown authored
      handle them.
      
      Problem:
      CREATE|ALTER EVENT, HANDLER READ, KILL, Partitioning uses `expr` from the
      parser. This rule comes with all the rings and bells including subqueries.
      However, these commands are not subquery safe. For this reason there are two
      fuse checks in the parser. They were checking by command id. CREATE EVENT
      should forbid subquery is the fix for
      bug#16394 Events: Crash if schedule contains SELECT
      The fix has been incorporated as part of the patch for WL#3337 (Event scheduler
      new architecture).
      
      Solution:
      A new flag was added to LEX command_forbids_subselect. The fuse checks were
      changed. The commands are responsible to set the value to true whenever
      they can't handle subselects.
      
      
      sql/sql_lex.cc:
        initialize the variable
      sql/sql_lex.h:
        Add a new flag whether the parser should allow a subselect when
        parsing. This is temporarily turned off by commands like CREATE|ALTER EVENT,
        HA_READ, KILL. Could be used by other parts which reuse `expr` rule of the
        grammar and should not allow subqueries as part of it.
      sql/sql_yacc.yy:
        Forbid subselects in some commands in a better way.
        CREATE|ALTER EVENT, HANDLER READ, KILL, are not subselect
        safe for parameters and therefore they should be forbidden already in
        the parser.
        This patch makes it easier for the developer to add new commands in that
        sense similar to the mentioned above.
      2e1bfbd2
  11. 15 Aug, 2006 2 commits
    • unknown's avatar
      Bug #20908: Crash if select @@"" · e0bffad3
      unknown authored
      Zero-length variables caused failures when using the length to look
      up the name in a hash.  Instead, signal that no zero-length name can
      ever be found and that to encounter one is a syntax error.
      
      
      mysql-test/r/variables.result:
        Results for test.
      mysql-test/t/variables.test:
        Insert tests to prove that zero-length variable names do not cause
        faults.
      sql/gen_lex_hash.cc:
        If the length is zero, then there is nothing to look-up in the 
        hash.
      sql/sql_lex.cc:
        Names of variables must not be empty.  Signal an error of that 
        happens.
      e0bffad3
    • unknown's avatar
      Fix for bug #20695: Charset introducer overrides charset definition for column. · fe3dee06
      unknown authored
        - if there are two character set definitions in the column declaration,
          we replace the first one with the second one as we store both in the LEX->charset
          slot. Add a separate slot to the LEX structure to store underscore charset.
        - convert default values to the column charset of STRING, VARSTRING fields 
          if necessary as well.
      
      
      mysql-test/r/ctype_recoding.result:
        Fix for bug #20695: Charset introducer overrides charset definition for column.
          - test result.
      mysql-test/t/ctype_recoding.test:
        Fix for bug #20695: Charset introducer overrides charset definition for column.
          - test case.
      sql/sql_lex.cc:
        Fix for bug #20695: Charset introducer overrides charset definition for column.
          - LEX->underscore_charset introduced to store UNDERSCORE_CHARSET
      sql/sql_lex.h:
        Fix for bug #20695: Charset introducer overrides charset definition for column.
          - LEX->underscore_charset introduced to store UNDERSCORE_CHARSET
      sql/sql_table.cc:
        Fix for bug #20695: Charset introducer overrides charset definition for column.
          - convert default values to the column charset of VARSTRING, STRING, ENUM, 
            SET fields if necessary.
      sql/sql_yacc.yy:
        Fix for bug #20695: Charset introducer overrides charset definition for column.
          - LEX->underscore_charset introduced to store UNDERSCORE_CHARSET
      fe3dee06
  12. 14 Aug, 2006 1 commit
    • unknown's avatar
      Manual merge 5.0->5.1. Post-merge fixes. · 21e75cb0
      unknown authored
      client/mysqldump.c:
        A post-merge fix - 'sock' was renamed to 'mysql'
      mysql-test/r/events_bugs.result:
        A post merge fix: now we strip rear comments from the query before
        it gets into the log.
      mysql-test/r/func_group.result:
        A post merge fix: default clause is now printed uppercase.
      mysql-test/r/im_life_cycle.result:
        Fix my mistake in manual resolve.
      mysql-test/r/mysqlcheck.result:
        use test; - after we drop client_test_db there is no current database.
        This cleanup is present in 5.1 only, but the test that was added in 
        5.0 assumes there is a current database, test.
      mysql-test/r/mysqldump.result:
        Ignore results of execution of mysqldump: we can't rely on 
        MASTER_LOG_POS in test results, it's different for statement
        and row level logging.
      mysql-test/r/mysqlshow.result:
        A post-merge fix: information schema contains a few more tables
        in 5.1
      mysql-test/r/mysqltest.result:
        A post merge fix: add 5.1 test end separator.
      mysql-test/r/ndb_basic.result:
        A post-merge fix: add test end separators.
      mysql-test/r/rpl_switch_stm_row_mixed.result:
        A post merge fix: length of varbinary column is now 3 times less.
        Assuming a side effect of some other change. Length of any
        field is not relevant in this test.
      mysql-test/r/rpl_view.result:
        Add an end of test marker.
      mysql-test/r/show_check.result:
        Remove duplicate results. Add results from a merged test case.
      mysql-test/r/sp-error.result:
        Add test end separators.
      mysql-test/r/sp-security.result:
        Post-merge fix: use test after the current database is dropped.
      mysql-test/r/sp.result:
        Remove a duplicate result (bad merge that left a copy of
        the test case for Bug#19862 in the test suite).
      mysql-test/r/strict.result:
        An after-merge fix for a new test case: in 5.1 we issue a more accurate
        error message: "Incorrect value" instead of "Truncated value". I reason
        it so that in case of an error nothing is truncated, really.
        Also found similar changes in other test cases.
      mysql-test/r/type_datetime.result:
        Fix the text of an error.
      mysql-test/r/union.result:
        A post-merge fix: CHARACTER SET is now uppercase.
      mysql-test/t/mysqlcheck.test:
        A post-merge fix: use test, after current database is dropped, there
        is no current database.
      mysql-test/t/mysqldump.test:
        Disable result log: it's dependent on binlog position.
      mysql-test/t/sp-security.test:
        use test
      sql/item_sum.cc:
        Adjust the call to the constructor after the merge.
      sql/sp_head.cc:
        Add a missing DBUG_VOID_RETURN, move security checks out of
        execute_trigger to Table_triggers_list: in 5.1 we check for
        TRIGGER privilege, not SUPER privilege to execute triggers, so these
        checks lack table context inside execute_trigger and have to be
        performed when we have table object on hand.
      sql/sql_db.cc:
        A post-merge fix: adjust load_db_opt_by_name and check_db_dir_existence
        (new functions added in 5.0) to be tablename-to-filename encoding 
        friendly.
      sql/sql_lex.cc:
        A post-merge fix: make skip_rear_comments operate on const uchar *s.
      sql/sql_lex.h:
        A post-merge fix.
      sql/sql_show.cc:
        A post-merge fix: fix a bad merge, rename orig_sql_command -> sql_command.
      sql/sql_trigger.cc:
        A post-merge fix: move security checks to process_triggers
        from execute_trigger.
      sql/sql_view.cc:
        Adjust to the new signature of skip_rear_comments.
      sql/sql_yacc.yy:
        Adjust to the new signature of init_strings.
      21e75cb0
  13. 31 Jul, 2006 1 commit
    • unknown's avatar
      N'xxx' and _utf8'xxx' are not equivalent · 3aa28a12
      unknown authored
      Problem: Unescaping of '\' characters didn't work when processing N'xxx'.
      Fix: using get_text() instead of get_token() when scanning nationa strings.
      
      
      mysql-test/r/ctype_utf8.result:
        Adding test case
      mysql-test/t/ctype_utf8.test:
        Adding test case
      sql/sql_lex.cc:
        Fixing to process national strings using get_tex(),
        i.e. the same way with usual strings, to make
        unescaping work.
      3aa28a12
  14. 27 Jul, 2006 1 commit
    • unknown's avatar
      Fix for BUG#20438: CREATE statements for views, stored routines and triggers · d36f5781
      unknown authored
      can be not replicable.
      
      Now CREATE statements for writing in the binlog are created as follows:
        - the beginning of the statement is re-created;
        - the rest of the statement is copied from the original query.
      
      The problem appears when there is a version-specific comment (produced by
      mysqldump), started in the re-created part of the statement and closed in the
      copied part -- there is closing comment-parenthesis, but there is no opening
      one.
      
      The proper fix could be to re-create original statement, but we can not
      implement it in 5.0. So, for 5.0 the fix is just to cut closing
      comment-parenthesis. This technique is also used for SHOW CREATE PROCEDURE
      statement (so we are able to reuse existing code).
      
      
      mysql-test/r/rpl_sp.result:
        Updated result file.
      mysql-test/r/rpl_trigger.result:
        Updated result file.
      mysql-test/r/rpl_view.result:
        Updated result file.
      mysql-test/t/rpl_sp.test:
        Added test case for BUG#20438.
      mysql-test/t/rpl_trigger.test:
        Added test case for BUG#20438.
      mysql-test/t/rpl_view.test:
        Added test case for BUG#20438.
      sql/sp.cc:
        Trim comments at the end.
      sql/sp_head.cc:
        Moved this code to the separate function to be re-used.
      sql/sql_lex.cc:
        Added a new function.
      sql/sql_lex.h:
        Added a new function.
      sql/sql_trigger.cc:
        Trim comments at the end.
      sql/sql_view.cc:
        Trim comments at the end.
      d36f5781
  15. 14 Jul, 2006 1 commit
  16. 13 Jul, 2006 1 commit
    • unknown's avatar
      WL #3337 (Events new architecture) · 31caa8c4
      unknown authored
      Final stroke, events should be loaded from disk on server startup.
      Also check the validity of their bodies if possible during loading.
      
      
      sql/event_data_objects.cc:
        Remove Event_job_data::free_sp(), move the code to the destructor
        Change the way we change the security context
        Steal some code from sql_parse.cc
      sql/event_data_objects.h:
        Remove free_sp()
        Make compile() public, to be used when booting for verifying the integrity of mysql.event
      sql/event_queue.cc:
        Make the queue load events from disk on server boot.
        Compile and thus check for integrity the events.
      sql/event_queue.h:
        shift methods around. add queue_loaded boolean.
      sql/event_scheduler.cc:
        Rename init_event_thread() to pre_init_event_thread()
        and make it more generic.
        Add post_init_event_thread()
        Export these two as well as deinit_event_thread().
        Now it is quite easy to write code to spawn a new event thread
        whenever needed.
      sql/event_scheduler.h:
        export pre_init_event_thread(), post_init_event_thread() and deinit_event_thread()
        to simplify writing of thread functions.
      sql/events.cc:
        Events::init() returns only one error code, then make it bool
      sql/events.h:
        Events::init() returns only one error code, then make it bool
      sql/mysqld.cc:
        Check the return code of Events::init()
      sql/sp_head.cc:
        Add trace info
      sql/sql_class.cc:
        Reorganize thd::change_security_context() to load main_security_ctx
      sql/sql_class.h:
        Reorganize thd::change_security_context() to load main_security_ctx
      sql/sql_lex.cc:
        Initialize lex->spname
      sql/sql_yacc.yy:
        Add a comment
      31caa8c4
  17. 11 Jul, 2006 1 commit
    • unknown's avatar
      Post-merge fixes for Bug#19399 "Stored Procedures 'Lost Connection' · 3ff08ab8
      unknown authored
      when dropping/creating tables"
      
      
      mysql-test/r/ps.result:
        A post-merge fix.
      mysql-test/t/ps.test:
        A post-merge fix: all 5.0 tests should go after 4.1 tests.
      sql/sql_lex.cc:
        auxilliary -> auxiliary
      sql/sql_prepare.cc:
        auxilliary -> auxiliary
      sql/table.cc:
        Update st_table_list::reinit_before_use in 5.0 to include 5.0-specific
        cleanups.
      sql/table.h:
        st_table_list::reinit_before_use is public.
      3ff08ab8
  18. 09 Jul, 2006 1 commit
    • unknown's avatar
      * Mixed replication mode * : · 81a80049
      unknown authored
      1) Fix for BUG#19630 "stored function inserting into two auto_increment breaks
      statement-based binlog":
      a stored function inserting into two such tables may fail to replicate
      (inserting wrong data in the slave's copy of the second table) if the slave's
      second table had an internal auto_increment counter different from master's.
      Because the auto_increment value autogenerated by master for the 2nd table
      does not go into binlog, only the first does, so the slave lacks information.
      To fix this, if running in mixed binlogging mode, if the stored function or
      trigger plans to update two different tables both having auto_increment
      columns, we switch to row-based for the whole function.
      We don't have a simple solution for statement-based binlogging mode, there
      the bug remains and will be documented as a known problem.
      Re-enabling rpl_switch_stm_row_mixed.
      2) Fix for BUG#20630 "Mixed binlogging mode does not work with stored
      functions, triggers, views", which was a documented limitation (in mixed
      mode, we didn't detect that a stored function's execution needed row-based
      binlogging (due to some UUID() call for example); same for
      triggers, same for views (a view created from a SELECT UUID(), and doing
      INSERT INTO sometable SELECT theview; would not replicate row-based).
      This is implemented by, after parsing a routine's body, remembering in sp_head
      that this routine needs row-based binlogging. Then when this routine is used,
      the caller is marked to require row-based binlogging too.
      Same for views: when we parse a view and detect that its SELECT needs
      row-based binary logging, we mark the calling LEX as such.
      3) Fix for BUG#20499 "mixed mode with temporary table breaks binlog":
      a temporary table containing e.g. UUID has its changes not binlogged,
      so any query updating a permanent table with data from the temporary table
      will run wrongly on slave. Solution: in mixed mode we don't switch back
      from row-based to statement-based when there exists temporary tables.
      4) Attempt to test mysqlbinlog on a binlog generated by mysqlbinlog;
      impossible due to BUG#11312 and BUG#20329, but test is in place for when
      they are fixed.
      
      
      mysql-test/r/rpl_switch_stm_row_mixed.result:
        testing BUG#19630 "stored function inserting into two auto_increment breaks
        statement-based binlog",
        testing BUG#20930 "Mixed binlogging mode does not work with stored functions,
        triggers, views.
        testing BUG#20499 "mixed mode with temporary table breaks binlog".
        I have carefully checked this big result file, it is correct.
      mysql-test/t/disabled.def:
        re-enabling test
      mysql-test/t/rpl_switch_stm_row_mixed.test:
        Test for BUG#19630 "stored function inserting into two auto_increment breaks
        statement-based binlog":
        we test that it goes row-based, but only when needed;
        without the bugfix, master and slave's data differed.
        Test for BUG#20499 "mixed mode with temporary table breaks binlog":
        without the bugfix, slave had 2 rows, not 3.
        Test for BUG#20930 "Mixed binlogging mode does not work with stored
        functions, triggers, views".
        Making strings used more different, for easier tracking of "by which routine
        was this binlog line generated".
        Towards the end, an attempt to test mysqlbinlog on a binlog generated by
        the mixed mode; attempt failed because of BUG#11312 and BUG#20929.
      sql/item_create.cc:
        fix for build without row-based replication
      sql/set_var.cc:
        cosmetic: in_sub_stmt is exactly meant to say if we are in stored
        function/trigger, so better use it.
      sql/sp.cc:
        When a routine adds its tables to the top statement's tables, if this routine
        needs row-based binlogging, mark the entire top statement as well.
        Same for triggers.
        Needed for making the mixed replication mode work with stored functions
        and triggers.
      sql/sp_head.cc:
        new enum value for sp_head::m_flags, remembers if, when parsing the 
        routine, we found at least one element (UUID(), UDF) requiring row-based
        binlogging.
      sql/sp_head.h:
        new enum value for sp_head::m_flags (see sp_head.cc).
        An utility method, intended for attributes of a routine which need
        to propagate upwards to the caller; so far only used for binlogging
        information, but open to any other attribute.
      sql/sql_base.cc:
        For BUG#19630 "stored function inserting into two auto_increment
        breaks statement-based binlog":
        When we come to locking tables, we have collected all tables used by
        functions, views and triggers, we detect if we're going to update two tables
        having auto_increment columns. If yes, statement-based binlogging won't work
        (Intvar_log_event records only one insert_id) so, if in mixed binlogging
        mode, switch to row-based.
        For making mixed mode work with stored functions using UUID/UDF:
        when we come to locking tables, we have parsed the whole body so know if
        some elements need row-based. Generation of row-based binlog events
        depends on locked tables, so this is the good place to decide of the binlog
        format.
      sql/sql_class.h:
        Fix for BUG#20499 "mixed mode with temporary table breaks binlog".
        Making mixed mode work with stored functions/triggers: don't reset
        back to statement-based if in executing a stored function/trigger.
      sql/sql_lex.cc:
        fix for build without row-based replication.
        binlog_row_based_if_mixed moves from st_lex to Query_tables_list, because
        that boolean should not be affected when a SELECT reads the INFORMATION_SCHEMA
        and thus implicitely parses a view or routine's body: this body may
        contain needing-row-based components like UUID() but the SELECT on
        INFORMATION_SCHEMA should not be affected by that and should not use
        row-based; as Query_tables_list is backed-up/reset/restored when parsing
        the view/routine's body, so does binlog_row_based_if_mixed and the
        top SELECT is not affected.
      sql/sql_lex.h:
        fix for build without row-based replication.
        binlog_row_based_if_mixed moves from st_lex to Query_tables_list
        (see sql_lex.cc)
      sql/sql_parse.cc:
        For the mixed mode to work with stored functions using UUID and UDF, we need
        to move the switch-back-from-row-to-statement out of
        mysql_execute_command() (which is executed for each statement, causing
        the binlogging mode to change in the middle of the function, which would
        not work)
        The switch to row-based is now done in lock_tables(), no need to keep it
        in mysql_execute_command(); in lock_tables() we also switch back from 
        row-based to statement-based (so in a stored procedure, all statements
        have their binlogging mode). We must however keep a resetting in
        mysql_reset_thd_for_next_command() as e.g. CREATE PROCEDURE does not call
        lock_tables().
      sql/sql_view.cc:
        When a view's body needs row-based binlogging (e.g. the view is created
        from SELECT UUID()), propagate this fact to the top st_lex.
      sql/sql_yacc.yy:
        use TRUE instead of 1, for binlog_row_based_if_mixed.
      81a80049
  19. 06 Jul, 2006 1 commit
    • unknown's avatar
      A fix and a test case for Bug#19399 "res 'Lost Connection' when · 8995277a
      unknown authored
      dropping/creating tables".
      
      The bug could lead to a crash when multi-delete statements were
      prepared and used with temporary tables.
      
      The bug was caused by lack of clean-up of multi-delete tables before
      re-execution of a prepared statement. In a statement like
      DELETE t1 FROM t1, t2 WHERE ... the first table list (t1) is
      moved to lex->auxilliary_table_list and excluded from lex->query_tables
      or select_lex->tables. Thus it was unaccessible to reinit_stmt_before_use
      and not cleaned up before re-execution of a prepared statement. 
      
      
      mysql-test/r/ps.result:
        Updated test results (Bug#19399)
      mysql-test/t/ps.test:
        A test case for Bug#19399 "Stored Procedures 'Lost Connection' when 
        dropping/creating tables": test that multi-delete
        tables are cleaned up properly before re-execution.
      sql/sql_lex.cc:
        Always initialize auxilliary_table_list when we initialize the lex:
        this way we don't have to check that lex->sql_command equals to
        SQLCOM_DELETE_MULTI whenever we need to access auxilliary_table_list.
        In particular, in reinit_stmt_before_use we can simply check that
        auxilliary_table_list is not NULL and clean it up if the check returns
        a true value.
      sql/sql_prepare.cc:
        Move the one table clean-up functionality to a method of st_table_list.
        Clean up auxiliary_table_list if it's not empty.
      sql/table.cc:
        Implement st_table_list::reinit_before_use().
      sql/table.h:
        Declare st_table_list::reinit_before_use().
      8995277a
  20. 30 Jun, 2006 1 commit
    • unknown's avatar
      Remove a couple of unused/barely used names. · 0c7bc6e9
      unknown authored
      sql/sql_lex.cc:
        Remove an unused thread key.
      sql/sql_lex.h:
        Remove an unused thread key, current_lex.
      sql/sql_parse.cc:
        Remove an unused thread key, current_lex macro.
      0c7bc6e9
  21. 28 Jun, 2006 1 commit
    • unknown's avatar
      WL#3337 (Events new architecture) · 9fa9378b
      unknown authored
      This cut No 7 should finish the part of fixing the parsing of the events :
      - Event_timed is no more used during parsing. Less problems because it has
        a mutex. Event_parse_data class is used during parsing. It is suited only
        for this purpose. It's pretty lightweight
      - Late checking of data from parsing is being performed. This should solve
        the problems of nested events in SP or other events (for the situation 
        of no nested bodies). Before if an ALTER EVENT was in a SP, then when the
        SP was compiled, and not executed, the actual init_xxx methods of Event_timed
        were called, which is wrong.
      - It could be a side effect of using a specialized class, but test events_stress is
        now 25% quicker.
      
      Cut No8 will start splitting Event_scheduler into 2 parts, the QUEUE will be moved
      to Event_queue.
      
      
      mysql-test/r/events.result:
        update result
      mysql-test/t/events.test:
        disabled is actually wrong, should be disable, but because of the early
        checking it was never parsed.
      sql/event_data_objects.cc:
        move add init_xxx methods from Event_timed to Event_parse_data
        Event_parse data does not need definer_user and definer_host
        in Event_timed::compile() do not use lex.et, well there is no more lex.et :)
      sql/event_data_objects.h:
        move parsing responsibilities from Event_timed to Event_parse_data
      sql/event_db_repository.cc:
        No more Event_timed comes from parsing but Event_parse_data
        The initialization of Item*-s from parsing is done late, and not
        during the actual parsing. This is the right way to go because
        if an ALTER EVENT is inside a SP or CREATE EVENT it should not be
        executed (initialized) during parsing, as it was done.
      sql/event_db_repository.h:
        No more Event_timed comes from parsing but Event_parse_data
        The initialization of Item*-s from parsing is done late, and not
        during the actual parsing. This is the right way to go because
        if an ALTER EVENT is inside a SP or CREATE EVENT it should not be
        executed (initialized) during parsing, as it was done.
      sql/event_scheduler.cc:
        No more Event_timed comes from parsing but Event_parse_data
        The initialization of Item*-s from parsing is done late, and not
        during the actual parsing. This is the right way to go because
        if an ALTER EVENT is inside a SP or CREATE EVENT it should not be
        executed (initialized) during parsing, as it was done.
      sql/event_scheduler.h:
        No more Event_timed comes from parsing but Event_parse_data
        The initialization of Item*-s from parsing is done late, and not
        during the actual parsing. This is the right way to go because
        if an ALTER EVENT is inside a SP or CREATE EVENT it should not be
        executed (initialized) during parsing, as it was done.
      sql/events.cc:
        No more Event_timed comes from parsing but Event_parse_data
        The initialization of Item*-s from parsing is done late, and not
        during the actual parsing. This is the right way to go because
        if an ALTER EVENT is inside a SP or CREATE EVENT it should not be
        executed (initialized) during parsing, as it was done.
      sql/events.h:
        No more Event_timed comes from parsing but Event_parse_data
        The initialization of Item*-s from parsing is done late, and not
        during the actual parsing. This is the right way to go because
        if an ALTER EVENT is inside a SP or CREATE EVENT it should not be
        executed (initialized) during parsing, as it was done.
      sql/sql_lex.cc:
        lex->et_compile_phase and lex->et are no more.
        Use lex->event_parse_data
      sql/sql_lex.h:
        lex->et_compile_phase and lex->et are no more.
        Use lex->event_parse_data
      sql/sql_parse.cc:
        lex->et_compile_phase and lex->et are no more.
        Use lex->event_parse_data
        ACL checks were moved inside the Events subsystem.
        Also ending of the transaction is performed only just
        before doing disk operation. Therefore only when needed.
      sql/sql_yacc.yy:
        lex->et and lex->et_parse_phase are no more
        Use the specialized for parsing Event_parse_data
      9fa9378b
  22. 27 Jun, 2006 1 commit
    • unknown's avatar
      Bug#17203: "sql_no_cache sql_cache" in views created from prepared statement · 90cb4c03
      unknown authored
      The problem was that we restored SQL_CACHE, SQL_NO_CACHE flags in SELECT
      statement from internal structures based on value set later at runtime, not
      the original value set by the user.
      
      The solution is to remember that original value.
      
      
      mysql-test/r/auto_increment.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/r/func_compress.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/r/func_math.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/r/func_system.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/r/func_time.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/r/information_schema.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/r/query_cache.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/r/rpl_get_lock.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/r/rpl_master_pos_wait.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/r/show_check.result:
        Add result for bug#17203.
      mysql-test/r/subselect.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/r/type_blob.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/r/variables.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/r/view.result:
        Update result to not report SQL_NO_CACHE if it wasn't there at first place.
      mysql-test/t/show_check.test:
        Add test case for bug#17203.
      sql/sql_lex.cc:
        Reset SELECT_LEX::sql_cache together with SELECT_LEX::options.
      sql/sql_lex.h:
        Add SELECT_LEX::sql_cache field to store original user setting.
      sql/sql_select.cc:
        Output SQL_CACHE and SQL_NO_CACHE depending on stored original user setting.
      sql/sql_yacc.yy:
        Make effect of SQL_CACHE and SQL_NO_CACHE mutually exclusive.  Ignore
        SQL_CACHE if SQL_NO_CACHE was used.  Remember what was set by the user.
        Reset SELECT_LEX::sql_cache together with SELECT_LEX::options.
      90cb4c03
  23. 20 Jun, 2006 1 commit
    • unknown's avatar
      SHOW STATUS does not anymore change local status variables (except... · f3a56a17
      unknown authored
      SHOW STATUS does not anymore change local status variables (except com_show_status). Global status variables are still updated.
      SHOW STATUS are not anymore put in slow query log because of no index usage.
      
      Implemntation done by removing orig_sql_command and moving logic of SHOW STATUS to mysql_excute_command()
      This simplifies code and allows us to remove some if statements all over the code.
      
      Upgraded uc_update_queries[] to sql_command_flags and added more bitmaps to better categorize commands.
      This allowed some overall simplifaction when testing sql_command.
      
      Fixes bugs:
      Bug#10210: running SHOW STATUS increments counters it shouldn't
      Bug#19764: SHOW commands end up in the slow log as table scans
      
      
      mysql-test/r/grant_cache.result:
        Fixed results after SHOW STATUS doesn't anymore affect status variables
      mysql-test/r/information_schema.result:
        Added extra test to cover more code
      mysql-test/r/query_cache.result:
        Remove resuts from previous tests
      mysql-test/r/status.result:
        Added more tests for testing of last_query_cost and how SHOW STATUS affects status variables.
        (Bug#10210)
      mysql-test/r/temp_table.result:
        Fixed results after SHOW STATUS doesn't anymore affect status variables
      mysql-test/r/union.result:
        Fixed results after SHOW STATUS is not logged to slow query log
        (Bug#19764)
      mysql-test/t/events_microsec.test:
        Disable warnings at init
      mysql-test/t/information_schema.test:
        Added extra test to cover more code
      mysql-test/t/query_cache.test:
        Remove resuts from previous tests
      mysql-test/t/status.test:
        Added more tests for testing of last_query_cost and how SHOW STATUS affects status variables.
        (Bug #10210)
      sql/mysql_priv.h:
        Added 'sql_command_flags'
      sql/sql_class.cc:
        New function add_diff_to_status(), used to update global status variables when using SHOW STATUS
      sql/sql_class.h:
        New function 'fill_information_schema_tables()'
        (One could not anymore use fill_derived_tables() for this as only_view_structures() is not relevant for information schema tables)
        Added defines for bit flags in sql_command_flags[]
      sql/sql_lex.cc:
        Remove orig_sql_command
      sql/sql_lex.h:
        Remove orig_sql_command
      sql/sql_parse.cc:
        Rename uc_update_queries -> sql_command_flags.
        Enhanced 'sql_command_flags' to better classify SQL commands
        uc_update_queries[] != 0 is changed to (sql_command_flags[] & CF_CHANGES_DATA)
        lex->orig_sql_command == SQLCOM_END is changed to (sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND) == 0)
        
        Simplify incrementing of thd->status_var.com_stat[] as we don't have to do special handling for SHOW commands.
        
        Split SQLCOM_SELECT handling in mysql_execute_command() to a separate function.
        Added special handling of SHOW STATUS commands in mysql_execute_command() and call common SQLCOM_SELECT handling.
        These changes allows us to easily fix that we save and restore status variables during execution of a SHOW STATUS command.
        Don't log SHOW STATUS commands to slow query log.
        
        This fixes Bug#10210 and Bug#19764 without adding additional 'if' code.
        (The new code is faster than the original as we now have fewer if's than before)
      sql/sql_prepare.cc:
        Clean up prepare-check handling of SQLCOM commands by using sql_command_flags[]
        This simplifes code and ensures that code works even if someone forgets to put a new status commands into the switch statement.
      sql/sql_select.cc:
        Remove special handling of SHOW STATUS.
        (This is now done in SQLCOM_SHOW_STATUS part in mysql_execute_command())
      sql/sql_show.cc:
        Remove orig_sql_command
        Only change sql_command during 'open_normal_and_derived_tables()' (for views) and not for the full duration of generating data.
        Changed 'show status' to use thd->initial_status_var to ensure that the current statement is not affecting the to-be-used values.
        Use thd->fill_information_schema_tables() instead of 'thd->fill_derived_tables()' as the later wrongly checks the value of sql_command.
      sql/sql_yacc.yy:
        Remove usage of orig_sql_command.
        One side effect of this is that we need to test for cursors if the current command is a SELECT or a SHOW command.
      sql/structs.h:
        Updated comment
      f3a56a17
  24. 06 Jun, 2006 1 commit
    • unknown's avatar
      Bug#18396 Identifiers: Byte with value 255 not allowed · 6a6bedfa
      unknown authored
      Old FRM files didn't allow byte 255 as a column name part.
      Since now we store column names in UTF8, this restriction
      is not required anymore: 255 is not a valid byte in UTF8.
      Fix: removing checking against 255.
      
      
      mysql-test/r/ctype_latin1.result:
        Adding test case
      mysql-test/t/ctype_latin1.test:
        Adding test case
      sql/sql_lex.cc:
        Removing old code, unnecessary anymore.
      6a6bedfa
  25. 30 May, 2006 1 commit
    • unknown's avatar
      Bug#17204 "second CALL to procedure crashes Server" · 128c3942
      unknown authored
      Bug#18282 "INFORMATION_SCHEMA.TABLES provides inconsistent info about invalid views"
      This bug caused crashes or resulted in wrong data being returned
      when one tried to obtain information from I_S tables about views
      using stored functions.
      
      It was caused by the fact that we were using LEX representing
      statement which were doing select from I_S tables as active LEX
      when contents of I_S table were built. So state of this LEX both
      affected and was affected by open_tables() calls which happened
      during this process. This resulted in wrong behavior and in
      violations of some of invariants which caused crashes.
      
      This fix tries to solve this problem by properly saving/resetting
      and restoring part of LEX which affects and is affected by the
      process of opening tables and views in get_all_tables() routine.
      To simplify things we separated this part of LEX in a new class
      and made LEX its descendant.
      
      
      mysql-test/r/information_schema_db.result:
        test case
      mysql-test/t/information_schema_db.test:
        test case
      sql/sql_lex.cc:
        To simplify saving/resetting and restoring part of LEX which
        affects and is affected by the process of opening tables and
        views we moved it to new class Query_tables_list and made LEX
        descendant of this class. Also introduced two LEX methods 
        which can be used to save and reset or to restore this state.
      sql/sql_lex.h:
        To simplify saving/resetting and restoring part of LEX which
        affects and is affected by the process of opening tables and
        views we moved it to new class Query_tables_list and made LEX
        descendant of this class. Also introduced two LEX methods 
        which can be used to save and reset or to restore this state.
      sql/sql_show.cc:
        Now in get_all_tables() routine we properly save/reset and
        restore part of LEX (statement table list and information
        about routines used) which affects and is affected by the
        process of opening tables and views.
      sql/sql_table.cc:
        Now we clean-up LEX after opening table (view) in two stages.
        In the first stage we call LEX::cleanup_after_one_table_open()
        to clean-up selects lists and derived tables state. In the
        second stage which happens after close_thread_tables() is
        invoked we call Query_tables_list::reset_query_tables_list(FALSE)
        to rollback changes in Query_tables_list.
      128c3942
  26. 23 May, 2006 2 commits
    • unknown's avatar
      don't let bugfix for bug#8303 break the bugfix for bug#8378 · 6a60acce
      unknown authored
      revert the fix for bug#8303
      correct the test for bug#8378
      
      
      mysql-test/r/ctype_sjis.result:
        updated
      mysql-test/t/ctype_sjis.test:
        updated
      sql/sql_lex.cc:
        revert the fix for bug#8303
      tests/mysql_client_test.c:
        correct the test for bug#8378
      6a60acce
    • unknown's avatar
      don't let bugfix for bug#8303 break the bugfix for bug#8378 · 17c4ddeb
      unknown authored
      revert the fix for bug#8303
      correct the test for bug#8378
      
      
      mysql-test/r/ctype_sjis.result:
        updated
      mysql-test/t/ctype_sjis.test:
        updated
      sql/sql_lex.cc:
        revert the fix for bug#8303
      tests/mysql_client_test.c:
        correct the test for bug#8378
      17c4ddeb
  27. 07 May, 2006 2 commits
    • unknown's avatar
      Post-merge fixes. · 5aa69d34
      unknown authored
      5aa69d34
    • unknown's avatar
      Fixed bug #14927. · 375749b8
      unknown authored
      A query with a group by and having clauses could return a wrong
      result set if the having condition contained a constant conjunct 
      evaluated to FALSE.
      It happened because the pushdown condition for table with
      grouping columns lost its constant conjuncts.
      Pushdown conditions are always built by the function make_cond_for_table
      that ignores constant conjuncts. This is apparently not correct when
      constant false conjuncts are present.
      
      
      
      mysql-test/r/having.result:
        Added a test case for bug #14927.
      mysql-test/t/having.test:
        Added a test case for bug #14927.
      sql/sql_lex.cc:
        Fixed bug #14927.
        Initialized fields for having conditions in  st_select_lex::init_query().
      sql/sql_lex.h:
        Fixed bug #14927.
        Added a field to restore having condititions for execution in SP and PS.
      sql/sql_prepare.cc:
        Fixed bug #14927.
        Added code to restore havinf conditions for execution in SP and PS.
      sql/sql_select.cc:
        Fixed bug #14927.
        Performed evaluation of constant expressions in having clauses.
        If the having condition contains a constant conjunct that is always false
        an empty result set is returned after the optimization phase.
        In this case the corresponding EXPLAIN command now returns 
        "Impossible HAVING" in the last column.
      375749b8
  28. 04 May, 2006 2 commits
    • unknown's avatar
      Fixed wrong free in sql_view.cc · afe47152
      unknown authored
      mysql-test-run now fails in case of warnings
      
      
      mysql-test/lib/mtr_report.pl:
        Fail if find warnings
      mysql-test/mysql-test-run.sh:
        Fail if find warnings
      sql/sql_lex.cc:
        Initalize st_lex properly
      sql/sql_view.cc:
        Fixed problem with unaligned memory (wrong free)
      afe47152
    • unknown's avatar
      Fixed compiler warnings · 791a5d94
      unknown authored
      Move plugin declarations after system functions have been checked
      (Fixes problem with ndb_config failing becasue SHM is not declared)
      Fixed some memory leaks
      
      
      configure.in:
        Move plugin declarations after system functions have been checked
        (Fixes problem with ndb_config failing becasue SHM is not declared)
      mysql-test/t/disabled.def:
        Disabled ndb_load, as it is in 5.0
        (Fails randomly in binlog_close_connection())
      mysql-test/t/log_tables.test:
        Update error numbers
      mysql-test/t/ndb_config.test:
        Moved test depending on SHM to ndb_config2.test
      mysql-test/t/ndb_partition_error.test:
        Update error numbers
      sql/event_timed.cc:
        Removed not needed line
      sql/ha_berkeley.cc:
        Fixed compiler warning
      sql/ha_heap.cc:
        Fixed compiler warning
      sql/ha_innodb.cc:
        Fixed compiler warning
      sql/ha_myisam.cc:
        Fixed compiler warning
      sql/ha_myisammrg.cc:
        Fixed compiler warning
      sql/ha_ndbcluster.cc:
        Fixed compiler warning
      sql/ha_partition.cc:
        Fixed compiler warning
      sql/mysql_priv.h:
        After merge fix
      sql/mysqld.cc:
        Fixed memory leak in skip_grant.test
      sql/share/errmsg.txt:
        Removed wrong error messages
      sql/sql_lex.cc:
        More debugging
        Faster lex_end()
      sql/sql_partition.cc:
        Fixed memory leak
      sql/sql_view.cc:
        Fixed memory leak
      mysql-test/r/ndb_config2.result:
        New BitKeeper file ``mysql-test/r/ndb_config2.result''
      mysql-test/t/ndb_config2.test:
        New BitKeeper file ``mysql-test/t/ndb_config2.test''
      791a5d94
  29. 13 Apr, 2006 1 commit
  30. 13 Mar, 2006 1 commit
    • unknown's avatar
      Fixes to the replication mixed mode (patch approved by Monty): · b9f6f9bc
      unknown authored
      - detect the need for row-based binlogging not at execution stage but earlier at parsing stage; needed for example for CREATE TABLE SELECT UUID().
      - more tests of this mixed mode.
      
      
      mysql-test/r/rpl_switch_stm_row_mixed.result:
        result update
      mysql-test/t/rpl_switch_stm_row_mixed.test:
        testing more scenarios for the mixed replication mode.
        Added support for manual testing of UDFs vs the mixed mode (behind a variable in the test).
        Changing old file names to better ones.
      sql/item_create.cc:
        at parse time, when we see a UUID(), put up a flag in LEX to say this binlogs properly only with row-based binlogging.
      sql/item_func.cc:
        it's not perfect to put up the flag at this execution stage, better do it at parse stage.
      sql/item_strfunc.cc:
        it's not perfect to put up the flag at this execution stage, better do it at parse stage
      sql/set_var.cc:
        this assertion is wrong, this piece of code can happen in RBR mode too.
      sql/sql_lex.cc:
        when we reinitialize the LEX members before every query, we have to reinitialize the new flag
      sql/sql_lex.h:
        A new flag, set at parsing stage, which tells if some items seen during parsing stage require row-based replication to binlog/replicate correctly
        when this statement is later executed.
        It has to be in LEX and not directly in THD, for this to work in prepared statements.
      sql/sql_parse.cc:
        Parsing stage happened at some time in the past and set up the flag in LEX, now that we execute the statement we actually turn on row-based binlogging
        if the thread's binlog format is "mixed". We then turn it off when leaving mysql_execute_command().
        Some cleanup code was not executed if leaving mysql_execute_command() at the "error" label, fixing this. A better fix than the "goto end" would be
        to modify each "goto error" to "res=1; goto end" but it required changing many lines which I don't want to do now ("make smallest possible patch").
      sql/sql_yacc.yy:
        When at parsing stage we see a UDF we put up a flag to say that row-based binlogging is preferred.
      b9f6f9bc
  31. 10 Mar, 2006 1 commit
    • unknown's avatar
      This patch does 1) fix my build breakage 2) Complete the removal of all... · 01d69c4b
      unknown authored
      This patch does 1) fix my build breakage  2) Complete the removal of all symbols which could clash with another parser. 
      
      
      sql/mysql_priv.h:
        Porting update
      sql/mysqld.cc:
        Porting update
      sql/sp.cc:
        Porting update
      sql/sql_lex.cc:
        Porting update
      sql/sql_lex.h:
        Porting update
      sql/sql_parse.cc:
        Porting update
      sql/sql_prepare.cc:
        Portinng update
      sql/sql_trigger.cc:
        Porting update
      sql/sql_view.cc:
        Porting update
      01d69c4b
  32. 09 Mar, 2006 2 commits
  33. 01 Feb, 2006 1 commit
    • unknown's avatar
      FIxed bug #14927. · a400e7fe
      unknown authored
      A query with a group by and having clauses could return a wrong
      result set if the having condition contained a constant conjunct 
      evaluated to FALSE.
      It happened because the pushdown condition for table with
      grouping columns lost its constant conjuncts.
      Pushdown conditions are always built by the function make_cond_for_table
      that ignores constant conjuncts. This is apparently not correct when
      constant false conjuncts are present.
      
      
      mysql-test/r/having.result:
        Added A test case for bug #14927.
      mysql-test/t/having.test:
        Added A test case for bug #14927.
      sql/sql_lex.cc:
        Fixed bug #14927.
        Initialized fields for having conditions in  st_select_lex::init_query().
      sql/sql_lex.h:
        Fixed bug #14927.
        Added a field to restore having condititions for execution in SP and PS.
      sql/sql_prepare.cc:
        Fixed bug #14927.
        Added code to restore havinf conditions for execution in SP and PS.
      sql/sql_select.cc:
        Fixed bug #14927.
        Performed evaluation of constant expressions in having clauses.
        If the having condition contains a constant conjunct that is always false
        an empty result set is returned after the optimization phase.
        In this case the corresponding EXPLAIN command now returns 
        "Impossible HAVING" in the last column.
      a400e7fe