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) · 24ac4019
      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
      24ac4019
  2. 26 Oct, 2005 1 commit
  3. 24 Oct, 2005 1 commit
    • unknown's avatar
      Fix for BUG#13095: Cannot create VIEWs in prepared statements · 33d5d4ad
      unknown authored
        - allow CREATE VIEW as well as DROP VIEW to use in prepared statements;
        - fix CREATE VIEW implementation to make it work in prepared statements.
      
      
      mysql-test/r/sp.result:
        Results file for the test case for BUG#13095.
      mysql-test/t/sp.test:
        Test case for BUG#13095.
      sql/sql_lex.h:
        Added a variable to remember start of whole CREATE VIEW statement
        as well as start of its SELECT part.
      sql/sql_prepare.cc:
        Allow CREATE VIEW and DROP VIEW to use in prepared statements.
      sql/sql_view.cc:
        Use stored start of whole CREATE VIEW statement instead of thd->query,
        which differs from the original when prepared statement is executing.
      sql/sql_yacc.yy:
        Remember start of whole CREATE VIEW statement as well as start of its
        SELECT part.
      33d5d4ad
  4. 11 Oct, 2005 1 commit
    • unknown's avatar
      Reviewing new pushed code · 0ce12f70
      unknown authored
      - CHAR() now returns binary string as default
      - CHAR(X*65536+Y*256+Z) is now equal to CHAR(X,Y,Z) independent of the character set for CHAR()
      - Test for both ETIMEDOUT and ETIME from pthread_cond_timedwait()
        (Some old systems returns ETIME and it's safer to test for both values
         than to try to write a wrapper for each old system)
      - Fixed new introduced bug in NOT BETWEEN X and X
      - Ensure we call commit_by_xid or rollback_by_xid for all engines, even if one engine has failed
      - Use octet2hex() for all conversion of string to hex
      - Simplify and optimize code
      
      
      client/mysqldump.c:
        Simple optimizations of new code
        Indentation fixes
      client/mysqltest.c:
        Removed not needed variable
      include/mysql_com.h:
        Made octec2hex() more usable
      mysql-test/r/ctype_utf8.result:
        CHAR() now returns binary string as default
      mysql-test/r/func_str.result:
        CHAR() now returns binary string as default
      mysql-test/r/range.result:
        Added test to verify new introduced bug in NOT BETWEEN X and X
      mysql-test/r/user_var-binlog.result:
        CHAR() now returns binary string as default
      mysql-test/r/view.result:
        More tests of view rename
      mysql-test/t/ctype_utf8.test:
        CHAR() now returns binary string as default
      mysql-test/t/func_str.test:
        CHAR() now returns binary string as default
      mysql-test/t/range.test:
        Added test to verify new introduced bug in NOT BETWEEN X and X
      mysql-test/t/view.test:
        More tests of view rename
      mysys/mf_keycache.c:
        Indentation changes
        Test for both ETIMEDOUT and ETIME from pthread_cond_timedwait()
      mysys/my_os2cond.c:
        Fix to MySQL coding style
        Optimized functions
      mysys/thr_lock.c:
        Test for both ETIMEDOUT and ETIME from pthread_cond_timedwait()
      mysys/thr_mutex.c:
        Test for both ETIMEDOUT and ETIME from pthread_cond_timedwait()
      server-tools/instance-manager/instance.cc:
        Test for both ETIMEDOUT and ETIME from pthread_cond_timedwait()
      server-tools/instance-manager/thread_registry.cc:
        Test for both ETIMEDOUT and ETIME from pthread_cond_timedwait()
      sql/ha_federated.cc:
        Use octet2hex()
      sql/ha_ndbcluster.cc:
        Removed not used variable
      sql/handler.cc:
        Simplify code
        Use *NONE* instead of 'none' for not existing storage engine
        Ensure we call commit_by_xid or rollback_by_xid for all engines, even if one engine has failed
      sql/item.h:
        Remove not needed test for *ref.  (If ref is set, it should never point at 0)
      sql/item_func.cc:
        Test for both ETIMEDOUT and ETIME from pthread_cond_timedwait()
        Simplify code
        More comments
        Require that last argument to find_and_check_access() is given
        (Made code shorter and faster)
      sql/item_strfunc.cc:
        Changed CHAR() to return result in binary collation
        CHAR(X*65536+Y*256+Z) is now equal to CHAR(X,Y,Z) independent of the character set for CHAR()
        
        Bar will shortly add the following syntax:
        CHAR(.... USING character_set)
        and ensure that
        CONVERT(CHAR(....) USING utf8) cuts not legal utf8 strings
        Use ocet2hex()
      sql/item_strfunc.h:
        CHAR() now returns a binary string
      sql/log_event.cc:
        Use octet2hex()
        Simplify code
      sql/parse_file.cc:
        Indentation fixes
        Use for() instead of while()
      sql/password.c:
        Make octet2hex() more generally usable by returning pointer to end 0
      sql/slave.cc:
        Test for both ETIMEDOUT and ETIME from pthread_cond_timedwait()
      sql/sql_base.cc:
        Indentation fixes
      sql/sql_insert.cc:
        Test for both ETIMEDOUT and ETIME from pthread_cond_timedwait()
      sql/sql_manager.cc:
        Test for both ETIMEDOUT and ETIME from pthread_cond_timedwait()
      sql/sql_parse.cc:
        Don't check thd->db when checking for function privileges
      sql/sql_prepare.cc:
        Fixed wrong merge
      sql/sql_select.cc:
        Fixed new bug for NOT BETWEEN X and X
      sql/sql_show.cc:
        Removed not used variable
      sql/sql_table.cc:
        Indentation fixed
        Removed DBUG_PRINT that is obvious from context
      sql/sql_view.cc:
        Simplify code
      sql/unireg.cc:
        Use octet2hex()
      0ce12f70
  5. 07 Oct, 2005 1 commit
    • unknown's avatar
      Simple changes during review of code · d67485c8
      unknown authored
      Added back flag that I accidently removed in last patch
      
      
      sql/ha_federated.cc:
        Indentation cleanups
        Simple optimization using min() and strmake()
        Much simpler create()
      sql/sql_prepare.cc:
        Added back flag that I accidently removed in last patch
      sql/sql_table.cc:
        Simplify code by having error block last
      d67485c8
  6. 06 Oct, 2005 1 commit
    • unknown's avatar
      Review of code pushed since last 5.0 pull: · c807724f
      unknown authored
      Ensure that ccache is also used for C programs
      mysql: Ensure that 'delimiter' works the same way in batch mode as in normal mode
      mysqldump: Change to use ;; (instead of //) as a stored procedure/trigger delimiter
      Fixed test cases by adding missing DROP's and rename views to be of type 'v#'
      Removed MY_UNIX_PATH from fn_format()
      Removed current_db_used from TABLE_LIST
      Removed usage of 'current_thd' in Item_splocal
      Removed some compiler warnings
      A bit faster longlong2str code
      
      
      
      BUILD/FINISH.sh:
        Ensure that ccache is also used for C programs
      BUILD/SETUP.sh:
        Ensure that ccache is also used for C programs
      client/mysql.cc:
        More debugging
        Ensure that 'delimiter' works the same way in batch mode as in normal mode.
        Compare 'delimiter' command case-insensitive.
        The above fixes the delimiter bugs so that we can now use ;; as a trigger/SP function delimiter in mysqldump.
      client/mysqldump.c:
        Indentation fixes
        Use ;; as a delmimiter for stored procedures and triggers instead of //
      client/mysqltest.c:
        Indentation fixes
      include/my_sys.h:
        Remove not needed MY_UNIX_PATH parameter
      mysql-test/r/alter_table.result:
        Better to reuse mysqltest database (test didn't properly delete mysqltest1 at start)
      mysql-test/r/func_str.result:
        More testing of CONV() (to ensure that longlong2str() works correctly)
      mysql-test/r/information_schema.result:
        Drop all used tables and views
        Rename view tables to 'v#' to ensure that if this test fails, not a lot of other test fails
      mysql-test/r/information_schema_inno.result:
        Drop all used tables
      mysql-test/r/multi_statement.result:
        Drop used tables
      mysql-test/r/mysql.result:
        Add error messages to result
      mysql-test/r/mysqldump.result:
        ;; is now used as SP/trigger delimiter
      mysql-test/r/mysqlshow.result:
        Drop used tables
      mysql-test/r/temp_table.result:
        Drop used views
        Rename views to v#
      mysql-test/t/alter_table.test:
        Better to reuse mysqltest database (test didn't properly delete mysqltest1 at start)
      mysql-test/t/func_str.test:
        More testing of CONV() (to ensure that longlong2str() works correctly)
      mysql-test/t/information_schema.test:
        Drop all used tables and views
        Rename view tables to 'v#' to ensure that if this test fails, not a lot of other test fails
      mysql-test/t/information_schema_inno.test:
        Drop all used tables
      mysql-test/t/multi_statement.test:
        Drop used tables
      mysql-test/t/mysql.test:
        Add error messages to result
      mysql-test/t/mysqlshow.test:
        Drop used tables
      mysql-test/t/temp_table.test:
        Drop used views
        Rename views to v#
      mysys/mf_format.c:
        Remove not needed MY_UNIX_PATH parameter
        (This goes against how fn_format() is supposed to work and also conflicts with other options like MY_RETURN_REAL_PATH)
      sql/ha_federated.cc:
        Removed extra empty line
      sql/item.cc:
        Use 'str_value' instead of 'str_value_ptr' to hold result for Item_splocal
        Remove some calls to 'thd' in Item_splocal by making 'thd' a class variable
        One doesn't have to set 'null_value' when calling 'is_null()'
      sql/item.h:
        Add THD as a class variable to Item_splocal
        Use 'str_value' instead of 'str_value_ptr' to hold temp result
        Fixed bug in Item_hex when used in CAST()
      sql/item_func.cc:
        Optimize new code
      sql/log_event.cc:
        Move 'to_unix_path()' out of fn_format()
      sql/opt_range.cc:
        Simplify code
      sql/sp_head.cc:
        Ensure that Item_splocal has thd set before we call '->this_item()'
      sql/sql_class.cc:
        Return error if Statement::insert() fails in either hash_insert()
      sql/sql_parse.cc:
        Remove 'current_db_used' as we can trivially check if db table qualifier was used without this.
        Simplify code
      sql/sql_prepare.cc:
        Use enum instead of const int, to avoid ugly code for VC++
      sql/structs.h:
        Remove compiler warnings when using STRING_WITH_LEN() with constant strings.
      sql/table.cc:
        Fixed indentation
      sql/table.h:
        Remove not needed current_db_used
      strings/decimal.c:
        Simplify code
      strings/longlong2str-x86.s:
        A bit faster longlong2str.
        (Took some ideas from Peter Gulutzan's code)
      strings/my_strtoll10.c:
        Simplify code for MetroWerks compiler
      c807724f
  7. 25 Sep, 2005 1 commit
    • unknown's avatar
      Fixed error found during review of new pushed code · 466b46a6
      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
      466b46a6
  8. 21 Sep, 2005 2 commits
    • unknown's avatar
      A fix and a test case for Bug#6513 "Test Suite: Values inserted by using · 813fc410
      unknown authored
      cursor is interpreted latin1 character and Bug#9819 "Cursors: Mysql Server
      Crash while fetching from table with 5 million records."
      A fix for a possible memory leak when fetching into an SP cursor
      in a long loop.
      The patch uses a common implementation of cursors in the binary protocol and 
      in stored procedures and implements materialized cursors.
      For implementation details, see comments in sql_cursor.cc
      
      
      include/my_sys.h:
        - declaration for multi_alloc_root
      libmysqld/Makefile.am:
        - drop protocol_cursor.cc, add sql_cursor.cc (replaces the old
        implementation of cursors with a new one)
      mysql-test/r/ctype_ujis.result:
        - test results fixed (a test case for Bug#6513)
      mysql-test/r/sp-big.result:
        - test results fixed (a test case for Bug#9819)
      mysql-test/t/ctype_ujis.test:
        Add a test case for Bug#6513 "Test Suite: Values inserted by using cursor is
         interpreted latin1 character"
      mysql-test/t/sp-big.test:
        Add a restricted test case for Bug#9819 "Cursors: Mysql Server Crash
        while fetching from table with 5 million records."
      mysys/my_alloc.c:
        - an implementation of multi_alloc_root; this is largely a copy-paste
          from mulalloc.c, but the function is small and there is no easy way
          to reuse the existing C function.
      sql/Makefile.am:
        - add sql_cursor.h, sql_cursor.cc (a new implementation of stored procedure
        cursors) and drop protocol_cursor.cc (the old one)
      sql/handler.cc:
        - now TABLE object has its mem_root always initialized.
          Adjust the implementation handler::ha_open
      sql/item_subselect.cc:
        - adjust to the changed declaration of st_select_lex_unit::prepare
      sql/protocol.h:
        - drop Protocol_cursor
      sql/sp_head.cc:
        - move juggling with Query_arena::free_list and Item::next to
          sp_eval_func_item, as this is needed in 3 places already.
      sql/sp_head.h:
        - declare a no-op implementation for cleanup_stmt in sp_instr_cpush.
          This method is needed for non-materializing cursors, which are yet not 
          used in stored procedures.
        - declaration for sp_eval_func_item
      sql/sp_rcontext.cc:
        - reimplement sp_cursor using the new implementation of server side cursors.
        - use sp_eval_func_item to assign values of SP variables from the
          row fetched from a cursor. This should fix a possible memory leak in 
          the old implementation of sp_cursor::fetch
      sql/sp_rcontext.h:
        - reimplement sp_cursor using the new implementation of server side cursors.
      sql/sql_class.cc:
        - disable the functionality that closes transient cursors at commit/rollback;
          transient cursors are not used in 5.0, instead we use materialized ones.
          To be enabled in a later version.
      sql/sql_class.h:
        - adjust to the rename Cursor -> Server_side_cursor
        - additional declarations of select_union used in materialized cursors
      sql/sql_derived.cc:
        - reuse bits of tmp table code in UNION, derived tables, and materialized
          cursors
        - cleanup comments
      sql/sql_lex.h:
        - declarations of auxiliary methods used by materialized cursors
        - a cleanup in st_select_lex_unit interface
      sql/sql_list.h:
        - add an array operator new[] to class Sql_alloc
      sql/sql_prepare.cc:
        - split the tight coupling of cursors and prepared statements to reuse 
          the same implementation in stored procedures
        - cleanups of error processing in Prepared_statement::{prepare,execute}
      sql/sql_select.cc:
        - move the implementation of sensitive (non-materializing) cursors to 
          sql_cursor.cc
        - make temporary tables self-contained: the table, its record and fields
          are allocated in TABLE::mem_root. This implementation is not clean
          and resets thd->mem_root several times because of the way create_tmp_table 
          works (many additional things are done inside it).
        - adjust to the changed declaration of st_select_lex_unit::prepare
      sql/sql_select.h:
        - move the declaration of sensitive (non-materializing) cursors to 
          sql_cursor.cc
      sql/sql_union.cc:
        - move pieces of st_select_unit::prepare to select_union and st_table
          methods to be able to reuse code in the implementation of materialized
          cursors
      sql/sql_view.cc:
        - adjust to the changed signature of st_select_lex_unit::prepare
      sql/table.cc:
        - implement auxiliary st_table methods for use with temporary tables
      sql/table.h:
        - add declarations for auxiliary methods of st_table used to work with 
         temporary tables
      tests/mysql_client_test.c:
        - if cursors are materialized, a parallel update of the table used
          in the cursor may go through: update the test.
      sql/sql_cursor.cc:
        New BitKeeper file ``sql/sql_cursor.cc'' -- implementation of server side
        cursors
      sql/sql_cursor.h:
        New BitKeeper file ``sql/sql_cursor.h'' - declarations for
        server side cursors.
      813fc410
    • unknown's avatar
      Fix bug #13180 thd->allow_sum_funcs wasn't reset before query processing. · 1b02a815
      unknown authored
      thd->allow_sum_func was left 'true' after previous statement thus allowing
      sum funcs to be present in conditions.
      
      thd->allow_sum_func should be set to 0 for each query and each prepared
      statement reinitialization. This is done in lex_start() and 
      reset_stmt_for_execute().
      
      
      sql/sql_lex.cc:
        Fix bug#13180 thd->allow_sum_func wasn't reset obefore query processing.
        thd->allow_sum_func is set to 0 in lex_start().
      sql/sql_prepare.cc:
        Fix bug#13180 thd->allow_sum_func wasn't reset obefore query processing.
        thd->allow_sum_func is set to 0 in  reset_stmt_for_execute().
      mysql-test/t/update.test:
        Test case for bug#13180 thd->allow_sum_funcs wasn't reset before query
        processing.
      mysql-test/r/update.result:
        Test case for bug#13180 thd->allow_sum_funcs wasn't reset before query
        processing.
      1b02a815
  9. 14 Sep, 2005 1 commit
    • unknown's avatar
      Fix for bug #12704 "Server crashes during trigger execution". · d5303b8a
      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.
      d5303b8a
  10. 13 Sep, 2005 2 commits
    • unknown's avatar
      Bug#9683 INFORMATION_SCH: Creation of temporary table allowed in · 3764875c
      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
      
      
      3764875c
    • unknown's avatar
      sql_prepare.cc: · e7b5b5c8
      unknown authored
        VC6 can't handle initializing const in declaration
      
      
      sql/sql_prepare.cc:
        VC6 can't handle initializing const in declaration
      e7b5b5c8
  11. 02 Sep, 2005 2 commits
    • unknown's avatar
      Implement WL#2661 "Prepared Statements: Dynamic SQL in Stored Procedures". · c910050a
      unknown authored
      The idea of the patch is to separate statement processing logic,
      such as parsing, validation of the parsed tree, execution and cleanup, 
      from global query processing logic, such as logging, resetting
      priorities of a thread, resetting stored procedure cache, resetting
      thread count of errors and warnings.
      This makes PREPARE and EXECUTE behave similarly to the rest of SQL
      statements and allows their use in stored procedures.
      This patch contains a change in behaviour:
      until recently for each SQL prepared statement command, 2 queries
      were written to the general log, e.g.
      [Query]   prepare stmt from @stmt_text;
      [Prepare] select * from t1 <-- contents of @stmt_text
      The chagne was necessary to prevent [Prepare] commands from being written
      to the general log when executing a stored procedure with Dynamic SQL.
      We should consider whether the old behavior is preferrable and probably
      restore it.
      This patch refixes Bug#7115, Bug#10975 (partially), Bug#10605 (various bugs
      in Dynamic SQL reported before it was disabled).
      
      
      mysql-test/r/not_embedded_server.result:
        Since we don't want to log Dynamic SQL in stored procedures,
        now the general log gets only one log entry per SQL statement.
      mysql-test/r/sp-error.result:
        - remove obsolete tests
        - a better error message for the case when a stored procedure that
        returns a result set is called from a function
      mysql-test/r/trigger.result:
        - a better error message for the case when a stored procedure that
        returns a result set is called from a trigger
      mysql-test/t/sp-error.test:
        - a better error message for the case when a stored procedure that
          returns a result set is called from a function.
        - move the comment to its place (end of file).
      mysql-test/t/trigger.test:
        - a better error message for the case when a stored procedure that
        returns a result set is called from a trigger
      sql/item_func.cc:
        - we need to pass sql_command explicitly to get_var_with_binlog, because
        when creating a query for SQL prepared statement thd->lex->sql_command
        points at SQLCOM_EXECUTE, which is not listed in the list of update
        queries.
      sql/log_event.h:
        - remove an extra copy of the previous sentence
      sql/mysql_priv.h:
        - fix declarations of sql_prepare.cc API
      sql/share/errmsg.txt:
        - a new error message, when one attempts to execute a prepared statement
        which is currently being executed (this can happen only in Dynamic SQL
        at the moment).
      sql/sp_head.cc:
        - extend sp_multi_results_command to return different flags for a
        command (and rename it)
        - add support for SQLCOM_PREPARE,SQLCOM_EXECUTE, SQLCOM_DEALLOCATE
          to sp_get_flags_for_command
        - replace multiple boolean sp_head members with uint m_flags
        - a fix for a crash when user variables are used in a stored procedure
          and binlog is on. A temporary fix for Bug#12637 "SP crashes the server 
         if it has update query with user var & binlog is enabled", which actually
         stands for stored functions: now instead of a crash we break
         replication if a user variable is used in a stored function which 
         is executed in prelocked mode.
      sql/sp_head.h:
        - replace multiple boolean flags of sp_head with uint m_flags;
        - add flag CONTAINS_DYNAMIC_SQL
        - use this flag to error if a stored procedure with Dynamic SQL is
          called from a function or trigger.
      sql/sql_class.cc:
        - Statement_map::insert should not delete a statement if it exists,
          now it's done externally to be able to handle the case when the
          statement being deleted is in use.
        - remove extra code (free_list is already reset in free_items)
      sql/sql_lex.cc:
        - add lex->stmt_prepare_mode; we can't rely on thd->command any more,
          because we don't reset it any more (Dynamic SQL requirement is that
          PS are as little intrusive as possible).
      sql/sql_lex.h:
        - declare bool LEX::stmt_prepare_mode
      sql/sql_parse.cc:
        - move prepared statement code to sql_prepare.cc
        - change declarations (refactored code)
        - better error message when one attempts to use Dynamic SQL or a 
          stored procedure that returns a result set in a function or trigger.
      sql/sql_prepare.cc:
        - major refactoring to ensure PREPARE/EXECUTE commands do not reset global THD
          state and allow their use in stored procedures.
        - add Prepared_statement::flags and use it to ensure no recursive execution
          of a prepared statement is possible
        - better comments
      sql/sql_yacc.yy:
        - enable PREPARE/EXECUTE/DEALLOCATE in stored procedures
        - produce an error message on attempt to use PREPARE/EXECUTE/DEALLOCATE
          in a stored function or trigger
      mysql-test/r/sp-dynamic.result:
        - sp-dynamic.test results
      mysql-test/t/sp-dynamic.test:
        - a new test for PREPARE/EXECUTE/DEALLOCATE in stored procedures.
      c910050a
    • unknown's avatar
      Rename: · dc922213
      unknown authored
      - current_arena to stmt_arena: the thread may have more than one
      'current' arenas: one for runtime data, and one for the parsed 
      tree of a statement. Only one of them is active at any moment.
      - set_item_arena -> set_query_arena, because Item_arena was renamed to 
      Query_arena a while ago
      - set_n_backup_item_arena -> set_n_backup_active_arena;
      the active arena is the arena thd->mem_root and thd->free_list
      are currently pointing at.
      - restore_backup_item_arena -> restore_active_arena (with the same
      rationale)
      - change_arena_if_needed -> activate_stmt_arena_if_needed; this
      method sets thd->stmt_arena active if it's not done yet.
      
      
      sql/item.cc:
        Rename.
      sql/item_cmpfunc.cc:
        Rename.
      sql/item_func.cc:
        Rename.
      sql/item_subselect.cc:
        Rename.
      sql/item_subselect.h:
        Remove an unused forward declaration.
      sql/item_sum.h:
        Remove an unused forward declaration.
      sql/mysql_priv.h:
        Remove an unused forward declaration.
      sql/sp.cc:
        Rename.
      sql/sp_head.cc:
        Rename.
      sql/sql_base.cc:
        Rename.
      sql/sql_class.cc:
        Rename.
      sql/sql_class.h:
        Rename.
      sql/sql_lex.cc:
        Rename.
      sql/sql_parse.cc:
        Rename.
      sql/sql_prepare.cc:
        Rename.
      sql/sql_select.cc:
        Rename.
      sql/sql_show.cc:
        Rename.
      sql/sql_union.cc:
        Rename.
      sql/sql_view.cc:
        Rename.
      sql/table.cc:
        Rename.
      dc922213
  12. 19 Aug, 2005 1 commit
    • unknown's avatar
      Bug#11338 Fixes from review (identical functionality). · 1b970e94
      unknown authored
      include/my_sys.h:
        Fixes from review (use version in log_event.cc instead)
      mysql-test/r/ctype_cp932.result:
        Updated test for bug#11338 (logging of prepared statement w/ blob type)
      mysql-test/t/ctype_cp932.test:
        udpated test for bug#11338 (logging of prepared statement w/ blob type)
      mysys/charset.c:
        Fixes from review (use version in log_event.cc instead)
      sql/item.cc:
        Fixes from review (store character_set_client differently so that
        fix can be merged forward to 5.0)
      sql/item.h:
        Fixes from review
      sql/log_event.cc:
        Fixes from review, str_to_hex is now used by item.cc
      sql/log_event.h:
        Added prototype for str_to_hex (now used by item.cc)
      sql/sql_prepare.cc:
        Fixes from review, store character_set_client differently so that 
        Item_param::query_val_str can use it.
      1b970e94
  13. 17 Aug, 2005 1 commit
    • unknown's avatar
      BUG#11338 (logging of prepared statement w/ blob type) · a29b1d71
      unknown authored
      In cp932, '\' character can be the second byte in a 
      multi-byte character stream. This makes it difficult to use
      mysql_escape_string. Added flag to indicate which languages allow
      '\' as second byte of multibyte sequence so that when putting a prepared
      statement into the binlog we can decide at runtime whether hex encoding
      is really needed.
      
      
      include/m_ctype.h:
        Added bool to indicate character sets which allow '\' as the second
        byte of a multibyte character set (currently only cp932). For these
        character sets, escaping with '\' is dangerous and leads to corruption
        in replication.
      include/my_sys.h:
        Add function to enocde a string as hex with no prefix (bare)
      mysys/charset.c:
        Add function to encode string as hex with no prefix (bare).
      sql/item.cc:
        Check the connection character set to see if escape_string_for_mysql
        is safe, or if character set requires unambiguous (hex) encoding
      sql/item.h:
        Pass thd to query_val_str for access to charset()
      sql/sql_prepare.cc:
        Pass thd to query_val_str.
      strings/ctype-big5.c:
        Add escape_with_backslash_is_dangerous flag.
      strings/ctype-bin.c:
        Add escape_with_backslash_is_dangerous flag
      strings/ctype-cp932.c:
        Add escape_with_backslash_is_dangerous flag.
      strings/ctype-czech.c:
        Add escape_with_backslash_is_dangerous flag.
      strings/ctype-euc_kr.c:
        Add escape_with_backslash_is_dangerous flag.
      strings/ctype-extra.c:
        Add escape_with_backslash_is_dangerous flag.
      strings/ctype-gb2312.c:
        Add escape_with_backslash_is_dangerous flag.
      strings/ctype-gbk.c:
        Added escape_with_backslash_is_dangerous flag.
      strings/ctype-latin1.c:
        Added escape_with_backslash_is_dangerous flag.
      strings/ctype-sjis.c:
        Added escape_with_backslash_is_dangerous flag.
      strings/ctype-tis620.c:
        Added esacpe_with_backslash_character_is_dangerous flag.
      strings/ctype-uca.c:
        Added escape_with_backslash_is_dangerous flag.
      strings/ctype-ucs2.c:
        Added escape_with_backslash_is_dangerous.
      strings/ctype-ujis.c:
        Added escape_with_backslash_is_dangerous flag.
      strings/ctype-utf8.c:
        Added escape_with_backslash_is_dangerous.
      strings/ctype-win1250ch.c:
        Added escape_with_backslash_is_dangerous.
      a29b1d71
  14. 10 Aug, 2005 1 commit
    • unknown's avatar
      BUG#12228: Post review fixes: Added test case, code cleanup. · 6b9ec78b
      unknown authored
      mysql-test/r/sp-threads.result:
        Testcase for BUG#12228
      mysql-test/t/sp-threads.test:
        Testcase for BUG#12228
      sql/sp_cache.cc:
        BUG#12228: Post-review fixes: small code cleanup
      sql/sp_cache.h:
        BUG#12228: Post-review fixes: fixed the comment
      sql/sql_parse.cc:
        BUG#12228: Post-review fixes: in mysql_parse, flush obsolete SPs from the caches only if 
         the query hasn't been handled by the query cache.
      sql/sql_prepare.cc:
        BUG#12228: Post-review fixes: in mysql_stmt_prepare/execute, flush SP caches 
         "closer to the execution"
      6b9ec78b
  15. 09 Aug, 2005 1 commit
    • unknown's avatar
      Clumsy but working fix for bug #11973 "SELECT .. INTO var_name; in trigger · 61a68ed6
      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).
      61a68ed6
  16. 08 Aug, 2005 3 commits
    • unknown's avatar
      Fix for BUG#12228: SP cache code: · 502e97f8
      unknown authored
      * Cleanup SP Cache code, now SP Cache only deletes sp_head objects in 
        sp_cache_flush_obsolete() invalidates all pointers to routines in the cache.
      * Use new SP Cache use contract in the code.
      
      There is no test case because it doesn't seem to be possible to cause thread races to end
      the same way they end in heavy-load test. This patch removes the crash in heavy test.
      
      
      mysql-test/r/type_bit.result:
        Drop the tables this test tries to create
      mysql-test/r/view.result:
        Drop function this test creates
      mysql-test/t/type_bit.test:
        Drop the tables this test tries to create
      mysql-test/t/view.test:
        Drop function this test creates
      sql/sp.cc:
        Fix for BUG#12228: When a routine is deleted/modified, invalidate all cached SPs in all
        threads. We need to do so because sp_lex_keeper::{prelocking_tables, query_tables_own_last}
        in one SP may depend on another SP sp_lex_keeper::m_lex is using.
      sql/sp_cache.cc:
        Fix for BUG#12228:
        * Move class sp_cache to here from sp_cache.h, document the functions.
        * sp_cache_insert, sp_cache_remove, sp_cache_invalidate and sp_cache_lookup must not delete
          sp_head* objects as they may be called during SP execution when sp_head objects are used.
        * Added sp_cache_flush_obsolete() function that may delete sp_head objects.
        * Removed sp_cache_remove as there is no need for it now - when we change one SP we should
          invalidate all other SPs, because sp_lex_keeper::{prelocking_tables, 
          query_tables_own_last} from one SP depend on content of another SP (used in 
          sp_lex_keeper::m_lex).
      sql/sp_cache.h:
        Fix for BUG#12228:
        * Move class sp_cache to sp_cache.cc it is not needed in .h file
        * Added comments
      sql/sql_parse.cc:
        Fix for BUG#12228: Call new sp_cache_flush_obsolete() function before running the query
      sql/sql_prepare.cc:
        Fix for BUG#12228: Call new sp_cache_flush_obsolete() function before preparing/executing a PS
      502e97f8
    • unknown's avatar
      A fix and a test case for Bug#11909 "mysql_stmt_attr_set · 76a280f1
      unknown authored
      CURSOR_TYPE_READ_ONLY nested queries corrupt result"
      
      
      sql/sql_prepare.cc:
        If there is a cursor, use its protocol for fetch: 
        Protocol instances have a state and thd->protocol_prep can't
        be used for multiple cursors.
      sql/sql_select.cc:
        - init Cursor::protocol
      sql/sql_select.h:
        - add Cursor::protocol
      tests/mysql_client_test.c:
        A test case for Bug#11909 "mysql_stmt_attr_set CURSOR_TYPE_READ_ONLY
         nested queries corrupt result"
      76a280f1
    • unknown's avatar
      Fix for bug #10055 "Using stored function with information_schema causes empty · 39fda600
      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.
      39fda600
  17. 29 Jul, 2005 1 commit
    • unknown's avatar
      Ensure we free all items for prepared statements · 90b2daa7
      unknown authored
      Before the fix in ~Prepared_statments we got a memory leak when executing mysql_client_test.test
      Note that test 'variables.test' fails.
      This will be fixed when Jimw pushes the fix for Bug 10351
      
      
      mysys/default.c:
        Fixed typo
      sql/item.cc:
        More debugging information
      sql/sql_prepare.cc:
        More debugging information
        Ensure we free all items for prepared statements
        Before the fix in ~Prepared_statments we got a memory leak when executing mysql_client_test.test
      90b2daa7
  18. 27 Jul, 2005 1 commit
  19. 19 Jul, 2005 2 commits
    • unknown's avatar
      A fix and a test case for Bug#10760 and complementary cleanups. · de6f5ae5
      unknown authored
      The idea of the patch
      is that every cursor gets its own lock id for table level locking.
      Thus cursors are protected from updates performed within the same 
      connection. Additionally a list of transient (must be closed at
      commit) cursors is maintained and all transient cursors are closed
      when necessary. Lastly, this patch adds support for deadlock
      timeouts to TLL locking when using cursors.
      + post-review fixes.
      
      
      include/thr_lock.h:
        - add a notion of lock owner to table level locking. When using
          cursors, lock owner can not be identified by a thread id any more, 
          as we must protect cursors from updates issued within the same 
          connection (thread). So, each cursor has its own lock identifier to 
          use with table level locking.
        - extend return values of thr_lock and thr_multi_lock with
          THR_LOCK_TIMEOUT and THR_LOCK_DEADLOCK, since these conditions
          are now possible (see comments to thr_lock.c)
      mysys/thr_lock.c:
        Better support for cursors:
        - use THR_LOCK_OWNER * as lock identifier, not pthread_t.
        - check and return an error for a trivial deadlock case, when an
          update statement is issued to a table locked by a cursor which has 
          been previously opened in the same connection.
        - add support for locking timeouts: with use of cursors, trivial 
          deadlocks can occur. For now the only remedy is the lock wait timeout,
          which is initialized from a new global variable 'table_lock_wait_timeout'
          Example of a deadlock (assuming the storage engine does not downgrade 
          locks):
          con1: open cursor for select * from t1;
          con2: open cursor for select * from t2;
          con1: update t2 set id=id*2;  -- blocked
          con2: update t1 set id=id*2;  -- deadlock
          Lock timeouts are active only if a connection is using cursors.
        - the check in the wait_for_lock loop has been changed from
          data->cond != cond to data->cond != 0. data->cond is zeroed
          in every place it's changed. 
        - added comments
      sql/examples/ha_archive.cc:
        - extend the handlerton with the info about cursor behaviour at commit.
      sql/examples/ha_archive.h:
        - ctor moved to .cc to make use of archive handlerton
      sql/examples/ha_example.cc:
        - add handlerton instance, init handler::ht with it
      sql/examples/ha_example.h:
        - ctor moved to .cc to make use of ha_example handlerton
      sql/examples/ha_tina.cc:
        - add handlerton instance, init handler::ht with it
      sql/examples/ha_tina.h:
        - ctor moved to .cc to make use of CSV handlerton
      sql/ha_berkeley.cc:
        - init handlerton::flags and handler::ht
      sql/ha_berkeley.h:
        - ctor moved to .cc to make use of BerkeleyDB handlerton
      sql/ha_blackhole.cc:
        - add handlerton instance, init handler::ht with it
      sql/ha_blackhole.h:
        - ctor moved to .cc to make use of blackhole handlerton
      sql/ha_federated.cc:
        - add handlerton instance, init handler::ht with it
      sql/ha_federated.h:
        - ctor moved to .cc to make use of federated handlerton
      sql/ha_heap.cc:
        - add handlerton instance, init handler::ht with it
      sql/ha_heap.h:
        - ctor moved to .cc to make use of ha_heap handlerton
      sql/ha_innodb.cc:
        - init handlerton::flags and handler::ht of innobase storage engine
      sql/ha_innodb.h:
        - ctor moved to .cc to make use of archive handlerton
      sql/ha_myisam.cc:
        - add handlerton instance, init handler::ht with it
      sql/ha_myisam.h:
        - ctor moved to .cc to make use of MyISAM handlerton
      sql/ha_myisammrg.cc:
        - init handler::ht in the ctor
      sql/ha_myisammrg.h:
        - ctor moved to .cc to make use of MyISAM MERGE handlerton
      sql/ha_ndbcluster.cc:
        - init handlerton::flags and handler::ht
      sql/handler.cc:
        - drop support for ISAM storage engine, which was removed from 5.0
        - close all "transient" cursors at COMMIT/ROLLBACK. A "transient"
          SQL level cursor is a cursor that uses tables that have a transaction-
          specific state.
      sql/handler.h:
        - extend struct handlerton with flags, add handlerton *ht to every
          handler instance.
      sql/lock.cc:
        - extend mysql_lock_tables to send error to the client if 
          thr_multi_lock returns a timeout or a deadlock error.
      sql/mysqld.cc:
        - add server option --table_lock_wait_timeout (in seconds)
      sql/set_var.cc:
        - add new global variable 'table_lock_wait_timeout' to specify
        a wait timeout for table-level locks of MySQL (in seconds). The default
        timeout is 50 seconds. The timeout is active only if the connection
        has open cursors.
      sql/sql_class.cc:
        - implement Statement_map::close_transient_cursors
        - safety suggests that we need an assert ensuring 
         llock_info->n_cursors is functioning properly, adjust destruction of
         the Statement_map to allow such assert in THD::~THD
      sql/sql_class.h:
        - add support for Cursors registry to Statement map.
      sql/sql_prepare.cc:
        - maintain a list of cursors that must be closed at commit/rollback.
      sql/sql_select.cc:
        - extend class Cursor to support specific at-COMMIT/ROLLBACK behavior.
        If a cursor uses tables of a storage engine that 
        invalidates all open tables at COMMIT/ROLLBACK, it must be closed
        before COMMIT/ROLLBACK is executed.
      sql/sql_select.h:
        - add an own lock_id and commit/rollback status flag to class Cursor
      tests/mysql_client_test.c:
        A test case for Bug#10760 and complementary issues: test a simple
        deadlock case too.
      mysql-test/var:
        New BitKeeper file ``mysql-test/var''
      de6f5ae5
    • unknown's avatar
      Simple fixes during review of new code · 3a31f7b9
      unknown authored
      include/my_global.h:
        Added floatget() to read unaligned flaot
      mysql-test/r/select.result:
        Added test for found_rows()
      mysql-test/t/select.test:
        Added test for found_rows()
      sql/des_key_file.cc:
        Moved initalization of LOCK_des_key_file to mysqld to make simpler code and avoid theoretical race condition
      sql/field_conv.cc:
        Added optimizzed varsion of do_cut_string (for simple character sets)
      sql/item_func.cc:
        Simplify code (and ensure DBUG_ENTER is excuted before main code)
      sql/item_strfunc.cc:
        Safe calculation of max_length
        This was needed as max_length can now be 1<<32-1 (after konstantins recent patch to fix BLOB_LENGTH)
        Remove init_des_key_file() as this is not initialized in mysqld.cc
      sql/item_timefunc.cc:
        Safe calculation of max_length
        This was needed as max_length can now be 1<<32-1 (after konstantins recent patch to fix BLOB_LENGTH)
      sql/log_event.cc:
        Simplify code
      sql/mysql_priv.h:
        Moved initalization of LOCK_des_key_file to mysqld to make simpler code and avoid theoretical race condition
      sql/mysqld.cc:
        Moved initalization of LOCK_des_key_file to mysqld to make simpler code and avoid theoretical race condition
        Revert wrong patch of calling close_connection() in first close_connections() loop. (Bug #7403)
        Instead we now print a warning for closed connections only if mysqld is sarted with --warnings
        Added comments to make the close_connections() logic clearer
      sql/sql_prepare.cc:
        Use floatget() and doubleget() to protect against unaligned data
      sql/sql_select.cc:
        Fixed some cases unlikely cases where found_rows() would return wrong for queries that would return 0 or 1 rows
      3a31f7b9
  20. 18 Jul, 2005 1 commit
    • unknown's avatar
      Cleanups during review · 68b4d7b7
      unknown authored
      Changed defaults option --instance to --defaults-group-suffix
      Changed option handling to allow --defaults-file, --defaults-extra-file and --defaults-group-suffix to be given in any order
      Changed MYSQL_INSTANCE to MYSQL_GROUP_SUFFIX
      mysql_print_defaults now understands --defaults-group-suffix
      Remove usage of my_tempnam() (not safe function)
      if( -> if ( and while( to while (
      
      
      BitKeeper/deleted/.del-my_tempnam.c~a8562f15dad3012f:
        Delete: mysys/my_tempnam.c
      VC++Files/client/mysqlclient.dsp:
        Remove not used file my_tempnam.c
      VC++Files/client/mysqlclient_ia64.dsp:
        Remove not used file my_tempnam.c
      VC++Files/libmysql/libmysql.dsp:
        Remove not used file my_tempnam.c
      VC++Files/libmysql/libmysql_ia64.dsp:
        Remove not used file my_tempnam.c
      VC++Files/mysys/mysys.dsp:
        Remove not used file my_tempnam.c
      VC++Files/mysys/mysys_ia64.dsp:
        Remove not used file my_tempnam.c
      client/mysql.cc:
        Change to use get_defaults_options()
        Remove compiler warnings
      client/mysqldump.c:
        Indentation fixes
        Use quoted table name for 'primary_key_fields'
      extra/my_print_defaults.c:
        Add support for --defaults-group-suffix
        change to use get_default_options()
      extra/replace.c:
        Replace my_tempnam() with create_tmp_file() to allow us to remove my_tempnam.c
      include/config-win.h:
        Added DEFAULT_GROUP_SUFFIX_ENV
      include/my_sys.h:
        Change defaults_instance -> defaults_group_suffix
        Change get_defaults_files -> get_defaults_options
      libmysql/Makefile.shared:
        Added DEFAULT_GROUP_SUFFIX_ENV
      mysys/Makefile.am:
        Added DEFAULT_GROUP_SUFFIX_ENV
        Remove my_tempnam.c
      mysys/default.c:
        Changed --instance to --defaults-group-suffix
        Changed MYSQL_INSTANCE to MYSQL_GROUP_SUFFIX and moved the name to Makefile.am
        (mysys shouldn't by MySQL independent)
        Changed option handling to allow --defaults-file, --defaults-extra-file and --defaults-group-suffix to be given in any order
      mysys/default_modify.c:
        Optimized code to use allocated space more efficently
        Reduce code size
        Ensure that realloc() works independent of argument size
      mysys/my_bitmap.c:
        Added missing return
      sql/ha_innodb.cc:
        Change if( -> if (
      sql/ha_ndbcluster.cc:
        Change while( -> while (
      sql/item_cmpfunc.cc:
        Break loop early (simple optimization)
      sql/item_strfunc.cc:
        Change if( -> if (
      sql/log.cc:
        Fixed comment
      sql/mysqld.cc:
        Change if( -> if (
      sql/opt_range.cc:
        while( -> while (
        if( -> if (
      sql/parse_file.cc:
        Change if( -> if (
      sql/sql_cache.cc:
        while( -> while (
      sql/sql_parse.cc:
        Change if( -> if (
      sql/sql_prepare.cc:
        Added comment
      sql/sql_select.cc:
        while( -> while (
        Removed index variable by incrementing pointer
      sql/sql_show.cc:
        Change if( -> if (
      sql/sql_yacc.yy:
        Change if( -> if (
      tests/mysql_client_test.c:
        Added cast to first argument to bzero()
      68b4d7b7
  21. 15 Jul, 2005 1 commit
    • unknown's avatar
      Jim's fix for the #10443. · 10b76d41
      unknown authored
      Fix handling of floats and doubles when using prepared statements             
      API in the embedded server. 
      
      
      sql/sql_prepare.cc:
        Jim's fix for the #10443.
        
        Within the embedded server, there's no need to use float4get()              
        and float8get() for setting parameters, since they are never                
        stored.
      10b76d41
  22. 14 Jul, 2005 1 commit
    • unknown's avatar
      Implement MarkM optimization request to avoid redundnat packet exchange · fd9f67f8
      unknown authored
      in cursors.
      
      
      libmysql/libmysql.c:
        - reset_stmt_handle(): don't reset the server side just because we have 
          an open cursor: the server will close the cursor automatically if 
          needed
      sql/sql_prepare.cc:
        - implement Prepared_statement::close_cursor,
        - implicitly close an open cursor in mysql_stmt_execute instead of 
          issuing an error (to reduce the need to explicitly close cursors
          and save network bandwidth).
        - cleanup
      sql/sql_select.cc:
        Remove a destructor: cursor destruction can not be done by simply
        calling a destructor, because of cross-references between cursor
        and statement memory.
      sql/sql_select.h:
        - add an empty Cursor destructor
      tests/mysql_client_test.c:
        - remove a test for dropped functionality
      fd9f67f8
  23. 13 Jul, 2005 1 commit
    • unknown's avatar
      - a fix for Bug#11458 "Prepared statement with subselects return random · ece17ba3
      unknown authored
      data": remove the fix for another bug (8807) that
      added OUTER_REF_TABLE_BIT to all subqueries that used a placeholder
      to prevent their evaluation at prepare. As this bit hanged in 
      Item_subselect::used_tables_cache for ever, a constant subquery with
      a placeholder was never evaluated as such, which caused wrong 
      choice of the execution plan for the statement.
      - to fix Bug#8807 backport a better fix from 5.0
      - post-review fixes.
      
      
      mysql-test/r/ps.result:
        Bug#11458: test results fixed
      mysql-test/t/ps.test:
        - add a test case for Bug#11458 "Prepared statement with subselects return 
        random data"
      sql/item.cc:
        - remove unnecessary Item_param::fix_fields
        - fix Item_param::set_null to set item_type accordingly (safety:
          Item_param should behave like a basic constant).
      sql/item.h:
        Remove Item_param::fix_fields
      sql/item_subselect.h:
        Remove no more existing friend.
      sql/mysql_priv.h:
        Add UNCACHEABLE_PREPARE to mark all subqueries as uncacheable if
        in statement prepare (backport from 5.0).
      sql/sql_lex.h:
        Comment fixed.
      sql/sql_parse.cc:
        If in statement prepare, mark all subqueries as uncacheable (backport
        from 5.0)
      sql/sql_prepare.cc:
        Switch off the uncacheable flag from all subqueries after statement
        prepare is done (backport from 5.0)
      ece17ba3
  24. 04 Jul, 2005 1 commit
    • unknown's avatar
      After merge fixes · 428830c5
      unknown authored
      Better fix for ON DUPLICATE KEY UPDATE
      
      
      mysql-test/r/group_by.result:
        After merge fixes
      mysql-test/r/select.result:
        Reorder test to match 4.1 tests (will make future merges easier)
      mysql-test/t/group_by.test:
        Added --disable_ps_protocol to avoid extra warning
      mysql-test/t/select.test:
        Reorder test to match 4.1 tests (will make future merges easier)
      sql/mysql_priv.h:
        Better fix for ON DUPLICATE KEY UPDATE
      sql/sql_base.cc:
        After merge fixes
      sql/sql_insert.cc:
        Better fix for ON DUPLICATE KEY UPDATE
        (old solution gave problem with item->cached_table)
      sql/sql_prepare.cc:
        Better fix for ON DUPLICATE KEY UPDATE
      428830c5
  25. 01 Jul, 2005 4 commits
    • unknown's avatar
      Fix a crash I introduced by the last push. · d0df504b
      unknown authored
      d0df504b
    • unknown's avatar
      Fix a valgrind warning. · b32d2ac2
      unknown authored
      sql/sql_prepare.cc:
        A small fix for the previous patch: we should first free the
        prepared statement items, and then free the runtime memory root,
        as some memory used for cleanup is allocated in that mem root.
      sql/sql_select.cc:
        - ever free the cursor mem root in close() (it's too early).
      b32d2ac2
    • unknown's avatar
      A fix and a test case for Bug#11172 "mysql_stmt_attr_set · d36c14f7
      unknown authored
      CURSOR_TYPE_READ_ONLY date/datetime filter server crash".
      The fix adds support for Item_change_list in cursors (proper rollback
      of the modified item tree). 
      
      
      sql/sql_class.cc:
        No need to call fatal_error() twice.
      sql/sql_prepare.cc:
        - implement proper cleanup of the prepared statement in mysql_stmt_reset
          if there is a cursor.
        - take into account thd->change_list when fetching data through a
          cursor.
      sql/sql_select.cc:
        - take into account thd->change_list when fetching data from a cursor:
          grab it when we open a cursor, and rollback the changes to the parsed
          tree when we close it.
      sql/sql_select.h:
        - Cursor::change_list added
      tests/mysql_client_test.c:
        - a test case for Bug#11172 "mysql_stmt_attr_set CURSOR_TYPE_READ_ONLY date/datetime
         filter server crash"
      d36c14f7
    • unknown's avatar
      Name resolution context added (BUG#6443) · b4f595b9
      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
      b4f595b9
  26. 27 Jun, 2005 1 commit
    • unknown's avatar
      Better bug fix for: · d10877ce
      unknown authored
      #9728  'Decreased functionality in "on duplicate key update
      #8147  'a column proclaimed ambigous in INSERT ... SELECT .. ON DUPLICATE'
      
      This ensures fields are uniquely qualified and also that one can't update other tables in the ON DUPLICATE KEY UPDATE part
      
      
      mysql-test/r/insert_select.result:
        More tests for bug #9728 and #8147
      mysql-test/r/insert_update.result:
        Updated tests after changing how INSERT ... SELECT .. ON DUPLICATE KEY works
      mysql-test/t/insert_select.test:
        More tests for bug #9728 and #8147
      mysql-test/t/insert_update.test:
        Updated tests after changing how INSERT ... SELECT .. ON DUPLICATE KEY works
      mysys/my_access.c:
        Cleanup (shorter loop variable names)
      sql/ha_ndbcluster.cc:
        Indentation fixes
      sql/item.cc:
        Remove item_flags
      sql/item.h:
        Remove item_flags
      sql/mysql_priv.h:
        New arguments to mysql_prepare_insert
      sql/sql_base.cc:
        Remove old fix for bug #8147
      sql/sql_insert.cc:
        Extend mysql_prepare_insert() with new field list for tables that can be used in the values port of ON DUPLICATE KEY UPDATE
      sql/sql_parse.cc:
        Revert fix for #9728
        Allow one to use other tables in ON DUPLICATE_KEY for INSERT ... SELECT if there is no GROUP BY clause
      sql/sql_prepare.cc:
        New arguments to mysql_prepare_insert
      sql/sql_yacc.yy:
        Revert bug fix for #9728
      d10877ce
  27. 23 Jun, 2005 1 commit
    • unknown's avatar
      - implement inheritance of sp_instr: public Query_arena. · 91180cb8
      unknown authored
        We need every instruction to have its own arena, because we want to
        track instruction's state (INITIALIZED_FOR_SP -> EXECUTED). Because of 
        `if' statements and other conditional instructions used in stored 
        procedures, not every instruction of a stored procedure gets executed 
        during the first (or even subsequent) execution of the procedure. 
        So it's better if we track the execution state of every instruction 
        independently.
        All instructions of a given procedure now also share sp_head's 
        mem_root, but keep their own free_list.
        This simplifies juggling with free Item lists in sp_head::execute.
      - free_items() moved to be a member of Query_arena. 
      - logic of 'backup_arena' debug member of Query_arena has been
        changed to support
        multi-backups. Until now, TRUE 'backup_arena' meant that there is
        exactly one active backup of the THD arena. Now it means simply that
        the arena is used for backup, so that we can't accidentally overwrite an 
        existing backup. This allows doing multiple backups, e.g. in
        sp_head::execute and Cursor::fetch, when THD arena is already backed up
        but we want to set yet another arena (usually the 'permanent' arena,
        to save permanent transformations/optimizations of a parsed tree).
      
      
      sql/sp_head.cc:
        - use Query_arena support in sp_head::execute() as now sp_instr inherites
          from it.
      sql/sp_head.h:
        - inherite sp_instr from Query_arena
      sql/sql_class.cc:
        - changed the principle of Query_arena::backup_arena; free_items is now
          a member of Query_arena.
      sql/sql_class.h:
        - changed the principle of Query_arena::backup_arena; free_items is now
          a member of Query_arena.
      sql/sql_prepare.cc:
        free_items() is now a member of Query_arena.
      sql/sql_select.cc:
        free_items() now automatically sets free_list to zero.
      91180cb8
  28. 22 Jun, 2005 2 commits
    • unknown's avatar
      Remove THD::stmt_backup · 60d6b877
      unknown authored
      sql/sql_class.cc:
        Statement constructor for the case when it's used for backup only
        was removed.
      sql/sql_class.h:
        Remove THD::stmt_backup and simplify Statement constructors.
      sql/sql_prepare.cc:
        Use an object on stack instead of THD::stmt_backup
      sql/sql_select.cc:
        Use an object on stack instead of THD::stmt_backup
      60d6b877
    • unknown's avatar
      Adjust to the changed Query_arena constructor: · 40f0738b
      unknown authored
      main_mem_root is moved out of class Query_arena.
      
      
      sql/sp_head.cc:
        Adjust to the changed Query_arena constructor. 
        main_mem_root is moved out of class Query_arena.
      sql/sp_head.h:
        main_mem_root is moved out of class Query_arena: add it to class sp_head.
      sql/sql_class.cc:
        main_mem_root is moved out of class Query_arena: remove
        constructors no longer relevant, remove dead code.
      sql/sql_class.h:
        main_mem_root is moved out of class Query_arena.
      sql/sql_prepare.cc:
        It's better to not use main_mem_root anywhere: logically, it's not
        a public member (can't fix sp_head::make_field and Item_subselect::exec
        to make it protected)
      sql/sql_select.cc:
        New Cursor constructor, which avoids unneeded memory allocation
        when initializign main_mem_root.
      sql/sql_select.h:
        main_mem_root is moved out of class Query_arena.
      40f0738b
  29. 20 Jun, 2005 1 commit
  30. 17 Jun, 2005 1 commit
    • unknown's avatar
      Rename all prepared statements COM_ commands to prefix with COM_STMT_ · 63c21c07
      unknown authored
      libmysql/libmysql.c:
        Rename.
      libmysqld/lib_sql.cc:
        Rename.
      sql/item_cmpfunc.cc:
        Use proper method to check for stmt prepare, only_prepare is removed.
      sql/mysql_priv.h:
        Remove an obsolete define. Rename mysql_stmt_free to mysql_stmt_close.
      sql/sql_class.h:
        Remove THD::only_prepare.
        Rename.
      sql/sql_lex.cc:
        Rename COM_PREPARE -> COM_STMT_PREPARE
      sql/sql_parse.cc:
        Rename.
      sql/sql_prepare.cc:
        Rename.
      sql/sql_yacc.yy:
        Rename.
      tests/mysql_client_test.c:
        Rename.
      63c21c07