An error occurred fetching the project authors.
  1. 07 Sep, 2006 1 commit
    • unknown's avatar
      BUG#20492: Subsequent calls to stored procedure yield incorrect result · ee09b41e
      unknown authored
                 if join is used
      
      For procedures with selects that use complicated joins with ON expression
      re-execution could erroneously ignore this ON expression, giving
      incorrect result.
      
      The problem was that optimized ON expression wasn't saved for
      re-execution.  The solution is to properly save it.
      
      
      mysql-test/r/sp.result:
        Add result for bug#20492: Subsequent calls to stored procedure yield
        incorrect result if join is used.
      mysql-test/t/sp.test:
        Add test case for bug#20492: Subsequent calls to stored procedure yield
        incorrect result if join is used.
      sql/sql_select.cc:
        Save modified ON expression for re-execution.
      ee09b41e
  2. 24 Aug, 2006 1 commit
    • unknown's avatar
      Fix for bug#21416 SP: Recursion level higher than zero needed for non-recursive call · 807ecdf4
      unknown authored
      The following procedure was not possible if max_sp_recursion_depth is 0
      create procedure show_proc() show create procedure show_proc;
        
      Actually there is no recursive call but the limit is checked.
        
      Solved by temporarily increasing the thread's limit just before the fetch from cache
      and decreasing after that.
      
      
      mysql-test/r/sp.result:
        update result
      mysql-test/t/sp.test:
        Test for bug #21416 SP: Recursion level higher than zero needed for non-recursive call
      sql/sp.cc:
        Increase the max_sp_recursion_depth temporarily for SHOW CREATE PROCEDURE call.
        This call is in fact not recursive but is counted as such. Outcome, it will work
        always but if max_sp_recursion_depth is reached we are going to cache one more
        sp_head instance.
      807ecdf4
  3. 23 Aug, 2006 2 commits
    • unknown's avatar
      Fix for BUG#16899: Possible buffer overflow in handling of DEFINER-clause · f96ee72f
      unknown authored
        
      User name (host name) has limit on length. The server code relies on these
      limits when storing the names. The problem was that sometimes these limits
      were not checked properly, so that could lead to buffer overflow.
      
      The fix is to check length of user/host name in parser and if string is too
      long, throw an error.
      
      
      mysql-test/r/grant.result:
        Updated result file.
      mysql-test/r/sp.result:
        Updated result file.
      mysql-test/r/trigger.result:
        Updated result file.
      mysql-test/r/view.result:
        Updated result file.
      mysql-test/t/grant.test:
        Added test for BUG#16899.
      mysql-test/t/sp.test:
        Added test for BUG#16899.
      mysql-test/t/trigger.test:
        Added test for BUG#16899.
      mysql-test/t/view.test:
        Added test for BUG#16899.
      sql/mysql_priv.h:
        Added prototype for new function.
      sql/share/errmsg.txt:
        Added new resources.
      sql/sql_acl.cc:
        Remove outdated checks.
      sql/sql_parse.cc:
        Add a new function for checking string length.
      sql/sql_yacc.yy:
        Check length of user/host name.
      f96ee72f
    • unknown's avatar
      Bug#8153 (Stored procedure with subquery and continue handler, wrong result) · 09e9b2f6
      unknown authored
      Implemented code review comments
      Test cleanup
      
      
      sql/protocol.cc:
        Bug#8153 (Stored procedure with subquery and continue handler, wrong result)
        
        Implemented code review comments
      09e9b2f6
  4. 03 Aug, 2006 1 commit
    • unknown's avatar
      Bug#8153 (Stored procedure with subquery and continue handler, wrong result) · f748b691
      unknown authored
      Before this fix,
      - a runtime error in a statement in a stored procedure with no error handlers
      was properly detected (as expected)
      - a runtime error in a statement with an error handler inherited from a non
      local runtime context (i.e., proc a with a handler, calling proc b) was
      properly detected (as expected)
      - a runtime error in a statement with a *local* error handler was executed
      as follows :
      a) the statement would succeed, regardless of the error condition, (bug)
      b) the error handler would be called (as expected).
      
      The root cause is that functions like my_messqge_sql would "forget" to set
      the thread flag thd->net.report_error to 1, because of the check involving
      sp_rcontext::found_handler_here().
      Failure to set this flag would cause, later in the call stack,
      in Item_func::fix_fields() at line 190, the code to return FALSE and consider
      that executing the statement was successful.
      
      With this fix :
      - error handling code, that was duplicated in different places in the code,
      is now implemented in sp_rcontext::handle_error(),
      - handle_error() correctly sets thd->net.report_error when a handler is
      present, regardless of the handler location (local, or in the call stack).
      
      A test case, bug8153_subselect, has been written to demonstrate the change
      of behavior before and after the fix.
      
      Another test case, bug8153_function_a, as also been writen.
      This test has the same behavior before and after the fix.
      This test has been written to demonstrate that the previous expected
      result of procedure bug18787, was incorrect, since select no_such_function()
      should fail and therefore not produce a result.
      
      The incorrect result for bug18787 has the same root cause as Bug#8153,
      and the expected result has been adjusted.
      
      
      sql/mysqld.cc:
        Bug#8153, use sp_rcontext::handle_error() to handle errors.
      sql/sql_error.cc:
        Bug#8153, use sp_rcontext::handle_error() to handle errors.
      sql/protocol.cc:
        Bug#8153, use sp_rcontext::handle_error() to handle errors.
      sql/sp_rcontext.h:
        Bug#8153, created helper sp_rcontext::handle_error() to handle errors.
      sql/sp_rcontext.cc:
        Bug#8153, created helper sp_rcontext::handle_error() to handle errors.
      mysql-test/t/sp.test:
        Bug#8153, added test cases.
      mysql-test/r/sp.result:
        Bug#8153, added test cases, fixed expected result of bug18787.
      f748b691
  5. 27 Jul, 2006 1 commit
    • unknown's avatar
      Fix for BUG#16211: Stored function return type for strings is ignored. · 3c108584
      unknown authored
      Fix for BUG#16676: Database CHARSET not used for stored procedures
      
      The problem in BUG#16211 is that CHARSET-clause of the return type for
      stored functions is just ignored.
      
      The problem in BUG#16676 is that if character set is not explicitly
      specified for sp-variable, the server character set is used instead
      of the database one.
      
      The fix has two parts:
      
        - always store CHARSET-clause of the return type along with the
          type definition in mysql.proc.returns column. "Always" means that
          CHARSET-clause is appended even if it has not been explicitly
          specified in CREATE FUNCTION statement (this affects BUG#16211 only).
      
          Storing CHARSET-clause if it is not specified is essential to avoid
          changing character set if the database character set is altered in
          the future.
      
          NOTE: this change is not backward compatible with the previous releases.
      
        - use database default character set if CHARSET-clause is not explicitly
          specified (this affects both BUG#16211 and BUG#16676).
      
          NOTE: this also breaks backward compatibility.
      
      
      mysql-test/r/mysqldump.result:
        Updated result file.
      mysql-test/r/sp.result:
        Updated result file.
      mysql-test/t/sp.test:
        Provided test cases for BUG#16211, BUG#16676.
      sql/mysql_priv.h:
        Added two convenient functions for work with databases.
      sql/sp.cc:
        1. Add CHARSET-clause to CREATE-statement if it has been explicitly specified.
        2. Polishing -- provided some comments.
      sql/sp_head.cc:
        Use database charset as default charset of sp-variable.
      sql/sp_head.h:
        Move init_sp_name() out of init_strings().
      sql/sql_db.cc:
        Two new functions created:
          - load_db_opt_by_name();
          - check_db_dir_existence();
      sql/sql_show.cc:
        Eliminate duplicated code by using
        check_db_dir_existence() and load_db_opt_by_name()
      sql/sql_table.cc:
        Eliminate duplicated code by using
        check_db_dir_existence() and load_db_opt_by_name()
      sql/sql_yacc.yy:
        Call sp_head::init_sp_name() to initialize stored routine name.
      3c108584
  6. 25 Jul, 2006 1 commit
    • unknown's avatar
      Fixed bug#19862: Sort with filesort by function evaluates function twice · 9a63adc8
      unknown authored
      When there is no index defined filesort is used to sort the result of a
      query. If there is a function in the select list and the result set should be
      ordered by it's value then this function will be evaluated twice. First time to
      get the value of the sort key and second time to send its value to a user.
      This happens because filesort when sorts a table remembers only values of its
      fields but not values of functions.
      All functions are affected. But taking into account that SP and UDF functions
      can be both expensive and non-deterministic a temporary table should be used 
      to store their results and then sort it to avoid twice SP evaluation and to 
      get a correct result.
      
      If an expression referenced in an ORDER clause contains a SP or UDF 
      function, force the use of a temporary table.
      
      A new Item_processor function called func_type_checker_processor is added
      to check whether the expression contains a function of a particular type.
      
      
      mysql-test/t/udf.test:
        Added test case for bug#19862: Sort with filesort by function evaluates function twice
      mysql-test/t/sp.test:
        Added test case for bug#19862: Sort with filesort by function evaluates function twice
      mysql-test/r/sp.result:
        Added test case for bug#19862: Sort with filesort by function evaluates function twice
      mysql-test/r/udf.result:
        Added test case for bug#19862: Sort with filesort by function evaluates function twice
      sql/sql_select.cc:
        Fixed bug#19862: Sort with filesort by function evaluates function twice
        If an expression referenced in an ORDER clause contains a SP or UDF
        function, force the use of a temporary table.
      sql/item_func.h:
        Fixed bug#19862: Sort with filesort by function evaluates function twice
        A new Item_processor function called func_type_checker_processor is added
        to check whether the expression contains a function of a particular type.
      sql/item.h:
        Fixed bug#19862: Sort with filesort by function evaluates function twice
        A new Item_processor function called func_type_checker_processor is added
        to check whether the expression contains a function of a particular type.
      sql/item_func.cc:
        Fixed bug#19862: Sort with filesort by function evaluates function twice
        A new Item_processor function called func_type_checker_processor is added
        to check whether the expression contains a function of a particular type.
      9a63adc8
  7. 19 Jul, 2006 1 commit
    • unknown's avatar
      A fix and a test case for Bug#21002 "Derived table not selecting from a · 0fa250a9
      unknown authored
      "real" table fails in JOINs".
      
      This is a regression caused by the fix for Bug 18444. 
      This fix removed the assignment of empty_c_string to table->db performed 
      in add_table_to_list, as neither me nor anyone else knew what it was 
      there for. Now we know it and it's covered with tests: the only case 
      when a table database name can be empty is when the table is a derived 
      table. The fix puts the assignment back but makes it a bit more explicit.
      
      Additionally, finally drop sp.result.orig which was checked in by mistake. 
      
      
      BitKeeper/deleted/.del-sp.result.orig:
        Delete: mysql-test/r/sp.result.orig
      mysql-test/r/derived.result:
        Updated result file.
      mysql-test/r/sp.result:
        Test results fixed (Bug#21002)
      mysql-test/t/derived.test:
        New error return for the case when MULTI-DELETE tries to delete from
        a derived table: now derived tables belong to their own db (""), and
        MUTLI-DELETE can't find the correspondent table for it in the 
        DELETE list, as it can't resolve tables in different dbs by alias
        (See Bug#21148 for details)
      mysql-test/t/sp.test:
        Add a test case for Bug#21002 "Derived table not selecting from a "real"
         table fails in JOINs"
      sql/sp.cc:
        Make empty_c_string globally accessible.
      sql/sql_class.cc:
        Add empty_c_string definition.
      sql/sql_class.h:
        Add a comment for the constructor of Table_ident which is
        used for derived tables. Make sure this constructor also initializes
        the database name, not only the table name.
      sql/sql_parse.cc:
        Don't call check_db_name for empty database. 
        Currently the only case when a table database name can be empty
        is when the table is a derived table.
        Report the right error if the database name is wrong (ER_WRONG_DB_NAME,
        not ER_WRONG_TABLE_NAME).
      0fa250a9
  8. 17 Jul, 2006 1 commit
    • unknown's avatar
      Bug#21013: Performance Degrades when importing data that uses Trigger · ca00a985
      unknown authored
                 and Stored Procedure
      
      The essence of the bug was that for every re-execution of stored
      routine or prepared statement new items for character set conversions
      were created, thus increasing the number of items and the time of their
      processing, and creating memory leak.
      
      No test case is provided since current test suite can't cover such type
      of bugs.
      
      
      mysql-test/r/sp.result:
        Add result for bug#21013: Performance Degrades when importing data
        that uses Trigger and Stored Procedure.
      mysql-test/t/sp.test:
        Add test case for bug#21013: Performance Degrades when importing data
        that uses Trigger and Stored Procedure.
      sql/item.cc:
        Switch arena only when in statement prepare mode.  Subsequent executions
        will use cached item tree.
      ca00a985
  9. 14 Jul, 2006 1 commit
    • unknown's avatar
      Fixed bug #19714. · 1e442594
      unknown authored
      DESCRIBE returned the type BIGINT for a column of a view if the column
      was specified by an expression over values of the type INT.
          
      E.g. for the view defined as follows:
        CREATE VIEW v1 SELECT COALESCE(f1,f2) FROM t1
      DESCRIBE returned type BIGINT for the only column of the view if f1,f2 are
      columns of the INT type.
      At the same time DESCRIBE returned type INT for the only column of the table
      defined by the statement:
        CREATE TABLE t2 SELECT COALESCE(f1,f2) FROM t1.
          
      This inconsistency was removed by the patch.
      
      Now the code chooses between INT/BIGINT depending on the
      precision of the aggregated column type.
       
      Thus both DESCRIBE commands above returns type INT for v1 and t2.
       
      
      
      mysql-test/r/analyse.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/bigint.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/create.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/olap.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/ps_2myisam.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/ps_3innodb.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/ps_4heap.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/ps_5merge.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/ps_6bdb.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/ps_7ndb.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/sp.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/subselect.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/type_ranges.result:
        Adjusted the results after having fixed bug #19714.
      mysql-test/r/view.result:
        Added a test case for bug #19714.
      mysql-test/t/view.test:
        Added a test case for bug #19714.
      1e442594
  10. 26 Jun, 2006 1 commit
    • unknown's avatar
      A fix and a test case for · d6bcbfbe
      unknown authored
       Bug#19022 "Memory bug when switching db during trigger execution"
       Bug#17199 "Problem when view calls function from another database."
       Bug#18444 "Fully qualified stored function names don't work correctly in
                  SELECT statements"
      
       Documentation note: this patch introduces a change in behaviour of prepared
       statements.
      
       This patch adds a few new invariants with regard to how THD::db should
       be used. These invariants should be preserved in future:
      
        - one should never refer to THD::db by pointer and always make a deep copy
          (strmake, strdup)
        - one should never compare two databases by pointer, but use strncmp or
          my_strncasecmp
        - TABLE_LIST object table->db should be always initialized in the parser or
          by creator of the object.
      
          For prepared statements it means that if the current database is changed
          after a statement is prepared, the database that was current at prepare
          remains active. This also means that you can not prepare a statement that
          implicitly refers to the current database if the latter is not set.
          This is not documented, and therefore needs documentation. This is NOT a
          change in behavior for almost all SQL statements except:
           - ALTER TABLE t1 RENAME t2 
           - OPTIMIZE TABLE t1
           - ANALYZE TABLE t1
           - TRUNCATE TABLE t1 --
           until this patch t1 or t2 could be evaluated at the first execution of
           prepared statement. 
      
           CURRENT_DATABASE() still works OK and is evaluated at every execution
           of prepared statement.
      
           Note, that in stored routines this is not an issue as the default
           database is the database of the stored procedure and "use" statement
           is prohibited in stored routines.
      
        This patch makes obsolete the use of check_db_used (it was never used in the
        old code too) and all other places that check for table->db and assign it
        from THD::db if it's NULL, except the parser.
      
       How this patch was created: THD::{db,db_length} were replaced with a
       LEX_STRING, THD::db. All the places that refer to THD::{db,db_length} were
       manually checked and:
        - if the place uses thd->db by pointer, it was fixed to make a deep copy
        - if a place compared two db pointers, it was fixed to compare them by value
          (via strcmp/my_strcasecmp, whatever was approproate)
       Then this intermediate patch was used to write a smaller patch that does the
       same thing but without a rename.
      
       TODO in 5.1:
         - remove check_db_used
         - deploy THD::set_db in mysql_change_db
      
       See also comments to individual files.
      
      
      mysql-test/r/create.result:
        Modify the result file: a database can never be NULL.
      mysql-test/r/ps.result:
        Update test results (Bug#17199 et al)
      mysql-test/r/sp.result:
        Update test results (Bug#17199 et al)
      mysql-test/t/create.test:
        Update the id of the returned error.
      mysql-test/t/ps.test:
        Add test coverage for prepared statements and current database. In scope of
        work on Bug#17199 "Problem when view calls function from another database."
      mysql-test/t/sp.test:
        Add a test case for Bug#17199 "Problem when view calls function from another
        database." and Bug#18444 "Fully qualified stored function names don't work
        correctly in SELECT statements". Test a complementary problem.
      sql/item_strfunc.cc:
        Touch the code that reads thd->db (cleanup).
      sql/log_event.cc:
        While we are at it, replace direct access to thd->db with a method.
        Should simplify future conversion of THD::db to LEX_STRING.
      sql/slave.cc:
        While we are at it, replace direct access to thd->db with a method.
        Should simplify future conversion of THD::db to LEX_STRING.
      sql/slave.h:
        Remove a declaration for a method that is used only in one module.
      sql/sp.cc:
        Rewrite sp_use_new_db: this is a cleanup that I needed in order to understand
        this function and ensure that it has no bugs.
      sql/sp.h:
        Add a new declaration for sp_use_new_db (uses LEX_STRINGs) and a comment.
      sql/sp_head.cc:
        - drop sp_name_current_db_new - a creator of sp_name class that was used
        when sp_name was created for an identifier without an explicitly initialized
        database. Now we pass thd->db to constructor of sp_name right in the 
        parser.
        - rewrite sp_head::init_strings: name->m_db is always set now
        - use the new variant of sp_use_new_db
        - we don't need to update thd->db with SP MEM_ROOT pointer anymore when
        parsing a stored procedure, as noone will refer to it (yes!)
      sql/sp_head.h:
        - remove unneded methods and members
      sql/sql_class.h:
        - introduce 3 THD  methods to work with THD::db:
          .set_db to assign the current database
          .reset_db to reset the current database (temporarily) or set it to NULL
          .opt_copy_db_to - to deep-copy thd->db to a pointer if it's not NULL
      sql/sql_db.cc:
        While we are at it, replace direct access to thd->db with a method.
        Should simplify future conversion of THD::db to LEX_STRING.
      sql/sql_insert.cc:
        - replace checks with asserts: table_list->db must be always set in the parser.
      sql/sql_lex.h:
        - add a comment
      sql/sql_parse.cc:
        - implement the invariant described in the changeset comment.
        - remove juggling with lex->sphead in SQLCOM_CREATE_PROCEDURE:
          now db_load_routine uses its own LEX object and doesn't damage the main
          LEX.
        - add DBUG_ASSERT(0) to unused "check_db_used"
      sql/sql_table.cc:
        - replace a check with an assert (table_ident->db)
      sql/sql_trigger.cc:
        While we are at it, replace direct access to thd->db with a method.
        Should simplify future conversion of THD::db to LEX_STRING.
      sql/sql_udf.cc:
        - use thd->set_db instead of direct modification of to thd->db
      sql/sql_view.cc:
        - replace a check with an assert (view->db)
      sql/sql_yacc.yy:
        - make sure that we always copy table->db or name->db or ident->db or
          select_lex->db from thd->db if the former is not set. If thd->db
          is not set but is accessed, return an error.
      sql/tztime.cc:
        - be nice, never copy thd->db by pointer.
      d6bcbfbe
  11. 22 Jun, 2006 1 commit
    • unknown's avatar
      A fix and a test case for Bug#15217 "Using a SP cursor on a table created · 67fd3c4a
      unknown authored
       with PREPARE fails with weird error".
      More generally, re-executing a stored procedure with a complex SP cursor query
      could lead to a crash.
      
      The cause of the problem was that SP cursor queries were not optimized 
      properly at first execution: their parse tree belongs to sp_instr_cpush,
      not sp_instr_copen, and thus the tree was tagged "EXECUTED" when the
      cursor was declared, not when it was opened. This led to loss of optimization
      transformations performed at first execution, as sp_instr_copen saw that the
      query is already "EXECUTED" and therefore either not ran first-execution 
      related blocks or wrongly rolled back the transformations caused by 
      first-execution code.
      The fix is to update the state of the parsed tree only when the tree is
      executed, as opposed to when the instruction containing the tree is executed.
      Assignment if i->state is moved to reset_lex_and_exec_core.
      
      
      mysql-test/r/sp.result:
        Test results fixed (Bug#15217)
      mysql-test/t/sp.test:
        Add a test case for Bug#15217
      sql/sp_head.cc:
        Move assignment of stmt_arena->state to reset_lex_and_exec_core
      67fd3c4a
  12. 18 May, 2006 1 commit
  13. 10 May, 2006 1 commit
    • unknown's avatar
      Fix for BUG#18587: Function that accepts and returns TEXT · 24a0b385
      unknown authored
      garbles data if longer than 766 chars.
      
      The problem is that a stored routine returns BLOBs to the previous
      caller, BLOBs are shallow-copied (i.e. only pointers to the data are
      copied). The fix is to also copy data of BLOBs.
      
      
      mysql-test/r/sp.result:
        Updated result file.
      mysql-test/t/sp.test:
        Added a test case for BUG#18587.
      sql/field_conv.cc:
        Do not jump to optimization if the field type is BLOB and
        the destination table requires copying of BLOBs.
      sql/item_func.cc:
        Request copying BLOBs for the result table.
      24a0b385
  14. 09 May, 2006 1 commit
    • unknown's avatar
      Fix for bugs#12472/#15137 'CREATE TABLE ... SELECT ... which explicitly · 4f15a043
      unknown authored
      or implicitly uses stored function gives "Table not locked" error'
      
      CREATE TABLE ... SELECT ... statement which was explicitly or implicitly
      (through view) using stored function gave "Table not locked" error.
      
      The actual bug resides in the current locking scheme of CREATE TABLE SELECT
      code, which first opens and locks tables of the SELECT statement itself,
      and then, having SELECT tables locked, creates the .FRM, opens the .FRM and
      acquires lock on it. This scheme opens a possibility for a deadlock, which
      was present and ignored since version 3.23 or earlier. This scheme also
      conflicts with the invariant of the prelocking algorithm -- no table can
      be open and locked while there are tables locked in prelocked mode.
      
      The patch makes an exception for this invariant when doing CREATE TABLE ...
      SELECT, thus extending the possibility of a deadlock to the prelocked mode.
      We can't supply a better fix in 5.0.
      
      
      mysql-test/r/sp.result:
        Added tests for bugs#12472/#15137 'CREATE TABLE ... SELECT ... which
        explicitly or implicitly uses stored function gives "Table not locked" error'
      mysql-test/t/sp.test:
        Added tests for bugs#12472/#15137 'CREATE TABLE ... SELECT ... which
        explicitly or implicitly uses stored function gives "Table not locked" error'
      sql/mysql_priv.h:
        Added flag which can be passed to open_table() routine in order to ignore
        set of locked tables and prelocked mode.
        We don't need declaration of create_table_from_items() any longer as it was
        moved into sql_insert.cc and made static.
      sql/sql_base.cc:
        open_table():
          Added flag which allows open table ignoring set of locked tables and
          prelocked mode.
      sql/sql_insert.cc:
        Moved create_table_from_items() from sql_table.cc to sql_insert.cc as it was
        not used outside of sql_insert.cc and contains code which is specific for
        CREATE TABLE ... SELECT.
        Also now when we are executing CREATE TABLE ... SELECT ... statement which
        SELECT part requires execution in prelocked mode we ignore set of locked
        tables in order to get access to the table we just have created.
        We probably don't want to do this if we are under real LOCK TABLES since
        it will widen window for deadlock too much.
      sql/sql_table.cc:
        Moved create_table_from_items() routine into sql_insert.cc, since it was not
        used anywhere outside of this file and contains logic which is specific for
        CREATE TABLE ... SELECT statement.
      4f15a043
  15. 21 Apr, 2006 1 commit
    • unknown's avatar
      Bug#15728: LAST_INSERT_ID function inside a stored function returns 0 · 10eac46a
      unknown authored
      Do not reset value of LAST_INSERT_ID() in sub-statement.
      
      
      mysql-test/r/rpl_insert_id.result:
        Add result for bug#15728.
      mysql-test/r/sp.result:
        Add result for bug#15728.
      mysql-test/t/rpl_insert_id.test:
        Add test case for bug#15728.
      mysql-test/t/sp.test:
        Add test case for bug#15728.
      sql/sql_class.cc:
        Do not reset value of LAST_INSERT_ID() in sub-statement.
      10eac46a
  16. 18 Apr, 2006 1 commit
    • unknown's avatar
      Fixed BUG#18344: DROP DATABASE does not drop associated routines · 176cd143
      unknown authored
        We must use the db key length in sp_drop_db_routines (and not the
        number of characters), or long db names will be truncated in the key.
      
      
      mysql-test/r/sp.result:
        Updated results for new test case (BUG#18344)
      mysql-test/t/sp.test:
        Added new test case for BUG#18344.
      sql/sp.cc:
        In sp_drop_db_routines(), give the key field's ("db") key length
        instead of the number of characters to index_read(), or the key
        packing will truncate long db names.
      176cd143
  17. 11 Apr, 2006 1 commit
    • unknown's avatar
      Fixed BUG#18787: Server crashed when calling a stored procedure containing · 9381c8a0
      unknown authored
                       a misnamed function
        ... in the presence of a continue handler. The problem was that with a
        handler, it continued to execute as if function existed and had set a
        useful return value (which it hadn't).
        The fix is to set a null return value and do an error return when a function
        wasn't found.
      
      
      mysql-test/r/sp.result:
        Updated results for a new test case (BUG#18787).
      mysql-test/t/sp.test:
        New testcase for BUG#18787.
      sql/item_func.cc:
        Don't set "out of resources" error in Item_func_sp::execute() if no
        result field is returned, it's simply wrong, it can be sometthing else,
        like a function not found. Instead set null_value and return error.
        Also, set "out of resources" when field creation fails in
        Item_func_sp::sp_result_field() and Item_func_sp::tmp_table_field().
      9381c8a0
  18. 06 Apr, 2006 1 commit
    • unknown's avatar
      Fix for bug#14945 "Truncate table doesn't reset the auto_increment · ee3cf23b
      unknown authored
      counter".
      
      When TRUNCATE TABLE was called within an stored procedure the
      auto_increment counter was not reset to 0 even if straight
      TRUNCATE for this table did this.
      
      This fix makes TRUNCATE in stored procedures to be handled exactly
      in the same way as straight TRUNCATE. We achieve this by rolling
      back the fix for bug 8850, which is no longer needed since stored
      procedures don't require prelocked mode anymore (and TRUNCATE is
      not allowed in stored functions or triggers).
      
      
      mysql-test/r/sp.result:
        Test case for BUG#14945.
      mysql-test/t/sp.test:
        Test case for BUG#14945.
      sql/sql_delete.cc:
        Handle TRUNCATE in stored procedures exactly in the same way as straight
        TRUNCATE (i.e. without falling back to DELETE if possible). We achieve
        this by rolling back the fix for bug 8850, which is no longer relevant
        since stored procedures don't require prelocked mode anymore
        (and TRUNCATE is not allowed in stored functions or triggers).
      sql/sql_parse.cc:
        Handle TRUNCATE in stored procedures exactly in the same way as straight
        TRUNCATE (i.e. without falling back to DELETE if possible). We achieve
        this by rolling back the fix for bug 8850, which is no longer relevant
        since stored procedures don't require prelocked mode anymore
        (and TRUNCATE is not allowed in stored functions or triggers).
      ee3cf23b
  19. 28 Mar, 2006 1 commit
    • unknown's avatar
      Post review fixes for BUG#16474: SP crashed MySQL. · 537ec1e6
      unknown authored
      mysql-test/r/ps.result:
        Added test coverage for "order by" in prepared statements (related to BUG#16474).
      mysql-test/r/sp.result:
        Added reference to test case for BUG#16474.
      mysql-test/t/ps.test:
        Added test coverage for "order by" in prepared statements (related to BUG#16474).
      mysql-test/t/sp.test:
        Added reference to test case for BUG#16474.
      sql/sql_select.cc:
        Fixed comment and test for basic_const_item() instead of is_splocal().
      537ec1e6
  20. 10 Mar, 2006 2 commits
    • unknown's avatar
      Fixed BUG#16474: SP crashed MySQL · fb36d923
      unknown authored
        fix_fields() was not called for "order by" variables if the type was a
        "constant integer", and thus interpreted as a column index.
        However, a local variable is an expression and should not be interpreted
        as a column index. Instead it behaves just like when using a user variable
        for instance (i.e. it will not affect the ordering).
      
      
      
      mysql-test/r/sp.result:
        Updated results for new test case (BUG#16474).
      mysql-test/t/sp.test:
        New test case for BUG#16474.
      sql/sql_select.cc:
        When processing order list,
      fb36d923
    • unknown's avatar
      Fixed bug#13575: SP funcs in select with distinct/group and order by can · 50c8c206
      unknown authored
      produce wrong data
      
      By default Item_sp_func::val_str() returns string from it's result_field 
      internal buffer. When grouping is present Item_copy_string is used to 
      store SP function result, but it doesn't additionally buffer the result.
      When the next record is read, internal buffer is overwritten, due to
      this Item_copy_string::val_str() will have wrong data. Thus producing
      weird query result.
      
      The Item_func_sp::val_str() now makes a copy of returned value to prevent
      occasional corruption.
      
      
      mysql-test/t/sp.test:
        Added test case for bug#13575: SP funcs in select with distinct/group and order by can
        produce wrong data
      mysql-test/r/sp.result:
        Added test case for bug#13575: SP funcs in select with distinct/group and
            order by can produce wrong data
      sql/item_func.h:
        Fixed bug#13575: SP funcs in select with distinct/group and order by can
            produce wrong data
            The Item_func_sp::val_str() now makes a copy of returned value to prevent
            occasinal corruption.
      50c8c206
  21. 09 Mar, 2006 1 commit
    • unknown's avatar
      Bug#10656 Stored Procedure - Create index and Truncate table command error · 2acff5c3
      unknown authored
       -Add test case
      Move testcase that needs innodb from sp.test => sp_trans.test 
      
      
      mysql-test/r/sp.result:
        Move test cases tyhat requires innodb to sp_trans.test
      mysql-test/r/sp_trans.result:
        Move test cases tyhat requires innodb to sp_trans.test
        Add test case for bug#10656
      mysql-test/t/sp.test:
        Move test cases tyhat requires innodb to sp_trans.test
      mysql-test/t/sp_trans.test:
        Add test case for bug#10656
        Move test cases that require innodb to sp_trans.test
      2acff5c3
  22. 02 Mar, 2006 3 commits
    • unknown's avatar
      Fixed BUG#17476: Stored procedure not returning data when it is called first · 7865ce61
      unknown authored
                       time per connection
        Removed const_string() method from Item_string (it was only used in one
        place, in a bad way). Defer possible SP variable, and access data directly
        instead, in date_format item.
      
      
      mysql-test/r/sp.result:
        Updated results for new test (BUG#17476).
      mysql-test/t/sp.test:
        New test case (BUG#17476)
      sql/item.h:
        Removed const_string() from Item_string.
        It was only used in one place, and we can just use str_value in Item directly.
      sql/item_timefunc.cc:
        Must defer a (possible) local SP variable to use max_length and str_value
        in Item_func_date_format::fix_length_and_dec(), and refer to str_value
        directly without the const_string() method (now removed); the cast didn't
        work in all cases anyway.
      7865ce61
    • unknown's avatar
      Implementation of WL#2897: Complete definer support in the stored routines. · 9a1fed13
      unknown authored
      The idea is to add DEFINER-clause in CREATE PROCEDURE and CREATE FUNCTION
      statements. Almost all support of definer in stored routines had been already
      done before this patch.
      
      NOTE: this patch changes behaviour of dumping stored routines in mysqldump.
      Before this patch, mysqldump did not dump DEFINER-clause for stored routines
      and this was documented behaviour. In order to get full information about stored
      routines, one should have dumped mysql.proc table. This patch changes this
      behaviour, so that DEFINER-clause is dumped.
      
      Since DEFINER-clause is not supported in CREATE PROCEDURE | FUNCTION statements
      before this patch, the clause is covered by additional version-specific comments.
      
      
      client/mysqldump.c:
        Updated the code for dumping stored routines: cover DEFINER-clause
        into version-specific comment.
      mysql-test/r/gis.result:
        Updated result file after adding DEFINER-clause.
      mysql-test/r/information_schema.result:
        Updated result file after adding DEFINER-clause.
      mysql-test/r/mysqldump.result:
        Updated result file after adding DEFINER-clause.
      mysql-test/r/rpl_ddl.result:
        Updated result file after adding DEFINER-clause.
      mysql-test/r/rpl_sp.result:
        Updated result file after adding DEFINER-clause.
      mysql-test/r/rpl_trigger.result:
        Updated result file after adding DEFINER-clause.
      mysql-test/r/sp-security.result:
        Updated result file after adding DEFINER-clause.
      mysql-test/r/sp.result:
        Updated result file after adding DEFINER-clause.
      mysql-test/r/sql_mode.result:
        Updated result file after adding DEFINER-clause.
      mysql-test/t/sp-security.test:
        Updated result file after adding DEFINER-clause.
      sql/sp.cc:
        Added DEFINER-clause.
      sql/sp_head.cc:
        Added a new convenient variant of set_definer() operation.
      sql/sp_head.h:
        Updated result file after adding DEFINER-clause.
      sql/sql_lex.h:
        Renamed trigger_definition_begin into stmt_definition_begin to be used for
        triggers and stored routines.
      sql/sql_parse.cc:
        Check DEFINER-clause.
      sql/sql_trigger.cc:
        Renamed trigger_definition_begin into stmt_definition_begin to be used for
        triggers and stored routines.
      sql/sql_yacc.yy:
        Added DEFINER-clause.
      9a1fed13
    • unknown's avatar
      Fix for bug #17615: invalid handling of function results in UPDATE...SET statement. · 6ea2c3cd
      unknown authored
      sql/item_func.cc:
        Fix for bug #17615: invalid handling of function results in UPDATE...SET statement.
        - set proper collation
      6ea2c3cd
  23. 24 Feb, 2006 1 commit
    • unknown's avatar
      Fixes to embedded server to be able to run tests with it · 0afb6ff6
      unknown authored
      (Needed for "list of pushes" web page and autopush)
      
      
      include/mysql.h:
        Fix to embedded server to be able to run tests on it
      libmysql/libmysql.c:
        Fix to embedded server to be able to run tests on it
      libmysqld/emb_qcache.cc:
        Fix to embedded server to be able to run tests on it
      libmysqld/embedded_priv.h:
        Fix to embedded server to be able to run tests on it
      libmysqld/lib_sql.cc:
        Fix to embedded server to be able to run tests on it
      libmysqld/libmysqld.c:
        Fix to embedded server to be able to run tests on it
      mysql-test/mysql-test-run.sh:
        Fix to embedded server to be able to run tests on it
      mysql-test/r/binlog.result:
        Updated test for embedded server
      mysql-test/r/ctype_cp932.result:
        Updated test for embedded server
      mysql-test/r/innodb.result:
        Updated test for embedded server
      mysql-test/r/mysqltest.result:
        Updated test for embedded server
      mysql-test/r/query_cache.result:
        Updated test for embedded server
      mysql-test/r/query_cache_notembedded.result:
        Updated test for embedded server
      mysql-test/r/sp-error.result:
        Updated test for embedded server
      mysql-test/r/sp.result:
        Updated test for embedded server
      mysql-test/r/subselect.result:
        Updated test for embedded server
      mysql-test/r/view.result:
        Updated test for embedded server
      mysql-test/r/view_grant.result:
        Updated test for embedded server
      mysql-test/t/backup.test:
        Updated test for embedded server
      mysql-test/t/binlog.test:
        Updated test for embedded server
      mysql-test/t/blackhole.test:
        Updated test for embedded server
      mysql-test/t/compress.test:
        Updated test for embedded server
      mysql-test/t/ctype_cp932.test:
        Updated test for embedded server
      mysql-test/t/delayed.test:
        Updated test for embedded server
      mysql-test/t/handler.test:
        Updated test for embedded server
      mysql-test/t/innodb.test:
        Updated test for embedded server
      mysql-test/t/mysql.test:
        Updated test for embedded server
      mysql-test/t/mysql_client_test.test:
        Updated test for embedded server
      mysql-test/t/mysqltest.test:
        Updated test for embedded server
      mysql-test/t/query_cache.test:
        Updated test for embedded server
      mysql-test/t/query_cache_notembedded.test:
        Updated test for embedded server
      mysql-test/t/read_only.test:
        Updated test for embedded server
      mysql-test/t/skip_grants.test:
        Updated test for embedded server
      mysql-test/t/sp-destruct.test:
        Updated test for embedded server
      mysql-test/t/sp-error.test:
        Updated test for embedded server
      mysql-test/t/sp-threads.test:
        Updated test for embedded server
      mysql-test/t/sp.test:
        Updated test for embedded server
      mysql-test/t/subselect.test:
        Updated test for embedded server
      mysql-test/t/temp_table.test:
        Updated test for embedded server
      mysql-test/t/view.test:
        Updated test for embedded server
      mysql-test/t/view_grant.test:
        Updated test for embedded server
      mysql-test/t/wait_timeout.test:
        Updated test for embedded server
      mysys/mf_dirname.c:
        Review fix: Don't access data outside of array
      mysys/my_bitmap.c:
        Remove compiler warnings
      scripts/mysql_fix_privilege_tables.sql:
        Add flush privileges to .sql script so that one doesn't have to reboot mysqld when one runs the mysql_fix_privilege_script
      sql-common/client.c:
        Updated test for embedded server
      sql/item.cc:
        Remove DBUG_PRINT statement that can cause crashes when running with --debug
      sql/mysqld.cc:
        Fix to embedded server to be able to run tests on it
      sql/protocol.cc:
        Fix to embedded server to be able to run tests on it
        (Trivial reconstruction of code)
      sql/protocol.h:
        Fix to embedded server to be able to run tests on it
      sql/sql_base.cc:
        Better comment
      sql/sql_class.cc:
        Fix to embedded server to be able to run tests on it
      sql/sql_class.h:
        Fix to embedded server to be able to run tests on it
      sql/sql_cursor.cc:
        Fix to embedded server to be able to run tests on it
      sql/sql_parse.cc:
        Fix to embedded server to be able to run tests on it
        Don't crash for disabled commands when using embedded server
      sql/sql_prepare.cc:
        Fix to embedded server to be able to run tests on it
      mysql-test/r/ctype_cp932_notembedded.result:
        New BitKeeper file ``mysql-test/r/ctype_cp932_notembedded.result''
      mysql-test/r/innodb_notembedded.result:
        New BitKeeper file ``mysql-test/r/innodb_notembedded.result''
      mysql-test/r/sp.result.orig:
        New BitKeeper file ``mysql-test/r/sp.result.orig''
      mysql-test/r/sp_notembedded.result:
        New BitKeeper file ``mysql-test/r/sp_notembedded.result''
      mysql-test/r/subselect_notembedded.result:
        New BitKeeper file ``mysql-test/r/subselect_notembedded.result''
      mysql-test/t/ctype_cp932_notembedded.test:
        New BitKeeper file ``mysql-test/t/ctype_cp932_notembedded.test''
      mysql-test/t/innodb_notembedded.test:
        New BitKeeper file ``mysql-test/t/innodb_notembedded.test''
      mysql-test/t/sp.test.orig:
        New BitKeeper file ``mysql-test/t/sp.test.orig''
      mysql-test/t/sp_notembedded.test:
        New BitKeeper file ``mysql-test/t/sp_notembedded.test''
      mysql-test/t/subselect_notembedded.test:
        New BitKeeper file ``mysql-test/t/subselect_notembedded.test''
      0afb6ff6
  24. 16 Feb, 2006 1 commit
  25. 15 Feb, 2006 2 commits
    • unknown's avatar
      Additional tests for nested handlers added to sp.test. · 4628da29
      unknown authored
      A follow-up to BUG#15011 (already fixed).
      
      
      mysql-test/r/sp.result:
        Updated results for new handler tests.
      mysql-test/t/sp.test:
        Additional tests for nested handlers.
      4628da29
    • unknown's avatar
      Fixed BUG#16887: Cursor causes server segfault · 7f02b0a0
      unknown authored
        The problem was a code generation bug: cpop instructions were not generated
        when using ITERATE back to an outer block from a context with a declared
        cursor; this would make it push a new cursor without popping in-between,
        eventually overrunning the cursor stack with a crash as the result.
        Fixed the calculation of how many cursors to pop (in sp_pcontext.cc:
        diff_cursors()), and also corrected diff_cursors() and diff_handlers()
        to when doing a "leave"; don't include the last context we're leaving
        (we are then jumping to the appropriate pop instructions).
      
      
      mysql-test/r/sp.result:
        Updated result for new test case (BUG#16887)
      mysql-test/t/sp.test:
        New test case for BUG#16887
      sql/sp_pcontext.cc:
        Added new parameter to sp_pcontext::diff_handlers() and diff_cursors():
        They can either include (for iterate jumps) or exclude (for leave jumps)
        the outer context.
        Fixed bug in diff_cursors(); it was just plain wrong and would return
        zero in some situations when it shouldn't.
      sql/sp_pcontext.h:
        Added new parameter to sp_pcontext::diff_handlers() and diff_cursors():
        They can either include (for iterate jumps) or exclude (for leave jumps)
        the outer context.
      sql/sql_yacc.yy:
        Added parameter to diff_handlers/diff_cursors depending on if it's an
        iterate or leave jump.
        For "leave", we don't have to include the last context we're leaving since
        we will jump to the appropriate pop instructions.
      7f02b0a0
  26. 26 Jan, 2006 1 commit
    • unknown's avatar
      Fixed on BUG#16568: Continue handler with simple CASE not working correctly · af187fa2
      unknown authored
        After trying multiple inheritance (to messy and hard make it work) and
        sublassing jump_if_not (worked, but ugly), decided to on this solution
        instead:
        Inserting an abstract sp_instr_opt_meta class as parent for all instructions
        with destinations makes it possible to handle a continuation pointer for
        sp_instr_set_case_expr too.
        Note: No special test case; the fix is captured by the changed behaviour of
        bug14643_2, and bug14498_4 (formerly disabled), in sp.test.
      
      
      mysql-test/r/sp.result:
        Updated results for BUG#16568 (affects results for bug14643_2 and bug14498_4)
      mysql-test/t/sp.test:
        Enabled test bug14498_4 for BUG#16568.
      sql/sp_head.cc:
        Changed type of some parameters and variables (sp_instr_opt_meta instead of sp_instr_jump*).
        Added consistency check of m_ip member in instructions in sp_head::show_routine_code().
        Updated print() method of, and added opt_mark() and opt_move() methods to
        sp_instr_set_case_expr, to handle the new continuation destination.
      sql/sp_head.h:
        New abstract class between sp_instr and instructions with destinations, in particular
        sp_instr_set_case_expr, for continuation destination handling.
        Changed type of some parameters and variables (sp_instr_opt_meta instead of sp_instr_jump*).
        Added opt_mark(), opt_move() and set_destination() methods to
        sp_instr_set_case_expr.
      sql/sql_parse.cc:
        Fixed small bug at show_routine_code() call (tested return value the wrong way).
      sql/sql_yacc.yy:
        sp_instr_set_case_expr is now added to backpatch list (for the new cont. destination).
      af187fa2
  27. 25 Jan, 2006 1 commit
    • unknown's avatar
      Fixed BUGS#15011: error handler for mysql errno in nested block not activated · cc037976
      unknown authored
        For nested sql errno handlers (unlike sqlexception and other), we didn't stop
        searching when the innermost handler was found - now make sure we do.
      
      
      mysql-test/r/sp.result:
        Updated result for BUG#15011.
      mysql-test/t/sp.test:
        New testcase for BUG#15011.
      sql/sp_rcontext.cc:
        Make sure we stop at the innermost sql_errno handler.
      cc037976
  28. 20 Jan, 2006 1 commit
  29. 19 Jan, 2006 1 commit
    • unknown's avatar
      Fixed BUG#15866: Thread stack limit insufficient for recursive call "fib(20)" · 7fc2604c
      unknown authored
        Lowered the parameter to 10, and also renamed non-standard table names to t3.
      
      
      mysql-test/r/sp.result:
        Updated results.
      mysql-test/r/sp_trans.result:
        Updated results.
      mysql-test/t/sp.test:
        Renamed fac, primes and fib tables to t3.
        Lowered fib() test parameter to 10 (20 hit the stack overrun check on some machines).
      mysql-test/t/sp_trans.test:
        Added drop of t3 for safety. (Might be left from sp.test after certain test failures.)
      7fc2604c
  30. 17 Jan, 2006 1 commit
    • unknown's avatar
      Bug#15206: "Misleading message "No data to FETCH": · 13f5fca9
      unknown authored
      reword the misleading message.
      
      
      mysql-test/r/sp-error.result:
        Test results fixed (Bug#15206)
      mysql-test/r/sp.result:
        Test results fixed (Bug#15206)
      mysql-test/r/type_decimal.result:
        Disable an unportable test case (Bug#7670)
      mysql-test/r/variables.result:
        Test results fixed (Bug#15206)
      mysql-test/r/view_grant.result:
        Test results fixed (Bug#15206)
      mysql-test/t/type_decimal.test:
        Remove an unportable (QNX) test case (Bug#7670). The test output
        depends on system-specific sprintf() implementation.
        The original complain was about erroneous conversion to long long,
        which was applied prior to conversion to double: but the expected
        behaviour can't be achieved until we have an own string -> double
        conversion function.
      13f5fca9
  31. 12 Jan, 2006 1 commit
    • unknown's avatar
      Fix for bug #12198 "Temporary table aliasing does not work inside stored · c12a3dfe
      unknown authored
      functions".
      
      We should ignore alias when we check if table was already marked as temporary
      when we calculate set of tables to be prelocked. Otherwise we will erroneously
      treat tables which are used in same routine and have same name but different
      alias as non-temporary.
      
      
      mysql-test/r/sp.result:
        Added test for bug #12198 "Temporary table aliasing does not work inside stored
        functions" and other tests which cover handling of temporary tables in prelocked
        mode.
      mysql-test/t/sp.test:
        Added test for bug #12198 "Temporary table aliasing does not work inside stored
        functions" and other tests which cover handling of temporary tables in prelocked
        mode.
      sql/sp_head.cc:
        sp_head::merge_table_list():
          We should ignore alias when we check if table was already marked as temporary
          when we calculate set of tables to be prelocked. Otherwise we will erroneously
          treat tables which are used in same routine and have same name but different
          alias as non-temporary.
      c12a3dfe
  32. 13 Dec, 2005 1 commit
    • unknown's avatar
      Fixed BUG#15231: Stored procedure bug with not found condition handler · 5e84bbcb
      unknown authored
        Make the distinction between "exception conditions" and "completion
        conditions" (warning and "no data") as defined by the standard. The latter
        should not terminate a routine if no handler is found in the lexical scope.
      
      
      mysql-test/r/sp.result:
        New test case for BUG#15231.
        Moved part of the test for BUG#7049 to the new testcase (since it was actually
        an example of 15231).
      mysql-test/t/sp.test:
        New test case for BUG#15231.
        Moved part of the test for BUG#7049 to the new testcase (since it was actually
        an example of 15231).
      sql/sp_rcontext.cc:
        Only search for matching condition handlers in caller's contexts if it's
        an exception conditition.
      5e84bbcb
  33. 08 Dec, 2005 1 commit
    • unknown's avatar
      A fix and a test case for Bug#15441 "Running SP causes Server · 9c4985de
      unknown authored
      to Crash": the bug was that due to non-standard name
      resolution precedence in stored procedures (See Bug#5967)
      a stored procedure variable took precedence over a table column
      when the arguments for VALUES() function were resolved.
      The implementation of VALUES() function was not designed to work
      with Item_splocal and crashed.
      VALUES() function is non-standard. It can refer to, and
      is meaningful for, table columns only. The patch disables SP 
      variables as possible arguments of VALUES() function.
      
      
      mysql-test/r/sp.result:
        Test results fixed (Bug#15441).
        Also make sure that the recently added test cases follow sp.test
        internal tests standard.
      mysql-test/t/sp.test:
        Add a test case for Bug#15441 "Running SP causes Server to Crash".
      sql/item.cc:
        Cleanup Item_insert_value::fix_fields().
      sql/item.h:
        Add a comment for Item_insert_value.
      sql/sql_yacc.yy:
        Actual fix for Bug#15441 "Running SP causes Server to Crash":
        we should not allow VALUES() function to reference SP variables.
      9c4985de
  34. 07 Dec, 2005 1 commit
    • unknown's avatar
      Patch for WL#2894: Make stored routine variables work · 6b2f1309
      unknown authored
      according to the standard.
      
      The idea is to use Field-classes to implement stored routines
      variables. Also, we should provide facade to Item-hierarchy
      by Item_field class (it is necessary, since SRVs take part
      in expressions).
      
      The patch fixes the following bugs:
        - BUG#8702: Stored Procedures: No Error/Warning shown for inappropriate data 
          type matching; 
       
        - BUG#8768: Functions: For any unsigned data type, -ve values can be passed 
          and returned; 
       
        - BUG#8769: Functions: For Int datatypes, out of range values can be passed 
          and returned; 
       
        - BUG#9078: STORED PROCDURE: Decimal digits are not displayed when we use 
          DECIMAL datatype; 
       
        - BUG#9572: Stored procedures: variable type declarations ignored; 
       
        - BUG#12903: upper function does not work inside a function; 
       
        - BUG#13705: parameters to stored procedures are not verified; 
       
        - BUG#13808: ENUM type stored procedure parameter accepts non-enumerated
          data; 
       
        - BUG#13909: Varchar Stored Procedure Parameter always BINARY string (ignores 
          CHARACTER SET); 
       
        - BUG#14161: Stored procedure cannot retrieve bigint unsigned;
      
        - BUG#14188: BINARY variables have no 0x00 padding;
      
        - BUG#15148: Stored procedure variables accept non-scalar values;
      
      
      mysql-test/r/ctype_ujis.result:
        Explicitly specify correct charset.
      mysql-test/r/schema.result:
        Drop our test database to not affect this test if some test
        left it cause of failure.
      mysql-test/r/show_check.result:
        Drop our test database to not affect this test if some test
        left it cause of failure.
      mysql-test/r/skip_name_resolve.result:
        Ignore columns with unpredictable values.
      mysql-test/r/sp-big.result:
        Add cleanup statement.
      mysql-test/r/sp-dynamic.result:
        Add cleanup statements.
      mysql-test/r/sp.result:
        Update result file.
      mysql-test/r/sum_distinct-big.result:
        Update result file.
      mysql-test/r/type_newdecimal-big.result:
        Update result file.
      mysql-test/t/ctype_ujis.test:
        Explicitly specify correct charset.
      mysql-test/t/schema.test:
        Drop our test database to not affect this test if some test
        left it cause of failure.
      mysql-test/t/show_check.test:
        Drop our test database to not affect this test if some test
        left it cause of failure.
      mysql-test/t/skip_name_resolve.test:
        Ignore columns with unpredictable values.
      mysql-test/t/sp-big.test:
        Add cleanup statement.
      mysql-test/t/sp-dynamic.test:
        Add cleanup statements.
      mysql-test/t/sp.test:
        Non-scalar values prohibited for assignment to SP-vars;
        polishing.
      mysql-test/t/type_newdecimal-big.test:
        Update type specification so that the variables
        can contain the large values used in the test.
      sql/field.cc:
        Extract create_field::init() to initialize an existing
        instance of create_field from new_create_field().
      sql/field.h:
        Extract create_field::init() to initialize an existing
        instance of create_field from new_create_field().
      sql/item.cc:
        - Introduce a new class: Item_sp_variable -- a base class
          of stored-routine-variables classes;
        - Introduce Item_case_expr -- an Item, which is used to access
          to the expression of CASE statement;
      sql/item.h:
        - Introduce a new class: Item_sp_variable -- a base class
          of stored-routine-variables classes;
        - Introduce Item_case_expr -- an Item, which is used to access
          to the expression of CASE statement;
      sql/item_func.cc:
        Pass the Field (instead of Item) for the return value of
        a function to the function execution routine.
      sql/item_func.h:
        Pass the Field (instead of Item) for the return value of
        a function to the function execution routine.
      sql/mysql_priv.h:
        Move create_virtual_tmp_table() out of sql_select.h.
      sql/sp.cc:
        Use create_result_field() instead of make_field().
      sql/sp_head.cc:
        - Add a function to map enum_field_types to Item::Type;
        - Add sp_instr_push_case_expr instruction -- an instruction
          to push CASE expression into the active running context;
        - Add sp_instr_pop_case_expr instruction -- an instruction
          to pop CASE expression from the active running context;
        - Adapt the SP-execution code to using Fields instead of Items
          for SP-vars;
        - Use create_field structure for field description instead of
          a set of members.
      sql/sp_head.h:
        - Add a function to map enum_field_types to Item::Type;
        - Add sp_instr_push_case_expr instruction -- an instruction
          to push CASE expression into the active running context;
        - Add sp_instr_pop_case_expr instruction -- an instruction
          to pop CASE expression from the active running context;
        - Adapt the SP-execution code to using Fields instead of Items
          for SP-vars;
        - Use create_field structure for field description instead of
          a set of members.
      sql/sp_pcontext.cc:
        - Change rules to assign an index of SP-variable: use
          transparent index;
        - Add an operation to retrieve a list of defined SP-vars
          from the processing context recursively.
      sql/sp_pcontext.h:
        - Change rules to assign an index of SP-variable: use
          transparent index;
        - Add an operation to retrieve a list of defined SP-vars
          from the processing context recursively.
      sql/sp_rcontext.cc:
        - Change rules to assign an index of SP-variable: use
          transparent index;
        - Use a tmp virtual table to store SP-vars instead of Items;
        - Provide operations to work with CASE expresion.
      sql/sp_rcontext.h:
        - Change rules to assign an index of SP-variable: use
          transparent index;
        - Use a tmp virtual table to store SP-vars instead of Items;
        - Provide operations to work with CASE expresion.
      sql/sql_class.cc:
        - Reflect Item_splocal ctor changes;
        - Item_splocal::get_offset() has been renamed to get_var_idx().
      sql/sql_class.h:
        Polishing.
      sql/sql_parse.cc:
        Extract create_field::init() to initialize an existing
        instance of create_field from new_create_field().
      sql/sql_select.cc:
        Take care of BLOB columns in create_virtual_tmp_table().
      sql/sql_select.h:
        Move create_virtual_tmp_table() out of sql_select.h.
      sql/sql_trigger.cc:
        Use boolean constants for boolean type instead of numerical ones.
      sql/sql_yacc.yy:
        Provide an instance of create_field for each SP-var.
      mysql-test/include/sp-vars.inc:
        The definitions of common-procedures, which are created
        under different circumstances.
      mysql-test/r/sp-vars.result:
        Result file for the SP-vars test.
      mysql-test/sp-vars.test:
        A new test for checking SP-vars functionality.
      6b2f1309
  35. 06 Dec, 2005 1 commit
    • unknown's avatar
      A fix and a test case for Bug#15392 "Server crashes during · 8c2d8ac7
      unknown authored
       prepared statement execute
      
      
      mysql-test/r/sp.result:
        Test results fixed: a fix for Bug#15392
      mysql-test/t/sp.test:
        A test case for Bug#15392 "Server crashes during prepared
        statement execute". No test case for error in
        Item_func_set_user_var::update as the only possible one is OOM.
      sql/sp_head.cc:
        A fix for Bug#15392 "Server crashes during prepared statement
        execute": the bug was caused by mysql_change_db() call
        which was overwriting the error state of 'ret'.
        Later in the code, suv->fix_fields() would discover
        thd->net.report_error and return it without completing
        its work. As the return value of fix_fields() was ignored,
        the server would afterwards crash in suv->update().
        The fix makes sure that a possible internal error
        is raised in reset_lex_and_exec_core and then is
        handled in sp_head::execute_procedure.
      8c2d8ac7