An error occurred fetching the project authors.
  1. 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/sql_acl.cc:
        Storing requested privileges of tables added
        View underlying tables privilege check added
      sql/sql_base.cc:
        View underlying tables privilege check added
      sql/sql_cache.cc:
        Code cleunup: we should not register underlying tables of view second time
      sql/sql_delete.cc:
        ancestor -> merge_underlying_list renaming
      sql/sql_derived.cc:
        refult of derived table processing functions changed to bool
        do not give SELECT_ACL for TEMPTABLE views
      sql/sql_lex.h:
        The comment added
      sql/sql_parse.cc:
        registration of requested privileges added
      sql/sql_prepare.cc:
        registration of requested privileges added
      sql/sql_update.cc:
        manipulation of requested privileges for underlying tables made the same as for table which we are updating
      sql/sql_view.cc:
        underlying tables of view security check support added
      sql/table.cc:
        renaming and fixing view preparation methods, methods for checking underlyoing tables security context added
      sql/table.h:
        storege for reuested privileges added
      9c6c527c
  2. 25 Oct, 2005 1 commit
  3. 24 Oct, 2005 1 commit
    • unknown's avatar
      Added more tests for new UPDATE ... ORDER BY ... LIMIT optimization · fbb96451
      unknown authored
      heap/_check.c:
        Change arguments to ha_key_cmp
      heap/hp_create.c:
        Change arguments to ha_key_cmp
      include/my_base.h:
        Remove SEARCH_RETURN_B_POS and instead always send an array to ha_key_cmp() as last argument
      myisam/mi_check.c:
        Change arguments to ha_key_cmp
      myisam/mi_rnext_same.c:
        Change arguments to ha_key_cmp
      myisam/mi_search.c:
        Change arguments to ha_key_cmp
      myisam/mi_write.c:
        Change arguments to ha_key_cmp
      myisammrg/myrg_queue.c:
        Change arguments to ha_key_cmp
      mysys/my_handler.c:
        Remove SEARCH_RETURN_B_POS and instead always send an array to ha_key_cmp() as last argument
        (This removes an if in a loop at the expensive of an int on the stack)
      sql/records.cc:
        Simplify new rr_index() code
        Create common error handling function for rr_() functions.
        Remove loop from rr_index() as handler::index_next() can never return HA_ERR_RECORD_DELETED
      sql/sql_load.cc:
        Simplify
      sql/sql_update.cc:
        Simplify code
        Fixed bug when one is updating an index column that could be used with ORDER BY
      sql/structs.h:
        Removed not needed structure element
      fbb96451
  4. 13 Oct, 2005 1 commit
  5. 10 Oct, 2005 1 commit
    • unknown's avatar
      BUG#12618: Removing fake locking · 48f6c0c9
      unknown authored
      mysql-test/r/rpl_multi_update3.result:
        New test case
      mysql-test/t/rpl_multi_update3.test:
        New test case
      sql/sql_parse.cc:
        Removed fake locking
        Changed so that filtering is done later for multi-update
        Removed redundant code
      sql/sql_update.cc:
        Moved call to sql_parse.cc
      48f6c0c9
  6. 30 Sep, 2005 1 commit
    • unknown's avatar
      BUG#12915: Added single-table UPDATE/DELTE ... ORDER BY ... LIMIT · e4de4385
      unknown authored
      optimization: now can use index to find records to update/delete
      when there is no WHERE clause.
      
      
      mysql-test/r/update.result:
        Testcase for BUG#12915
      mysql-test/t/update.test:
        Testcase for BUG#12915
      sql/mysql_priv.h:
        BUG#12915: Added init_read_record_idx function.
      sql/opt_range.cc:
        BUG#12915: Added get_index_for_order() - find an index that can be
        used to get first N table records in given ordering cheaper then 
        one would with full table scan.
      sql/opt_range.h:
        BUG#12915: Added get_index_for_order() function
      sql/records.cc:
        BUG#12915: Added init_read_record_idx(), rr_index() that allow to scan
        index using init_read_record()/read_record.read_record()
      sql/sql_delete.cc:
        BUG#12915: Added single-table DELETE ... ORDER BY ... LIMIT optimization: 
        now can use index to find records to delete when there is no WHERE clause.
      sql/sql_update.cc:
        BUG#12915: Added single-table UPDATE ... ORDER BY ... LIMIT optimization: 
        now can use index to find records to update when there is no WHERE clause.
      sql/structs.h:
        BUG#12915: Added init_read_record_idx(), rr_index() that allow to scan
        index using init_read_record()/READ_RECORD::read_record()
      e4de4385
  7. 25 Sep, 2005 1 commit
    • unknown's avatar
      Fixed error found during review of new pushed code · 00995cb2
      unknown authored
      client/mysql.cc:
        Don't use c_ptr() for cgets() and ensure buffer is not overwritten
      mysql-test/r/cast.result:
        More test for CAST(0x.... as signed)
      sql/opt_sum.cc:
        Fix bugs found during review
        - Changed code to be able to remove one if
        - Ensure that count == 0 only if is_exact_count == TRUE
      sql/sql_delete.cc:
        Ensure 'allow_sum_func' is reset before call to setup_conds
      sql/sql_lex.cc:
        allow_sum_func doesn't have to be reset for each query
        (It's to be reset in setup_fields() or before call to setup_conds()
      sql/sql_load.cc:
        Move set of auto_increment_field_not_null so that it's not set if field value is NULL
      sql/sql_prepare.cc:
        allow_sum_func doesn't have to be reset for each query
        (It's to be reset in setup_fields() or before call to setup_conds()
      sql/sql_update.cc:
        Ensure 'allow_sum_func' is reset before call to setup_conds
      00995cb2
  8. 20 Sep, 2005 1 commit
    • unknown's avatar
      Fix fur BUG#13348: "multi-table updates and deletes are not logged if no rows were affected". · 68684767
      unknown authored
      Not fixed in 4.1 as not critical. Also I'm correcting error checking of multi-UPDATE/DELETE
      when it comes to binlogging, to make it consistent with when we rollback the statement.
      
      
      mysql-test/r/rpl_multi_delete.result:
        result update
      mysql-test/r/rpl_multi_update.result:
        result update
      mysql-test/t/rpl_multi_delete.test:
        test for BUG#13348
      mysql-test/t/rpl_multi_update.test:
        test of BUG#13348
      sql/sql_delete.cc:
        We now binlog multi-DELETE even if no row was updated (like we do for DELETE).
        I'm also correcting some error checking (< instead of <=), basing myself on when we rollback.
      sql/sql_update.cc:
        we now binlog multi-UPDATE even if no row was updated (like we do for UPDATE).
        Adding to existing tests to test new behaviour.
        I'm also correcting some error checking (< instead of <=), basing myself on when we rollback.
      68684767
  9. 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
  10. 13 Sep, 2005 1 commit
    • unknown's avatar
      Bug#9683 INFORMATION_SCH: Creation of temporary table allowed in · 553d6985
      unknown authored
               Information_schema DB 
      Bug#9846 Inappropriate error displayed while
               dropping table from 'INFORMATION_SCHEMA'
      Bug#10734 Grant of privileges other than 'select' and 
               'create view' should fail on schema 
      Bug#10708 SP's can use INFORMATION_SCHEMA as ROUTINE_SCHEMA
      
       cumulative fix for bugs above(after review, 2nd version)
       added privilege check for information schema db & tables
      
      553d6985
  11. 26 Aug, 2005 1 commit
    • unknown's avatar
      Slightly amended Monty's SP replication code cleanup patch · aab0abb8
      unknown authored
      sql/item.cc:
        Code cleanup
      sql/item.h:
        Code cleanup
      sql/log.cc:
        Added comments
      sql/sp_head.cc:
        Code cleanup patch from Monty: 
        in subst_spvars()
        - Move local variables first in block
        - Use res|= instead of res |=
        - Use strmake() instead of alloc + memcpy
        Added:
        - Fail the query if we don't have enough memory to produce a binlog-suitable query string: 
          if we're so low on memory we're likely to fail the query anyway, and failing now removes
          the need for hack with THD::query_str_binlog_suitable.
      sql/sql_class.cc:
        Remove THD::query_str_binlog_unsuitable
      sql/sql_class.h:
        Remove THD::query_str_binlog_unsuitable
      sql/sql_delete.cc:
        Remove THD::query_str_binlog_unsuitable
      sql/sql_insert.cc:
        Remove THD::query_str_binlog_unsuitable
      sql/sql_parse.cc:
        Code cleanup
      sql/sql_update.cc:
        Remove THD::query_str_binlog_unsuitable
      aab0abb8
  12. 25 Aug, 2005 1 commit
    • unknown's avatar
      Fix for BUG#12335 (SP replication) : New binlogging strategy for stored PROCEDUREs/FUNCTIONs. · b45f0cd0
      unknown authored
      "Interleaved SPs execution is now binlogged properly, "SELECT spfunc()" is binlogged too.
      The known remaining issue is binlogging/replication of "a routine is deleted while it is executed" scenario.
      
      
      mysql-test/r/rpl_sp.result:
        Fix for BUG#12335: updated test cases/results
      mysql-test/t/rpl_sp.test:
        Fix for BUG#12335: updated test cases/results
      sql/item.cc:
        Fix for BUG#12335 (SP replication): 
         - Added Item_name_const 'function'
         - Addede 'delete reuse' to call dtor on item reuse
      sql/item.h:
        Fix for BUG#12335 (SP replication) : Added Item_name_const 'function' + code cleanup
      sql/item_create.cc:
         Fix for BUG#12335 (SP replication) : Added Item_name_const 'function'
      sql/item_create.h:
         Fix for BUG#12335 (SP replication) : Added Item_name_const 'function'
      sql/item_func.cc:
        Fix for BUG#12335 (SP replication) : binary log is now constrolled from within execute_function.
      sql/lex.h:
        Fix for BUG#12335 (SP replication) : Added Item_name_const 'function'
      sql/log.cc:
        Fix for BUG#12335 (SP replication) : Added MYSQL_LOG::{start|stop}_union_events to allow
        one to temporary disable binlogging but collect a 'union' information about binlog write
        calls.
      sql/mysql_priv.h:
        Fix for BUG#12335 (SP replication)
      sql/sp_head.cc:
        Fix for BUG#12335 (SP replication) : Now we use different SP binlogging strategy, grep for 
        StoredRoutinesBinlogging for details
      sql/sp_head.h:
        Comments added
      sql/sp_pcontext.h:
        Comments added
      sql/sp_rcontext.h:
        Comments added
      sql/sql_class.cc:
        Fix for BUG#12335 (SP replication) : Now we use different SP binlogging strategy, grep for 
        StoredRoutinesBinlogging for details
      sql/sql_class.h:
        Fix for BUG#12335 (SP replication) : Added MYSQL_LOG::{start|stop}_union_events to allow
        one to temporary disable binlogging but collect a 'union' information about binlog write
        calls.
      sql/sql_delete.cc:
        Fix for BUG#12335: check THD::query_str_binlog_unsuitable when writing to binlog.
      sql/sql_insert.cc:
        Fix for BUG#12335: check THD::query_str_binlog_unsuitable when writing to binlog.
      sql/sql_lex.cc:
        Fix for BUG#12335 (SP replication): Add ability to extract previous returned token from
        the tokenizer.
      sql/sql_lex.h:
        Fix for BUG#12335 (SP replication): Add ability to extract previous returned token from
        the tokenizer.
      sql/sql_parse.cc:
        Fix for BUG#12335 (SP replication) : Now we use different SP binlogging strategy, grep for 
        StoredRoutinesBinlogging for details
      sql/sql_update.cc:
        Fix for BUG#12335: check THD::query_str_binlog_unsuitable when writing to binlog.
      sql/sql_yacc.yy:
        Fix for BUG#12335 (SP replication) : When creating Item_splocal, remember where it is located
        in the query.
      b45f0cd0
  13. 12 Aug, 2005 2 commits
    • unknown's avatar
      Implementation of WL#2486 - · bcc00c1f
      unknown authored
      "Process NATURAL and USING joins according to SQL:2003".
      
      * Some of the main problems fixed by the patch:
        - in "select *" queries the * expanded correctly according to
          ANSI for arbitrary natural/using joins
        - natural/using joins are correctly transformed into JOIN ... ON
          for any number/nesting of the joins.
        - column references are correctly resolved against natural joins
          of any nesting and combined with arbitrary other joins.
      
      * This patch also contains a fix for name resolution of items
        inside the ON condition of JOIN ... ON - in this case items must
        be resolved only against the JOIN operands. To support such
        'local' name resolution, the patch introduces a stack of
        name resolution contexts used at parse time.
      
      NOTICE:
      - This patch is not complete in the sense that
        - there are 2 test cases that still do not pass -
          one in join.test, one in select.test. Both are marked
          with a comment "TODO: WL#2486".
        - it does not include a new test specific for the task
      
      
      mysql-test/include/ps_query.inc:
        Adjusted according to standard NATURAL/USING join semantics.,
      mysql-test/r/bdb.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/derived.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/errors.result:
        The column as a whole cannot be resolved, so different error message.
      mysql-test/r/fulltext.result:
        Adjusted according to standard JOIN ... ON semantics =>
        the ON condition can refer only to the join operands.
      mysql-test/r/fulltext_order_by.result:
        More detailed error message.
      mysql-test/r/innodb.result:
        Adjusted according to standard NATURAL/USING join semantics.
        This test doesn't pass completetly yet!
      mysql-test/r/insert_select.result:
        More detailed error message.
      mysql-test/r/join.result:
        Adjusted according to standard NATURAL/USING join semantics.
        
        NOTICE: there is one test case that still fails, and it is
        commeted out and marked with WL#2486 in the test file.
      mysql-test/r/join_crash.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/join_nested.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/join_outer.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/multi_update.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/null_key.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/order_by.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/ps_2myisam.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/ps_3innodb.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/ps_4heap.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/ps_5merge.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/ps_6bdb.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/ps_7ndb.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/select.result:
        Adjusted according to standard NATURAL/USING join semantics.
        
        NOTICE: there is one failing test case which is commented with
        WL#2486 in the test file.
      mysql-test/r/subselect.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/type_ranges.result:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/r/union.result:
        More detailed error message.
      mysql-test/t/bdb.test:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/t/errors.test:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/t/fulltext.test:
        Adjusted according to standard JOIN ... ON semantics =>
        the ON condition can refer only to the join operands.
      mysql-test/t/fulltext_order_by.test:
        More detailed error message.
      mysql-test/t/innodb.test:
        Adjusted according to standard NATURAL/USING join semantics.
        This test doesn't pass completetly yet!
      mysql-test/t/insert_select.test:
        More detailed error message.
      mysql-test/t/join.test:
        Adjusted according to standard NATURAL/USING join semantics.
        
        NOTICE: there is one test case that still fails, and it is
        commeted out and marked with WL#2486 in the test file.
      mysql-test/t/join_crash.test:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/t/join_nested.test:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/t/join_outer.test:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/t/null_key.test:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/t/order_by.test:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/t/select.test:
        Adjusted according to standard NATURAL/USING join semantics.
        
        NOTICE: there is one test case that still fails, and it is
        commeted out and marked with WL#2486 in the test file.
      mysql-test/t/subselect.test:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/t/type_ranges.test:
        Adjusted according to standard NATURAL/USING join semantics.
      mysql-test/t/union.test:
        More detailed error message.
      sql/item.cc:
        - extra parameter to find_field_in_tables
        - find_field_in_real_table renamed to find_field_in_table
        - fixed comments/typos
      sql/item.h:
        - added [first | last]_name_resolution_table to class
          Name_resolution_context
        - commented old code
        - standardized formatting
      sql/mysql_priv.h:
        - refactored the find_field_in_XXX procedures,
        - added a new procedure for natural join table references,
        - renamed the find_field_in_XXX procedures to clearer names
      sql/sp.cc:
        - pass the top-most list of the FROM clause to setup_tables
        - extra parameter to find_field_in_tables
      sql/sql_acl.cc:
        - renamed find_field_in_table => find_field_in_table_ref
        - extra parameter to find_field_in_table_ref
        - commented old code
      sql/sql_base.cc:
        This file contains the core of the implementation of the processing
        of NATURAL/USING joins (WL#2486).
        - added many comments to old code
        - refactored the group of find_field_in_XXX procedures, and added a
          new procedure for natural joins. There is one find_field_in_XXX procedure
          per each type of table reference (stored table, merge view, or natural
          join); one meta-procedure that selects the correct one depeneding on the
          table reference; and one procedure that goes over a list of table
          referenes.
        - NATURAL/USING joins are processed through the procedures:
            mark_common_columns, store_natural_using_join_columns,
            store_top_level_join_columns, setup_natural_join_row_types.
          The entry point to processing NATURAL/USING joins is the
          procedure 'setup_natural_join_row_types'.
        - Replaced the specialized Field_iterator_XXX iterators with one
          generic iterator over the fields of a table reference.
        - Simplified 'insert_fields' and 'setup_conds' due to encapsulation of
          the processing of natural joins in a separate set of procedures.
      sql/sql_class.h:
        - Commented old code.
      sql/sql_delete.cc:
        - Pass the FROM clause to setup_tables.
      sql/sql_help.cc:
        - pass the end name resolution table to find_field_in_tables
        - adjust the list of tables for name resolution
      sql/sql_insert.cc:
        - Changed the code that saves and restores the current context to
          support the list of tables for name resolution -
          context->first_name_resolution_table, and
          table_list->next_name_resolution_table.
          Needed to support an ugly trick to resolve inserted columns only in
          the first table.
        - Added Name_resolution_context::[first | last]_name_resolution_table.
        - Commented old code
      sql/sql_lex.cc:
        - set select_lex.parent_lex correctly
        - set correct state of the current name resolution context
      sql/sql_lex.h:
        - Added a stack of name resolution contexts to support local
          contexts for JOIN ... ON conditions.
        - Commented old code.
      sql/sql_load.cc:
        - Pass the FROM clause to setup_tables.
      sql/sql_olap.cc:
        - Pass the FROM clause to setup_tables.
      sql/sql_parse.cc:
        - correctly set SELECT_LEX::parent_lex
        - set the first table of the current name resoltion context
        - added support for NATURAL/USING joins
        - commented old code
      sql/sql_select.cc:
        - Pass the FROM clause to setup_tables.
        - Pass the end table to find_field_in_tables
        - Improved comments
      sql/sql_show.cc:
        - Set SELECT_LEX::parent_lex.
      sql/sql_update.cc:
        - Pass the FROM clause to setup_tables.
      sql/sql_yacc.yy:
        - Added support for a stack of name resolution contexts needed to
          implement name resolution for JOIN ... ON. A context is pushed
          for each new JOIN ... ON, and popped afterwards.
        - Added support for NATURAL/USING joins.
      sql/table.cc:
        - Added new class Natural_join_column to hide the heterogeneous
          representation of column references for stored tables and for
          views.
        - Added a new list TABLE_LIST::next_name_resolution_table to
          support name resolution with NATURAL/USING joins. Also added
          other members to TABLE_LIST to support NATURAL/USING joins.
        - Added a generic iterator over the fields of table references
          of various types - class Field_iterator_table_ref
      sql/table.h:
        - Added new class Natural_join_column to hide the heterogeneous
          representation of column references for stored tables and for
          views.
        - Added a new list TABLE_LIST::next_name_resolution_table to
          support name resolution with NATURAL/USING joins. Also added
          other members to TABLE_LIST to support NATURAL/USING joins.
        - Added a generic iterator over the fields of table references
          of various types - class Field_iterator_table_ref
      tests/mysql_client_test.c:
        Adjusted according to standard NATURAL JOIN syntax.
      bcc00c1f
    • unknown's avatar
      Fixes during review of new pushed code · efcca089
      unknown authored
      Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      
      
      sql/ha_berkeley.cc:
        Removed not used variable (and options)
      sql/ha_berkeley.h:
        Removed not used argument
      sql/ha_ndbcluster.cc:
        Remove compiler warning
      sql/init.cc:
        Simplify code
      sql/item_sum.cc:
        Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      sql/mysql_priv.h:
        Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      sql/mysqld.cc:
        Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      sql/sql_class.h:
        Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      sql/sql_delete.cc:
        Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      sql/sql_derived.cc:
        Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      sql/sql_lex.h:
        Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      sql/sql_parse.cc:
        Indentation fixes
      sql/sql_select.cc:
        Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      sql/sql_select.h:
        Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      sql/sql_show.cc:
        Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      sql/sql_union.cc:
        Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      sql/sql_update.cc:
        Removed duplicate usage of TMP_TABLE_FORCE_MYISAM by making 'options' longlong
      sql/sql_yacc.yy:
        Changed variable name i to more descriptive name
        Removed compiler warning
      efcca089
  14. 09 Aug, 2005 1 commit
    • unknown's avatar
      Clumsy but working fix for bug #11973 "SELECT .. INTO var_name; in trigger · 24895964
      unknown authored
      cause crash on update".
      
      Let us update "thd" pointer in LEX, all its units and in LEX::result before
      executing statement in trigger body, since triggers are associated with TABLE
      object and because of this can be used in different threads.
      
      
      mysql-test/r/trigger.result:
        Added test case for bug #11973 "SELECT .. INTO var_name; in trigger cause
        crash on update".
      mysql-test/t/trigger.test:
        Added test case for bug #11973 "SELECT .. INTO var_name; in trigger cause
        crash on update".
      sql/item_subselect.cc:
        subselect_engine:
          Moved implementation of set_thd() method to item_subselect.cc,
          since now it also sets "thd" for subselect_engine::result.
      sql/item_subselect.h:
        subselect_engine:
          Moved implementation of set_thd() method to item_subselect.cc,
          since now it also sets "thd" for subselect_engine::result.
      sql/sql_class.h:
        select_result:
          Added set_thd() method for updating select_result::thd value (we need this
          in cases when statement to which this select_result belongs will be used
          in different threads, as it happens for statements in trigger body).
        multi_delete/multi_update:
          Got rid of redundant "thd" member (we already have it in select_result).
      sql/sql_delete.cc:
        multi_delete:
          Got rid of redundant "thd" member (we already have it in select_result).
      sql/sql_lex.h:
        st_select_lex_unit:
          Added set_thd() method for updating st_select_lex_unit::thd value
          (we need this in cases when statement to which this unit belongs will
           be used in different threads, as it happens for statements in trigger body).
          We don't update thd of select_result pointed by st_select_lex_unit::result
          in this method, since it is either have too short lifetime (i.e. created for
          each execution) or is accessible via Item_subquery or LEX::result and thus
          already taken care of.
      sql/sql_parse.cc:
        multi_delete:
          Got rid of redundant "thd" member (we already have it in select_result).
      sql/sql_prepare.cc:
        reinit_stmt_before_use():
          We have to update "thd" pointer in LEX, all its units and in LEX::result,
          since statements which belong to trigger body are associated with TABLE
          object and because of this can be used in different threads.
      sql/sql_update.cc:
        multi_update:
          Got rid of redundant "thd" member (we already have it in select_result).
      24895964
  15. 08 Aug, 2005 1 commit
    • unknown's avatar
      Fix for bug #10055 "Using stored function with information_schema causes empty · 4eac93cd
      unknown authored
      result set".
      
      To enable full access to contents of I_S tables from stored functions
      or statements that use them, we manipulate with thread's open tables
      state and ensure that we won't cause deadlock when we open tables by
      ignoring flushes and name-locks.
      Building of contents of I_S.TABLES no longer requires locking of tables
      since we use use handler::info() method with HA_STATUS_AUTO flag instead
      of handler::update_auto_increment() for obtaining information about
      auto-increment values. But this also means that handlers have to implement
      support for HA_STATUS_AUTO flag (particularly InnoDB needs it).
      
      
      mysql-test/r/alter_table.result:
        Updated test results. This change was caused by the fact that now when
        we build contents of I_S tables (and thus output of SHOW INDEX) we
        don't use instances of tables which may be already opened and locked
        by thread (we always use new instance).
      mysql-test/r/information_schema.result:
        Added test which checks how information about current auto-increment value for
        table is reported in INFORMATION_SCHEMA.TABLES view.
      mysql-test/r/sp.result:
        Added test for bug #10055 "Using stored function with information_schema causes
        empty result set".
      mysql-test/t/information_schema.test:
        Added test which checks how information about current auto-increment value for
        table is reported in INFORMATION_SCHEMA.TABLES view.
      mysql-test/t/sp.test:
        Added test for bug #10055 "Using stored function with information_schema causes
        empty result set".
      sql/mysql_priv.h:
        close_thread_tables():
          Get rid of 'stopper' argument which is no longer used. Now when we need
          to open and then close some table without touching tables which are already
          opened we use THD::reset_n/restore_backup_open_tables_state() methods.
        open_tables()/open_normal_and_derived_tables():
          Added 'flags' argument to be able open tables even if some has done
          a flush or hold namelock on them.
      sql/sp.cc:
        close_proc_table/open_proc_table_for_read/db_find_routine():
          Replaced push_open_tables_state/pop_open_tables_state() methods which
          were saving/restoring current open tables state in/from THD::open_state_list
          with reset_n_backup_open_tables_state/restore_backup_open_tables_state()
          methods which assume that backup storage for this state is allocated on
          stack (or elsewhere) by their caller.
        open_proc_table_for_read():
          Since now we can have several open tables states stacked up we can't rely
          rely on checking whether we have some tables open in previous state.
          Instead we always assume that some tables are open and we need to ignore
          flush while locking mysql.proc. We don't really need 
          MYSQL_LOCK_IGNORE_GLOBAL_READ_LOCK in this case since we open mysql.proc table
          only for reading.
      sql/sp.h:
        Added declarations of open_proc_table_for_read()/close_proc_table() to be
        able to use them in sql_show.cc.
      sql/sql_base.cc:
        close_thread_tables():
          Get rid of 'stopper' argument which is no longer used. Now when we need
          to open and then close some table without touching tables which are already
          opened we use THD::reset_n/restore_backup_open_tables_state() methods.
        open_tables()/open_normal_and_derived_tables():
          Added 'flags' argument to be able open tables even if some has done
          a flush or hold namelock on them.
      sql/sql_class.cc:
        Open_tables_state, THD:
          Replaced push_open_tables_state/pop_open_tables_state() methods which
          were saving/restoring current open tables state in/from THD::open_state_list
          with reset_n_backup_open_tables_state/restore_backup_open_tables_state()
          methods which assume that backup storage for this state is allocated on
          stack (or elsewhere) by their caller.
      sql/sql_class.h:
        Open_tables_state, THD:
          Replaced push_open_tables_state/pop_open_tables_state() methods which
          were saving/restoring current open tables state in/from THD::open_state_list
          with reset_n_backup_open_tables_state/restore_backup_open_tables_state()
          methods which assume that backup storage for this state is allocated on
          stack (or elsewhere) by their caller.
      sql/sql_handler.cc:
        open_tables()/open_normal_and_derived_tables():
          Added 'flags' argument to be able open tables even if some has done
          a flush or hold namelock on them.
      sql/sql_prepare.cc:
        open_tables()/open_normal_and_derived_tables():
          Added 'flags' argument to be able open tables even if some has done
          a flush or hold namelock on them.
      sql/sql_show.cc:
        get_all_tables():
          Now we use THD::reset_n_/restore_backup_open_tables_state() for 
          saving/restoring open tables state instead of working with it directly
          (This also allows us to have proper content of I_S system tables in
          statements with stored functions and in stored functions). We also
          ignore possible flushes when opening tables (we may create deadlock
          otherwise). Also we do all needed manipulations with LEX in this function
          and not in get_schema_tables_result() now.
        get_schema_tables_record():
          Let us use handler::info() method with HA_STATUS_AUTO flag for obtaining
          information about table's auto-increment value. This allows to avoid locking
          of tables which is needed when we use handler::update_auto_increment() method.
        fill_schema_proc():
          Now we use open_proc_table_for_read/close_proc_table() for access to
          mysql.proc table (so we won't cause deadlock if we already have some
          tables open and locked, this also allows us to have proper content in
          ROUTINES system table in statements using stored functions/in stored
          functions).
        get_schema_tables_result():
          Moved all manipulations with Open_tables_state and LEX needed for
          safe opening of tables to ST_SCHEMA_TABLE::fill_table functions
          (i.e. get_all_tables() and fill_schema_proc()).
      sql/sql_update.cc:
        open_tables()/open_normal_and_derived_tables():
          Added 'flags' argument to be able open tables even if some has done
          a flush or hold namelock on them.
      4eac93cd
  16. 02 Aug, 2005 1 commit
    • unknown's avatar
      issue correct error message in case of view presence for duplicated table on update (BUG#10773) · 1e905f8a
      unknown authored
      frequently used command sequence replaced with inline function
      
      
      BitKeeper/etc/config:
        logging switching off
      mysql-test/r/lowercase_view.result:
        hided view underlying tables from error message
      mysql-test/r/view.result:
        hided view underlying tables from error message
      mysql-test/t/lowercase_view.test:
        hided view underlying tables from error message
      mysql-test/t/view.test:
        hided view underlying tables from error message
      sql/mysql_priv.h:
        subroutine which return correct error message
      sql/share/errmsg.txt:
        new error message
      sql/sql_base.cc:
        subroutine which issue correct error message in case of view presence for duplicated table on update
      sql/sql_delete.cc:
        issue correct error message in case of view presence for duplicated table on update
      sql/sql_insert.cc:
        issue correct error message in case of view presence for duplicated table on update
      sql/sql_parse.cc:
        issue correct error message in case of view presence for duplicated table on update
      sql/sql_update.cc:
        issue correct error message in case of view presence for duplicated table on update
      sql/sql_view.cc:
        frequently used command sequence replaced with inline function
      sql/table.cc:
        frequently used command sequence replaced with inline function
      sql/table.h:
        frequently used command sequence replaced with inline function
      1e905f8a
  17. 13 Jul, 2005 1 commit
    • unknown's avatar
      sql_update.cc: · f5813720
      unknown authored
        mysql_update(): Call handler::unlock_row()
        also in the first while loop.
        This patch is from Heikki,
        and it was approved by Sergei Golubchik.
      
      
      sql/sql_update.cc:
        mysql_update(): Call handler::unlock_row()
        also in the first while loop.
        This patch is from Heikki,
        and it was approved by Sergei Golubchik.
      f5813720
  18. 01 Jul, 2005 1 commit
    • unknown's avatar
      Name resolution context added (BUG#6443) · f75ad371
      unknown authored
      include/my_bitmap.h:
        new bitmap operation
      mysql-test/r/view.result:
        added warnings
        Correct inserting data check (absence of default value) for view underlying tables (BUG#6443)
      mysql-test/t/view.test:
        Correct inserting data check (absence of default value) for view underlying tables (BUG#6443)
      mysys/my_bitmap.c:
        new bitmap operation
      sql/field.h:
        index of field in table added
      sql/item.cc:
        Name resolution context added
        table list removed from fix_fields() arguments
      sql/item.h:
        Name resolution context added
        table list removed from fix_fields() arguments
      sql/item_cmpfunc.cc:
        table list removed from fix_fields() arguments
      sql/item_cmpfunc.h:
        table list removed from fix_fields() arguments
      sql/item_func.cc:
        table list removed from fix_fields() arguments
      sql/item_func.h:
        table list removed from fix_fields() arguments
      sql/item_row.cc:
        table list removed from fix_fields() arguments
      sql/item_row.h:
        table list removed from fix_fields() arguments
      sql/item_strfunc.cc:
        fixed server crash on NULL argument
      sql/item_strfunc.h:
        table list removed from fix_fields() arguments
      sql/item_subselect.cc:
        table list removed from fix_fields() arguments
      sql/item_subselect.h:
        table list removed from fix_fields() arguments
      sql/item_sum.cc:
        table list removed from fix_fields() arguments
      sql/item_sum.h:
        table list removed from fix_fields() arguments
      sql/item_timefunc.cc:
        table list removed from fix_fields() arguments
      sql/item_timefunc.h:
        table list removed from fix_fields() arguments
      sql/item_uniq.h:
        table list removed from fix_fields() arguments
      sql/log_event.cc:
        Name resolution context added
      sql/log_event.h:
        Name resolution context added
      sql/mysql_priv.h:
        Name resolution context added
      sql/set_var.cc:
        table list removed from fix_fields() arguments
      sql/share/errmsg.txt:
        new error message
      sql/sp.cc:
        Name resolution context added
      sql/sp_head.cc:
        table list removed from fix_fields() arguments
      sql/sp_head.h:
        Name resolution context added
      sql/sql_base.cc:
        table list removed from fix_fields() arguments
        Name resolution context added
      sql/sql_class.cc:
        renamed variable
      sql/sql_delete.cc:
        Name resolution context added
      sql/sql_derived.cc:
        Name resolution context added
      sql/sql_do.cc:
        table list removed from fix_fields() arguments
      sql/sql_handler.cc:
        Name resolution context added
      sql/sql_help.cc:
        Name resolution context added
      sql/sql_insert.cc:
        Name resolution context added
        table list removed from fix_fields() arguments
      sql/sql_lex.cc:
        Name resolution context added
      sql/sql_lex.h:
        removed resolve mode (information stored into name resolution context)
      sql/sql_load.cc:
        table list removed from fix_fields() arguments
      sql/sql_olap.cc:
        Name resolution context added
      sql/sql_parse.cc:
        Name resolution context added
      sql/sql_prepare.cc:
        table list removed from fix_fields() arguments
      sql/sql_select.cc:
        table list removed from fix_fields() arguments
      sql/sql_show.cc:
        Name resolution context added
      sql/sql_trigger.cc:
        table list removed from fix_fields() arguments
      sql/sql_udf.h:
        table list removed from fix_fields() arguments
      sql/sql_union.cc:
        Name resolution context added
      sql/sql_update.cc:
        Name resolution context added
      sql/sql_view.cc:
        Name resolution context added
      sql/sql_view.h:
        table list removed from fix_fields() arguments
      sql/sql_yacc.yy:
        Name resolution context added
      sql/table.cc:
        Name resolution context added
        merged view processing moved
      sql/table.h:
        merged view processing moved
      f75ad371
  19. 01 Jun, 2005 1 commit
    • unknown's avatar
      Code cleanups during code reviews · 16b7c83c
      unknown authored
      Ensure we get error if INSERT IGNORE ... SELECT fails
      Fixed wrong key_part->key_length usage in index_merge
      
      
      client/mysql.cc:
        Code cleanups & simply optimizations
      mysql-test/r/information_schema.result:
        Safety
      mysql-test/t/information_schema.test:
        Safety
      sql/ha_ndbcluster.cc:
        Code cleanups
      sql/item.cc:
        Code cleanups
      sql/item_subselect.cc:
        Code cleanups
      sql/item_sum.cc:
        Code cleanups
      sql/opt_range.cc:
        Made get_index_only_read_time() static (instad of inline) to increase portability (function was not declared before use)
        Simple optimization
        Fixed wrong key_part->key_length usage in index_merge
        Removed not used variable n_used_covered
        Indentation fixes & comment cleanups
      sql/parse_file.cc:
        Code cleanups
      sql/sql_base.cc:
        Code cleanups
      sql/sql_bitmap.h:
        Added missing return
      sql/sql_insert.cc:
        Ensure we get error if INSERT IGNORE ... SELECT fails
      sql/sql_select.cc:
        Code cleanups
      sql/sql_show.cc:
        Safety fix if a LOT of errors are ignored
      sql/sql_update.cc:
        Code cleanups
      sql/table.cc:
        Code cleanups
      sql/table.h:
        Code cleanups
      sql/uniques.cc:
        Code cleanups
      strings/decimal.c:
        Simple optimization
        Code cleanups
      16b7c83c
  20. 30 May, 2005 1 commit
    • unknown's avatar
      Preparatory (and the most problematic) patch for Bug#7306 · a127820a
      unknown authored
      "the server side preparedStatement error for LIMIT placeholder",
      which moves all uses of LIMIT clause from PREPARE to OPTIMIZE
      and later steps.
      After-review fixes.
      
      
      mysql-test/r/group_min_max.result:
        Test results fixed for EXPLAINs when using GROUP_MIN_MAX access plan.
      sql/item_subselect.cc:
        Move setting of the internal LIMIT used for IN/ALL/ANY/EXISTS 
        subqueries to one place: Item_exists_subselect::fix_length_and_dec().
        This implies that unit->select_limit_cnt is not set until the item is 
        fixed. This is OK, as now LIMIT values are not used until JOIN::optimize.
      sql/mysql_priv.h:
        setup_tables no longer needs a special flag for the case when
        it's called from JOIN::reinit() (we don't need to call setup_tables
        between two executions of a correlated subquery).
      sql/opt_range.cc:
        Fix a glitch in GROUP_MIN_MAX access plan: we should use table metadata,
        not field data, to evaluate max_used_key_length, which is then
        used for explain.
      sql/sp.cc:
        - setup_tables signature changed.
      sql/sql_base.cc:
        - setup_tables no longer needs a special mode for subqueries.
          Unused checks were removed.
      sql/sql_delete.cc:
        - setup_tables signature changed
      sql/sql_help.cc:
        - setup_tables signature changed
      sql/sql_insert.cc:
        - setup_tables signature changed
      sql/sql_lex.cc:
        Consolidate setting of internal LIMIT for IN/ALL/ANY/EXISTS subqeries
        in one place, and hence remove it from st_select_lex::test_limit().
      sql/sql_lex.h:
        Cleanup signature of st_select_lex_unit::init_prepare_fake_select_lex().
      sql/sql_load.cc:
        - setup_tables signature changed
      sql/sql_olap.cc:
        - setup_tables signature changed
      sql/sql_parse.cc:
        - st_select_lex_unit::set_limit() signature changed
      sql/sql_select.cc:
        Move setting of JOIN::select_limit from JOIN::prepare
        to JOIN::optimize. At prepare, limit is unknown yet.
        Remove excessive cleanups from JOIN::reinit which were overwriting
        join->join_tab[i]->table->used_keys. This fixes the bug which was triggered
        by the change in item_subselect.cc.
      sql/sql_union.cc:
        Class st_select_lex_unit was changed to avoid calls to 
         st_select_lex_unit::set_limit from places where it may be unknown.
        Now unit->select_limit_cnt is set at ::exec(). 
        st_select_lex_unit::init_prepare_fake_select_lex(): 
         - move out set_limit functionality
         - remove a few lines of dead code.
        st_select_lex_unit::prepare():
          - now we don't call set_limit at the time of prepare, so the value  
            of unit->select_limit_cnt may be unknown here. Use sl->select_limit
            instead.
        st_select_lex_unit::exec():
          - cleanup
          - call set_limit explicitly as it has been moved out of 
           init_prepare_fake_select_lex.
      sql/sql_update.cc:
        - setup_tables signature changed
      a127820a
  21. 24 May, 2005 1 commit
    • unknown's avatar
      Fix for bugs: · efc2479d
      unknown authored
       #5860 "Multi-table UPDATE does not activate update triggers"
       #6812 "Triggers are not activated for INSERT ... SELECT"
       #8755 "Trigger is not activated by LOAD DATA".
      This patch also implements proper handling of triggers for special forms
      of insert like REPLACE or INSERT ... ON DUPLICATE KEY UPDATE. 
      Also now we don't call after trigger in case when we have failed to
      inserted/update or delete row. Trigger failure should stop statement
      execution.
      
      I have not properly tested handling of errors which happen inside of
      triggers in this patch, since it is simplier to do this once we will be
      able to access tables from triggers.
      
      
      mysql-test/r/trigger.result:
        Added tests for triggers behavior for various non-standard forms of
        INSERT such as REPLACE and INSERT ... ON DUPLICATE KEY UPDATE.
        Also added tests for bugs #5860 "Multi-table UPDATE does not activate
        update triggers", #6812 "Triggers are not activated for INSERT ... SELECT"
        and #8755 "Trigger is not activated by LOAD DATA".
      mysql-test/t/trigger.test:
        Added tests for triggers behavior for various non-standard forms of
        INSERT such as REPLACE and INSERT ... ON DUPLICATE KEY UPDATE.
        Also added tests for bugs #5860 "Multi-table UPDATE does not activate
        update triggers", #6812 "Triggers are not activated for INSERT ... SELECT"
        and #8755 "Trigger is not activated by LOAD DATA".
      sql/item.cc:
        Since it turned out that at trigger loading time we can't say in which
        buffer TABLE::record[0] or record[1] old version of row will be stored
        we have to change our approach to binding of Item_trigger_field to
        Field instances.
        Now after trigger parsing (in Item_trigger_field::setup_table()) we only
        find index of proper Field in the TABLE::field array. Then before trigger
        is invoked we set Table_triggers_list::old_field/new_field so they point
        to arrays holding Field instances bound to buffers with proper row
        versions. And as last step in Item_trigger_field::fix_fields() we get
        pointer to Field from those arrays using saved field index.
        
        Item_trigger_field::setup_field()/fix_fields() were changed to implement
        this approach.
      sql/item.h:
        Since it turned out that at trigger loading time we can't say in which
        buffer TABLE::record[0] or record[1] old version of row will be stored
        we have to change our approach to binding of Item_trigger_field to
        Field instances.
        Now after trigger parsing (in Item_trigger_field::setup_table()) we only
        find index of proper Field in the TABLE::field array. Then before trigger
        is invoked we set Table_triggers_list::old_field/new_field so they point
        to arrays holding Field instances bound to buffers with proper row
        versions. And as last step in Item_trigger_field::fix_fields() we get
        pointer to Field from those arrays using saved field index.
        
        Item_trigger_field:
        - Added field_idx member to store index of Field object corresponding to
          this Item in TABLE::field array.
        - Added triggers member to be able to access to parent Table_trigger_list
          object from fix_fields() method.
        - setup_field() no longer needs to know for which type of event this
          trigger is, since it does not make decision Field for which buffer
          (record[0] or record[1] is appropriate for this Item_trigger_field)
      sql/mysql_priv.h:
        Added fill_record_n_invoke_before_triggers() methods. They are simple
        wrappers around fill_record() which invoke proper before trigger right
        after filling record with values.
      sql/sql_base.cc:
        Added fill_record_n_invoke_before_triggers() methods. They are simple
        wrappers around fill_record() which invoke proper before trigger right
        after filling record with values.
      sql/sql_delete.cc:
        mysql_delete():
          Now we stop statement execution if one of triggers failed, we also
          don't execute after delete trigger if we failed to delete row from
          the table (We also pass information about which buffer contains old
          version of row to process_triggers()).
        multi_delete::send_data()/do_deletes():
          Now we also invoke triggers in case of multi-delete.
      sql/sql_insert.cc:
        mysql_insert():
          Moved invocation of before triggers to fill_record_n_invoke_before_triggers()
          method. After triggers are now executed as part of write_record().
          (as nice side effect now we also stop statement execution if one of
          triggers fail).
        write_record():
          Invoke after insert trigger after performing insert. Also invoke proper
          triggers if insert is converted to update or conflicting row is deleted.
          Cleaned up error handling a bit - no sense to report error via
          handler::print_error if it was not generated by handler method and
          was reported before.
          Also now we will execute after trigger only if we really have written
          row to the table. 
        select_insert::send_data()/store_values():
          We should also execute INSERT triggers for INSERT ... SELECT statement.
      sql/sql_load.cc:
        read_fixed_length()/read_sep_field():
          We should execute INSERT triggers when processing LOAD DATA statement.
          Small cleanup in auto-increment related code. Also moved check for
          thd->killed which is used to abort LOAD DATA in case of problems
          in 'traditional' mode to better place..
      sql/sql_trigger.cc:
        Since it turned out that at trigger loading time we can't say in which
        buffer TABLE::record[0] or record[1] old version of row will be stored
        we have to change our approach to binding of Item_trigger_field to
        Field instances.
        Now after trigger parsing (in Item_trigger_field::setup_table()) we only
        find index of proper Field in the TABLE::field array. Then before trigger
        is invoked we set Table_triggers_list::old_field/new_field so they point
        to arrays holding Field instances bound to buffers with proper row
        versions. And as last step in Item_trigger_field::fix_fields() we get
        pointer to Field from those arrays using saved field index.
        
        Table_triggers_list methods were changed to implement this approach
        (see also comments for sql_trigger.h).
      sql/sql_trigger.h:
        Since it turned out that at trigger loading time we can't say in which
        buffer TABLE::record[0] or record[1] old version of row will be stored
        we have to change our approach to binding of Item_trigger_field to
        Field instances.
        Now after trigger parsing (in Item_trigger_field::setup_table()) we only
        find index of proper Field in the TABLE::field array. Then before trigger
        is invoked we set Table_triggers_list::old_field/new_field so they point
        to arrays holding Field instances bound to buffers with proper row
        versions. And as last step in Item_trigger_field::fix_fields() we get
        pointer to Field from those arrays using saved field index.
        
        Changed Table_triggers_list to implement this new approach:
        - Added record1_field member to store array of Field objects bound
          to TABLE::record[1] buffer (instead of existing old_field member)
        - Added new_field member and changed meaning of old_field member.
          During trigger execution they should point to arrays of Field objects
          bound to buffers holding new and old versions of row respectively.
        - Added 'table' member to be able to get access to TABLE instance
          (for which this trigger list object was created) from process_triggers()
          method.
        - Now process_triggers() method sets old_field and new_field members
          properly before executing triggers body (basing on new 
          old_row_is_record1 parameter value).
        - Renamed prepare_old_row_accessors_method() to prepare_record1_accessors()
        
        Also added has_before_update_triggers() method which allows to check
        whenever any before update triggers exist for table.
      sql/sql_update.cc:
        mysql_update():
          Now we invoke before triggers in fill_record_n_invoke_before_triggers()
          method. Also now we abort statement execution when one of triggers fail.
        safe_update_on_fly():
          When we are trying to understand if we can update first table in multi
          update on the fly we should take into account that BEFORE UPDATE
          trigger can change field values.
        multi_update::send_data()/do_updates()
          We should execute proper triggers when doing multi-update
          (in both cases when we do it on the fly and using temporary tables).
      efc2479d
  22. 17 May, 2005 1 commit
    • unknown's avatar
      After merge fix · cfb02c34
      unknown authored
      sql/sql_update.cc:
        Add missing join method
      cfb02c34
  23. 10 May, 2005 1 commit
    • unknown's avatar
      Many files: · 6f45bdf3
      unknown authored
        Fixed bug #8528.
        Representation for single-table views was made similar to
        representation for multi-table views.
      view.test:
        Added test case for bug #8528.
      view.result:
        Added test case for bug #8528. Fixed other test cases.
      
      
      mysql-test/r/view.result:
        Added test case for bug #8528. Fixed other test cases.
      mysql-test/t/view.test:
        Added test case for bug #8528.
      sql/sql_base.cc:
        Fixed bug #8528.
        Representation for single-table views was made similar to
        representation for multi-table views.
      sql/sql_delete.cc:
        Fixed bug #8528.
        Representation for single-table views was made similar to
        representation for multi-table views.
      sql/sql_insert.cc:
        Fixed bug #8528.
        Representation for single-table views was made similar to
        representation for multi-table views.
      sql/sql_parse.cc:
        Fixed bug #8528.
        Representation for single-table views was made similar to
        representation for multi-table views.
      sql/sql_prepare.cc:
        Fixed bug #8528.
        Representation for single-table views was made similar to
        representation for multi-table views.
      sql/sql_select.cc:
        Fixed bug #8528.
        Representation for single-table views was made similar to
        representation for multi-table views.
      sql/sql_update.cc:
        Fixed bug #8528.
        Representation for single-table views was made similar to
        representation for multi-table views.
      sql/sql_view.cc:
        Fixed bug #8528.
        Representation for single-table views was made similar to
        representation for multi-table views.
      sql/table.cc:
        Fixed bug #8528.
        Representation for single-table views was made similar to
        representation for multi-table views.
      sql/table.h:
        Fixed bug #8528.
        Representation for single-table views was made similar to
        representation for multi-table views.
      6f45bdf3
  24. 15 Apr, 2005 1 commit
    • unknown's avatar
      Fix for bug #9486 "Can't perform multi-update in stored procedure". · 34983181
      unknown authored
      New more SP-locking friendly approach to handling locks in multi-update.
      Now we mark all tables of multi-update as needing write lock at parsing
      stage and if possible downgrade lock at execution stage (For its work
      SP-locking mechanism needs to know all lock types right after parsing
      stage).
      
      
      mysql-test/r/sp-threads.result:
        Added test for bug #9486 "Can't perform multi-update in stored procedure".
      mysql-test/t/sp-threads.test:
        Added test for bug #9486 "Can't perform multi-update in stored procedure".
      sql/sp_head.cc:
        SP_TABLE, sp_head::merge_table_list()/add_used_tables_to_table_list():
          Since some queries during their execution (e.g. multi-update)
          may change type of lock for some of their tables and thus change
          lock_type member for some of elements of table list, we should
          store type of lock in SP_TABLE struct explicitly instead of using
          lock_type member of TABLE_LIST object pointed by SP_TABLE::table.
      sql/sql_lex.h:
        Removed no longer used LEX::multi_lock_option member.
      sql/sql_prepare.cc:
        mysql_test_update():
          We don't need to bother about LEX::multi_lock_option if we convert
          multi-update to update anymore. Since nowdays multi-update uses 
          TABLE_LIST::lock_type for specifying lock level of updated tables
          instead of LEX::multi_lock_option.
      sql/sql_update.cc:
        mysql_update()/mysql_multi_update_prepare():
         Now we mark all tables of multi-update as needing write lock at parsing
         stage and if possible downgrade lock at execution stage. Old approach
         (don't set lock type until execution stage) was not working well with
         SP-locking (For its work SP-locking mechanism needs to know all lock 
         types right after parsing stage).
        
        mysql_multi_update():
          We should return FALSE if no error occurs.
      sql/sql_yacc.yy:
        update:
         Now we mark all tables of multi-update as needing write lock at parsing
         stage and if possible downgrade lock at execution stage. Old approach
         (don't set lock type until execution stage) was not working well with
         SP-locking (For its work SP-locking mechanism needs to know all lock 
         types right after parsing stage).
      34983181
  25. 28 Mar, 2005 1 commit
    • unknown's avatar
      fixed mechanism of detection selection from table wich we update · 776b9f8f
      unknown authored
      (BUG##9398, BUG#8703)
      fixed wrong join view detection in multi-delete which lead to server crash
      
      
      mysql-test/r/lowercase_view.result:
        added new tests of updation and selection from the same table
      mysql-test/r/view.result:
        added new tests of updation and selection from the same table
        added test of multidelete command over join view which lead to server crash
        test suite from bugs #9398 and #8703
      mysql-test/t/lowercase_view.test:
        added new tests of updation and selection from the same table
      mysql-test/t/view.test:
        added new tests of updation and selection from the same table
        added test of multidelete command over join view which lead to server crash
        test suite from bugs #9398 and #8703
      sql/sql_base.cc:
        changed procedure of finding tables
      sql/sql_class.cc:
        added derived table procession detection
      sql/sql_class.h:
        added derived table procession detection
      sql/sql_delete.cc:
        fixed detection of selection from table which update for multidelete
      sql/sql_derived.cc:
        added derived table procession detection
      sql/sql_lex.cc:
        added detection os SELECTs processed inside derived tables
        removed old mechanism of multidelete/multiupdate table duplication detection (which can't work with views)
      sql/sql_lex.h:
        added detection os SELECTs processed inside derived tables
        removed old mechanism of multidelete/multiupdate table duplication detection (which can't work with views)
      sql/sql_parse.cc:
        removed wrong test of join view (for multidelete in can be not only first table)
      sql/sql_prepare.cc:
        added detection os SELECTs processed inside derived tables (reset it for reusing in PS/SP)
      sql/sql_select.cc:
        added detection os SELECTs processed inside derived tables
      sql/sql_update.cc:
        fixed detection of selection from table which update for multiupdate
      776b9f8f
  26. 19 Mar, 2005 1 commit
    • unknown's avatar
      Eliminate warnings noticed by VC7. This includes fixing my_mmap() on · 22234f31
      unknown authored
      Windows to call CreateFileMapping() with correct arguments, and
      propogating the introduction of query_id_t to everywhere query ids are
      passed around. (Bug #8826)
      
      
      libmysql/libmysql.c:
        Make implicit cast explicit
      myisam/mi_open.c:
        Make cast of value to smaller data size explicit
      myisam/mi_packrec.c:
        Cast file size (my_off_t) to size_t for mmap
      mysys/my_mmap.c:
        Fix Windows version of my_mmap() to use the right parameters
        for call to CreateFileMapping()
      sql/field.cc:
        Use temporary value of correct type
      sql/field.h:
        Use query_id_t for query_id value
      sql/ha_berkeley.cc:
        Fix flag check
      sql/ha_innodb.h:
        Use query_id_t for query_id value
      sql/handler.cc:
        Explain opt_using_transactions calculation, and add cast
      sql/handler.h:
        Fix forward declaration of COND
      sql/item.cc:
        Fix val_bool() tests of val_int() to avoid implicit cast
      sql/item_cmpfunc.cc:
        Fix typo in switch label
      sql/item_func.cc:
        Make implicit cast explicit
      sql/item_strfunc.cc:
        Now that query_id is a query_id_t, need to cast it to a ulong here
      sql/item_subselect.cc:
        Fix test of value
      sql/log.cc:
        Cast my_off_t used for file size to size_t for memory allocation
        Also cast my_off_t when using it to calculate the number of pages for TC log
        Cast total_ha_2pc to uchar when saving it
      sql/mysql_priv.h:
        Move up query_id definition so it can be used more widely
      sql/opt_range.cc:
        Add unused delete operator to prevent compiler warning
      sql/set_var.cc:
        Cast value for max_user_connections
      sql/sql_cache.cc:
        Remove unused label
      sql/sql_class.h:
        Fix query id values to be of type query_id_t
      sql/sql_db.cc:
        Move variable only used inside #ifdef within the #ifdef
      sql/sql_help.cc:
        Remove unused label
      sql/sql_insert.cc:
        Use query_id_t for query id values
      sql/sql_lex.h:
        Add unused delete operator to prevent compiler warning
      sql/sql_select.cc:
        Remove unused variable
        Make cast of value explicit
      sql/sql_select.h:
        Use query_id_t for query id values
      sql/sql_table.cc:
        Make comparison to function pointer explicit
      sql/sql_update.cc:
        Use query_id_t for query id values
      sql/table.h:
        Use query_id_t for query id values
      strings/ctype-simple.c:
        Add cast of long value to (char) in expression
      strings/ctype-ucs2.c:
        Add cast of long value to (char) in expression
      strings/ctype-utf8.c:
        Make cast to smaller size explicit
      22234f31
  27. 17 Mar, 2005 1 commit
    • unknown's avatar
      Fixed two bugs in MySQL ACL. · 5de05a3a
      unknown authored
      First one is related to Bug#7905. One should not be allowed to
      create new user with password without UPDATE privilege to
      MySQL database. Furthermore, executing the same GRANT statement
      twice would actually crash the server and corrupt privilege database.
      
      Other bug was that one could update a column, using the existing
      value as basis to calculate the new value (e.g. UPDATE t1 SET a=a+1)
      without SELECT privilege to the field (a in the above example)
      
      Fixed tests grant.pl and grant2, which were wrong.
      
      5de05a3a
  28. 16 Mar, 2005 1 commit
    • unknown's avatar
      Cleanup during reviews · 1637a873
      unknown authored
      Removed some optional arguments
      Fixed portability problem in federated tests
      
      
      client/sql_string.cc:
        update from sql/sql_string.cc
      client/sql_string.h:
        update from sql/sql_string.h
      mysql-test/r/federated.result:
        Fixed error message
      sql/field.cc:
        Cleanup during review
        Remove const in 'const unsigned int'
      sql/field.h:
        Remove const in 'const unsigned int'
      sql/ha_federated.cc:
        Better error string.  Add missing argument to error (before 'errno' was picked up from stack)
      sql/handler.cc:
        Removed compiler warning
      sql/item_func.cc:
        Cleanup during review
      sql/item_sum.cc:
        Cleanup during review
      sql/lock.cc:
        Remove optional arguments
      sql/log_event.cc:
        Remove optional arguments
      sql/mysql_priv.h:
        Remove optional arguments
        cahnge preapre_create_fields to use pointers instead of references
      sql/opt_range.cc:
        Fix arguments so that return value is last
      sql/sql_base.cc:
        Remove optional arguments
      sql/sql_delete.cc:
        Remove optional arguments
      sql/sql_error.cc:
        Remove optional arguments
      sql/sql_help.cc:
        Remove optional arguments
      sql/sql_parse.cc:
        Remove optional arguments
      sql/sql_prepare.cc:
        Remove optional arguments
      sql/sql_rename.cc:
        Remove optional arguments
      sql/sql_select.cc:
        Remove optional arguments
      sql/sql_show.cc:
        Cleanup during review
      sql/sql_string.cc:
        Simple optimization
      sql/sql_table.cc:
        Remove optional arguments
        Fixed indentation
      sql/sql_update.cc:
        Remove optional arguments
      sql/sql_yacc.yy:
        Change references to pointers
      1637a873
  29. 04 Mar, 2005 1 commit
    • unknown's avatar
      Better approach for prelocking of tables for stored routines execution · adcf9d1d
      unknown authored
      and some SP-related cleanups.
      
      - We don't have separate stage for calculation of list of tables
        to be prelocked and doing implicit LOCK/UNLOCK any more.
        Instead we calculate this list at open_tables() and do implicit
        LOCK in lock_tables() (and UNLOCK in close_thread_tables()).
        Also now we support cases when same table (with same alias) is
        used several times in the same query in SP.
      
      - Cleaned up execution of SP. Moved all common code which handles
        LEX and does preparations before statement execution or complex
        expression evaluation to auxilary sp_lex_keeper class. Now 
        all statements in SP (and corresponding instructions) that
        evaluate expression which can contain subquery have their
        own LEX.
      
      
      mysql-test/r/lock.result:
        Replaced wrong error code with the correct one after fixing bug in
        SP-locking.
      mysql-test/r/mysqldump.result:
        Added dropping of view which is used in test to its beginning.
      mysql-test/r/sp.result:
        Added tests for improved SP-locking.
        Temporarily disabled tests for SHOW PROCEDURE STATUS and alike
        (Until Monty will allow to open mysql.proc under LOCK TABLES without
        mentioning it in lock list).
        Replaced wrong results of test for bug #5240 with correct results after
        fixing bug in handling of cursors.
      mysql-test/t/lock.test:
        Replaced wrong error code with the correct one after fixing bug in
        SP-locking.
      mysql-test/t/mysqldump.test:
        Added dropping of view which is used in test to its beginning.
      mysql-test/t/sp.test:
        Added tests for improved SP-locking.
        Temporarily disabled tests for SHOW PROCEDURE STATUS and alike
        (Until Monty will allow to open mysql.proc under LOCK TABLES without
        mentioning it in lock list).
        Removed test for bug #1654 since we already test exactly this function
        in one of SP-locking tests.
        Removed comment about cursor's wrong behavior in test for bug #5240
        after fixing bug which was its cause.
      sql/item_func.cc:
        Removed comment which is no longer true.
      sql/mysql_priv.h:
        Changed open_tables() signature.
        Now its 2nd parameter is in/out since it can add elements to table list.
      sql/sp.cc:
        sp_find_procedure():
         Added one more parameter which enforces cache only lookup.
        
        sp_merge_hash():
         Now uses its return value to indicate that first of two hashes changed
         as result of merge.
        
        sp_cache_routines():
         This function caches all stored routines used in query now.
      sql/sp.h:
        - sp_find_procedure() now has one more parameter which enforces cache only
          lookup.
        - sp_merge_hash() now uses its return value to indicate that first of two
          hashes changed as result of merge.
        - sp_cache_routines() caches all stored routines now. So it does not need
          third argument any more.
      sql/sp_head.cc:
        sp_head::sp_head():
         Added initialization of new m_spfuns and m_spprocs members.
        
        sp_head::execute():
         Let us save/restore part of thread context which can be damaged by
         execution of instructions.
        sp_head::execute_function()/execute_procedure():
         Now it is responsibility of caller to close tables used in
         subqueries which are passed as routine parameters.
        
        sp_head::restore_lex():
         Let us accumulate information about routines used by this one
         in new m_spfuns, m_spprocs hashes.
        
        sp_lex_keeper::reset_lex_and_exec_core()
         Main method of new auxilary sp_lex_keeper class to which instructions 
         delegate responsibility for handling LEX and preparations before
         executing statement or calculating complex expression.
        
        Since all instructions which calculate complex expression or execute
        command now use sp_lex_keeper they have to implement
        sp_instr::exec_core() method. Most of instruction specific logic
        has moved from sp_instr::execute() to this new method.
        
        Removed sp_instr_set_user_var class which is no longer used, because
        nowdays we allow execution of statements in stored functions and
        triggers.
        
        sp_merge_table_list() became sp_head::merge_table_list() method. It
        also treats sp_head::m_sptabs as multi-set of tables now.
        
        sp_hash_to_table_list() became sp_head::add_used_tables_to_table_list().
        It takes into account that sp_head::m_sptabs is multi-set and allocates
        object into persistent arena of PS.
        
        Removed sp_merge_table_hash(), sp_open_and_lock_tables(),
        sp_unlock_tables(), sp_merge_routine_tables() methods since they are not
        used by new prelocking mechanism.
        
        Added sp_add_sp_tables_to_table_list() which serves for adding tables needed
        by routines used in query to the query table list for prelocking.
      sql/sp_head.h:
        class sp_head:
        - Added m_spfuns, m_spprocs members for storing names of routines used
          by this routine.
        - Added add_used_tables_to_table_list() method which allows to add
          tables needed by this routine to query's table list.
        - Converted sp_merge_table_list() to sp_head::merge_table_list() method.
        - Changed semantics of THD::m_sptabs. Now it is multi-set which contains
          only tables which are used by this routine and not routines that are
          called from this one.
        
        Removed sp_merge_routine_tables(), sp_merge_table_hash(),
        sp_open_and_lock_tables(), sp_unlock_tables() calls since they are not
        used for our prelocking list calculation.
        
        Added auxilary sp_lex_keeper class to which instructions delegate
        responsibility for handling LEX and preparations before executing
        statement or calculating complex expression. This class uses
        new sp_instr::exec_core() method which is responsible for executing
        instruction's core function after all preparations were made.
        
        All instructions which hold and calculate complex expression now have
        their own LEX (by aggregating sp_lex_keeper instance). sp_instr_stmt
        now uses sp_lex_keeper too.
        
        Removed sp_instr_set_user_var class which is no longer used, because
        nowdays we allow execution of statements in stored functions and
        triggers.
      sql/sp_rcontext.cc:
        Now sp_cursor holds pointer to sp_lex_keeper instead of LEX.
      sql/sp_rcontext.h:
        Now sp_cursor holds pointer to sp_lex_keeper instead of LEX.
      sql/sql_acl.cc:
        acl_init(), grant_init():
          Now we use simple_open_n_lock_tables() instead of explicit
          calls to open_tables() and mysql_lock_tables().
      sql/sql_base.cc:
        Implemented support for execution of statements in "prelocked" mode.
        
        When we have statement which uses stored routines explicitly or
        implicitly (via views or triggers) we have to open and lock all tables
        for these routines at the same time as tables for the main statement.
        In fact we have to do implicit LOCK TABLES at the begining of such
        statement and implict UNLOCK TABLES at its end. We call such mode
        "prelocked".
        
        When open_tables() is called for the statement tables which are needed
        for execution of routines used by it are added to its tables list
        (this process also caches all routines used). Implicit use of routines
        is discovered when we open view or table with trigger and apropriate
        tables are added to the table list at this moment. Statement which has
        such extra tables in its list (well actually any that uses functions)
        is marked as requiring prelocked mode for its execution.
        
        When lock_tables() sees such statement it will issue implicit LOCK TABLES
        for this extended table list instead of doing usual locking, it will also
        set THD::prelocked_mode to indicate that we are in prelocked mode.
        
        When open_tables()/lock_tables() are called for statement of stored
        routine (substatement), they notice that we are running in prelocked mode
        and use one of prelocked tables from those that are not used by upper
        levels of execution.
        
        close_thread_tables() for substatement won't really close tables used
        but will mark them as free for reuse instead.
        
        Finally when close_thread_tables() is called for the main statement it
        really unlocks and closes all tables used.
        
        Everything will work even if one uses such statement under real LOCK
        TABLES (we are simply not doing implicit LOCK/UNLOCK in this case).
      sql/sql_class.cc:
        Added initialization of THD::prelocked_mode member.
      sql/sql_class.h:
        - Added prelocked_mode_type enum and THD::prelocked_mode member
          which are used for indication whenever "prelocked mode" is on 
          (i.e. that statement uses stored routines and is executed under
           implicit LOCK TABLES).
        - Removed THD::shortcut_make_view which is no longer needed.
          We use TABLE_LIST::prelocking_placeholder for the same purprose
          now.
      sql/sql_handler.cc:
        Changed open_tables() invocation.
        Now its 2nd parameter is in/out since it can add elements to table list.
      sql/sql_lex.cc:
        lex_start():
          Added initialization of LEX::query_tables_own_last.
          Unused LEX::sptabs member was removed.
        st_lex::unlink_first_table()/link_first_table_back():
          We should update LEX::query_tables_last properly if table list
          contains(ed) only one element.
      sql/sql_lex.h:
        LEX:
        - Removed sptabs member since it is no longer used.
        - Added query_tables_own_last member, which if non-0 indicates that
          statement requires prelocking (implicit LOCK TABLES) for its execution
          and points to last own element in query table list. If it is zero
          then this query does not need prelocking.
        - Added requires_prelocking(), mark_as_requiring_prelocking(),
          first_not_own_table() inline methods to incapsulate and simplify
          usage of this new member.
      sql/sql_parse.cc:
        dispatch_command():
          To properly leave prelocked mode when needed we should call
          close_thread_tables() even if there are no open tables.
        mysql_execute_command():
        - Removed part of function which were responsible for doing implicit
          LOCK TABLES before statement execution if statement used stored 
          routines (and doing UNLOCK TABLES at the end).
          Now we do all this in open_tables()/lock_tables()/close_thread_tables()
          instead.
        - It is also sensible to reset errors before execution of statement
          which uses routines.
        - SQLCOM_DO, SQLCOM_SET_OPTION, SQLCOM_CALL
          We should always try to open tables because even if statement has empty
          table list, it can call routines using tables, which should be preopened
          before statement execution.
        - SQLCOM_CALL
          We should not look up routine called in mysql.proc, since it should be
          already cached by this moment by open_tables() call.
        - SQLCOM_LOCK_TABLES
          it is better to use simple_open_n_lock_tables() since we want to avoid
          materialization of derived tables for this command.
      sql/sql_prepare.cc:
        mysql_test_update():
          Changed open_tables() invocations. Now its 2nd parameter is in/out
          since it can add elements to table list.
        check_prepared_statement():
          Since now we cache all routines used by statement in open_tables() we 
          don't need to do it explicitly.
        mysql_stmt_prepare():
          Now we should call close_thread_tables() when THD::lex points to the
          LEX of statement which opened tables.
        reset_stmt_for_execute():
          Commented why we are resetting all tables in table list.
      sql/sql_trigger.h:
        Table_triggers_list::process_triggers():
          We should surpress sending of ok packet when we are calling trigger's
          routine, since now we allow statements in them.
      sql/sql_update.cc:
        Changed open_tables() invocations.
        Now its 2nd parameter is in/out since it can add elements to table list.
      sql/sql_view.cc:
        mysql_make_view():
        - Removed handling of routines used in view. Instead we add tables which
          are needed for their execution to statement's table list in 
          open_tables().
        - Now we use TABLE_LIST::prelocking_placeholder instead of 
          THD::shortcut_make_view for indicating that view is opened
          only to discover which tables and routines it uses (this happens
          when we build extended table list for prelocking). Also now we try
          to avoid to modify main LEX in this case (except of its table list).
        - Corrected small error we added tables to the table list of the main
          LEX without updating its query_tables_last member properly.
      sql/sql_yacc.yy:
        Now each expression which is used in SP statements and can contain
        subquery has its own LEX. This LEX is stored in corresponding sp_instr
        object and used along with Item tree for expression calculation.
        
        We don't need sp_instr_set_user_var() anymore since now we allow
        execution of statements in stored functions and triggers.
      sql/table.h:
        Added TABLE_LIST::prelocking_placeholder member for distinguishing
        elements of table list which does not belong to the statement itself
        and added there only for prelocking (as they are to be used by routines
        called by this statement).
      sql/tztime.cc:
        my_tz_init():
          Now we use more simplier simple_open_n_lock_tables() call instead of 
          open_tables()/lock_tables() pair.
      adcf9d1d
  30. 25 Feb, 2005 1 commit
    • unknown's avatar
      Remove compiler warnings and remove not used variables · 0bc36004
      unknown authored
      (Found during build process)
      
      
      extra/comp_err.c:
        Remove compiler warnings
      extra/perror.c:
        Remove compiler warnings
      innobase/dict/dict0dict.c:
        Remove compiler warnings
      innobase/dict/dict0load.c:
        Remove compiler warnings
      innobase/pars/pars0sym.c:
        Remove compiler warnings
      innobase/row/row0row.c:
        Remove compiler warnings
      innobase/row/row0sel.c:
        Remove compiler warnings
      libmysqld/lib_sql.cc:
        Remove not used variables
      myisam/mi_key.c:
        Remove compiler warnings
      regex/engine.c:
        Added comment
      sql/derror.cc:
        Remove not used variables
      sql/examples/ha_archive.cc:
        Fixed bug in blob handling
        Removed not used variable
      sql/field.cc:
        Remove compiler warnings
        Remove not used variables
      sql/filesort.cc:
        Remove compiler warnings
      sql/ha_heap.cc:
        Remove not used variable
      sql/ha_innodb.cc:
        Remove not used variables
        Remove compiler warnings
      sql/handler.cc:
        Remove compiler warnings and remove not used variables
      sql/item.cc:
        Remove compiler warnings and remove not used variables
      sql/item_subselect.cc:
        Remove compiler warnings
      sql/item_sum.cc:
        Remove compiler warnings
      sql/item_sum.h:
        Remove compiler warnings and remove not used variables
      sql/log.cc:
        Remove compiler warnings and remove not used variables
      sql/log_event.cc:
        Remove compiler warnings
      sql/mysqld.cc:
        Remove compiler warnings and remove not used variables
      sql/opt_range.cc:
        Remove compiler warnings and remove not used variables
      sql/slave.cc:
        Remove compiler warnings and remove not used variables
      sql/sp_pcontext.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_acl.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_analyse.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_base.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_db.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_help.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_insert.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_load.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_parse.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_prepare.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_select.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_show.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_table.cc:
        Remove compiler warnings
      sql/sql_union.cc:
        Remove compiler warnings
      sql/sql_update.cc:
        Remove compiler warnings and remove not used variables
      sql/sql_yacc.yy:
        Remove compiler warnings and remove not used variables
      sql/strfunc.cc:
        Remove compiler warnings and remove not used variables
      strings/ctype-ucs2.c:
        Remove compiler warnings
      tests/mysql_client_test.c:
        Remove compiler warnings and remove not used variables
      tools/mysqlmanager.c:
        Remove compiler warnings and remove not used variables
      0bc36004
  31. 15 Feb, 2005 2 commits
    • unknown's avatar
      Fixed failing test cases 'row.test' when running with --ps-protocol · b0adbd57
      unknown authored
      Simple optimzations done while reviewing code
      
      
      client/mysqltest.c:
        Added options --enable-ps-warnings and --disable-ps-warnings
        (to fix failing test case)
      mysql-test/t/row.test:
        Disable warnings that comes from 'parse' parth
      sql/field.cc:
        Removed calls to is_null() in field functions.
        (Not needed as NULL handling is done on the level above fields)
        Indentation fixes
        Removed calls to alloca() as buffer needed was quite small.
      sql/field.h:
        Indentation changes and comment fixes
      sql/filesort.cc:
        Simple optimization during code review
      sql/item.cc:
        Indentation fixes
        Removed some unnecessary tests (added DBUG_ASSERTS() instead)
      sql/item_buff.cc:
        Indentation fixes
      sql/my_decimal.cc:
        Indentation fixes
        Simple optimization
        Fixed compiler warning
      sql/sql_update.cc:
        Removed unnessessary assignment
      b0adbd57
    • unknown's avatar
      Bug#7879: Using TL_READ_NO_INSERT locks instead of TL_READ locks when · ab4b2cc6
      unknown authored
      reading tables in "complex" SQL statements. If inserts happen in a
      table being read, the statements have no serialization order and the
      change can therefore not be reproduced on the slave.
      
      
      sql/sql_update.cc:
        Switching to using T_READ_NO_INSERT when the binlog is used.
      sql/sql_yacc.yy:
        Switching to using T_READ_NO_INSERT when the binlog is used.
      ab4b2cc6
  32. 08 Feb, 2005 1 commit
    • unknown's avatar
      Precision Math implementation · c346d5c3
      unknown authored
      BitKeeper/etc/ignore:
        Added client/decimal.c client/my_decimal.cc client/my_decimal.h to the ignore list
      c346d5c3
  33. 02 Feb, 2005 2 commits
    • unknown's avatar
      Fixed during review of new pulled code · 349bcbac
      unknown authored
      extra/perror.c:
        Use strmov() instead of strcpy()
        Indentation fixes
      sql/sql_table.cc:
        Revert back part of the old code as the new code didn't use mysql_data_home, which would have caused problems in the embedded server
      sql/sql_update.cc:
        Ensure that used_index is always set (It has to be set because it's value is tested if order != 0)
      349bcbac
    • unknown's avatar
      configure.in · f5da3a6b
      unknown authored
          don't define UNIV_DEBUG in CFLAGS/CXXFLAGS anymore
      sql/mysqld.cc
          hide from the user options that do nothing
      sql/sql_update.cc
          better fix for uninitialized used_index
      
      
      configure.in:
        don't define UNIV_DEBUG in CFLAGS/CXXFLAGS anymore
      sql/mysqld.cc:
        hide from the user options that do nothing
      sql/sql_update.cc:
        better fix for uninitialized used_index
      f5da3a6b
  34. 30 Jan, 2005 1 commit
    • unknown's avatar
      Bug#7011 · b8ab81f1
      unknown authored
        Fix replication for multi-update
        new test - rpl_multi_update2
      
      
      sql/mysql_priv.h:
        Bug#7011
          New function mysql_multi_update_lock()
      sql/sql_parse.cc:
        Bug#7011
          New function check_multi_update_lock()
          For multi-update on slave, perform an early open&lock
      sql/sql_update.cc:
        Bug#7011
          Split out multi-update locking into its own function,
            mysql_multi_update_lock()
      b8ab81f1
  35. 27 Jan, 2005 1 commit
    • unknown's avatar
      query_id and my_xid -> ulonglong · 90a7ce5c
      unknown authored
      fix for binlog+autocommit+tclog
      comments, style fixes
      
      
      libmysqld/libmysqld.rc:
        Change mode to -rw-rw-r--
      libmysqld/resource.h:
        Change mode to -rw-rw-r--
      configure.in:
        check for getpagesize
      include/my_global.h:
        typo ?
      include/my_pthread.h:
        bug in thread_safe_decrement_and_test()
      mysql-test/r/bdb.result:
        results updated
      mysql-test/r/innodb.result:
        results updated
      mysql-test/r/mix_innodb_myisam_binlog.result:
        results updated
      mysql-test/r/rpl_relayrotate.result:
        results updated
      sql/ha_berkeley.cc:
        style fixes
      sql/ha_innodb.cc:
        fixes to follow innodb coding style
      sql/handler.cc:
        more comments. XA COMMIT ONE PHASE fix.
      sql/handler.h:
        my_xid -> ulonglong. comments
      sql/item_func.cc:
        DO RELEASE_LOCK("...") is no cache_stmt
      sql/log.cc:
        comments, better error messages
      sql/log_event.cc:
        even in autocommit mode we may need to cache_stmt
        xid is ulonglong
      sql/log_event.h:
        more comments.
      sql/mysql_priv.h:
        query_id is ulonglong
      sql/mysqld.cc:
        default value for --log-tc changed
      sql/share/errmsg.txt:
        better error messages
      sql/sql_class.h:
        cleanup, comments
      sql/sql_delete.cc:
        deleting from temporary tables is not always transactional
      sql/sql_insert.cc:
        insert into temporary table is not always transactional
      sql/sql_load.cc:
        load data into temp table is not always transactional
      sql/sql_parse.cc:
        comments. bad merge fixed. xa_state_names[]
      sql/sql_table.cc:
        create/drop temp table is not always transactional
      sql/sql_update.cc:
        update temp table is not always transactional
      90a7ce5c
  36. 24 Jan, 2005 1 commit
  37. 12 Jan, 2005 1 commit
    • unknown's avatar
      Fixed memory reference errors found by valgrind · b90a9b32
      unknown authored
      sql/ha_federated.cc:
        Change mode to -rw-rw-r--
      myisam/mi_create.c:
        Ensure that all referenced memory is reset
      mysql-test/r/type_timestamp.result:
        More tests
      mysql-test/t/func_compress.test:
        Added comment
      mysql-test/t/type_timestamp.test:
        More tests
      sql/field.h:
        Count number of varchars in table
      sql/item_cmpfunc.cc:
        Safety fix (to avoid warning from valgrind)
      sql/opt_range.cc:
        Simple optimzation
      sql/sql_acl.cc:
        Safety fix (to avoid warning from valgrind)
      sql/sql_parse.cc:
        Safety fix for prepared statements
      sql/sql_show.cc:
        Move variable declarations first in function
        Remove hidden variable (it)
        Remove accessing freed memory (table_list->table_name)
      sql/sql_update.cc:
        Compare records with varchars correctly
      sql/table.cc:
        Safety fix when running with purify/valgrind
        Fix wrong memory reference in case of errors
      sql/table.h:
        Added counting of varchar fields
      strings/ctype-mb.c:
        Fill max_str properly
      b90a9b32