1. 01 Nov, 2006 1 commit
    • unknown's avatar
      Fixed bug #21727. · 0388991b
      unknown authored
      This is a performance issue for queries with subqueries evaluation
      of which requires filesort.
      Allocation of memory for the sort buffer at each evaluation of a
      subquery may take a significant amount of time if the buffer is rather big.
      With the fix we allocate the buffer at the first evaluation of the
      subquery and reuse it at each subsequent evaluation.
      
      
      mysql-test/r/subselect.result:
        Added a test case for bug #21727.
      mysql-test/t/subselect.test:
        Added a test case for bug #21727.
      sql/item_subselect.h:
        Fixed bug #21727.
        This is a performance issue for queries with subqueries evaluation
        of which requires filesort.
        Added an implementation for Item_subselect::is_uncacheable()
        returning TRUE if the engine if the subselect is uncacheable.
      sql/mysql_priv.h:
        Fixed bug #21727.
        This is a performance issue for queries with subqueries evaluation
        of which requires filesort.
        Added a new boolean parameter to the filesort_free_buffers procedure.
        If the value of this parameter is TRUE the procedure frees the sort_keys
        buffpek buffers.
      sql/records.cc:
        Fixed bug #21727.
        This is a performance issue for queries with subqueries evaluation
        of which requires filesort.
        Added a new boolean parameter to the filesort_free_buffers procedure.
        If the value of this parameter is TRUE the procedure frees the sort_keys
        buffpek buffers.
      sql/sql_base.cc:
        Fixed bug #21727.
        Made sure that st_table::pos_in_table_list would be always initialized.
      sql/sql_select.cc:
        Fixed bug #21727.
        This is a performance issue for queries with subqueries evaluation
        of which requires filesort.
        Added a new boolean parameter to the filesort_free_buffers procedure.
        If the value of this parameter is TRUE the procedure frees the sort_keys
        buffpek buffers.
      sql/sql_show.cc:
        Fixed bug #21727.
        This is a performance issue for queries with subqueries evaluation
        of which requires filesort.
        Added a new boolean parameter to the filesort_free_buffers procedure.
        If the value of this parameter is TRUE the procedure frees the sort_keys
        buffpek buffers.
      sql/sql_table.cc:
        Fixed bug #21727.
        This is a performance issue for queries with subqueries evaluation
        of which requires filesort.
        Cleanup.
      sql/table.cc:
        Fixed bug #21727.
        This is a performance issue for queries with subqueries evaluation
        of which requires filesort.
        Added st_table_list::in_subselect() returning for a table the subselect that 
        contains the FROM list this table is taken from (if there is any).
      sql/table.h:
        Fixed bug #21727.
        This is a performance issue for queries with subqueries evaluation
        of which requires filesort.
        Added fields for sort_keys and buffpek buffers to the FILESORT_INFO structure.
      0388991b
  2. 16 Oct, 2006 2 commits
    • unknown's avatar
      Fixed bug #19579: at range analysis optimizer did not take into · 93a82420
      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.
      93a82420
    • unknown's avatar
      BUG#14019 : group by converts literal string to column name · a885a6db
      unknown authored
         When resolving unqualified name references MySQL was not
         checking what is the item type for the reference. Thus
         e.g a string literal item that has by convention a name
         equal to its string value will also work as a reference to 
         a SELECT list item or a table field.
         Fixed by allowing only Item_ref or Item_field to referenced by
         (unqualified) name.
      
      
      mysql-test/r/func_gconcat.result:
        Bug #14019: group by converts literal string to column name
         - removed undeterministic testcase : order by a constant 
           means no order.
      mysql-test/r/group_by.result:
        Bug #14019: group by converts literal string to column name
         - test case
      mysql-test/t/func_gconcat.test:
        Bug #14019: group by converts literal string to column name
         - removed undeterministic testcase : order by a constant 
           means no order.
      mysql-test/t/group_by.test:
        Bug #14019: group by converts literal string to column name
         - test case
      sql/sql_base.cc:
        Bug #14019: group by converts literal string to column name
         - resolve unqualified by name refs only for real references
      a885a6db
  3. 28 Sep, 2006 1 commit
    • unknown's avatar
      Fixed bug#5505: Wrong error message on INSERT into a view · 9cf17a35
      unknown authored
      On an INSERT into an updatable but non-insertable view an error message was
      issued stating the view being not updatable. This can lead to a confusion of a
      user.
      
      A new error message is introduced. Is is showed when a user tries to insert
      into a non-insertable view.
      
      
      sql/sql_base.cc:
        Fixed bug#5505: Wrong error message on INSERT into a view
        The update_non_unique_table_error() function now issues proper
        error for an INSERT.
      sql/sql_insert.cc:
        Fixed bug#5505: Wrong error message on INSERT into a view
        Issue the ER_NON_INSERTABLE_TABLE error instead of the 
        ER_NON_UPDATABLE_TABLE on insert into a view.
      sql/sql_view.cc:
        Fixed bug#5505: Wrong error message on INSERT into a view
        Issue the ER_NON_INSERTABLE_TABLE error instead of the
        ER_NON_UPDATABLE_TABLE on insert into a view.
      mysql-test/r/view.result:
        Added the test case for bug#5505: Wrong error message on INSERT into a view
        Corrected a few test cases after fixing bug#5505
      mysql-test/t/view.test:
        Added the test case for bug#5505: Wrong error message on INSERT into a view
        Corrected a few test cases after fixing bug#5505
      sql/share/errmsg.txt:
        Fixed bug#5505: Wrong error message on INSERT into a view
        Added the ER_NON_INSERTABLE_TABLE error definition.
      9cf17a35
  4. 12 Sep, 2006 1 commit
    • unknown's avatar
      Fix for BUG#21774: Column count doesn't match value count at row x · f8ce6e25
      unknown authored
      The cause of the bug was an incomplete fix for bug 18080.
      The problem was that setup_tables() unconditionally reset the
      name resolution context to its 'tables' argument, which pointed
      to the first table of an SQL statement.
      
      The bug fix limits resetting of the name resolution context in
      setup_tables() only in the cases when the context was not set
      by earlier parser/optimizer phases.
      
      
      mysql-test/r/insert_select.result:
        Test for BUG#21774.
      mysql-test/t/insert_select.test:
        Test for BUG#21774.
      sql/sql_base.cc:
        Do not reset the name resolution contect unconditionally.
        Instead set the context to 'tables' only if it was not
        set before calling setup_tables().
      sql/sql_insert.cc:
        Added asserts to make sure that in the case of INSERT ... VALUES ...
        statements it is not necessary to reset the name resolution context
        to the first table, because there is only one table in the list of
        tables anyway. The actual code is not removed in order not to
        confuse it with the actual bug fix.
      sql/sql_parse.cc:
        Removed unnecessary reset of the name resolution context.
        The context is anyway unconditionally reset in mysql_insert()
        and mysql_prepare_insert().
      f8ce6e25
  5. 21 Aug, 2006 1 commit
    • unknown's avatar
      BUG#21582 mysql server crashes in close_temporary_tables · 1562ffac
      unknown authored
      the problem is described and resolved by 20919 which fix happened not to have got to
      the release tree. Applying the patch of the parent bug.
      
      
      sql/sql_base.cc:
        BUG#21582 mysql server crashes in close_temporary_tables
        appeared to be a dup of 20919. Applying the patch of the latter to fix this but
        in specific mysql-5.0-release tree.
      1562ffac
  6. 15 Aug, 2006 1 commit
    • unknown's avatar
      Fixed bug#21261: Wrong access rights was required for an insert into a view · f7f5bf63
      unknown authored
      SELECT right instead of INSERT right was required for an insert into to a view.
      This wrong behaviour appeared after the fix for bug #20989. Its intention was
      to ask only SELECT right for all tables except the very first for a complex
      INSERT query. But that patch has done it in a wrong way and lead to asking 
      a wrong access right for an insert into a view.
      
      The setup_tables_and_check_access() function now accepts two want_access
      parameters. One will be used for the first table and the second for other
      tables.
      
      
      mysql-test/t/view.test:
        Added a test case for bug#21261: Wrong access rights was required for an insert into a view
      mysql-test/r/view.result:
        Added a test case for bug#21261: Wrong access rights was required for an insert into a view
      sql/sql_update.cc:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        Modified to use updated setup_tables_and_check_access() function.
      sql/sql_select.cc:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        Modified to use updated setup_tables_and_check_access() function.
      sql/sql_load.cc:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        Modified to use updated setup_tables_and_check_access() function.
      sql/sql_insert.cc:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        Modified to use updated setup_tables_and_check_access() function.
      sql/sql_delete.cc:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        Modified to use updated setup_tables_and_check_access() function.
      sql/sql_base.cc:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        The setup_tables_and_check_access() function now accepts two want_access
        parameters. One will be used for the first table and the second for other
        tables.
      sql/mysql_priv.h:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        The setup_tables_and_check_access() function now accepts two want_access
        parameters.
      f7f5bf63
  7. 08 Aug, 2006 1 commit
    • unknown's avatar
      sql_base.cc, unireg.h, sql_lex.h, table.cc, sql_view.h, sql_view.cc: · 2a0e6f80
      unknown authored
        Correct memory leak fix
      
      
      sql/unireg.h:
        Correct memory leak fix
      sql/table.cc:
        Correct memory leak fix
      sql/sql_view.h:
        Correct memory leak fix
      sql/sql_view.cc:
        Correct memory leak fix
      sql/sql_lex.h:
        Correct memory leak fix
      sql/sql_base.cc:
        Correct memory leak fix
      2a0e6f80
  8. 25 Jul, 2006 1 commit
    • unknown's avatar
      Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called · cda97091
      unknown authored
        When executing INSERT over a view with calculated columns it was assuming all
        elements of the fields collection are actually Item_field instances.
        This may not be true when inserting into a view and that view has columns that are 
        such expressions that allow updating (like setting a collation for example).
        Corrected to access field information through the filed_for_view_update() function and 
        retrieve correctly the field info even for "update-friendly" non-Item_field items.
      
      
      mysql-test/r/view.result:
        Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called
         - test suite
      mysql-test/t/view.test:
        Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called
         - test suite
      sql/item_strfunc.h:
        Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called
         - obvious typo fixed
      sql/sql_base.cc:
        Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called
         - must access field information through the filed_for_view_update() function to retrieve
           correctly the field info even for "update-friendly" non-Item_field items.
      cda97091
  9. 21 Jul, 2006 1 commit
    • unknown's avatar
      Fix for BUG#21007. · 2ce5582a
      unknown authored
      The problem was that store_top_level_join_columns() incorrectly assumed
      that the left/right neighbor of a nested join table reference can be only
      at the same level in the join tree.
      
      The fix checks if the current nested join table reference has no immediate
      left/right neighbor, and if so chooses the left/right neighbors of the
      nearest upper level, where these references are != NULL.
      
      
      mysql-test/r/group_min_max.result:
        Test for BUG#21007.
      mysql-test/t/group_min_max.test:
        Test for BUG#21007.
      sql/sql_base.cc:
        After computing and materializing the columns of all NATURAL joins in a FROM clause,
        the procedure store_top_level_join_columns() has to change the current natural join
        into a leaf table reference for name resolution. For this it needs to make the left
        neighbor point to the natural join table reference, and the natural join itself point
        to its left neighbor.
        
        This fix correctly determines the left/right neighbors of a table reference, even if
        the neghbors are at higher levels in the nested join tree. The rule is that if a table
        reference has no immediate left/right neighbors, we recursively pick the left/right
        neighbor of the level(s) above.
      2ce5582a
  10. 09 Jul, 2006 1 commit
    • unknown's avatar
      BUG#20919 temp tables closing fails when binlog is off · 259ab342
      unknown authored
      closing temp tables through end_thread
      had a flaw in binlog-off branch of close_temporary_tables where
      next table to close was reset via table->next
       for (table= thd->temporary_tables; table; table= table->next)
      which was wrong since the current table instance got destoyed at
      	close_temporary(table, 1);
      
      The fix adapts binlog-on branch method to engage the loop's internal 'next' variable which holds table->next prior table's destoying.
      
      
      
      sql/sql_base.cc:
        no-binlog branch is fixed: scanning across temporary_tables must be careful to save next table since the current is being destroyed inside of close_temporary. 
        binlog-is-open case is ok.
      259ab342
  11. 26 Jun, 2006 1 commit
    • unknown's avatar
      Bug#16986 - Deadlock condition with MyISAM tables · e6d5fe0f
      unknown authored
      Addendum fixes after changing the condition variable
      for the global read lock.
      
      The stress test suite revealed some deadlocks. Some were
      related to the new condition variable (COND_global_read_lock)
      and some were general problems with the global read lock.
      
      It is now necessary to signal COND_global_read_lock whenever 
      COND_refresh is signalled.
      
      We need to wait for the release of a global read lock if one 
      is set before every operation that requires a write lock.
      But we must not wait if we have locked tables by LOCK TABLES.
      After setting a global read lock a thread waits until all
      write locks are released.
      
      
      mysql-test/r/lock_multi.result:
        Bug#16986 - Deadlock condition with MyISAM tables
        Addendum fixes after changing the condition variable
        for the global read lock.
        Added test results.
      mysql-test/t/lock_multi.test:
        Bug#16986 - Deadlock condition with MyISAM tables
        Addendum fixes after changing the condition variable
        for the global read lock.
        Added tests for possible deadlocks that did not occur
        with the stress test suite.
      mysys/thr_lock.c:
        Bug#16986 - Deadlock condition with MyISAM tables
        Addendum fixes after changing the condition variable
        for the global read lock.
        Added a protection against an infinite loop that occurs
        with the test case for Bug #20662.
      sql/lock.cc:
        Bug#16986 - Deadlock condition with MyISAM tables
        Addendum fixes after changing the condition variable
        for the global read lock.
        Signal COND_global_read_lock whenever COND_refresh
        is signalled by using the new function broadcast_refresh().
        Added the definition of a new function that signals 
        COND_global_read_lock whenever COND_refresh is signalled.
      sql/mysql_priv.h:
        Bug#16986 - Deadlock condition with MyISAM tables
        Addendum fixes after changing the condition variable
        for the global read lock.
        Added a declaration for a new function that signals 
        COND_global_read_lock whenever COND_refresh is signalled.
      sql/sql_base.cc:
        Bug#16986 - Deadlock condition with MyISAM tables
        Addendum fixes after changing the condition variable
        for the global read lock.
        Signal COND_global_read_lock whenever COND_refresh
        is signalled by using the new function broadcast_refresh().
      sql/sql_handler.cc:
        Bug#16986 - Deadlock condition with MyISAM tables
        Addendum fixes after changing the condition variable
        for the global read lock.
        Signal COND_global_read_lock whenever COND_refresh
        is signalled by using the new function broadcast_refresh().
      sql/sql_insert.cc:
        Bug#16986 - Deadlock condition with MyISAM tables
        Addendum fixes after changing the condition variable
        for the global read lock.
        Removed global read lock handling from inside of 
        INSERT DELAYED. It is handled on a higher level now.
      sql/sql_parse.cc:
        Bug#16986 - Deadlock condition with MyISAM tables
        Addendum fixes after changing the condition variable
        for the global read lock.
        Wait for the release of a global read lock if one is set
        before every operation that requires a write lock.
        But don't wait if locked tables exist already.
      sql/sql_table.cc:
        Bug#16986 - Deadlock condition with MyISAM tables
        Addendum fixes after changing the condition variable
        for the global read lock.
        Removed global read lock handling from inside of 
        CREATE TABLE. It is handled on a higher level now.
        Signal COND_global_read_lock whenever COND_refresh
        is signalled by using the new function broadcast_refresh().
      e6d5fe0f
  12. 21 Jun, 2006 1 commit
    • unknown's avatar
      Bug #20482: failure on Create join view with sources views/tables in different · b58879dd
      unknown authored
                  schemas
      The function check_one_table_access() called to check access to tables in 
      SELECT/INSERT/UPDATE was doing additional checks/modifications that don't hold
      in the context of setup_tables_and_check_access().
      That's why the check_one_table() was split into two : the functionality needed by
      setup_tables_and_check_access() into check_single_table_access() and the rest of 
      the functionality stays in check_one_table_access() that is made to call the new
      check_single_table_access() function.
      
      
      mysql-test/r/view_grant.result:
        Bug #20482: failure on Create join view with sources views/tables in different 
                    schemas
        - test suite for the bug
      mysql-test/t/view_grant.test:
        Bug #20482: failure on Create join view with sources views/tables in different 
                    schemas
        - test suite for the bug
      sql/mysql_priv.h:
        Bug #20482: failure on Create join view with sources views/tables in different 
                    schemas
        - check_one_table_access split into 2
      sql/sql_base.cc:
        Bug #20482: failure on Create join view with sources views/tables in different 
                    schemas
        - the new sub-function called
      sql/sql_parse.cc:
        Bug #20482: failure on Create join view with sources views/tables in different 
                    schemas
        - check_one_table_access() split into two : check_single_table_access() to 
          actually check access to the table(ro) and check_one_table_access() that calls
          check_single_table_access() and checks also the tables belonging to sub selects
          or implicitly opened tables.
      b58879dd
  13. 08 Jun, 2006 1 commit
    • unknown's avatar
      Bug #15355: Common natural join column not resolved in prepared statement nested · 168caddb
      unknown authored
        query
      Problem:
      There was a wrong context assigned to the columns that were added in insert_fields()
      when expanding a '*'. When this is done in a prepared statement it causes 
      fix_fields() to fail to find the table that these columns reference.
      Actually the right context is set in setup_natural_join_row_types() called at the 
      end of setup_tables(). However when executed in a context of a prepared statement
      setup_tables() resets the context, but setup_natural_join_row_types() was not
      setting it to the correct value assuming it has already done so.
      
      Solution:
      The top-most, left-most NATURAL/USING join must be set as a 
      first_name_resolution_table in context even when operating on prepared statements.
      
      
      mysql-test/r/join.result:
        testsuite for the bug
      mysql-test/t/join.test:
        testsuite for the bug
      sql/sql_base.cc:
        The context must be set even when executed as prepared statement.
      168caddb
  14. 01 Jun, 2006 1 commit
  15. 30 May, 2006 1 commit
    • unknown's avatar
      Fixed bug #17873: confusing error message when IGNORE/USE/FORCE INDEX · 031cf6a3
      unknown authored
      refers to a column name.
      
      
      mysql-test/r/select.result:
        Fixed bug #17873: confusing error message when IGNORE/USE/FORCE INDEX
        refers to a column name.
        Added a new test case.
      mysql-test/t/select.test:
        Fixed bug #17873: confusing error message when IGNORE/USE/FORCE INDEX
        refers to a column name.
        Added a new test case.
      sql/share/czech/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/danish/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/dutch/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/english/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/estonian/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/french/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/german/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/greek/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.\
      sql/share/hungarian/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/italian/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/japanese-sjis/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.\
      sql/share/japanese/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/korean/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/norwegian-ny/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/norwegian/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/polish/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/portuguese/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/romanian/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/russian/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/serbian/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/slovak/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/spanish/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/swedish/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      sql/share/ukrainian/errmsg.txt:
        Removed error message ER_INDEX_DOES_NOT_EXIST,
        used ER_KEY_DOES_NOT_EXITS instead.
      031cf6a3
  16. 28 May, 2006 1 commit
    • unknown's avatar
      Fixed bug #17873: confusing error message when IGNORE/USE/FORCE INDEX · 883291a2
      unknown authored
      refers to a column name.
      Added a new error message ER_INDEX_DOES_NOT_EXIST.
      
      
      include/mysqld_error.h:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      include/sql_state.h:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      mysql-test/r/explain.result:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      mysql-test/r/key_cache.result:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      mysql-test/r/preload.result:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      mysql-test/r/select.result:
        Added a test case for bug #17873.
      mysql-test/t/explain.test:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      mysql-test/t/select.test:
        Added a test case for bug #17873.
      sql/share/czech/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/danish/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/dutch/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/english/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/estonian/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/french/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/german/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/greek/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/hungarian/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/italian/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/japanese-sjis/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/japanese/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/korean/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/norwegian-ny/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/norwegian/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/polish/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/portuguese/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/romanian/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/russian/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/serbian/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/slovak/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/spanish/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/swedish/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      sql/share/ukrainian/errmsg.txt:
        Fixed bug #17873.
        Added a new error message ER_INDEX_DOES_NOT_EXIST.
      883291a2
  17. 26 May, 2006 1 commit
    • unknown's avatar
      BUG#18681: View privileges are broken · 89444fa0
      unknown authored
      The check for view security was lacking several points :
      1. Check with the right set of permissions : for each table ref that
      participates in a view there were the right credentials to use in it's
      security_ctx member, but these weren't used for checking the credentials.
      This makes hard enforcing the SQL SECURITY DEFINER|INVOKER property
      consistently.
      2. Because of the above the security checking for views was just ruled out
      in explicit ways in several places.
      3. The security was checked only for the columns of the tables that are
      brought into the query from a view. So if there is no column reference
      outside of the view definition it was not detecting the lack of access to
      the tables in the view in SQL SECURITY INVOKER mode.
      
      The fix below tries to fix the above 3 points.
      
      
      mysql-test/r/grant.result:
        removed nondeterminism (unspecified order) in some test output
      mysql-test/r/view_grant.result:
        Somewhat extended test case for the bug and similar queries.
      mysql-test/t/grant.test:
        removed nondeterminism (unspecified order) in some test output
      mysql-test/t/view_grant.test:
        Somewhat extended test case for the bug and similar queries.
      sql/mysql_priv.h:
        A wrapper for setup_tables that also checks access to the tables
      sql/sql_acl.cc:
        removed artificial security check stop and used the table ref's credentials.
      sql/sql_base.cc:
        a wrapper for setup_tables to check access to the tables
      sql/sql_delete.cc:
        wrapper called.
      sql/sql_insert.cc:
        wrapper called
      sql/sql_load.cc:
        wrapper called
      sql/sql_parse.cc:
        wrapper called and artificial check stop removed
      sql/sql_select.cc:
        wrapper called
      sql/sql_update.cc:
        wrapper called
      sql/table.cc:
        Mask table access to the view error as well.
      89444fa0
  18. 24 May, 2006 1 commit
    • unknown's avatar
      More DBUG statements · 15a41be4
      unknown authored
      Replaced COND_refresh with COND_global_read_lock becasue of a bug in NTPL threads when using different mutexes as arguments to pthread_cond_wait()
      The original code caused a hang in FLUSH TABLES WITH READ LOCK in some circumstances because pthread_cond_broadcast() was not delivered to other threads.
      This fixes:
      Bug#16986: Deadlock condition with MyISAM tables
      Bug#20048: FLUSH TABLES WITH READ LOCK causes a deadlock
      
      
      mysql-test/r/flush.result:
        Added test case for deadlock with FLUSH TABLES WITH READ LOCK
      mysql-test/r/lock_multi.result:
        Test for bug in LOCK TABLE + optimize table
      mysql-test/t/flush.test:
        Added test case for deadlock with FLUSH TABLES WITH READ LOCK
      mysql-test/t/lock_multi.test:
        Test for bug in LOCK TABLE + optimize table
      sql/lock.cc:
        Replaced COND_refresh with COND_global_read_lock becasue of a bug in NTPL threads when using different mutexes as arguments to pthread_cond_wait()
        The original code caused a hang in FLUSH TABLES WITH READ LOCK in some circumstances because pthread_cond_broadcast() was not delivered to other threads
      sql/mysql_priv.h:
        Added COND_global_read_lock
      sql/mysqld.cc:
        Added COND_global_read_lock
      sql/sql_base.cc:
        More DBUG statements
        Added a broadcast in remove_table_from_cache() to release any threads waiting in open
      15a41be4
  19. 15 May, 2006 1 commit
    • unknown's avatar
      BUG#14157: utf8 encoding in binlog without set character_set_client: e.g DROP temporary · fdc41a0a
      unknown authored
      specific to 5.0 version of the patch is motivated by the fact that a wrapper over 
      MYSQLLOG::write can not help in 5.0 where query's charset is embedded into event instance in the constructor.
      
      
      sql/mysql_priv.h:
        this 4.1 specific code does not help in 5.0
      sql/sql_base.cc:
        No wrapper similar to 4.1's version is done since Query_log_event constructor
        takes care of encodings in 5.0 whereas log::write method does it in 4.1.
        We can introduce an additional constuctor for Query_log_event to pass desired
        (i.e system_character_info) charset different from THD's version.
        But I am delaying this while there are not more bugs similar to this one reported.
      fdc41a0a
  20. 14 May, 2006 1 commit
  21. 12 May, 2006 1 commit
    • unknown's avatar
      BUG#19188: incorrect temporary table name of DROP query in replication · 01e8c6c2
      unknown authored
        A pattern to generate binlog for DROPped temp table in close_temporary_tables
        was buggy: could not deal with a grave-accent-in-name table.
      
        The fix exploits `append_identifier()' for quoting and duplicating accents.
      
      
      mysql-test/r/rpl_temporary.result:
        results changed
      mysql-test/t/rpl_temporary.test:
        more correct internal table emulation; typo of @@session in bug#17263.
      sql/mysql_priv.h:
        bool is_user_table(TABLE * table) 
        is added to answer wheather temporary table was created explicitly.
      sql/sql_base.cc:
        Utilizing `append_identifier' to quote. `close_temporary_tables' once again recoded
        I hope to become much simplier than previously. No-binlog branch is separated completely the
        rest that adopts String's methods.
      01e8c6c2
  22. 09 May, 2006 2 commits
    • unknown's avatar
      BUG#14157: utf8 encoding in binlog without set character_set_client e.g DROP temporary · 40a61fbc
      unknown authored
      Binlog lacks encoding info about DROPped temporary table.
      
      Idea of the fix is to switch temporary to system_charset_info when a temporary table
      is DROPped for binlog. Since that is the server, that automatically, but not the client, who generates the query
      the binlog should be updated on the server's encoding for the coming DROP.
      The `write_binlog_with_system_charset()' is introduced to replace similar problematic places in the code.
      
      
      mysql-test/r/drop_temp_table.result:
        results changed
      mysql-test/r/mix_innodb_myisam_binlog.result:
        results changed
      mysql-test/r/mysqlbinlog.result:
        results changed
      mysql-test/r/rpl_temporary.result:
        results changed
      mysql-test/t/mysqlbinlog.test:
        Check roll-forward recovery from binlog where there are DROP temporary tables created
        in koi8r.
      mysql-test/t/rpl_temporary.test:
        Check slave digests binlog with DROP temporary tables created in koi8r.
      sql/mysql_priv.h:
        `write_binlog_with_system_charset()' is added to be called when a binlog event
        is created "implicitly" like DROP temporary table is case of closing connection.
      sql/sql_base.cc:
        Idea of the fix is to switch temporary to system_charset_info when a temporary table
        is DROPped for binlog. Since that is the server, not the client, who generates the query
        the binlog should be updated on server's encoding for the coming DROP.
      40a61fbc
    • unknown's avatar
      Fix for bugs#12472/#15137 'CREATE TABLE ... SELECT ... which explicitly · 32094172
      unknown authored
      or implicitly uses stored function gives "Table not locked" error'
      
      CREATE TABLE ... SELECT ... statement which was explicitly or implicitly
      (through view) using stored function gave "Table not locked" error.
      
      The actual bug resides in the current locking scheme of CREATE TABLE SELECT
      code, which first opens and locks tables of the SELECT statement itself,
      and then, having SELECT tables locked, creates the .FRM, opens the .FRM and
      acquires lock on it. This scheme opens a possibility for a deadlock, which
      was present and ignored since version 3.23 or earlier. This scheme also
      conflicts with the invariant of the prelocking algorithm -- no table can
      be open and locked while there are tables locked in prelocked mode.
      
      The patch makes an exception for this invariant when doing CREATE TABLE ...
      SELECT, thus extending the possibility of a deadlock to the prelocked mode.
      We can't supply a better fix in 5.0.
      
      
      mysql-test/r/sp.result:
        Added tests for bugs#12472/#15137 'CREATE TABLE ... SELECT ... which
        explicitly or implicitly uses stored function gives "Table not locked" error'
      mysql-test/t/sp.test:
        Added tests for bugs#12472/#15137 'CREATE TABLE ... SELECT ... which
        explicitly or implicitly uses stored function gives "Table not locked" error'
      sql/mysql_priv.h:
        Added flag which can be passed to open_table() routine in order to ignore
        set of locked tables and prelocked mode.
        We don't need declaration of create_table_from_items() any longer as it was
        moved into sql_insert.cc and made static.
      sql/sql_base.cc:
        open_table():
          Added flag which allows open table ignoring set of locked tables and
          prelocked mode.
      sql/sql_insert.cc:
        Moved create_table_from_items() from sql_table.cc to sql_insert.cc as it was
        not used outside of sql_insert.cc and contains code which is specific for
        CREATE TABLE ... SELECT.
        Also now when we are executing CREATE TABLE ... SELECT ... statement which
        SELECT part requires execution in prelocked mode we ignore set of locked
        tables in order to get access to the table we just have created.
        We probably don't want to do this if we are under real LOCK TABLES since
        it will widen window for deadlock too much.
      sql/sql_table.cc:
        Moved create_table_from_items() routine into sql_insert.cc, since it was not
        used anywhere outside of this file and contains logic which is specific for
        CREATE TABLE ... SELECT statement.
      32094172
  23. 23 Apr, 2006 4 commits
    • unknown's avatar
      Bug#17263 temporary tables and replication · ca736be3
      unknown authored
      The fix refines the algorithm of generating DROPs for binlog. 
      Temp tables with common pseudo_thread_id are clustered into one query. 
      Consequently one replication event per pseudo_thread_id is generated.
      
      
      mysql-test/r/rpl_temporary.result:
        results
      mysql-test/t/rpl_temporary.test:
        Creating temp tables associated with a set of pseudo_thread_id values within a connection.
        The aim is to see that slave digest master's binlog consisting of DROP temprorary tables.
      sql/sql_base.cc:
        close_temporary_tables is rewritten to generate sequence of DROP temprorary tables with common preudo_thread_id stored in temp table definition.
      ca736be3
    • unknown's avatar
      Bug#17263: incorrect DROP query in temporary tables replication · 8f51b7c6
      unknown authored
      accounting non-ai32 in tmpkeyval. This changeset is supposed to be specifically for 4.1.
      Another changeset is going to push into 5. 
      
      
      sql/sql_base.cc:
        correction due to uint4korr definition: can not sizeof on not ia32.
      8f51b7c6
    • unknown's avatar
      manual merge use local · b1f080d2
      unknown authored
      b1f080d2
    • unknown's avatar
      Bug#17263 temporary tables and replication · 96bc42aa
      unknown authored
        Backporting a changeset made for 5.0. Comments from there:
      
        The fix refines the algorithm of generating DROPs for binlog.
        Temp tables with common pseudo_thread_id are clustered into one query.
        Consequently one replication event per pseudo_thread_id is generated.
      
      
      
      
      mysql-test/r/rpl_temporary.result:
        results changed
      mysql-test/t/rpl_temporary.test:
        test to generate problematic drop in binlog to feed it to restarting slave
        to see no stop.
      sql/sql_base.cc:
        change in drop temprorary tables alg in close_temporary_tables.
      96bc42aa
  24. 19 Apr, 2006 3 commits
  25. 02 Mar, 2006 1 commit
    • unknown's avatar
      Fix for BUG#15229. · e7e929ec
      unknown authored
      The cause of this bug was a design flaw due to which the list of natural
      join columns was incorrectly computed and stored for nested joins that
      are not natural joins, but are operands (possibly indirect) of nested joins.
      
      The patch corrects the flaw in a such a way, that the result columns of a
      table reference are materialized only if it is a leaf table (that is, only
      if it is a view, stored table, or natural/using join).
      
      
      mysql-test/r/join.result:
        Added test for BUG#15229 and uncommented failing test cases of
        BUG#15357 (now fixed by this patch).
      mysql-test/t/join.test:
        Added test for BUG#15229 and uncommented failing test cases of
        BUG#15357 (now fixed by this patch).
      sql/sql_base.cc:
        - Do not materialize the result columns of regular nested joins
          (that are not natural/using joins).
        - Moved most of the code that creates/adds new natural join column
          references to the method 'get_or_create_column_ref', and simplified
          'mark_common_columns'.
        - Replaced a call to 'get_or_create_column_ref' with 'get_natural_column_ref'
          where it is for sure all columns are alredy created.
      sql/table.cc:
        - Modified the method 'get_or_create_column_ref' so that it adds itself
          the newly created natural join columns to the respective table reference.
      sql/table.h:
        - Modified the method 'get_or_create_column_ref' so that it adds itself
          the newly created natural join columns to the respective table reference.
      e7e929ec
  26. 25 Feb, 2006 1 commit
    • unknown's avatar
      Fixed compiler warnings from gcc 4.0.2: · 59ebf42d
      unknown authored
      - Added empty constructors and virtual destructors to many classes and structs
      - Removed some usage of the offsetof() macro to instead use C++ class pointers
      
      
      configure.in:
        Added comment
      ndb/include/ndbapi/NdbDictionary.hpp:
        Fixed compiler warnings from gcc 4.0.2
      sql/field.cc:
        Fixed compiler warnings from gcc 4.0.2
      sql/handler.h:
        Fixed compiler warnings from gcc 4.0.2
      sql/item.h:
        Fixed compiler warnings from gcc 4.0.2
      sql/item_cmpfunc.h:
        Fixed compiler warnings from gcc 4.0.2
      sql/log_event.h:
        Fixed compiler warnings from gcc 4.0.2
      sql/mysql_priv.h:
        Fixed compiler warnings from gcc 4.0.2
        For find_table_in_list I fixed it to use proper C++ class pointers instead of C style pointers
      sql/opt_range.cc:
        Fixed compiler warnings from gcc 4.0.2
      sql/parse_file.h:
        Fixed compiler warnings from gcc 4.0.2
      sql/sp_rcontext.h:
        Fixed compiler warnings from gcc 4.0.2
      sql/spatial.h:
        Fixed compiler warnings from gcc 4.0.2
      sql/sql_base.cc:
        Fixed compiler warnings from gcc 4.0.2
      sql/sql_cache.h:
        Fixed compiler warnings from gcc 4.0.2
      sql/sql_class.h:
        Fixed compiler warnings from gcc 4.0.2
      sql/sql_parse.cc:
        Fixed compiler warnings from gcc 4.0.2
        (Not pretty, but seams to work...)
      sql/sql_select.h:
        Fixed compiler warnings from gcc 4.0.2
      sql/sql_update.cc:
        Fixed compiler warnings from gcc 4.0.2
      sql/table.h:
        Fixed compiler warnings from gcc 4.0.2
      sql/tztime.cc:
        Fixed compiler warnings from gcc 4.0.2
      sql/tztime.h:
        Fixed compiler warnings from gcc 4.0.2
      59ebf42d
  27. 24 Feb, 2006 1 commit
    • unknown's avatar
      Fixes to embedded server to be able to run tests with it · 988f0be6
      unknown authored
      (Needed for "list of pushes" web page and autopush)
      
      
      include/mysql.h:
        Fix to embedded server to be able to run tests on it
      libmysql/libmysql.c:
        Fix to embedded server to be able to run tests on it
      libmysqld/emb_qcache.cc:
        Fix to embedded server to be able to run tests on it
      libmysqld/embedded_priv.h:
        Fix to embedded server to be able to run tests on it
      libmysqld/lib_sql.cc:
        Fix to embedded server to be able to run tests on it
      libmysqld/libmysqld.c:
        Fix to embedded server to be able to run tests on it
      mysql-test/mysql-test-run.sh:
        Fix to embedded server to be able to run tests on it
      mysql-test/r/binlog.result:
        Updated test for embedded server
      mysql-test/r/ctype_cp932.result:
        Updated test for embedded server
      mysql-test/r/innodb.result:
        Updated test for embedded server
      mysql-test/r/mysqltest.result:
        Updated test for embedded server
      mysql-test/r/query_cache.result:
        Updated test for embedded server
      mysql-test/r/query_cache_notembe...
      988f0be6
  28. 23 Feb, 2006 1 commit
    • unknown's avatar
      Cleanup. · 86f1f1bc
      unknown authored
      sql/sql_base.cc:
        Cleanup, remove a warning.
      sql/sql_select.h:
        Cleanup: remove a warning.
      86f1f1bc
  29. 16 Feb, 2006 1 commit
    • unknown's avatar
      Fix for bug #16593 "Deadlock or crash in stress test for case where · 641faab7
      unknown authored
      trigger starts trigger".
      
      In short, the deadlock/crash happened when execution of statement, which used
      stored functions or activated triggers, coincided with alteration of the
      tables used by these functions or triggers (in highly concurrent environment).
      
      Bug was caused by the incorrect handling of tables from prelocked set in
      open_tables() functions in situations when refresh happened. This fix replaces
      old smart but not very robust way of handling tables after refresh (which was
      closing only old tables), with new one which simply closes all tables opened so
      far and restarts open_tables().
      Also fixed handling of temporary tables in close_tables_for_reopen().
      
      No test case present since bug manifests itself only in concurrent environment.
      
      
      sql/mysql_priv.h:
        In order to handle correctly case when table list completely consists from tables
        from prelocked set close_tables_for_reopen() have to accept table list as in/out
        parameter.
      sql/sql_base.cc:
        open_tables():
          Removed part of comment  which was out of date.
          Changed handling of case when refresh happens during opening of tables, now
          instead of having code which decides for each table if it should be closed
          we simply close all tables. Old code also incorrectly handled tables from
          prelocked set in this situation which resulted in bug #16593 "Deadlock or
          crash in stress test for case where triggers starting trigger".
        close_tables_for_reopen():
          Now we correctly handle the case when table list completely consists from
          tables from prelocked set. Also now we simply close all tables instead
          leaving temporary tables non-closed (such approach allows easily handle
          correctly tables from prelocked set).
      sql/sql_prepare.cc:
        In order to handle correctly case when table list completely consists from tables
        from prelocked set close_tables_for_reopen() have to accept table list as in/out
        parameter.
      sql/sql_update.cc:
        In order to handle correctly case when table list completely consists from tables
        from prelocked set close_tables_for_reopen() have to accept table list as in/out
        parameter.
      641faab7
  30. 03 Feb, 2006 1 commit
    • unknown's avatar
      BUG#16893: Crash in test 'fulltext_order_by' · ff587ac9
      unknown authored
      Fixed that fulltext query + union results in unexpected behaviour.
      
      
      sql/item_func.h:
        Remove access to table object from cleanup() as the table object
        may have been dropped earlier (In case of temporary tables or of
        close_thread_tables() is run before cleanup())
        This fixed a bug with access to already freed memory
      sql/sql_base.cc:
        Reset variables used by fulltext
      ff587ac9
  31. 25 Jan, 2006 1 commit
    • unknown's avatar
      sql_base.cc: · 8188ca36
      unknown authored
        Small fix after merge of fix for bug#16510
      
      
      sql/sql_base.cc:
        Small fix after merge of fix for bug#16510
      8188ca36
  32. 23 Jan, 2006 1 commit
    • unknown's avatar
      Fixed bug #16510: Updating field named like '*name' caused server crash. · 313902c7
      unknown authored
      When setup_fields() function finds field named '*' it expands it to the list
      of all table fields. It does so by checking that the first char of
      field_name is '*', but it doesn't checks that the '* is the only char.
      Due to this, when updating table with a field named like '*name', such field
      is wrongly treated as '*' and expanded. This leads to making list of fields
      to update being longer than list of the new values. Later, the fill_record() 
      function crashes by dereferencing null when there is left fields to update,
      but no more values.
      
      Added check in the setup_fields() function which ensures that the field
      expanding will be done only when '*' is the only char in the field name.
      
      
      mysql-test/t/update.test:
        Added test case for bug#16510: Updating field named like '*name' caused server crash
      mysql-test/r/update.result:
        Added test case for bug#16510: Updating field named like '*name' caused server crash
      sql/sql_base.cc:
        Fixed bug #16510: Updating field named like '*name' caused server crash.
        Added check in the setup_fields() function which ensures that the field
        expanding will be done only when '*' is the only char in the field name.
      313902c7
  33. 10 Jan, 2006 1 commit