1. 07 Dec, 2005 1 commit
    • unknown's avatar
      Fix for bug #11555 "Stored procedures: current SP tables locking make · 0c8e312c
      unknown authored
      impossible view security".
      
      We should not expose names of tables which are explicitly or implicitly (via
      routine or trigger) used by view even if we find that they are missing.
      So during building of list of prelocked tables for statement we track which
      routines (and therefore tables for these routines) are used from views. We
      mark elements of LEX::routines set which correspond to routines used in views
      by setting Sroutine_hash_entry::belong_to_view member to point to TABLE_LIST
      object for topmost view which uses routine. We propagate this mark to all
      routines which are used by this routine and which we add to this set. We also
      mark tables used by such routine which we add to the list of tables for
      prelocking as belonging to this view.
      
      
      mysql-test/r/sp-error.result:
        Added test for bug #11555 "Stored procedures: current SP tables locking make 
        impossible view security".
      mysql-test/r/view.result:
        We should not expose tables which are expicitly/implicitly used in view in
        check table statement.
      mysql-test/t/sp-error.test:
        Added test for bug #11555 "Stored procedures: current SP tables locking make 
        impossible view security".
      mysql-test/t/view.test:
        Removed comment obsoleted by bugfix.
      sql/sp.cc:
        We should not expose names of tables which are explicitly or implicitly
        (via routine or trigger) used by view even if we find that they are missing.
        So during building of list of prelocked tables for statement we track which
        routines (and therefore tables for these routines) are used from views. We
        mark elements of LEX::routines set which correspond to routines used in views
        by setting Sroutine_hash_entry::belong_to_view member to point to TABLE_LIST
        object for topmost view which uses routine. We propagate this mark to all
        routines which are used by this routine and which we add to this set. We also
        mark tables used by such routine which we add to the list of tables for
        prelocking as belonging to this view.
      sql/sp.h:
        sp_cache_routines_and_add_tables_for_view()/for_triggers():
          To be able to determine correctly uppermost view which uses this view/table
          with trigger we have to pass pointer to TABLE_LIST object instead of pointer
          to view's LEX or to Table_triggers_list object.
      sql/sp_head.cc:
        sp_head::add_used_tables_to_table_list():
          Added new argument which allows to mark tables which are added to table
          list for prelocking as belonging to view (this allows properly hide names
          of tables which are used in routines used by views).
      sql/sp_head.h:
        sp_head::add_used_tables_to_table_list():
          Added new argument which allows to mark tables which are added to table
          list for prelocking as belonging to view (this allows properly hide names
          of tables which are used in routines used by views).
      sql/sql_base.cc:
        open_tables():
          sp_cache_routines_and_add_tables_for_view()/for_triggers() now accept
          pointer to table list element as last argument, this allows them to determine
          correctly uppermost view which uses this view/table with trigger.
      sql/sql_trigger.h:
        Table_triggers_list:
          sp_cache_routines_and_add_tables_for_triggers() now accept pointer to table
          list element as last argument, this allows to determine correctly uppermost
          view which uses this table with trigger.
      0c8e312c
  2. 30 Nov, 2005 1 commit
    • unknown's avatar
      WL#2486 - natural/using joins according to SQL:2003 · 9a724d87
      unknown authored
      Post-review fixes that simplify the way access rights
      are checked during name resolution and factor out all
      entry points to check access rights into one single
      function.
      
      
      sql/item.cc:
        Simplfied find_field_in_table - factored out all acces right checks
        into a separate function.
      sql/mysql_priv.h:
        Simplified the way we control whether to perform access right
        checks for columns.
      sql/sql_acl.cc:
        - Added new functon check_column_grant_in_table_ref that serves as a single
          point of entry to check access rights during name resolution for different
          kinds of table references.
        - Moved check_grant_column_in_sctx to sql_acl.cc where it
          logically belongs.
        - Removed the parameter check_grants - it is checked before
          calling the function.
      sql/sql_acl.h:
        - Added new function check_column_grant_in_table_ref.
        - Made check_grant_column_in_sctx available to other modules.
      sql/sql_base.cc:
        - Factored out all code that check access rights for columns during
          name resolution into one function - check_column_grant_in_table_ref.
        - Moved check_grant_column_in_sctx to sql_acl.cc where it
          logically belongs.
        - Removed the parameter check_grants - it is checked before
          calling the function.
      sql/table.cc:
        Removed code that duplicates the functionality of
        check_column_grant_in_table_ref, and called directly
        that function.
      sql/table.h:
        check_grants method is replaced by more general
        check_column_grant_in_table_ref.
      9a724d87
  3. 28 Nov, 2005 1 commit
    • unknown's avatar
      WL#2486 - Natural/using join according to SQL:2003. · 35c5237c
      unknown authored
      Post-review fixes according to Monty's review.
      
      
      sql/item.h:
        Unite all code that stores and restores the state of a name resolution context
        into a class to represent the state, and methods to save/restore that
        state.
      sql/mysql_priv.h:
        Reorder parameters so that length is after the name of a field,
        and database is before table name.
      sql/sql_acl.cc:
        Reorder parameters so that length is after the name of a field,
        and database is before table name.
      sql/sql_base.cc:
        * Reorder parameters so that length is after the name of a field,
          and database is before table name.
        * Added new method - Field_iterator_table_ref::get_natural_column_ref
          to avoid unnecessary code when it is knwon that no new columns will
          be created when accessing natural join columns.
      sql/sql_insert.cc:
        Unite all code that stores and restores the state of a name resolution context
        into a class to represent the state, and methods to save/restore that
        state.
      sql/sql_lex.cc:
        Removed obsolete comment.
      sql/sql_lex.h:
        Return error from push_contex() if there is no memory.
      sql/sql_list.h:
        Extended base_list_iterator, List_iterator, and List_iterator_fast with an
        empty constructor, and init() methods, so that one doesn't have to construct
        a new iterator object every time one needs to iterate over a new list.
      sql/sql_parse.cc:
        Moved common functionality from the parser into one function, and renamed
        the function to better reflect what it does.
      sql/sql_yacc.yy:
        Moved common functionality from the parser into one function, and renamed
        the function to better reflect what it does.
      sql/table.cc:
        * Extended base_list_iterator, List_iterator, and List_iterator_fast with an
          empty constructor, and init() methods, so that one doesn't have to construct
          a new iterator object every time one needs to iterate over a new list.
        * Added new method Field_iterator_table_ref::get_natural_column_ref to be
          used in cases when it is known for sure that no new columns should be
          created.
      sql/table.h:
        - column_ref_it no longer allocated for each new list of columns
        - new method get_natural_join_column for faster/simpler access
          to natural join columns.
      35c5237c
  4. 25 Nov, 2005 1 commit
    • unknown's avatar
      Fixed BUG#14233: Crash after tampering with the mysql.proc table · df98bb60
      unknown authored
        Post-review version. Some minor review fixes, but also changed the way
        some errors are handled: Don't return specific parse errors; instead
        always use the more general "table corrupt" error (amended accordingly).
      
      
      mysql-test/r/sp-destruct.result:
        Updated results.
      mysql-test/r/sp-error.result:
        Updated for fully qualified name in "no return" error message.
      mysql-test/t/sp-destruct.test:
        Adopted the more consistent error handling for a corrupted mysql.proc table.
        (No more "parse error" et al).
      sql/share/errmsg.txt:
        Changed ER_SP_PROC_TABLE_CORRUPT to be more explicit.
      sql/sp.cc:
        Review fixes.
        Changed the handling of parse errors, and added the routine name to the "table corrupt" error message.
      sql/sql_base.cc:
        Review changes: Change error tests and added comments.
      sql/sql_parse.cc:
        Mored ER_SP_NORETURN test of functions to sql_yacc.yy for more general error handling.
      sql/sql_yacc.yy:
        Mored ER_SP_NORETURN test of functions from sql_parse.cc for more general error handling.
      df98bb60
  5. 24 Nov, 2005 1 commit
    • unknown's avatar
      Don't use PATH_MAX for FN_REFLEN as this uses too much stack space · 6eed9d51
      unknown authored
      Larger stack size neaded for open table on x86 64 bit
      Fix failing test cases
      Deleted symlink from bk
      
      
      BitKeeper/etc/ignore:
        added libmysqld/ha_blackhole.cc
      BitKeeper/deleted/.del-ha_blackhole.cc~727c69ef7846623a:
        Delete: libmysqld/ha_blackhole.cc
      include/my_global.h:
        Don't use PATH_MAX for FN_REFLEN as this uses too much stack space.
        (With a PATH_MAX of 4096, we use 80K for opening a table as there is several objects of size FN_REFLEN on stack)
      mysql-test/r/federated.result:
        Update results after error message changes
      mysql-test/r/grant.result:
        Update results after error message changes
      mysql-test/r/grant2.result:
        Update results after error message changes
      sql/ha_federated.cc:
        Fix error messages to be more consistent
      sql/mysql_priv.h:
        Stack size to have when opening a table
        (This was needed on x86 64 bit Linux)
      sql/share/errmsg.txt:
        Remove quotes around error string for federated as two quotes in the output looks stran...
      6eed9d51
  6. 22 Nov, 2005 1 commit
    • unknown's avatar
      Recursion support made for SP (BUG#10100). · d0645e35
      unknown authored
      client/mysqltest.c:
        An expected error messages hiding from the log if disable_result_log is in force.
      mysql-test/r/sp-dynamic.result:
        The test expanded for case of allowed/disalowed recursion.
      mysql-test/r/sp-error.result:
        Error messages changed.
        Test of bug11394() made with allowed recursion.
      mysql-test/r/sp.result:
        Tests for recursion.
      mysql-test/r/trigger.result:
        Check that triggers are not affected by this patch.
      mysql-test/r/variables.result:
        Test of max_sp_recursion_depth variable.
      mysql-test/t/sp-dynamic.test:
        The test expanded for case of allowed/disalowed recursion.
      mysql-test/t/sp-error.test:
        Error messages changed.
        Test of bug11394() made with allowed recursion.
      mysql-test/t/sp.test:
        Tests for recursion.
      mysql-test/t/trigger.test:
        Check that triggers are not affected by this patch.
      mysql-test/t/variables.test:
        Test of max_sp_recursion_depth variable.
      sql/item_func.cc:
        sp_find_function() and sp_find_procedure() joined to sp_find_routine()
          function as it was mentioned in TODO.
      sql/mysqld.cc:
        max_sp_recursion_depth variable added.
      sql/set_var.cc:
        max_sp_recursion_depth variable added.
      sql/share/errmsg.txt:
        An error message changed.
        An error message added.
      sql/sp.cc:
        sp_find_function() and sp_find_procedure() joined to sp_find_routine()
          function as it was mentioned in TODO.
        Temory LEX is allocated on a stack, not on a heap.
        Recursion support added for stored procedures.
      sql/sp.h:
        sp_find_function() and sp_find_procedure() joined to sp_find_routine()
          function as it was mentioned in TODO.
      sql/sp_head.cc:
        Initialization of new sp_head fields to get correct list of instances
          contained one instance only.
        Stack requirement for SP instruction is increased.
        Stack free space is checked before mem root initialisation to avoid
          memory leak.
        Pointer to the free instance management added before and after
          SP execution.
      sql/sp_head.h:
        New sp_head variables added to support inst of instances of SP
          for recursion and pointer on ths first free to use instance.
      sql/sql_base.cc:
        open_table() consume a lot of stack space so we check free stack space before it.
      sql/sql_class.h:
        max_sp_recursion_depth variable added.
      sql/sql_parse.cc:
        sp_find_function() and sp_find_procedure() joined to sp_find_routine()
          function as it was mentioned in TODO.
      d0645e35
  7. 21 Nov, 2005 1 commit
  8. 15 Nov, 2005 1 commit
    • unknown's avatar
      Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash · 2f4c2b63
      unknown authored
      Version for 5.0.
      It fixes three problems:
      1. The cause of the bug was that we did not check the table version for
       the HANDLER ... READ commands. We did not notice when a table was
       replaced by a new one. This can happen during ALTER TABLE, REPAIR
       TABLE, and OPTIMIZE TABLE (there might be more cases). I call the fix
       for this problem "the primary bug fix".
      2. mysql_ha_flush() was not always called with a locked LOCK_open.
       Though the function comment clearly said it must.
       I changed the code so that the locking is done when required. I call
       the fix for this problem "the secondary fix".
      3. In 5.0 (not in 4.1 or 4.0) DROP TABLE had a possible deadlock flaw in
       concur with FLUSH TABLES WITH READ LOCK. I call the fix for this
       problem "the 5.0 addendum fix".
      
      
      include/my_pthread.h:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        Added a new macro for the 5.0 addendum fix.
      mysql-test/r/handler.result:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        The test result.
      mysql-test/t/handler.test:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        The test case.
      sql/lock.cc:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        Changed a comment which did confuse me and which is not fully
        correct anymore after the 5.0 addendum fix.
        Added an assertion which would fire without the 5.0 addendum fix.
      sql/mysql_priv.h:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        Changed a definition for the secondary fix.
      sql/sql_base.cc:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        Changed function calls for the secondary fix.
      sql/sql_class.cc:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        Changed a function call for the secondary fix.
      sql/sql_handler.cc:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        The first two diffs make the primary bug fix.
        The rest is for the secondary fix.
      sql/sql_table.cc:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        The first diff (four changed places) make the 5.0 addendum fix.
        The other three are changed function calls for the secondary fix.
      2f4c2b63
  9. 03 Nov, 2005 3 commits
    • unknown's avatar
      Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash · cb60a7b9
      unknown authored
      Version for 4.0.
      It fixes two problems:
      1. The cause of the bug was that we did not check the table version for
         the HANDLER ... READ commands. We did not notice when a table was
         replaced by a new one. This can happen during ALTER TABLE, REPAIR
         TABLE, and OPTIMIZE TABLE (there might be more cases). I call the fix
         for this problem "the primary bug fix".
      2. mysql_ha_flush() was not always called with a locked LOCK_open.
         Though the function comment clearly said it must.
         I changed the code so that the locking is done when required. I call
         the fix for this problem "the secondary fix".
      
      
      mysql-test/r/handler.result:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        The test result.
      mysql-test/t/handler.test:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        The test case.
      sql/mysql_priv.h:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        Changed a definition for the secondary fix.
      sql/sql_base.cc:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        Changed function calls for the secondary fix.
      sql/sql_class.cc:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        Changed a function call for the secondary fix.
      sql/sql_handler.cc:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        The first two diffs make the primary bug fix.
        The rest is for the secondary fix.
      sql/sql_table.cc:
        Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
        Changed function calls for the secondary fix.
      cb60a7b9
    • unknown's avatar
      Changes in get_table_type() and mysql_frm_type(). The main problem was · 2ca2aecd
      unknown authored
      that in mysql_rm_table_part2_with_lock() previously we needed to open
      same file twice. Now once is enough.
      
      
      sql/mysql_priv.h:
        Merged functions get_table_type() and mysql_frm_type() into one,
        using the name from latter one.
      sql/sql_base.cc:
        Changed get_table_type() to mysql_frm_type()
      sql/sql_delete.cc:
        Changed get_table_type() to mysql_frm_type()
      sql/sql_rename.cc:
        Changed get_table_type() to mysql_frm_type()
      sql/sql_show.cc:
        Changed get_table_type() to mysql_frm_type()
      sql/sql_table.cc:
        Changed get_table_type() to mysql_frm_type()
      sql/sql_view.cc:
        Merged code from get_table_type() and mysql_frm_type() into the latter one.
      sql/sql_view.h:
        Function prototype changes.
      sql/table.cc:
        No longer needed.
      2ca2aecd
    • unknown's avatar
      A fix and a test case for Bug#14210 "Simple query with > operator on · e76aef36
      unknown authored
      large table gives server crash": make sure that when a MyISAM temporary
      table is created for a cursor, it's created in its memory root,
      not the memory root of the current query.
      
      
      mysql-test/r/sp.result:
        Test results fixed: a test case for Bug#14210
      mysql-test/t/sp.test:
        A test case for Bug#14210 "Simple query with > operator on large table 
        gives server crash"
      sql/handler.cc:
        - rewrite get_new_handler to accept a memory root and use it for
      sql/handler.h:
        - get_new_handler declaration changed
      sql/opt_range.cc:
        - get_new_handler declaration changed
      sql/sql_base.cc:
        - get_new_handler declaration changed
      sql/sql_select.cc:
        - the actual fix for Bug#14210. In create_myisam_from_heap we should
        create the new table handler in TABLE::mem_root, not in THD::mem_root:
        the latter is freed shortly after cursor is open.
        - adjust create_tmp_table to explicitly supply &table->mem_root
        to get_new_handler when creating a handler for a new temporary table
      sql/sql_table.cc:
        - get_new_handler declaration changed
      sql/table.cc:
        - get_new_handler declaration changed
      sql/unireg.cc:
        - get_new_handler declaration changed
      tests/mysql_client_test.c:
        A test case for Bug#14210 "Simple query with > operator on large table
         gives server crash": a C API test case is worth adding because of different
        memory allocation/freeing patterns in handling of C API and SP cursors
      e76aef36
  10. 01 Nov, 2005 1 commit
    • unknown's avatar
      Reverting patch for BUG #14009 (use of abs() on null value causes problems with filesort · 5bd8c9de
      unknown authored
      Fix for bug #14536: SELECT @A,@A:=... fails with prepared statements
      
      
      mysql-test/r/func_sapdb.result:
        Correct tests after reverting patch for BUG #14009 (use of abs() on null value causes problems with filesort)
      mysql-test/r/type_newdecimal.result:
        Correct tests after reverting patch for BUG #14009 (use of abs() on null value causes problems with filesort)
      mysql-test/r/user_var.result:
        More test with SELECT @A:=
      mysql-test/t/disabled.def:
        Enable user_var.test for
      mysql-test/t/user_var.test:
        More test with SELECT @A:=
      sql/item.cc:
        Simple optimization during review of new code
      sql/item_func.cc:
        Reverting patch for BUG #14009 (use of abs() on null value causes problems with filesort)
      sql/item_timefunc.h:
        timediff() can return NULL for not NULL arguments
      sql/sql_base.cc:
        Remove usage of current_thd() in mysql_make_view()
      sql/sql_lex.h:
        Remove usage of current_thd() in mysql_make_view()
      sql/sql_select.cc:
        Fix for bug #14536: SELECT @A,@A:=... fails with prepared statements
      sql/sql_view.cc:
        Remove usage of current_thd() in mysql_make_view()
        Simple optimization of new code
      sql/sql_view.h:
        Remove usage of current_thd() in mysql_make_view()
      sql/table.cc:
        Simple optimization of new code
      5bd8c9de
  11. 31 Oct, 2005 1 commit
    • unknown's avatar
      postreview fixes · 672f2412
      unknown authored
      sql/item_func.cc:
        some optimisation
      sql/sql_acl.cc:
        some optimisation
      sql/sql_base.cc:
        some optimisation
      sql/sql_parse.cc:
        some optimisation
      sql/table.cc:
        some optimisation
      672f2412
  12. 27 Oct, 2005 1 commit
    • unknown's avatar
      support of view underlying tables and SP functions security check added (BUG#9505) (WL#2787) · 9c6c527c
      unknown authored
      mysql-test/r/information_schema.result:
        error message changed
      mysql-test/r/sp.result:
        error message changed
      mysql-test/r/sql_mode.result:
        fixed test suite
      mysql-test/r/view.result:
        error message changed
      mysql-test/r/view_grant.result:
        test of underlying view tables check
      mysql-test/t/sql_mode.test:
        fixed test suite
      mysql-test/t/view_grant.test:
        test of underlying view tables check
      sql/item.cc:
        check of underlying tables privilege added
      sql/item.h:
        Name the resolution context points to the security  context of view (if item belong to the view)
      sql/item_func.cc:
        a view error hiding for execution of prepared function belonged to a view
        fixed checking privileges if stored functions belonds to some view
      sql/mysql_priv.h:
        refult of derived table processing functions changed to bool
        Security_context added as an argument to find_field_in_table()
      sql/share/errmsg.txt:
        error message fixed
      sql/sq...
      9c6c527c
  13. 26 Oct, 2005 1 commit
    • unknown's avatar
      Fixed BUG#14233: Crash after tampering with the mysql.proc table · 470ab9db
      unknown authored
        Added error checking for errors when attempting to use stored procedures
        after the mysql.proc table has been dropped, corrupted, or tampered with.
        Test cases were put in a separate file (sp-destruct.test).
      
      
      mysql-test/t/sp.test:
        Added comment.
      sql/share/errmsg.txt:
        New error message for corrupted mysql.proc table.
      sql/sp.cc:
        Check and return error code when caching stored routines.
        In the case when no error message has been set, set one.
      sql/sp.h:
        Return error code from stored routine cache function.
      sql/sql_base.cc:
        Check for error from sp_cache_routines_* calls.
      sql/sql_trigger.h:
        Updated friend declaration for sp_cache_routines*.
      mysql-test/r/sp-destruct.result:
        New test file for destruction of the mysql.proc table.
      mysql-test/t/sp-destruct.test:
        New result file for destruction of the mysql.proc table.
      470ab9db
  14. 25 Oct, 2005 1 commit
    • unknown's avatar
      Fix for BUG#13037: undefined variable in IF cause erroneous error-message. · b584382f
      unknown authored
      mysql-test/r/sp-error.result:
        Results for the test case for BUG#13037.
      mysql-test/t/sp-error.test:
        Test case for BUG#13037.
      sql/sql_base.cc:
        Polishing: use constant.
      sql/sql_class.cc:
        Reset THD::where in THD::cleanup_after_query();
        Polishing: use the constant (THD::DEFAULT_WHERE).
      sql/sql_class.h:
        Introduce a constant for the default value of THD::where.
      b584382f
  15. 17 Oct, 2005 1 commit
    • unknown's avatar
      Fix for bug #12739 "Deadlock in multithreaded environment during creating/ · 1a00e60b
      unknown authored
      droping trigger on InnoDB table".
      
      Deadlock occured in cases when we were trying to create two triggers for
      the same InnoDB table concurrently and both threads were able to reach
      close_cached_table() simultaneously. Bugfix implements new approach to
      table locking and table cache invalidation during creation/dropping
      of trigger.
      
      No testcase is supplied since bug was repeatable only under high concurrency.
      
      
      sql/mysql_priv.h:
        reopen_name_locked_table():
          Changed function signature to make it more robust against erroneous usage.
      sql/sql_base.cc:
        reopen_name_locked_table():
          Changed function signature to make it more robust against erroneous usage.
          Obtaining LOCK_open lock is now resposibility of caller.
          When searching for the table to open we should not prefer connection's current
          database over database which was explicitly specified in TABLE_LIST::db member
          (even if database is not explicitly specified for t...
      1a00e60b
  16. 11 Oct, 2005 1 commit
    • unknown's avatar
      Reviewing new pushed code · d6ccd7c7
      unknown authored
      - CHAR() now returns binary string as default
      - CHAR(X*65536+Y*256+Z) is now equal to CHAR(X,Y,Z) independent of the character set for CHAR()
      - Test for both ETIMEDOUT and ETIME from pthread_cond_timedwait()
        (Some old systems returns ETIME and it's safer to test for both values
         than to try to write a wrapper for each old system)
      - Fixed new introduced bug in NOT BETWEEN X and X
      - Ensure we call commit_by_xid or rollback_by_xid for all engines, even if one engine has failed
      - Use octet2hex() for all conversion of string to hex
      - Simplify and optimize code
      
      
      client/mysqldump.c:
        Simple optimizations of new code
        Indentation fixes
      client/mysqltest.c:
        Removed not needed variable
      include/mysql_com.h:
        Made octec2hex() more usable
      mysql-test/r/ctype_utf8.result:
        CHAR() now returns binary string as default
      mysql-test/r/func_str.result:
        CHAR() now returns binary string as default
      mysql-test/r/range.result:
        Added test to verify new introduced bug in NOT BETWEEN X and X
      mysq...
      d6ccd7c7
  17. 01 Oct, 2005 1 commit
    • unknown's avatar
      Fix for BUG#13410 - qualified reference to a view column in the HAVING clause cannot be resolved. · 20c77c32
      unknown authored
      The problem was then when a column reference was resolved to a view column, the new Item
      created for this column contained the name of the view, and not the view alias.
      
      
      mysql-test/r/view.result:
        Additional test for BUG#13410.
      mysql-test/t/view.test:
        Additional test for BUG#13410.
      sql/item.cc:
        Correctly cast 'cur_field' to Item_ident because if the original item is
        an Item_field, the cur_field is either an Item_field or an Item_ref.
        Thus we have to cast cur_field to a common super-class of both.
      sql/item.h:
        - real_item() may be called before Item_ref::ref is set
          (i.e. the Item_ref object was resolved).
        - To avoid a crash and to return some meaningful value
          in such cases we return 'this'.
      sql/sql_base.cc:
        - 'item' may be an Item_ref, so we test for the type of the actual
          referenced item.
        - Correctly cast 'cur_field' to Item_ident because if the original
          item is an Item_field, the cur_field is either an Item_field or an
          Item_ref. Thus we have to cast cur_field to a common super-class
          of both.
      sql/table.cc:
        - When creating a new Item for a reference to a view column, use the view alias,
          and not the real view name.
        - Removed old code
      20c77c32
  18. 30 Sep, 2005 2 commits
    • unknown's avatar
      Bug#11238 · 9da76009
      unknown authored
      "SELECT ... FOR UPDATE executed as consistent read inside LOCK TABLES"
      Do not discard lock_type information as handler::start_stmt() may require knowledge.
      (fixed by Antony)
      
      9da76009
    • unknown's avatar
      Comment adjusted (see fix for #13545) · 9f5490b4
      unknown authored
      9f5490b4
  19. 29 Sep, 2005 1 commit
    • unknown's avatar
      fix for bug #13545: Server crash caused by select query. · deb6ee1f
      unknown authored
      sql/sql_base.cc:
        fix for bug #13545: Server crash caused by select query.
        - compare table qualifier only with tables which are not nested joins.
        - perform recursion accordingly.
        - DBUG_ASSERT(table_list->table); added before the find_field_in_table() call.
      deb6ee1f
  20. 27 Sep, 2005 1 commit
    • unknown's avatar
      sql_base.cc, item.cc: · ba027f01
      unknown authored
        Fixed bug #13411.
        Fixed name resolution for non-qualified reference to a view column
        in the HAVING clause.
      view.result, view.test:
        Added a test case for bug #13411.
      
      
      mysql-test/t/view.test:
        Added a test case for bug #13411.
      mysql-test/r/view.result:
        Added a test case for bug #13411.
      sql/item.cc:
        Fixed bug #13411.
        Fixed name resolution for non-qualified reference to a view column
        in the HAVING clause.
      sql/sql_base.cc:
        Fixed bug #13411.
        Fixed name resolution for non-qualified reference to a view column
        in the HAVING clause.
      ba027f01
  21. 23 Sep, 2005 1 commit
    • unknown's avatar
      Several fixes revelaled by Intel compiler. · 83263892
      unknown authored
      cmd-line-utils/readline/complete.c:
        Added a cast.
      dbug/my_main.c:
        Added an include to avoid implicit declaration of
        my_thread_global_init()
      include/my_global.h:
        undef cannot be used on this predefined name.
        Since it is a custom fix for gcc 2.8.0, let's make it only
        effective in that case.
      include/my_sys.h:
        Added a new type, TYPE_NOT_SET.
      myisam/ft_boolean_search.c:
        Added casts.
      myisam/mi_key.c:
        Added cast.
      myisam/mi_open.c:
        Added cast.
        Changed function types.
      myisam/mi_test1.c:
        Added cast.
      myisam/myisamchk.c:
        Added cast.
      myisam/myisamdef.h:
        Changed function type.
      myisam/myisampack.c:
        Added casts.
      myisam/sp_key.c:
        Added cast.
      mysys/mf_iocache.c:
        Fixed invalid use of 0 to info->type. According to comment it
        should not have been set, but in earlier code by setting it
        to 0 would have been same as setting it to READ_CACHE. This
        probably was not desired, potential bug.
      server-tools/instance-manager/instance_options.cc:
        Fixed a typo.
      server-tools/instance-manager/protocol.cc:
        Changed enum to int.
        Changed char to uchar.
        Added casts.
      sql/mysql_priv.h:
        Bit overflow.
      sql/sql_base.cc:
        Removed unused label. The code below label was unused too, because
        there is a return just before.
      sql/sql_parse.cc:
        Removed unneccessary extra argument.
      83263892
  22. 22 Sep, 2005 1 commit
    • unknown's avatar
      Fixed problems found by valgrind · b762e55c
      unknown authored
      Fixed problems in test suite where some test failed
      Fixed access to not initialized memory in federated
      Fixed access to not initialized memory when using BIT fields in internal temporary tables
      
      
      BitKeeper/etc/ignore:
        added libmysqld/sql_cursor.h
      mysql-test/r/information_schema.result:
        Change view names to 'v#' to not cause massive conflict with other tests if test dies in the middlecd
      mysql-test/r/information_schema_inno.result:
        Remove used tables at start
      mysql-test/r/multi_statement.result:
        Remove used tables at start
      mysql-test/r/temp_table.result:
        Change view names to 'v#' to not cause massive conflict with other tests if test dies in the middle
      mysql-test/r/type_bit.result:
        More tests
      mysql-test/t/information_schema.test:
        Change view names to 'v#' to not cause massive conflict with other tests if test dies in the middle
      mysql-test/t/information_schema_inno.test:
        Remove used tables at start
      mysql-test/t/multi_statement.test:
        Remove used tables at star...
      b762e55c
  23. 20 Sep, 2005 1 commit
    • unknown's avatar
      Fix for BUG#13127. · 5968baf8
      unknown authored
      The problem was in the way table references are pre-filtered when
      resolving a qualified field. When resolving qualified table references
      we search recursively in the operands of the join. If there is
      natural/using join with a merge view, the first call to find_field_in_table_ref
      makes a recursive call to itself with the view as the new table reference
      to search for the column. However the view has both nested_join and
      join_columns != NULL so it skipped the test whether the view name matches
      the field qualifier. As a result the field was found in the view since the
      view already has a field with the same name. Thus the field was incorrectly
      resolved as the view field.
      
      
      mysql-test/r/select.result:
        Test for BUG#13127.
      mysql-test/t/select.test:
        Test for BUG#13127.
      sql/sql_base.cc:
        The patch contains two independent changes:
        
        - When searching for qualified fields, include merge views and information schema tables
        used with SHOW (both using TABLE_LIST::field_translation to represent result fields) in
        the test that compares the qualifying table with the name of the table reference being
        searched. This change fixes the bug.
        
        - Do not search the materialized list of columns of a NATURAL/USING join if 'table_list'
        is a stored table or merge view. Instead search directly in the table or view as if it
        is not under a natural join. This is a performance improvement since if 'table_list'
        is a stored table, then the search can utilize the name hash for table names.
      5968baf8
  24. 15 Sep, 2005 1 commit
    • unknown's avatar
      WL#2787 (part 2, ver 3 (merged)) changed securety context switching · e80e4b10
      unknown authored
      libmysqld/lib_sql.cc:
        changed securety context switching
      mysql-test/r/rpl_sp.result:
        now it show real information from changed security context of SP (checked)
      sql/ha_innodb.cc:
        changed securety context switching
      sql/item.cc:
        changed securety context switching
      sql/item_func.cc:
        changed securety context switching
      sql/item_strfunc.cc:
        changed securety context switching
      sql/log.cc:
        changed securety context switching
      sql/mysql_priv.h:
        changed securety context switching
      sql/mysqld.cc:
        changed securety context switching
      sql/repl_failsafe.cc:
        changed securety context switching
      sql/set_var.cc:
        changed securety context switching
      sql/slave.cc:
        changed securety context switching
      sql/sp.cc:
        changed securety context switching
      sql/sp_head.cc:
        changed securety context switching
        in case of inability to switch context  we return error now
      sql/sp_head.h:
        changed securety context switching
      sql/sql_acl.cc:
        changed securety context switching
      sql/sql_acl.h:
        changed securety context switching
      sql/sql_base.cc:
        changed securety context switching
      sql/sql_class.cc:
        changed securety context switching
      sql/sql_class.h:
        changed securety context switching
      sql/sql_db.cc:
        changed securety context switching
      sql/sql_insert.cc:
        changed securety context switching
      sql/sql_parse.cc:
        changed securety context switching
      sql/sql_show.cc:
        changed securety context switching
      sql/sql_trigger.cc:
        changed securety context switching
      sql/sql_view.cc:
        changed securety context switching
      sql/sql_yacc.yy:
        changed securety context switching
      e80e4b10
  25. 14 Sep, 2005 1 commit
    • unknown's avatar
      Fix for bug #12704 "Server crashes during trigger execution". · d8dea0bb
      unknown authored
      This bug occurs when some trigger for table used by DML statement is created
      or changed while statement was waiting in lock_tables(). In this situation
      prelocking set which we have calculated becames invalid which can easily lead
      to errors and even in some cases to crashes.
      
      With proposed patch we no longer silently reopen tables in lock_tables(),
      instead caller of lock_tables() becomes responsible for reopening tables and
      recalculation of prelocking set.
      
      
      mysql-test/t/trigger.test:
        Added tests for bug #12704 "Server crashes during trigger execution".
        Unfortunately these tests rely on the order in which tables are locked
        by statement so they are non-determenistic and therefore should be disabled.
      sql/lock.cc:
        mysql_lock_tables():
          Now instead of always reopening altered or dropped tables by itself
          mysql_lock_tables() can notify upper level and rely on caller doing this.
      sql/mysql_priv.h:
        Now mysql_lock_tables() can either reopen deleted or altered tables by itself
        or notify caller about such situation through 'need_reopen' argument and rely
        on it in this.
        Also lock_tables() has new 'need_reopen' out parameter through which it
        notifies caller that some tables were altered or dropped so he needs to reopen
        them (and rebuild prelocking set some triggers may change or simply appear).
      sql/sp.cc:
        sp_add_used_routine():
          To be able to restore LEX::sroutines_list to its state right after parsing
          we now adjust  LEX::sroutines_list_own_last/sroutines_list_own_elements when
          we add directly used routine.
        sp_remove_not_own_routines():
          Added procedure for restoring LEX::sroutines/sroutines_list to their state
          right after parsing (by throwing out non-directly used routines).
        sp_cache_routines_and_add_tables_for_view()/sp_update_stmt_used_routines():
          We should use LEX::sroutines_list instead of LEX::sroutines as source of
          routines used by view, since LEX::sroutines is not availiable for view
          on second attempt to open it (see comment in open_tables() about it).
      sql/sp.h:
        sp_remove_not_own_routines():
          Added procedure for restoring LEX::sroutines/sroutines_list to their state
          right after parsing (by throwing out non-directly used routines).
      sql/sp_head.cc:
        Removed assert which is no longer always true.
      sql/sql_base.cc:
        reopen_table():
          When we re-open table and do shallow copy of TABLE object we should adjust
          pointers to it in associated Table_triggers_list object. Removed nil
          operation.
        open_tables():
          Now this function is able to rebuild prelocking set for statement if it is
          needed. It also correctly handles FLUSH TABLES which may occur during its
          execution.
        lock_tables():
          Instead of allowing mysql_lock_tables() to silently reopen altered or dropped
          tables let us notify caller and rely on that it will do reopen itself.
          This solves the problem when trigger suddenly appears or changed during
          mysq_lock_tables().
        close_tables_for_reopen():
          Added routine for properly preparing for reopening of tables and recalculation
          of set of prelocked tables.
      sql/sql_handler.cc:
        Here we let mysql_lock_tables() to reopen dropped or altered tables by itself.
      sql/sql_insert.cc:
        Here we let mysql_lock_tables() to reopen dropped or altered tables by itself.
      sql/sql_lex.cc:
        LEX:
          Added 'sroutines_list_own_last' and 'sroutines_list_own_elements' members
          which are used for keeping state in which 'sroutines_list' was right after
          statement parsing (and for restoring of this list to this state).
      sql/sql_lex.h:
        LEX:
          Added 'sroutines_list_own_last' and 'sroutines_list_own_elements' members
          which are used for keeping state in which 'sroutines_list' was right after
          statement parsing (and for restoring of this list to this state).
          Added chop_off_not_own_tables() method to simplify throwing away list
          of implicitly used (prelocked) tables.
      sql/sql_prepare.cc:
        Now instead of silently reopening altered or dropped tables in
        lock_tables() we notify caller and rely on that the caller will
        reopen tables.
      sql/sql_table.cc:
        Here we let mysql_lock_tables() to reopen dropped or altered tables by itself.
      sql/sql_trigger.cc:
        Added Table_triggers_list::set_table() method to adjust Table_triggers_list
        to new pointer to TABLE instance.
      sql/sql_trigger.h:
        Added Table_triggers_list::set_table() method to adjust Table_triggers_list
        to new pointer to TABLE instance.
      sql/sql_update.cc:
        Now instead of silently reopening altered or dropped tables in
        lock_tables() we notify caller and rely on that the caller will
        reopen tables.
      d8dea0bb
  26. 13 Sep, 2005 2 commits
    • unknown's avatar
      Bug#12845 - Stress test: Server crashes on CREATE .. SELECT statement · c158b8a8
      unknown authored
      Solution for 4.0 and 4.1.
      If the caller cannot re-open table(s), it gives a NULL
      'refresh' argument to open_table(). We used to ignore
      flushes then. Now we ignore drops too.
      
      c158b8a8
    • unknown's avatar
      Bug#12845 - Stress test: Server crashes on CREATE .. SELECT statement · 6eece59c
      unknown authored
      Solution for 5.0.
      Changed calls to open_table(). Requested to ignore
      flush at places where the command did already lock tables.
      This could happen in CREATE ... SELECT and ALTER TABLE.
      
      No test case. The bug can only be triggered by true concurrency.
      The stress test suite provides a test case for this.
      
      
      sql/sql_base.cc:
        Bug#12845 - Stress test: Server crashes on  CREATE .. SELECT statement
        Solution for 5.0.
        Changed open_table() so that ignoring flush requests
        is dependend on the 'flags' parameter as ignoring drop
        request was already. This aims for consistent behaviour.
      sql/sql_table.cc:
        Bug#12845 - Stress test: Server crashes on  CREATE .. SELECT statement
        Solution for 5.0.
        Changed calls to open_table(). Requested to ignore
        flush at places where the command did already lock tables.
        This could happen in CREATE ... SELECT and ALTER TABLE.
      6eece59c
  27. 12 Sep, 2005 1 commit
  28. 11 Sep, 2005 1 commit
    • unknown's avatar
      Fix bug #12993 View column rename broken in subselect · e9840fa6
      unknown authored
      When view column aliased in subselect alias is set on ref which represents
      field. When tmp table is created for subselect, it takes name of original field
      not ref. Because of this alias on view column in subselect is lost. Which
      results in reported error.
      
      Now when alias is set on ref, it's set on ref real item too.
      
      
      mysql-test/r/view.result:
        Test case for bug #12993  View column rename broken in subselect
      mysql-test/t/view.test:
        Test case for bug #12993  View column rename broken in subselect
      sql/sql_base.cc:
        Fix bug #12993 View column rename broken in subselect
        Now when alias is set on ref, it's set on ref real item too.
      e9840fa6
  29. 08 Sep, 2005 2 commits
    • unknown's avatar
      fix for bug #12651 (item of a prepared query allocated on non-permanent · 77589752
      unknown authored
      are thus dangling later)
      
      
      mysql-test/r/ps.result:
        test for bug #12651
        (data allocated on thd's arena but not on permanent arena)
      mysql-test/t/ps.test:
        test for bug #12651
        (data allocated on thd's arena but not on permanent arena)
      sql/sql_base.cc:
        if there is tree transformation then backup the current arena
        and use permanent one (for PS) otherwise the data will be deallocated
        after the prepare process is finished.
        this bug was introduced with the recent natural join patch
      77589752
    • unknown's avatar
      Fix for BUG#12977. · 15560cdb
      unknown authored
      mysql-test/r/select.result:
        Test for BUG#12977.
      mysql-test/t/select.test:
        Test for BUG#12977.
      sql/sql_base.cc:
        - Compare table qualifier of qualified fields only with tables that
          are not natural joins or their operands.
        - For qualified fields perform recursive search in all operands of
          natural joins that are nested joins.
        - Symmetrically detect ambiguous columns for both operands of
          NATURAL/USING joins.
      15560cdb
  30. 02 Sep, 2005 2 commits
    • unknown's avatar
      Rename: · 8857d641
      unknown authored
      - current_arena to stmt_arena: the thread may have more than one
      'current' arenas: one for runtime data, and one for the parsed 
      tree of a statement. Only one of them is active at any moment.
      - set_item_arena -> set_query_arena, because Item_arena was renamed to 
      Query_arena a while ago
      - set_n_backup_item_arena -> set_n_backup_active_arena;
      the active arena is the arena thd->mem_root and thd->free_list
      are currently pointing at.
      - restore_backup_item_arena -> restore_active_arena (with the same
      rationale)
      - change_arena_if_needed -> activate_stmt_arena_if_needed; this
      method sets thd->stmt_arena active if it's not done yet.
      
      
      sql/item.cc:
        Rename.
      sql/item_cmpfunc.cc:
        Rename.
      sql/item_func.cc:
        Rename.
      sql/item_subselect.cc:
        Rename.
      sql/item_subselect.h:
        Remove an unused forward declaration.
      sql/item_sum.h:
        Remove an unused forward declaration.
      sql/mysql_priv.h:
        Remove an unused forward declaration.
      sql/sp.cc:
        Rename.
      sql/sp_head.cc:
        Rename.
      sql/sql_base.cc:
        Rename.
      sql/sql_class.cc:
        Rename.
      sql/sql_class.h:
        Rename.
      sql/sql_lex.cc:
        Rename.
      sql/sql_parse.cc:
        Rename.
      sql/sql_prepare.cc:
        Rename.
      sql/sql_select.cc:
        Rename.
      sql/sql_show.cc:
        Rename.
      sql/sql_union.cc:
        Rename.
      sql/sql_view.cc:
        Rename.
      sql/table.cc:
        Rename.
      8857d641
    • unknown's avatar
      postmerge changes · 5985c127
      unknown authored
      mysql-test/t/lowercase_view.test:
        error code changed after merege
      mysql-test/t/view.test:
        error code changed after merege
      sql/item.cc:
        inline function used instead of frequently used expression
        removed old TODO
      sql/sql_base.cc:
        layoutfixed
        inline function used instead of frequently used expression
      sql/sql_insert.cc:
        inline function used instead of frequently used expression
      5985c127
  31. 24 Aug, 2005 2 commits
    • unknown's avatar
      Cleanups during review of new code · 9fbd86a2
      unknown authored
      Removed ASSERT that can obviously never be wrong
      
      9fbd86a2
    • unknown's avatar
      Post-fix for BUG#6276. · 45fa37fe
      unknown authored
      sql/sql_base.cc:
        Fixed a bug in PS (prepared statements) mode - the "always TRUE" constant
        Item created for outer joins with no common columns was not created in
        the PS memory.
        Now it is created in the right memory.
      45fa37fe
  32. 23 Aug, 2005 2 commits
    • unknown's avatar
      Fix for BUG#6276. · 3bfeefff
      unknown authored
      mysql-test/r/select.result:
        Test for BUG#6276.
      mysql-test/t/select.test:
        Test for BUG#6276.
      sql/sql_base.cc:
        Add a true ON condition for outer joins without common columns.
      3bfeefff
    • unknown's avatar
      WL#2486 - natural and using join according to SQL:2003 · 1647932c
      unknown authored
      * Provide backwards compatibility extension to name resolution of
        coalesced columns. The patch allows such columns to be qualified
        with a table (and db) name, as it is in 4.1.
        Based on a patch from Monty.
      
      * Adjusted tests accordingly to test both backwards compatible name
        resolution of qualified columns, and ANSI-style resolution of
        non-qualified columns.
        For this, each affected test has two versions - one with qualified
        columns, and one without. 
      
      
      mysql-test/include/ps_query.inc:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/bdb.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/innodb.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/join.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/join_nested.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/join_outer.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/null_key.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/order_by.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/ps_2myisam.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/ps_3innodb.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/ps_4heap.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/ps_5merge.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/ps_6bdb.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/ps_7ndb.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/select.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/subselect.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/r/type_ranges.result:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/t/bdb.test:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/t/innodb.test:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/t/join.test:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/t/join_nested.test:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/t/join_outer.test:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/t/null_key.test:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/t/order_by.test:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/t/select.test:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/t/subselect.test:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      mysql-test/t/type_ranges.test:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      sql/sql_base.cc:
        * Applied Monty's patch for backwards compatible name resolution
          of qualified columns. The idea is:
          - When a column is qualified, search for the column in all
            tables/views underlying each natural join. In this case
            natural joins are *not* considered leaves.
          - If a column is not qualified, then consider natural joins
            as leaves, thus directly search the result columns of
            natural joins.
        * Simplified 'find_field_in_tables()' - unified two similar
          loops into one.
      sql/table.cc:
        - Removed method & members not needed after Monty's patch.
      sql/table.h:
        - Removed method & members not needed after Monty's patch.
      tests/mysql_client_test.c:
        Put back old tests to test that coalesced columns of natural joins can be qualified.
      1647932c