1. 20 May, 2008 1 commit
    • unknown's avatar
      Bug#27430 "Crash in subquery code when in PS and table DDL changed after · 37b2c32d
      unknown authored
      PREPARE": rename members, methods, classes to follow the spec 
      (a code review request)
      
      
      sql/mysql_priv.h:
        enum_metadata_type -> enum_table_ref_type
      sql/sp_head.cc:
        Metadata_version_observer -> Reprepare_observer
      sql/sql_base.cc:
        metadata -> table_ref
      sql/sql_class.cc:
        Replace an abstract interface with a concrete implementation.
      sql/sql_class.h:
        enum_metadata_type -> enum_table_ref_type
      sql/sql_prepare.cc:
        Move implementation of Execute_observer to sql_class.cc and
        rename the class to Reprepare_observer.
        Use getters instead of direct access to the members.
      sql/table.h:
        metadata -> table_ref
      37b2c32d
  2. 18 May, 2008 1 commit
  3. 17 May, 2008 1 commit
    • unknown's avatar
      Implement some code review fixes for the fix for Bug#27430 · 1cf0b5cb
      unknown authored
      "Crash in subquery code when in PS and table DDL changed after PREPARE"
      
      
      include/my_sys.h:
        Add two new flags for my_error(). These flags help parameterize
        behavoiur of my_message_sql()
      sql/item.cc:
        Update comments.
        Fix a typo in Item_param::set_param_type_and_swap_value()
      sql/mysqld.cc:
        Implement two additional flags for my_error():
         - if ME_NO_SP_HANDLER is specified, ignore stored procedure continue/
            exit handlers
         - if ME_NO_WARNING_FOR_ERROR is specified, do not push warning
      sql/sql_base.cc:
        Update comments.
        Rename a few methods.
      sql/sql_class.h:
        Update and improve comments.
      sql/sql_prepare.cc:
        Update comments.
        Style changes.
      sql/table.h:
        Update comments.
        Style changes.
        Rename a few methods.
      tests/mysql_client_test.c:
        Zero the bind array, to follow C API requirements.
      1cf0b5cb
  4. 19 Apr, 2008 12 commits
  5. 18 Apr, 2008 1 commit
    • unknown's avatar
      Add tests + modifications according to review · 0a3d14a3
      unknown authored
      
      mysql-test/r/ps_ddl.result:
        Updated results
      mysql-test/t/ps_ddl.test:
        - add missing subtests
        - add comments + minor reformatting for better overview on content
      mysql-test/r/ps_ddl1.result:
        Expected results
      mysql-test/t/ps_ddl1.test:
        Script for tests which do not really fit into ps_ddl
      0a3d14a3
  6. 17 Apr, 2008 2 commits
  7. 16 Apr, 2008 2 commits
    • unknown's avatar
      Fix create.test in --ps-protocol broken by the previous push. · 95909188
      unknown authored
      
      sql/sql_table.cc:
        Fix create.test in --ps-protocol broken by the previous push,
        that added prepared statement validation of CREATE TABLE LIKE:
        move assignment of src_table->required_type to the parser.
      sql/sql_yacc.yy:
        Fix create.test in --ps-protocol broken by the previous push,
        that added prepared statement validation of CREATE TABLE LIKE:
        move assignment of src_table->required_type to the parser.
      95909188
    • unknown's avatar
      WL#4165 "Prepared statements: validation". · bd2a7328
      unknown authored
      Add metadata validation to ~20 more SQL commands. Make sure that
      these commands actually work in ps-protocol, since until now they
      were enabled, but not carefully tested.
      Fixes the ml003 bug found by Matthias during internal testing of the
      patch.
      
      
      mysql-test/r/ps_ddl.result:
        Update test results (WL#4165)
      mysql-test/t/ps_ddl.test:
        Cover with tests metadata validation of 26 SQL statements.
      sql/mysql_priv.h:
        Fix the name in the comment.
      sql/sp_head.cc:
        Changed the way the observer is removed in case of stored procedures
        to support validation prepare stmt from "call p1(<expr>)": whereas
        tables used in the expression must be validated, substatements
        of p1 must not.
        The previous scheme used to silence the observer only in stored
        functions and triggers.
      sql/sql_class.cc:
        Now the observer is silenced in sp_head::execute(). Remove it from
        Sub_statement_state.
      sql/sql_class.h:
        Now the observer is silenced in sp_head::execute(). Remove it from
        Sub_statement_state.
      sql/sql_parse.cc:
        Add CF_REEXECUTION_FRAGILE to 20 more SQLCOMs that need it.
      sql/sql_prepare.cc:
        Add metadata validation to ~20 new SQLCOMs that need it.
        Fix memory leaks with expressions used in SHOW DATABASES and CALL
        (and prepared statements).
        We need to fix all expressions at prepare, since if these expressions
        use subqueries, there are one-time transformations of the parse
        tree that must be done at prepare. 
        List of fixed commands includes: SHOW TABLES, SHOW DATABASES,
        SHOW TRIGGERS, SHOW EVENTS, SHOW OPEN TABLES,SHOW KEYS, SHOW FIELDS, 
        SHOW COLLATIONS, SHOW CHARSETS, SHOW VARIABLES, SHOW TATUS, SHOW TABLE
        STATUS, SHOW PROCEDURE STATUS, SHOW FUNCTION STATUS, CALL.
        Add comment to set_parameters().
      sql/table.h:
        Update comments.
      bd2a7328
  8. 14 Apr, 2008 3 commits
  9. 08 Apr, 2008 6 commits
    • unknown's avatar
      Fix pushbuild errors and warnings. · 1ff9a243
      unknown authored
      1ff9a243
    • unknown's avatar
      Merge bk-internal.mysql.com:/home/bk/mysql-5.1-runtime · f149152f
      unknown authored
      into  dipika.(none):/opt/local/work/mysql-5.1-runtime
      
      
      f149152f
    • unknown's avatar
      Remove dead code. · 2ca62496
      unknown authored
      
      sql/sp.h:
        Remove unused code.
      2ca62496
    • unknown's avatar
      Tentative implementation of · a63dde5a
      unknown authored
      WL#4165 Prepared statements: validation 
      WL#4166 Prepared statements: automatic re-prepare
      Fixes
      Bug#27430 Crash in subquery code when in PS and table DDL changed after PREPARE
      Bug#27690 Re-execution of prepared statement after table was replaced with a view crashes
      Bug#27420 A combination of PS and view operations cause error + assertion on shutdown
      
      The basic idea of the patch is to keep track of table metadata between
      prepared statement prepare and execute. If some table used in the statement
      has changed, the prepared statement is re-prepared before execution.
      
      See WL#4165 and WL#4166 contents and comments in the code for details
      of the implementation.
      
      
      include/my_global.h:
        Remove 'register' keyword to avoid warnings when swapping large structures
        that don't fit into a register. Any modern compiler is capable of placing
        a variable in a register when that would benefit performance.
      mysql-test/r/ps_1general.result:
        Update test results: since now we re-prepare automatically,
        more correct results are produced in prepare-ddl-execute scenario.
      mysql-test/r/query_cache_merge.result:
        Ensure that the table definition cache is large enough for
        the test to pass in --ps-protocol
      mysql-test/r/trigger.result:
        Update test results to reflect automatic statement reprepare.
      mysql-test/t/disabled.def:
        Enable ps_ddl.test, which now passes.
      mysql-test/t/ps_1general.test:
        Since now we re-execute prepared statements after DDL successfully,
        change the test to produce repeatable results. Remove expectancy of
        an error in one place where now we automatically reprepare the prepared
        statement.
      mysql-test/t/query_cache_merge.test:
        Ensure the table definition cache is large enough for the test to pass
        in --ps-protocol
      mysql-test/t/trigger.test:
        Sinc
      sql/item.cc:
        Implement Item_param "copy" functionality, used at re-prepare of
        a prepared statement.
        We copy the type of the original parameter, and move the assigned value,
        if any. Sic, the value is "moved", since it can be quite big --
        e.g. in case we deal with a LONG DATA parameter.
        It's essential to move the value from the old parameter since
        at the time of re-prepare the client packet with the necessary information
        may be not available.
      sql/item.h:
        Declare a new method used for reprepare.
      sql/my_decimal.h:
        Implement "swap()" functionality of class my_decimal to be
        able to easily swap two decimal values.
      sql/mysql_priv.h:
        Declare enum_metadata_type.
      sql/mysqld.cc:
        Implement a status variable for the number of reprepared statements.
      sql/sql_base.cc:
        Implement metadata version validation.
      sql/share/errmsg.txt:
        Add two new error messages: ER_NEED_REPREPARE and ER_PS_REBIND.
        The first error (theoretically) never reaches the user.
        It is issued by the metadata validation framework when a metadata version
        has changed between prepare and execute. Later on it's intercepted
        and the statement is automatically re-prepared. Only if the error
        has occurred repeatedly MAX_REPREPARE_ATTEMTS (3) times do we
        return it to the user.
        
        The second error is issued when after re-prepare we discover
        that the metadata we sent over to the client using the binary
        protocol differs drammatically from the new result set metadata 
        that the reprepared statement produces (e.g. number of result
        set columns is different).
      sql/sql_class.cc:
        Implement metadata version validation framework.
      sql/sql_class.h:
        Declarations for metadata version validation framework.
      sql/sql_parse.cc:
        Mark commands for which we must invalidate and reprepare a prepared
        statement when metadata has changed.
      sql/sql_prepare.cc:
        Implement WL#4165 and WL#4166 (limited support of metadata validation
        and re-prepare).
      sql/table.h:
        Implement metadata validation.
      tests/mysql_client_test.c:
        Add a test case for WL#4166
      a63dde5a
    • unknown's avatar
    • unknown's avatar
      Merge kpettersson@bk-internal.mysql.com:/home/bk/mysql-5.1-runtime · ab968828
      unknown authored
      into  adventure.(none):/home/thek/Development/cpp/mysql-5.1-runtime
      
      
      ab968828
  10. 07 Apr, 2008 6 commits
    • unknown's avatar
      Fix a compilation warning (unused variable). · 797bfd6e
      unknown authored
      797bfd6e
    • unknown's avatar
      A fix for Bug#32724 "innodb_mysql.test fails randomly". · 17ec1c3c
      unknown authored
      Enable back the disabled test case.
      
      
      mysql-test/t/disabled.def:
        Enable the test case innodb_mysql.
      sql/sql_parse.cc:
        Fix the random failure of innodb_mysql test. The failure is not
        random any more after a patch for Bug 12713 added asserts around
        handler commit.
      17ec1c3c
    • unknown's avatar
      Merge bk-internal.mysql.com:/home/bk/mysql-5.1-runtime · ed0fd2f6
      unknown authored
      into  mockturtle.local:/home/dlenev/src/mysql-5.1-symlink
      
      
      ed0fd2f6
    • unknown's avatar
      d017acee
    • unknown's avatar
      Bug#34183 Missing DBUG_RETURN in alloc_root · 3f63ba7f
      unknown authored
      DBUG_RETURN was missing form an exit path in 5.1 branch of alloc_root
      
      
      mysys/my_alloc.c:
        Fixed missing DBUG_RETURN
      3f63ba7f
    • unknown's avatar
      Fix for bug #35733 "main.symlink.test fails". · d5990c28
      unknown authored
      The problem was that symlink.test failed due to debug assertions or
      due to errors emitted for wrong statements (in non-debug builds)
      if 6.0 version of server was run with --thread-handling=pool-of-threads
      option.
      
      The above problems were caused by that on the one hand code mi_create()
      which handles case when error is returned relies on my_errno being set
      to appropriate non-0 value, but on the other it has not done this
      in case when error was emitted due to discovery that share for table
      which we are going to create is already present in the list of open
      shares. Running server with pool-of-threads option just exposed this
      bug since in this scheduler mode my_errno is reset to 0 when connection
      (THD) is reattached to the "real" thread.
      
      This fix ensures that code in mi_create() properly sets my_errno in
      the case described above.
      
      Since original reason that caused this bug to be exposed in 6.0 tree
      might also under very special conditions lead to incorrect behavior
      of earlier versions of server (i.e. to errors emitted for wrong
      statements) this patch is also being pushed into 5.1 tree.
      
      No test case is present as this code is already covered by a test
      case + pushbuild options combination in 6.0.
      
      
      storage/myisam/mi_create.c:
        Code in mi_create() which handles case when error is returned relies
        on my_errno being set to appropriate non-0 value. Adjusted code which
        emits error when we discover that share for table which we are going
        to create is already present in the list of open shares to do this.
      d5990c28
  11. 01 Apr, 2008 5 commits