An error occurred fetching the project authors.
  1. 29 Aug, 2007 2 commits
  2. 24 Aug, 2007 1 commit
  3. 29 Jul, 2007 1 commit
    • unknown's avatar
      Fixed bug #30120. · 33fc4ad4
      unknown authored
      SP with local variables with non-ASCII names crashed the server.
      
      The server replaces SP local variable names with NAME_CONST calls
      when putting statements into the binary log. It used UTF8-encoded
      item names as variable names for the replacement inside NAME_CONST
      calls. However, statement string may be encoded by any
      known character set by the SET NAMES statement.
      The server used byte length of UTF8-encoded names to increment
      the position in the query string that led to array index overrun.
      
      
      sql/item.cc:
        Fixed bug #30120.
        The Item_splocal class constructor has been modified to
        accept new parameter `len_in_q': the byte length of
        variable name in the query string.
      sql/item.h:
        Fixed bug #30120.
        The Item_splocal class has been modified to keep new
        field `len_in_query': the byte length of variable name in
        the query string.
      sql/sp_head.cc:
        Fixed bug #30120.
        The subst_spvars function has been modified to increment
        position in the query string by the lengths of not
        encoded variable names instead of byte length of names
        encoded to UTF-8.
      sql/sql_yacc.yy:
        Fixed bug #30120.
        The simple_ident rule action has been modified to
        pass the byte length of the local variable name token
        to the Item_splocal object constructor.
      mysql-test/t/sp.test:
        Updated test case for bug #30120.
      mysql-test/r/sp.result:
        Updated test case for bug #30120.
      33fc4ad4
  4. 28 Jul, 2007 1 commit
    • unknown's avatar
      Fixed bug #29834. · 90c5621d
      unknown authored
      Using view columns by their names during an execution of
      a prepared SELECT statement or a SELECT statement inside
      a SP caused a memory leak.
      
      
      sql/sql_base.cc:
        Fixed bug #29834.
        The find_field_in_view function has been modified to
        use the execution memory root for the Item_direct_view_ref
        objects allocation at non-first executions of
        a PS/SP instead of the statement memory.
      mysql-test/t/sp.test:
        Updated test case for bug #29834.
      mysql-test/r/sp.result:
        Updated test case for bug #29834.
      90c5621d
  5. 21 Jul, 2007 1 commit
    • unknown's avatar
      sp.test, sp.result: · 9cad4f08
      unknown authored
        Additional test case fix for bug #29338.
      
      
      mysql-test/t/sp.test:
        Additional test case fix for bug #29338.
      mysql-test/r/sp.result:
        Additional test case fix for bug #29338.
      9cad4f08
  6. 19 Jul, 2007 1 commit
    • unknown's avatar
      Fixed bug #29338. · 36f1e484
      unknown authored
      Optimization of queries with DETERMINISTIC functions in the
      WHERE clause was not effective: sequential scan was always
      used.
      Now a SF with the DETERMINISTIC flags is treated as constant
      when it's arguments are constants (or a SF doesn't has arguments).
      
      
      sql/item_func.h:
        Fixed bug #29338.
        The Item_func_sp::used_tables has been removed
        (virtual Item_func::used_tables function is enough).
        The virtual Item_func_sp::update_used_tables function
        has been added.
      sql/item_func.cc:
        Fixed bug #29338.
        The Item_func_sp::update_used_tables and the
        Item_func_sp::fix_field functions have been modified
        to take into account the DETERMINISTIC flag of SF definition.
      mysql-test/r/sp.result:
        Updated test case for bug #29338.
      mysql-test/t/sp.test:
        Updated test case for bug #29338.
      36f1e484
  7. 05 Jul, 2007 1 commit
    • unknown's avatar
      A fix and a test case for Bug#29050 Creation of a legal stored procedure · e8966dee
      unknown authored
      fails if a database is not selected prior.
      
      The problem manifested itself when a user tried to
      create a routine that had non-fully-qualified identifiers in its bodies
      and there was no current database selected.
      
      This is a regression introduced by the fix for Bug 19022:
      
      The patch for Bug 19022 changes the code to always produce a warning
      if we can't resolve the current database in the parser. 
      In this case this was not necessary, since even though the produced
      parsed tree was incorrect, we never re-use sphead
      that was obtained at first parsing of CREATE PROCEDURE.
      The sphead that is anyhow used is always obtained through db_load_routine,
      and there we change the current database to sphead->m_db before
      calling yyparse.
      
      The idea of the fix is to resolve the current database directly using 
      lex->sphead->m_db member when parsing a stored routine body, when
      such is present.
      
      This patch removes the need to reset the current database
      when loading a trigger or routine definition into SP cache.
      The redundant code will be removed in 5.1.
      
      
      mysql-test/r/sp.result:
        Update test results (Bug#29050)
      mysql-test/r/trigger.result:
        Update results.
      mysql-test/t/sp.test:
        Add a test case for Bug#29050
      mysql-test/t/trigger.test:
        Fix wrong behavior covered with tests.
      sql/sql_lex.cc:
        Implement st_lex::copy_db_to().
      sql/sql_lex.h:
        Declare st_lex::copy_db_to().
      sql/sql_parse.cc:
        Use st_lex::copy_db_to() in add_table_to_list, rather than
        THD::copy_db_to(). The former will use the database of the sphead,
        if we're parsing a stored routine, not the default database in
        THD. The default database is needed to initialize tables->db
        when the database part was not explicitly specified in the identifier.
      sql/sql_yacc.yy:
        Use st_lex::copy_db_to() in the parser, rather than
        THD::copy_db_to(). The former will use the database of the sphead,
        if we're parsing a stored routine, not the default database in
        THD.
      e8966dee
  8. 04 Jul, 2007 1 commit
    • unknown's avatar
      A fix and a teset case for Bug#28551 The warning · b1ec3b53
      unknown authored
      'No database selected' is reported when calling stored procedures
      
      Remove the offending warning introduced by the fix for Bug
      25082
      This minimal patch relies on the intrinsic knowledge of the fact that
      mysql_change_db is never called with 'force_switch' set to TRUE
      when such a warning may be needed:
       * every stored routine belongs to a database (unlike, e.g., a 
      user defined function, which does not), so if we're activating the
      database of a stored routine, it can never be NULL.
      Therefore, this branch is never called for activation.
       * if we're restoring the 'old' current database after routine
      execution is complete, we should not issue a warning, since it's OK to 
      call a routine without having previously selected the current database.
      
      TODO: 'force_switch' is an ambiguous flag, since we do not actually
      have to 'force' the switch in case of stored routines at all.
      When we activate the routine's database, we should perform
      all the checks as in case of 'use db', and so we already do (in this
      case 'force_switch' is unused).
      When we load a routine into cache, we should not use mysql_change_db
      at all, since there it's enough to call thd->reset_db(). We
      do it this way for triggers, but code for routines is different (wrongly). 
      
      TODO: bugs are lurking in replication, since it bypasses mysql_change_db
      and calls thd->[re_]set_db to set the current database.
      The latter does not change thd->db_charset, thd->sctx->db_access
      and thd->variables.collation_database (and this may have nasty side
      effects).
      
      These todo items are to be addressed in a separate patch, if at all.
      
      
      mysql-test/r/sp.result:
        Update results (Bug#28551)
      mysql-test/t/sp.test:
        Add a test case (Bug#28551)
      sql/sp.cc:
        Remove an obsolete comment.
        Replace a check with an assert.
      sql/sql_db.cc:
        Remove the offending warning introduced by the fix for Bug
        25082
        This minimal patch relies on the intrinsic knowledge of the fact that
        mysql_change_db is never called with 'force_switch' set to TRUE
        when such a warning may be needed.
      b1ec3b53
  9. 28 Jun, 2007 1 commit
    • unknown's avatar
      Patch for the following bugs: · 405f82d3
      unknown authored
        - BUG#11986: Stored routines and triggers can fail if the code
          has a non-ascii symbol
        - BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
        - BUG#19443: INFORMATION_SCHEMA does not support charsets properly
        - BUG#21249: Character set of SP-var can be ignored
        - BUG#25212: Character set of string constant is ignored (stored routines)
        - BUG#25221: Character set of string constant is ignored (triggers)
      
      There were a few general problems that caused these bugs:
      1. Character set information of the original (definition) query for views,
         triggers, stored routines and events was lost.
      2. mysqldump output query in client character set, which can be
         inappropriate to encode definition-query.
      3. INFORMATION_SCHEMA used strings with mixed encodings to display object
         definition;
      
      1. No query-definition-character set.
      
      In order to compile query into execution code, some extra data (such as
      environment variables or the database character set) is used. The problem
      here was that this context was not preserved. So, on the next load it can
      differ from the original one, thus the result will be different.
      
      The context contains the following data:
        - client character set;
        - connection collation (character set and collation);
        - collation of the owner database;
      
      The fix is to store this context and use it each time we parse (compile)
      and execute the object (stored routine, trigger, ...).
      
      2. Wrong mysqldump-output.
      
      The original query can contain several encodings (by means of character set
      introducers). The problem here was that we tried to convert original query
      to the mysqldump-client character set.
      
      Moreover, we stored queries in different character sets for different
      objects (views, for one, used UTF8, triggers used original character set).
      
      The solution is
        - to store definition queries in the original character set;
        - to change SHOW CREATE statement to output definition query in the
          binary character set (i.e. without any conversion);
        - introduce SHOW CREATE TRIGGER statement;
        - to dump special statements to switch the context to the original one
          before dumping and restore it afterwards.
      
      Note, in order to preserve the database collation at the creation time,
      additional ALTER DATABASE might be used (to temporary switch the database
      collation back to the original value). In this case, ALTER DATABASE
      privilege will be required. This is a backward-incompatible change.
      
      3. INFORMATION_SCHEMA showed non-UTF8 strings
      
      The fix is to generate UTF8-query during the parsing, store it in the object
      and show it in the INFORMATION_SCHEMA.
      
      Basically, the idea is to create a copy of the original query convert it to
      UTF8. Character set introducers are removed and all text literals are
      converted to UTF8.
      
      This UTF8 query is intended to provide user-readable output. It must not be
      used to recreate the object.  Specialized SHOW CREATE statements should be
      used for this.
      
      The reason for this limitation is the following: the original query can
      contain symbols from several character sets (by means of character set
      introducers).
      
      Example:
      
        - original query:
          CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
      
        - UTF8 query (for INFORMATION_SCHEMA):
          CREATE VIEW v1 AS SELECT 'Hello' AS c1;
      
      
      client/mysqldump.c:
        Set original character set and collation before dumping definition query.
      include/my_sys.h:
        Move out-parameter to the end of list.
      mysql-test/lib/mtr_report.pl:
        Ignore server-warnings during the test case.
      mysql-test/r/create.result:
        Update result file.
      mysql-test/r/ctype_cp932_binlog_stm.result:
        Update result file.
      mysql-test/r/events.result:
        Update result file.
      mysql-test/r/events_bugs.result:
        Update result file.
      mysql-test/r/events_grant.result:
        Update result file.
      mysql-test/r/func_in.result:
        Update result file.
      mysql-test/r/gis.result:
        Update result file.
      mysql-test/r/grant.result:
        Update result file.
      mysql-test/r/information_schema.result:
        Update result file.
      mysql-test/r/information_schema_db.result:
        Update result file.
      mysql-test/r/lowercase_view.result:
        Update result file.
      mysql-test/r/mysqldump.result:
        Update result file.
      mysql-test/r/ndb_sp.result:
        Update result file.
      mysql-test/r/ps.result:
        Update result file.
      mysql-test/r/rpl_replicate_do.result:
        Update result file.
      mysql-test/r/rpl_sp.result:
        Update result file.
      mysql-test/r/rpl_trigger.result:
        Update result file.
      mysql-test/r/rpl_view.result:
        Update result file.
      mysql-test/r/show_check.result:
        Update result file.
      mysql-test/r/skip_grants.result:
        Update result file.
      mysql-test/r/sp-destruct.result:
        Update result file.
      mysql-test/r/sp-error.result:
        Update result file.
      mysql-test/r/sp-security.result:
        Update result file.
      mysql-test/r/sp.result:
        Update result file.
      mysql-test/r/sql_mode.result:
        Update result file.
      mysql-test/r/system_mysql_db.result:
        Update result file.
      mysql-test/r/temp_table.result:
        Update result file.
      mysql-test/r/trigger-compat.result:
        Update result file.
      mysql-test/r/trigger-grant.result:
        Update result file.
      mysql-test/r/trigger.result:
        Update result file.
      mysql-test/r/view.result:
        Update result file.
      mysql-test/r/view_grant.result:
        Update result file.
      mysql-test/t/events.test:
        Update test case (new columns added).
      mysql-test/t/information_schema.test:
        Update test case (new columns added).
      mysql-test/t/show_check.test:
        Test case for SHOW CREATE TRIGGER in prepared statements and
        stored routines.
      mysql-test/t/sp-destruct.test:
        Update test case (new columns added).
      mysql-test/t/sp.test:
        Update test case (new columns added).
      mysql-test/t/view.test:
        Update test.
      mysys/charset.c:
        Move out-parameter to the end of list.
      scripts/mysql_system_tables.sql:
        Add new columns to mysql.proc and mysql.event.
      scripts/mysql_system_tables_fix.sql:
        Add new columns to mysql.proc and mysql.event.
      sql/event_data_objects.cc:
        Support new attributes for events.
      sql/event_data_objects.h:
        Support new attributes for events.
      sql/event_db_repository.cc:
        Support new attributes for events.
      sql/event_db_repository.h:
        Support new attributes for events.
      sql/events.cc:
        Add new columns to SHOW CREATE event resultset.
      sql/mysql_priv.h:
        1. Introduce Object_creation_ctx;
        2. Introduce SHOW CREATE TRIGGER;
        3. Introduce auxilary functions.
      sql/sp.cc:
        Add support for new store routines attributes.
      sql/sp_head.cc:
        Add support for new store routines attributes.
      sql/sp_head.h:
        Add support for new store routines attributes.
      sql/sql_lex.cc:
        Generate UTF8-body on parsing/lexing.
      sql/sql_lex.h:
        1. Generate UTF8-body on parsing/lexing.
        2. Introduce SHOW CREATE TRIGGER.
      sql/sql_parse.cc:
        Introduce SHOW CREATE TRIGGER.
      sql/sql_partition.cc:
        Update parse_sql().
      sql/sql_prepare.cc:
        Update parse_sql().
      sql/sql_show.cc:
        Support new attributes for views
      sql/sql_trigger.cc:
        Support new attributes for views
      sql/sql_trigger.h:
        Support new attributes for views
      sql/sql_view.cc:
        Support new attributes for views
      sql/sql_yacc.yy:
        1. Add SHOW CREATE TRIGGER statement.
        2. Generate UTF8-body for views, stored routines, triggers and events.
      sql/table.cc:
        Introduce Object_creation_ctx.
      sql/table.h:
        Introduce Object_creation_ctx.
      sql/share/errmsg.txt:
        Add new errors.
      mysql-test/include/ddl_i18n.check_events.inc:
        Aux file for test suite.
      mysql-test/include/ddl_i18n.check_sp.inc:
        Aux file for test suite.
      mysql-test/include/ddl_i18n.check_triggers.inc:
        Aux file for test suite.
      mysql-test/include/ddl_i18n.check_views.inc:
        Aux file for test suite.
      mysql-test/include/have_cp1251.inc:
        Aux file for test suite.
      mysql-test/include/have_cp866.inc:
        Aux file for test suite.
      mysql-test/include/have_koi8r.inc:
        Aux file for test suite.
      mysql-test/include/have_utf8.inc:
        Aux file for test suite.
      mysql-test/r/ddl_i18n_koi8r.result:
        Result file.
      mysql-test/r/ddl_i18n_utf8.result:
        Result file.
      mysql-test/r/have_cp1251.require:
        Aux file for test suite.
      mysql-test/r/have_cp866.require:
        Aux file for test suite.
      mysql-test/r/have_koi8r.require:
        Aux file for test suite.
      mysql-test/r/have_utf8.require:
        Aux file for test suite.
      mysql-test/t/ddl_i18n_koi8r.test:
        Complete koi8r test case for the CS patch.
      mysql-test/t/ddl_i18n_utf8.test:
        Complete utf8 test case for the CS patch.
      405f82d3
  10. 27 Jun, 2007 1 commit
    • unknown's avatar
      Change "exec rm" to "remove_file" · 61c423a2
      unknown authored
      mysql-test/t/sp.test:
        Change "exec rm" to "remove_file"
        Change two "remove file if exists" to "check that file not exist"
      61c423a2
  11. 12 Jun, 2007 1 commit
    • unknown's avatar
      Bug#25411 (trigger code truncated), PART II · f09496c8
      unknown authored
      Bug 28127 (Some valid identifiers names are not parsed correctly)
      Bug 26302 (MySQL server cuts off trailing "*/" from comments in SP/func)
      
      This patch is the second part of a major cleanup, required to fix
      Bug 25411 (trigger code truncated).
      
      The root cause of the issue stems from the function skip_rear_comments,
      which was a work around to remove "extra" "*/" characters from the query
      text, when parsing a query and reusing the text fragments to represent a
      view, trigger, function or stored procedure.
      The reason for this work around is that "special comments",
      like /*!50002 XXX */, were not parsed properly, so that a query like:
        AAA /*!50002 BBB */ CCC
      would be seen by the parser as "AAA BBB */ CCC" when the current version
      is greater or equal to 5.0.2
      
      The root cause of this stems from how special comments are parsed.
      Special comments are really out-of-bound text that appear inside a query,
      that affects how the parser behave.
      In nature, /*!50002 XXX */ in MySQL is similar to the C concept
      of preprocessing :
        #if VERSION >= 50002
        XXX
        #endif
      
      Depending on the current VERSION of the server, either the special comment
      should be expanded or it should be ignored, but in all cases the "text" of
      the query should be re-written to strip the "/*!50002" and "*/" markers,
      which does not belong to the SQL language itself.
      
      Prior to this fix, these markers would leak into :
      - the storage format for VIEW,
      - the storage format for FUNCTION,
      - the storage format for FUNCTION parameters, in mysql.proc (param_list),
      - the storage format for PROCEDURE,
      - the storage format for PROCEDURE parameters, in mysql.proc (param_list),
      - the storage format for TRIGGER,
      - the binary log used for replication.
      
      In all cases, not only this cause format corruption, but also provide a vector
      for dormant security issues, by allowing to tunnel code that will be activated
      after an upgrade.
      
      The proper solution is to deal with special comments strictly during parsing,
      when accepting a query from the outside world.
      Once a query is parsed and an object is created with a persistant
      representation, this object should not arbitrarily mutate after an upgrade.
      In short, special comments are a useful but limited feature for MYSQLdump,
      when used at an *interface* level to facilitate import/export,
      but bloating the server *internal* storage format is *not* the proper way
      to deal with configuration management of the user logic.
      
      With this fix:
      - the Lex_input_stream class now acts as a comment pre-processor,
      and either expands or ignore special comments on the fly.
      - MYSQLlex and sql_yacc.yy have been cleaned up to strictly use the
      public interface of Lex_input_stream. In particular, how the input stream
      accepts or rejects a character is private to Lex_input_stream, and the
      internal buffer pointers of that class are strictly private, and should not
      be tempered with during parsing.
      
      This caused many changes mostly in sql_lex.cc.
      
      During the code cleanup in case MY_LEX_NUMBER_IDENT,
      Bug 28127 (Some valid identifiers names are not parsed correctly)
      was found and fixed.
      
      By parsing special comments properly, and removing the function
      'skip_rear_comments' [sic],
      Bug 26302 (MySQL server cuts off trailing "*/" from comments in SP/func)
      has been fixed as well.
      
      
      sql/event_data_objects.cc:
        Cleanup of the code that extracts the query text
      sql/sp.cc:
        Cleanup of the code that extracts the query text
      sql/sp_head.cc:
        Cleanup of the code that extracts the query text
      sql/sql_trigger.cc:
        Cleanup of the code that extracts the query text
      sql/sql_view.cc:
        Cleanup of the code that extracts the query text
      mysql-test/r/comments.result:
        Bug#25411 (trigger code truncated)
      mysql-test/r/sp.result:
        Bug#25411 (trigger code truncated)
        Bug 26302 (MySQL server cuts off trailing "*/" from comments in SP/func)
      mysql-test/r/trigger.result:
        Bug#25411 (trigger code truncated)
      mysql-test/r/varbinary.result:
        Bug 28127 (Some valid identifiers names are not parsed correctly)
      mysql-test/t/comments.test:
        Bug#25411 (trigger code truncated)
      mysql-test/t/sp.test:
        Bug#25411 (trigger code truncated)
        Bug 26302 (MySQL server cuts off trailing "*/" from comments in SP/func)
      mysql-test/t/trigger.test:
        Bug#25411 (trigger code truncated)
      mysql-test/t/varbinary.test:
        Bug 28127 (Some valid identifiers names are not parsed correctly)
      sql/sql_lex.cc:
        Implemented comment pre-processing in Lex_input_stream,
        major cleanup of the lex/yacc code to not use Lex_input_stream private members.
      sql/sql_lex.h:
        Implemented comment pre-processing in Lex_input_stream,
        major cleanup of the lex/yacc code to not use Lex_input_stream private members.
      sql/sql_yacc.yy:
        post merge fix : view_check_options must be parsed before signaling the end of the query
      f09496c8
  12. 06 Jun, 2007 1 commit
    • unknown's avatar
      Bug #28842 Different 'duplicate key' error code between 5.0 and 5.1 · 0f6047e4
      unknown authored
        The patch for WL 1563 added a new duplicate key error message so that the
        key name could be provided instead of the key number. But the error code
        for the new message was used even though that did not need to change.
      
        This could cause unnecessary problems for applications that used the old
        ER_DUP_ENTRY error code to detect duplicate key errors.
      
      
      mysql-test/t/auto_increment.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/create.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/create_select_tmp.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/ctype_ucs2_def.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/ctype_utf8.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/delayed.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/heap.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/heap_btree.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/heap_hash.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/innodb.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/insert_select.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/insert_update.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/join_outer.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/key.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/merge.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/myisam.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/ndb_basic.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/ndb_charset.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/ndb_index_unique.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/ndb_insert.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/ndb_replace.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/ndb_update.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/replace.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/rpl_err_ignoredtable.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/rpl_ndb_do_table.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/rpl_row_create_table.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/rpl_sp.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/show_check.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/sp-error.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/sp.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/sp_trans.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/sp_trans_log.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/temp_table.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/type_binary.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/type_bit.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/type_bit_innodb.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/type_blob.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/t/type_varchar.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/r/create.result:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/r/rpl_sp.result:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/r/sp.result:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/include/mix1.inc:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/include/mix2.inc:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/include/ps_modify.inc:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/include/query_cache.inc:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/include/varchar.inc:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/extra/binlog_tests/insert_select-binlog.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/extra/rpl_tests/rpl_auto_increment.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/extra/rpl_tests/rpl_foreign_key.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/extra/rpl_tests/rpl_insert_delayed.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/extra/rpl_tests/rpl_insert_id.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/extra/rpl_tests/rpl_insert_id_pk.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/extra/rpl_tests/rpl_loaddata.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/extra/rpl_tests/rpl_row_basic.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test:
        Update ER_DUP_ENTRY-related error message values
      mysql-test/extra/rpl_tests/rpl_trig004.test:
        Update ER_DUP_ENTRY-related error message values
      sql/handler.cc:
        Restore use of ER_DUP_ENTRY error code even when ER_DUP_ENTRY_WITH_KEY_NAME
        error message is being used. (Bug #28842)
      0f6047e4
  13. 01 Jun, 2007 1 commit
    • unknown's avatar
      Fix some mysqltest warnings. · d8cd88cd
      unknown authored
      mysql-test/r/sp.result:
        Update results.
      mysql-test/t/mysql.test:
        Fix a typo.
      mysql-test/t/mysqltest.test:
        Fix a typo.
      mysql-test/t/order_by.test:
        Fix a typo.
      mysql-test/t/row.test:
        Remove an unsupported command.
      mysql-test/t/sp.test:
        Fix a typo.
      mysql-test/t/subselect3.test:
        Fix  mysqltest warnings - now it warns when sees some suspicious --
        comment
      d8cd88cd
  14. 29 May, 2007 1 commit
    • unknown's avatar
      Bug #28605: SHOW CREATE VIEW with views using stored_procedures no · 9e06efb4
      unknown authored
       longer showing SP names.
      SHOW CREATE VIEW uses Item::print() methods to reconstruct the 
      statement text from the parse tree.
      The print() method for stored procedure calls needs allocate 
      space to print the function's quoted name.
      It was incorrectly calculating the length of the buffer needed 
      (was too short).
      Fixed to reflect the actual space needed.
      
      
      mysql-test/r/sp.result:
        Bug #28605: test case
      mysql-test/t/sp.test:
        Bug #28605: test case
      sql/item_func.cc:
        Bug #28605: fixed the string length calculation
      9e06efb4
  15. 28 May, 2007 1 commit
    • unknown's avatar
      5.1 version of a fix and test cases for bugs: · b11f1d0c
      unknown authored
      Bug#4968 ""Stored procedure crash if cursor opened on altered table"
      Bug#6895 "Prepared Statements: ALTER TABLE DROP COLUMN does nothing"
      Bug#19182 "CREATE TABLE bar (m INT) SELECT n FROM foo; doesn't work from 
      stored procedure."
      Bug#19733 "Repeated alter, or repeated create/drop, fails"
      Bug#22060 "ALTER TABLE x AUTO_INCREMENT=y in SP crashes server"
      Bug#24879 "Prepared Statements: CREATE TABLE (UTF8 KEY) produces a 
      growing key length" (this bug is not fixed in 5.0)
      
      Re-execution of CREATE DATABASE, CREATE TABLE and ALTER TABLE 
      statements in stored routines or as prepared statements caused
      incorrect results (and crashes in versions prior to 5.0.25).
      
      In 5.1 the problem occured only for CREATE DATABASE, CREATE TABLE
      SELECT and CREATE TABLE with INDEX/DATA DIRECTOY options).
        
      The problem of bugs 4968, 19733, 19282 and 6895 was that functions
      mysql_prepare_table, mysql_create_table and mysql_alter_table are not
      re-execution friendly: during their operation they modify contents
      of LEX (members create_info, alter_info, key_list, create_list),
      thus making the LEX unusable for the next execution.
      In particular, these functions removed processed columns and keys from
      create_list, key_list and drop_list. Search the code in sql_table.cc 
      for drop_it.remove() and similar patterns to find evidence.
        
      The fix is to supply to these functions a usable copy of each of the
      above structures at every re-execution of an SQL statement. 
        
      To simplify memory management, LEX::key_list and LEX::create_list
      were added to LEX::alter_info, a fresh copy of which is created for
      every execution.
        
      The problem of crashing bug 22060 stemmed from the fact that the above 
      metnioned functions were not only modifying HA_CREATE_INFO structure 
      in LEX, but also were changing it to point to areas in volatile memory
      of the execution memory root.
         
      The patch solves this problem by creating and using an on-stack
      copy of HA_CREATE_INFO in mysql_execute_command.
      
      Additionally, this patch splits the part of mysql_alter_table
      that analizes and rewrites information from the parser into
      a separate function - mysql_prepare_alter_table, in analogy with
      mysql_prepare_table, which is renamed to mysql_prepare_create_table.
      
      
      mysql-test/r/ps.result:
        Update test results (Bug#19182, Bug#22060, Bug#4968, Bug#6895)
      mysql-test/r/sp.result:
        Update results (Bug#19733)
      mysql-test/t/ps.test:
        Add test cases for Bug#19182, Bug#22060, Bug#4968, Bug#6895
      mysql-test/t/sp.test:
        Add a test case for Bug#19733
      sql/field.h:
        Implement a deep copy constructor for create_field
      sql/mysql_priv.h:
        LEX::key_list and LEX::create_list were moved to LEX::alter_info.
        Update declarations to use LEX::alter_info instead of these two
        members.
        Remove declarations of mysql_add_index, mysql_drop_index.
      sql/sql_class.cc:
        Implement deep copy constructors.
      sql/sql_class.h:
        Implement (almost) deep copy constructors for key_part_spec, 
        Alter_drop, Alter_column, Key, foreign_key.
        Replace pair<columns, keys> with an instance of Alter_info in
        select_create constructor. We create a new copy of Alter_info
        each time we re-execute SELECT .. CREATE prepared statement.
      sql/sql_insert.cc:
        Adjust to a new signature of create_table_from_items.
      sql/sql_lex.cc:
        Implement Alter_info::Alter_info that would make a "deep" copy
        of all definition lists (keys, columns).
        Move is_partition_management() from sql_partition.cc (feature-based
        file division is evil).
      sql/sql_lex.h:
        Move key_list and create_list to class Alter_info. Implement
        Alter_info::Alter_info that can be used with PS and SP.
        Get rid of Alter_info::clear() which was an attempt to save on
        matches and always use Alter_info::reset().
        Implement an auxiliary Alter_info::init_for_create_from_alter()
        which is used in mysql_alter_table.
      sql/sql_list.cc:
          Implement a copy constructor of class List that makes a deep copy
          of all list nodes.
      sql/sql_list.h:
        Implement a way to make a deep copy of all list nodes.
      sql/sql_parse.cc:
        Adjust to new signatures of mysql_create_table, mysql_alter_table,
        select_create. Functions mysql_create_index and mysql_drop_index has
        become identical after initialization of alter_info was moved to the 
        parser, and were merged. Flag enable_slow_log was not updated for 
        SQLCOM_DROP_INDEX, which was a bug.
        Just like CREATE INDEX, DROP INDEX is currently done via complete 
        table rebuild and is rightfully a slow administrative statement.
      sql/sql_partition.cc:
        Move is_partition_management() to sql_lex.cc
        Adjust code to the new Alter_info.
      sql/sql_table.cc:
        Adjust mysql_alter_table, mysql_recreate_table, mysql_create_table,
        mysql_prepare_table to new signatures.
        Rename mysql_prepare_table to mysql_prepare_create_table. Make
        sure it follows the convention and returns FALSE for success and
        TRUE for error.
        Move parts of mysql_alter_table to mysql_prepare_alter_table.
        Move the first invokation of mysql_prepare_table from mysql_alter_table
        to compare_tables, as it was needed only for the purpose
        of correct comparison.
        Since now Alter_info itself is created in the runtime mem root,
        adjust mysql_prepare_table to always allocate memory in the
        runtime memory root.
        Remove dead code.
      sql/sql_yacc.yy:
        LEX::key_list and LEX::create_list moved to class Alter_info
      b11f1d0c
  16. 27 Apr, 2007 1 commit
    • unknown's avatar
      Bug#21513 (SP having body starting with quoted label rendered unusable) · 1700feaa
      unknown authored
      Before this fix, the parser would sometime change where a token starts by
      altering Lex_input_string::tok_start, which later confused the code in
      sql_yacc.yy that needs to capture the source code of a SQL statement,
      like to represent the body of a stored procedure.
      
      This line of code in sql_lex.cc :
      
      case MY_LEX_USER_VARIABLE_DELIMITER:
        lip->tok_start= lip->ptr; // Skip first `
      
      would <skip the first back quote> ... and cause the bug reported.
      
      In general, the responsibility of sql_lex.cc is to *find* where token are
      in the SQL text, but is *not* to make up fake or incomplete tokens.
      With a quoted label like `my_label`, the token starts on the first quote.
      Extracting the token value should not change that (it did).
      
      With this fix, the lexical analysis has been cleaned up to not change
      lip->tok_start (in the case found for this bug).
      
      The functions get_token() and get_quoted_token() now have an extra
      parameters, used when some characters from the beginning of the token need
      to be skipped when extracting a token value, like when extracting 'AB' from
      '0xAB', for example, for a HEX_NUM token.
      
      This exposed a bad assumption in Item_hex_string and Item_bin_string,
      which has been fixed:
      
      The assumption was that the string given, 'AB', was in fact preceded in
      memory by '0x', which might be false (it can be preceded by "x'" and
      followed by "'" -- or not be preceded by valid memory at all)
      
      If a name is needed for Item_hex_string or Item_bin_string, the name is
      taken from the original and true source code ('0xAB'), and assigned in
      the select_item rule, instead of relying on assumptions related to how
      memory is used.
      
      
      mysql-test/r/sp.result:
        Lex_input_stream::tok_start must point at the real start of a token.
      mysql-test/t/sp.test:
        Lex_input_stream::tok_start must point at the real start of a token.
      sql/item.cc:
        Lex_input_stream::tok_start must point at the real start of a token.
      sql/sql_lex.cc:
        Lex_input_stream::tok_start must point at the real start of a token.
      sql/sql_yacc.yy:
        Lex_input_stream::tok_start must point at the real start of a token.
      1700feaa
  17. 25 Apr, 2007 2 commits
    • unknown's avatar
      Fix test case that was broken for builds without InnoDB. · fedd09cd
      unknown authored
      ```yaml
      Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build-work-vanilla-building
      into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build-work-vanilla-building
      ```
      
      Fix test cases to pass for a plain ./configure && make build. This includes disabling two test cases when certain features are not present in the server. We're not losing coverage from this because these features are usually present, and disabling them here only serves the purpose to make the test cases work in the unlikely case that they aren't.
      ---
      fixes
      
      
      mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
        Disable this test case if we don't have partitioning
      mysql-test/t/rpl_row_basic_11bugs.test:
        Disable warnings in a number of places to make this test case work with servers that don't contain InnoDB
        ---
        make test case look better on request from reviewer
      mysql-test/t/rpl_row_mysqlbinlog.test:
        Disable this test case if the server does not have cp932 compiled in
      mysql-test/t/sp.test:
        Disable warnings during table creation in one place where engine=innodb is used, in order to make this test case work with a mysqld that was compiled without InnoDB.
      fedd09cd
    • unknown's avatar
      Fix test case that was broken for builds without InnoDB. · 24623226
      unknown authored
      mysql-test/t/sp.test:
        Disable warnings during table creation in one place where engine=innodb is used, in order to make this test case work with a mysqld that was compiled without InnoDB.
      24623226
  18. 12 Apr, 2007 1 commit
  19. 03 Apr, 2007 1 commit
  20. 27 Mar, 2007 2 commits
    • unknown's avatar
      Fix for BUG#25082: default database change on trigger · 6a594ffd
      unknown authored
      execution breaks replication.
      
      When a stored routine is executed, we switch current
      database to the database, in which the routine
      has been created. When the stored routine finishes,
      we switch back to the original database.
      
      The problem was that if the original database does not
      exist (anymore) after routine execution, we raised an error.
      
      The fix is to report a warning, and switch to the NULL database.
      
      
      mysql-test/r/sp.result:
        Updated result file.
      mysql-test/t/sp.test:
        Added test case for BUG#25082.
      sql/mysql_priv.h:
        1. Change mysql_change_db() prototype;
        2. Polishing.
      sql/sp.cc:
        Polishing.
      sql/sp_head.cc:
        Polishing.
      sql/sql_db.cc:
        1. Polishing.
        2. Fix mysql_change_db().
      sql/sql_parse.cc:
        Polishing.
      sql/sql_show.cc:
        Polishing.
      6a594ffd
    • unknown's avatar
      Corrected error in test case: · e4dcf4e3
      unknown authored
      - 1.84e+15 converted to unsigned bigint should be
        18400000000000000000 < 18446744073709551615.
      - The test will still fail on windows, and is extracted
        into a new bug report.
      
      
      e4dcf4e3
  21. 22 Mar, 2007 1 commit
    • unknown's avatar
      Bug #27354 stored function in where condition was always treated as const · df3a48ea
      unknown authored
      Possible problems: function call could be eliminated from where class and only
      be evaluated once; function can be evaluated during table and item setup phase which could
      cause side effects not to be registered in binlog.
      
      Fixed with introducing func_item_sp::used_tables() returning the correct table_map constant.
      
      
      
      mysql-test/r/sp.result:
        results changed
      mysql-test/t/sp.test:
        regression test demonstrating that function's returns match where condition
        of the top-level query table.
      sql/item_func.h:
        private used_tables() method returning the correct table_bit with meaning the item is not
        a constant
      df3a48ea
  22. 16 Mar, 2007 1 commit
    • unknown's avatar
      Bug#20777 Function w BIGINT UNSIGNED shows diff. behaviour with and without --ps-protocol · ffc605aa
      unknown authored
      - Stored procedures returning unsinged values returns signed values if
        text protocol is used. The reason is that the stored proceedure item
        Item_func_sp wasn't initializing the member variables properly based
        on the information contained in the associated result field.
      - The patch is to upon field-item association, ::fix_fields, initialize
        the member variables in appropriate order.
      - Field type of an Item_func_sp was hard coded to MYSQL_TYPE_VARCHAR.
        This is changed to return the type of the actual result field.
      - Member function name sp_result_field was refactored to the more 
        appropriate init_result_field.
      - Member function name find_and_check_access was refactored to 
        sp_check_access.
      
      
      mysql-test/r/sp.result:
        - Added test
      mysql-test/t/sp.test:
        - Added test
      sql/item_func.cc:
        Bug#20777 Function w BIGINT UNSIGNED shows diff. behaviour with and without --ps-protocol
        
        - Stored procedures returning unsinged values returns signed values if
          text protocol is used. The reason is that the stored proceedure item
          Item_func_sp wasn't initializing the member variables properly based
          on the information contained in the associated result field.
        - The patch is to upon field-item association, ::fix_fields, initialize
          the member variables in appropriate order.
        - Field type of an Item_func_sp was hard coded to MYSQL_TYPE_VARCHAR.
          This is changed to to return the type of the actual result field.
        - Member function name sp_result_field was refactored to the more 
          appropriate init_result_field.
        - Member function name find_and_check_access was refactored to 
          sp_check_access.
      sql/item_func.h:
        Bug#20777 Function w BIGINT UNSIGNED shows diff. behaviour with and without --ps-protocol
        
        - Stored procedures returning unsinged values returns signed values if
          text protocol is used. The reason is that the stored proceedure item
          Item_func_sp wasn't initializing the member variables properly based
          on the information contained in the associated result field.
        - The patch is to upon field-item association, ::fix_fields, initialize
          the member variables in appropriate order.
        - Field type of an Item_func_sp was hard coded to MYSQL_TYPE_VARCHAR.
          This is changed to to return the type of the actual result field.
        - Member function name sp_result_field was refactored to the more 
          appropriate init_result_field.
        - Member function name find_and_check_access was refactored to 
          sp_check_access.
      ffc605aa
  23. 14 Mar, 2007 2 commits
    • unknown's avatar
      Manual merge from 5.0-runtime to 5.1-runtime · 2fad8ac2
      unknown authored
      2fad8ac2
    • unknown's avatar
      Bug#26503 (Illegal SQL exception handler code causes the server to crash) · 79344c7b
      unknown authored
      Before this fix, the parser would accept illegal code in SQL exceptions
      handlers, that later causes the runtime to crash when executing the code,
      due to memory violations in the exception handler stack.
      
      The root cause of the problem is instructions within an exception handler
      that jumps to code located outside of the handler. This is illegal according
      to the SQL 2003 standard, since labels located outside the handler are not
      supposed to be visible (they are "out of scope"), so any instruction that
      jumps to these labels, like ITERATE or LEAVE, should not parse.
      
      The section of the standard that is relevant for this is :
        SQL:2003 SQL/PSM (ISO/IEC 9075-4:2003)
        section 13.1 <compound statement>,
        syntax rule 4
      <quote>
        The scope of the <beginning label> is CS excluding every <SQL schema
        statement> contained in CS and excluding every
        <local handler declaration list> contained in CS. <beginning label> shall
        not be equivalent to any other <beginning label>s within that scope.
      </quote>
      
      With this fix, the C++ class sp_pcontext, which represent the "parsing
      context" tree (a.k.a symbol table) of a stored procedure, has been changed
      as follows:
      - constructors have been cleaned up, so that only building a root node for
      the tree is public; building nodes inside a tree is not public.
      - a new member, m_label_scope, indicates if a given syntactic context
      belongs to a DECLARE HANDLER block,
      - label resolution, in the method find_label(), has been changed to
      implement the restriction of scope regarding labels used in a compound
      statement.
      
      The actions in the parser, when parsing the body of a SQL exception handler,
      have been changed as follows:
      - the implementation of an exception handler (DECLARE HANDLER) now creates
      explicitly a new sp_pcontext, to isolate the code inside the handler from
      the containing compound statement context.
      - registering exception handlers as a result occurs in the parent context,
      see the rule sp_hcond_element
      - the code in sp_hcond_list has been cleaned up, to avoid code duplication
      
      In addition, the flags IN_SIMPLE_CASE and IN_HANDLER, declared in sp_head.h
      have been removed, since they are unused and broken by design (as seen with
      Bug 19194 (Right recursion in parser for CASE causes excessive stack usage,
      limitation), representing a stack in a single flag is not possible.
      
      Tests in sp-error have been added to show that illegal constructs are now
      rejected.
      
      Tests in sp have been added for code coverage, to show that ITERATE or LEAVE
      statements are legal when jumping to a label in scope, inside the body of
      an exception handler.
      
      
      mysql-test/r/sp-error.result:
        SQL Exception handlers define a parsing context for label resolution.
      mysql-test/r/sp.result:
        SQL Exception handlers define a parsing context for label resolution.
      mysql-test/t/sp-error.test:
        SQL Exception handlers define a parsing context for label resolution.
      mysql-test/t/sp.test:
        SQL Exception handlers define a parsing context for label resolution.
      sql/sp_head.cc:
        Minor cleanup
      sql/sp_head.h:
        Minor cleanup
      sql/sp_pcontext.cc:
        SQL Exception handlers define a parsing context for label resolution.
      sql/sp_pcontext.h:
        SQL Exception handlers define a parsing context for label resolution.
      sql/sql_yacc.yy:
        SQL Exception handlers define a parsing context for label resolution.
      79344c7b
  24. 07 Mar, 2007 1 commit
    • unknown's avatar
      Bug#25373: Stored functions wasn't compared correctly which leads to a wrong · 11b533b8
      unknown authored
      result.
      
      For built-in functions like sqrt() function names are hard-coded and can be
      compared by pointer. But this isn't the case for a used-defined stored
      functions - names there are dynamical and should be compared as strings.
      
      Now the Item_func::eq() function employs my_strcasecmp() function to compare
      used-defined stored functions names.
      
      
      mysql-test/t/sp.test:
        Added a test case for bug#25373: Stored functions wasn't compared correctly which leads to a wrong result.
      mysql-test/r/sp.result:
        Added a test case for bug#25373: Stored functions wasn't compared correctly which leads to a wrong result.
      sql/item_func.cc:
        Bug#25373: Stored functions wasn't compared correctly which leads to a wrong
        result.
        Now the Item_func::eq() function employs my_strcasecmp() function to compare
        used-defined stored functions names.
      11b533b8
  25. 06 Mar, 2007 1 commit
    • unknown's avatar
      Bug#8407 (Stored functions/triggers ignore exception handler) · 266a7fff
      unknown authored
      Bug 18914 (Calling certain SPs from triggers fail)
      Bug 20713 (Functions will not not continue for SQLSTATE VALUE '42S02')
      Bug 21825 (Incorrect message error deleting records in a table with a
        trigger for inserting)
      Bug 22580 (DROP TABLE in nested stored procedure causes strange dependency
        error)
      Bug 25345 (Cursors from Functions)
      
      
      This fix resolves a long standing issue originally reported with bug 8407,
      which affect the behavior of Stored Procedures, Stored Functions and Trigger
      in many different ways, causing symptoms reported by all the bugs listed.
      In all cases, the root cause of the problem traces back to 8407 and how the
      server locks tables involved with sub statements.
      
      Prior to this fix, the implementation of stored routines would:
      - compute the transitive closure of all the tables referenced by a top level
      statement
      - open and lock all the tables involved
      - execute the top level statement
      "transitive closure of tables" means collecting:
      - all the tables,
      - all the stored functions,
      - all the views,
      - all the table triggers
      - all the stored procedures
      involved, and recursively inspect these objects definition to find more
      references to more objects, until the list of every object referenced does
      not grow any more.
      This mechanism is known as "pre-locking" tables before execution.
      The motivation for locking all the tables (possibly) used at once is to
      prevent dead locks.
      
      One problem with this approach is that, if the execution path the code
      really takes during runtime does not use a given table, and if the table is
      missing, the server would not execute the statement.
      This in particular has a major impact on triggers, since a missing table
      referenced by an update/delete trigger would prevent an insert trigger to run.
      
      Another problem is that stored routines might define SQL exception handlers
      to deal with missing tables, but the server implementation would never give
      user code a chance to execute this logic, since the routine is never
      executed when a missing table cause the pre-locking code to fail.
      
      With this fix, the internal implementation of the pre-locking code has been
      relaxed of some constraints, so that failure to open a table does not
      necessarily prevent execution of a stored routine.
      
      In particular, the pre-locking mechanism is now behaving as follows:
      
      1) the first step, to compute the transitive closure of all the tables
      possibly referenced by a statement, is unchanged.
      
      2) the next step, which is to open all the tables involved, only attempts
      to open the tables added by the pre-locking code, but silently fails without
      reporting any error or invoking any exception handler is the table is not
      present. This is achieved by trapping internal errors with
      Prelock_error_handler
      
      3) the locking step only locks tables that were successfully opened.
      
      4) when executing sub statements, the list of tables used by each statements
      is evaluated as before. The tables needed by the sub statement are expected
      to be already opened and locked. Statement referencing tables that were not
      opened in step 2) will fail to find the table in the open list, and only at
      this point will execution of the user code fail.
      
      5) when a runtime exception is raised at 4), the instruction continuation
      destination (the next instruction to execute in case of SQL continue
      handlers) is evaluated.
      This is achieved with sp_instr::exec_open_and_lock_tables()
      
      6) if a user exception handler is present in the stored routine, that
      handler is invoked as usual, so that ER_NO_SUCH_TABLE exceptions can be
      trapped by stored routines. If no handler exists, then the runtime execution
      will fail as expected.
      
      With all these changes, a side effect is that view security is impacted, in
      two different ways.
      
      First, a view defined as "select stored_function()", where the stored
      function references a table that may not exist, is considered valid.
      The rationale is that, because the stored function might trap exceptions
      during execution and still return a valid result, there is no way to decide
      when the view is created if a missing table really cause the view to be invalid.
      
      Secondly, testing for existence of tables is now done later during
      execution. View security, which consist of trapping errors and return a
      generic ER_VIEW_INVALID (to prevent disclosing information) was only
      implemented at very specific phases covering *opening* tables, but not
      covering the runtime execution. Because of this existing limitation,
      errors that were previously trapped and converted into ER_VIEW_INVALID are
      not trapped, causing table names to be reported to the user.
      This change is exposing an existing problem, which is independent and will
      be resolved separately.
      
      
      mysql-test/r/information_schema_db.result:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/r/sp-error.result:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/r/sp.result:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/r/trigger.result:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/r/view.result:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/t/sp-error.test:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/t/sp.test:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/t/trigger.test:
        Revised the pre-locking code implementation, aligned the tests.
      sql/lock.cc:
        table->placeholder now checks for schema_table
      sql/mysqld.cc:
        my_message_sql(): invoke internal exception handlers
      sql/sp_head.cc:
        exec_open_and_lock_tables(): open and lock tables, or return the
        continuation destination of this instruction
      sql/sp_head.h:
        exec_open_and_lock_tables(): open and lock tables, or return the
        continuation destination of this instruction
      sql/sql_base.cc:
        Prelock_error_handler: delay open table errors until execution
      sql/sql_class.cc:
        THD: add internal error handler, as an exception mechanism.
      sql/sql_class.h:
        THD: add internal error handler, as an exception mechanism.
      sql/sql_update.cc:
        table->placeholder now checks for schema_table
      sql/table.cc:
        st_table_list::hide_view_error(): masked more errors for view security
      sql/table.h:
        table->placeholder now checks for schema_table, and unopened tables
      266a7fff
  26. 01 Mar, 2007 1 commit
    • unknown's avatar
      Make sure tests drops objects created and restore variables to default · 245b9ad4
      unknown authored
      mysql-test/extra/rpl_tests/rpl_row_func003.test:
        Fix spelling error
      mysql-test/extra/rpl_tests/rpl_row_tabledefs.test:
        Restore sql_mode after test
      mysql-test/r/events_logs_tests.result:
        Turn even_scheduleroff before test ends
      mysql-test/r/events_scheduling.result:
        Turn even_scheduleroff before test ends
      mysql-test/r/insert.result:
        Drop tables t1 before test ends
      mysql-test/r/rpl_read_only.result:
        Set read_only flag back to default
      mysql-test/r/rpl_row_NOW.result:
        Drop database mysqltest1 before test ends
      mysql-test/r/rpl_row_USER.result:
        Drop users created by test
      mysql-test/r/rpl_row_basic_11bugs.result:
        Drop table and set query_cache_size back to default
      mysql-test/r/rpl_row_func002.result:
        Drop table created by test
      mysql-test/r/rpl_row_sp008.result:
        Drop table created by test
      mysql-test/r/rpl_row_sp012.result:
        Drop user created by test
      mysql-test/r/rpl_row_tabledefs_2myisam.result:
        Restore sql_mode
      mysql-test/r/rpl_row_tabledefs_3innodb.result:
        Restore sql_mode
      mysql-test/r/rpl_row_tabledefs_7ndb.result:
        Restore sql_mode
      mysql-test/r/rpl_row_view01.result:
        Drop database created by test
      mysql-test/r/rpl_slave_status.result:
        Remove created users
      mysql-test/r/rpl_switch_stm_row_mixed.result:
        Reset binlog_format to default
      mysql-test/r/sp.result:
        Drop procedure created by test
      mysql-test/r/varbinary.result:
        Drop table created by test
      mysql-test/r/variables.result:
        Reset changed variables to their defaults
      mysql-test/t/events_logs_tests.test:
        Turn off event_scheduler before test ends
      mysql-test/t/events_scheduling.test:
        Turn off event_scheduler
      mysql-test/t/insert.test:
        Drop table created by test
      mysql-test/t/rpl_read_only.test:
        Reset read_only flag
      mysql-test/t/rpl_row_NOW.test:
        Drop db created by test
      mysql-test/t/rpl_row_USER.test:
        Drop users created
      mysql-test/t/rpl_row_basic_11bugs.test:
        Drop tables created by test
      mysql-test/t/rpl_row_func002.test:
        Drop table created by test
      mysql-test/t/rpl_row_sp008.test:
        Drop table created by test
      mysql-test/t/rpl_row_sp012.test:
        Drop user created by test
      mysql-test/t/rpl_row_view01.test:
        Drop db created by test
      mysql-test/t/rpl_slave_status.test:
        Remove users created by test
      mysql-test/t/rpl_switch_stm_row_mixed.test:
        Reset binlog_format
      mysql-test/t/sp.test:
        Drop procedure created by test
      mysql-test/t/varbinary.test:
        Drop tables created by test
      mysql-test/t/variables.test:
        Restore variables to their default before test ends
      245b9ad4
  27. 19 Feb, 2007 1 commit
    • unknown's avatar
      Bug#18743: Several test cases fails if "classic" configuration in 5.0 · db36a2aa
      unknown authored
      The problem happened because those tests were using "cp932" and "ucs2" without checking whether these character sets are available. This fix moves test parts to make character set specific parts be tested only if they are:
      - some parts were moved to "ctype_ucs.test" and "ctype_cp932.test"
      - some parts were moved to the newly added tests "innodb-ucs2.test", "mysqlbinglog-cp932.test" and "sp-ucs2.test"
      
      
      mysql-test/r/ctype_cp932.result:
        Moved cp932-specific test case from mysql.test
      mysql-test/r/innodb.result:
        Moved ucs2-specific test cases to innodb-ucs2.test
      mysql-test/r/mysql.result:
        Move cp932-specific test cases to ctype_cp932.test
      mysql-test/r/mysqlbinlog.result:
        Moved cp932-specific test case to mysqlbinlog-cp932.test
      mysql-test/r/sp.result:
        Moved ucs2-specific test case to sp-ucs2.test
      mysql-test/t/ctype_cp932.test:
        Moved cp932-specific test case from mysql.test
      mysql-test/t/ctype_ucs2_def-master.opt:
        Use the comma-separated list of character sets to avoid mysql-test errors when ucs2 is not available in the server
      mysql-test/t/ctype_ucs2_def.test:
        Added requirement for ucs2 in the server
      mysql-test/t/innodb.test:
        Moved ucs2-specific test cases to innodb-ucs2.test
      mysql-test/t/mysql.test:
        Move cp932-specific test cases to ctype_cp932.test
      mysql-test/t/mysqlbinlog.test:
        Moved cp932-specific test case to mysqlbinlog-cp932.test
      mysql-test/t/sp.test:
        Moved ucs2-specific test case to sp-ucs2.test
      sql/mysqld.cc:
        Allow specifying several character sets for test purposes, to make "mysqld" start even if the character set being tested is not compiled:
        mysqld --default-character-set=ucs2,latin1
        The first available character set will be chosen.
      mysql-test/r/innodb-ucs2.result:
        New BitKeeper file ``mysql-test/r/innodb-ucs2.result''
      mysql-test/r/mysqlbinlog-cp932.result:
        New BitKeeper file ``mysql-test/r/mysqlbinlog-cp932.result''
      mysql-test/r/sp-ucs2.result:
        New BitKeeper file ``mysql-test/r/sp-ucs2.result''
      mysql-test/t/innodb-ucs2.test:
        New BitKeeper file ``mysql-test/t/innodb-ucs2.test''
      mysql-test/t/mysqlbinlog-cp932.test:
        New BitKeeper file ``mysql-test/t/mysqlbinlog-cp932.test''
      mysql-test/t/sp-ucs2.test:
        New BitKeeper file ``mysql-test/t/sp-ucs2.test''
      db36a2aa
  28. 22 Jan, 2007 3 commits
    • unknown's avatar
      Change to new (after merge) error numbers · f7e838c5
      unknown authored
      mysql-test/extra/rpl_tests/rpl_trig004.test:
        Fixed bug in last push
      mysql-test/r/create.result:
        Fixed error number
      mysql-test/r/rpl_sp.result:
        Fixed error number
      mysql-test/r/sp.result:
        Fixed error number
      mysql-test/r/view.result:
        Better fix for now() handling
      mysql-test/t/ndb_basic.test:
        Use error names instead of numbers
      mysql-test/t/ndb_index_unique.test:
        Use error names instead of numbers
      mysql-test/t/rpl_skip_error-slave.opt:
        Change to new error number
      mysql-test/t/sp.test:
        Change to new error number
      mysql-test/t/view.test:
        Better fix for now() handling
      f7e838c5
    • unknown's avatar
      Change to new (after merge) error numbers · 560049cb
      unknown authored
      mysql-test/r/create.result:
        Fixed error number
      mysql-test/r/rpl_sp.result:
        Fixed error number
      mysql-test/r/sp.result:
        Fixed error number
      mysql-test/r/view.result:
        Better fix for now() handling
      mysql-test/t/ndb_basic.test:
        Use error names instead of numbers
      mysql-test/t/ndb_index_unique.test:
        Use error names instead of numbers
      mysql-test/t/rpl_skip_error-slave.opt:
        Change to new error number
      mysql-test/t/sp.test:
        Change to new error number
      mysql-test/t/view.test:
        Better fix for now() handling
      560049cb
    • unknown's avatar
      Give warnings for unused objects · b4f80eed
      unknown authored
      Changed error message to be compatible with old error file
      Added new error message for new DUP_ENTRY syntax
      
      
      BUILD/SETUP.sh:
        Give warnings for unused objects
      mysql-test/extra/binlog_tests/insert_select-binlog.test:
        Changed to use new error message
      mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test:
        Changed to use new error message
      mysql-test/extra/rpl_tests/rpl_auto_increment.test:
        Changed to use new error message
      mysql-test/extra/rpl_tests/rpl_foreign_key.test:
        Changed to use new error message
      mysql-test/extra/rpl_tests/rpl_insert_id.test:
        Changed to use new error message
      mysql-test/extra/rpl_tests/rpl_insert_id_pk.test:
        Changed to use new error message
      mysql-test/extra/rpl_tests/rpl_loaddata.test:
        Changed to use new error message
      mysql-test/extra/rpl_tests/rpl_row_basic.test:
        Changed to use new error message
      mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test:
        Changed to use new error message
      mysql-test/extra/rpl_tests/rpl_trig004.test:
        Changed to use new error message
      mysql-test/include/mix1.inc:
        Changed to use new error message
      mysql-test/include/mix2.inc:
        Changed to use new error message
      mysql-test/include/ps_modify.inc:
        Changed to use new error message
      mysql-test/include/query_cache.inc:
        Changed to use new error message
      mysql-test/include/varchar.inc:
        Changed to use new error message
      mysql-test/r/create.result:
        Changed to use new error message
      mysql-test/r/rpl_sp.result:
        Changed to use new error message
      mysql-test/r/sp.result:
        Changed to use new error message
      mysql-test/r/view.result:
        Changed to use new error message
      mysql-test/t/auto_increment.test:
        Changed to use new error message
      mysql-test/t/create.test:
        Changed to use new error message
      mysql-test/t/create_select_tmp.test:
        Changed to use new error message
      mysql-test/t/ctype_utf8.test:
        Changed to use new error message
      mysql-test/t/delayed.test:
        Changed to use new error message
      mysql-test/t/heap.test:
        Changed to use new error message
      mysql-test/t/heap_btree.test:
        Changed to use new error message
      mysql-test/t/heap_hash.test:
        Changed to use new error message
      mysql-test/t/innodb.test:
        Changed to use new error message
      mysql-test/t/insert_select.test:
        Changed to use new error message
      mysql-test/t/insert_update.test:
        Changed to use new error message
      mysql-test/t/join_outer.test:
        Changed to use new error message
      mysql-test/t/key.test:
        Changed to use new error message
      mysql-test/t/merge.test:
        Changed to use new error message
      mysql-test/t/myisam.test:
        Changed to use new error message
      mysql-test/t/ndb_charset.test:
        Changed to use new error message
      mysql-test/t/ndb_index_unique.test:
        Changed to use new error message
      mysql-test/t/ndb_insert.test:
        Changed to use new error message
      mysql-test/t/ndb_replace.test:
        Changed to use new error message
      mysql-test/t/ndb_update.test:
        Changed to use new error message
      mysql-test/t/replace.test:
        Changed to use new error message
      mysql-test/t/rpl_err_ignoredtable.test:
        Changed to use new error message
      mysql-test/t/rpl_row_create_table.test:
        Changed to use new error message
      mysql-test/t/rpl_skip_error-slave.opt:
        Changed to use new error message
      mysql-test/t/rpl_sp.test:
        Changed to use new error message
      mysql-test/t/show_check.test:
        Changed to use new error message
      mysql-test/t/sp-error.test:
        Changed to use new error message
      mysql-test/t/sp.test:
        Changed to use new error message
      mysql-test/t/sp_trans.test:
        Changed to use new error message
      mysql-test/t/temp_table.test:
        Changed to use new error message
      mysql-test/t/type_binary.test:
        Changed to use new error message
      mysql-test/t/type_bit.test:
        Changed to use new error message
      mysql-test/t/type_bit_innodb.test:
        Changed to use new error message
      mysql-test/t/type_blob.test:
        Changed to use new error message
      mysql-test/t/type_varchar.test:
        Changed to use new error message
      mysql-test/t/view.test:
        Changed to use new error message
      sql/handler.cc:
        ER_DUP_ENTRY -> ER_DUP_ENTRY_WITH_KEY_NAME
      sql/share/errmsg.txt:
        Changed error message to be compatible with old error file
        Added new error message for new DUP_ENTRY syntax
      sql/sql_table.cc:
        ER_DUP_ENTRY -> ER_DUP_ENTRY_WITH_KEY_NAME
      sql-bench/example:
        Example file for how to run tests
      b4f80eed
  29. 14 Dec, 2006 1 commit
    • unknown's avatar
      Fix for bug #24117 "server crash on a FETCH with a cursor on a table which is... · 5b712814
      unknown authored
      Fix for bug #24117 "server crash on a FETCH with a cursor on a table which is not in the table cache"
      
      Problem:
      When creating a temporary field for a temporary table in create_tmp_field_from_field(), a resulting field is created as an exact copy of an original one (in Field::new_field()). However, Field_enum and Field_set contain a pointer (typelib) to memory allocated in the parent table's MEM_ROOT, which under some circumstances may be deallocated later by the time a temporary table is used.
      
      Solution:
      Override the new_field() method for Field_enum and Field_set and create a separate copy of the typelib structure in there.
      
      
      include/typelib.h:
        Added copy_typelib() declaration
      mysql-test/r/sp.result:
        Added a testcase for bug #24117 "server crash on a FETCH with a cursor on a table which is not in the table cache"
      mysql-test/t/sp.test:
        Added a testcase for bug #24117 "server crash on a FETCH with a cursor on a table which is not in the table cache"
      mysys/typelib.c:
        Added copy_typelib() definition
      sql/field.cc:
        Create a copy of the internal 'typelib' structure when copying Field_enum of Field_set objects.
      sql/field.h:
        Override new_field method in Field_enum (and Field_set) to copy the typelib structure.
      5b712814
  30. 11 Dec, 2006 1 commit
    • unknown's avatar
      Post-merge fixes for Bug#4968 "Stored procedure crash if cursor opened · a8103a89
      unknown authored
      on altered table" and Bug#19733 "Repeated alter, or repeated 
      create/drop, fails"
      
      
      mysql-test/r/ps.result:
        Post-merge fixes: update results with new tests.
      mysql-test/r/sp.result:
        Post-merge fixes: update results.
      mysql-test/t/ps.test:
        Add more test cases for Bug#4968 and related.
      mysql-test/t/sp.test:
        A post-merge fix: add more testcases for Bug#4968 and related.
      sql/sql_insert.cc:
        Post-merge fixes: update comments, fix errors of the manual merge.
      sql/sql_lex.cc:
        Fix a manual merge error.
      sql/sql_parse.cc:
        Fix a few errors of the manual merge, style.
      sql/sql_table.cc:
        Post-merge fixes, fix a few errors of the manual merge, fix style.
      sql/sql_yacc.yy:
        A post-merge fix.
      a8103a89
  31. 17 Nov, 2006 1 commit
    • unknown's avatar
      Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR · b84e9d10
      unknown authored
      Fix tests for new behaviour: an error is thrown if a NON DETERMINISTIC
      stored function (SF) is called during statement-based replication (SBR).
      
      
      mysql-test/r/func_time.result:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/r/gis.result:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Mark function as DETERMINISTIC so it can be called with no error while
        doing statement-based replication (SBR).
      mysql-test/r/grant2.result:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/r/innodb_notembedded.result:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/r/ps.result:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Mark function as DETERMINISTIC so it can be called with no error while
        doing statement-based replication (SBR).
      mysql-test/r/query_cache.result:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/r/query_cache_notembedded.result:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/r/rpl_sp.result:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Move test for SF-calls in different replication modes to its own file, rpl_sf.
      mysql-test/r/rpl_sp_effects.result:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/r/sp.result:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Mark function as DETERMINISTIC so it can be called with no error while
        doing statement-based replication (SBR).
      mysql-test/r/timezone2.result:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/t/func_time.test:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/t/gis.test:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Mark function as DETERMINISTIC so it can be called with no error while
        doing statement-based replication (SBR).
      mysql-test/t/grant2.test:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/t/innodb_notembedded.test:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/t/ps.test:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/t/query_cache.test:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/t/query_cache_notembedded.test:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/t/rpl_sp.test:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/t/rpl_sp_effects.test:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      mysql-test/t/sp.test:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Mark function as DETERMINISTIC so it can be called with no error while
        doing statement-based replication (SBR).
      mysql-test/t/timezone2.test:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Modify test that contains non-deterministic functions so it can still be
        called with no error while doing statement-based replication (SBR).
      sql/item_func.cc:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        If 'log_bin_trust_function_creators' variable is set, don't throw an error
        on calling a non-deterministc function in statement-based replication (SBR).
      sql/sql_parse.cc:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Do not throw an error on calling a NON DETERMINISTIC stored procedure (SP)
        while doing statement-based replication (SBR), as the routine body is
        executed statement-by-statement.
      mysql-test/r/rpl_sf.result:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Test for stored function (SF) calls in different replication modes.
        NON DETERMINISTIC SFs are not allowed while doing
        statement-based replication (SBR).
      mysql-test/t/rpl_sf.test:
        Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
        
        Test for stored function (SF) calls in different replication modes.
        NON DETERMINISTIC SFs are not allowed while doing
        statement-based replication (SBR).
      b84e9d10
  32. 15 Nov, 2006 2 commits
    • unknown's avatar
    • unknown's avatar
      Bug#18239 (Possible to overload internal functions with stored functions) · 418fd548
      unknown authored
      Bug#21025 (misleading error message when creating functions named 'x', or 'y')
      Bug#22619 (Spaces considered harmful)
      
      This change contains a fix to report warnings or errors, and multiple tests
      cases.
      
      Before this fix, name collisions between:
      - Native functions
      - User Defined Functions
      - Stored Functions
      were not systematically reported, leading to confusing behavior.
      
      I) Native / User Defined Function
      
      Before this fix, is was possible to create a UDF named "foo", with the same
      name as a native function "foo", but it was impossible to invoke the UDF,
      since the syntax "foo()" always refer to the native function.
      After this fix, creating a UDF fails with an error if there is a name
      collision with a native function.
      
      II) Native / Stored Function
      
      Before this fix, is was possible to create a SF named "db.foo", with the same
      name as a native function "foo", but this was confusing since the syntax
      "foo()" would refer to the native function. To refer to the Stored Function,
      the user had to use the "db.foo()" syntax.
      After this fix, creating a Stored Function reports a warning if there is a
      name collision with a native function.
      
      III) User Defined Function / Stored Function
      
      Before this fix, creating a User Defined Function "foo" and a Stored Function
      "db.foo" are mutually exclusive operations. Whenever the second function is
      created, an error is reported. However, the test suite did not cover this
      behavior.
      After this fix, the  behavior is unchanged, and is now covered by test cases.
      
      Note that the code change in this patch depends on the fix for Bug 21114.
      
      
      mysql-test/r/sp.result:
        New test cases.
      mysql-test/r/udf.result:
        New test cases.
      mysql-test/t/sp.test:
        New test cases.
      mysql-test/t/udf.test:
        New test cases.
      sql/sql_lex.cc:
        Name collisions with native functions.
      sql/sql_lex.h:
        Name collisions with native functions.
      sql/sql_yacc.yy:
        Name collisions with native functions.
      sql/share/errmsg.txt:
        Name collisions with native functions.
      mysql-test/r/sp_gis.result:
        New test cases.
      mysql-test/t/sp_gis.test:
        New test cases.
      418fd548
  33. 14 Nov, 2006 1 commit
    • unknown's avatar
      Fix for bug#23760 ROW_COUNT() and store procedure not owrking together · 645aac54
      unknown authored
      The problem was that THD::row_count_func was zeroed too. It was zeroed
      as a fix for bug 4905 "Stored procedure doesn't clear for "Rows affected"
      However, the proper solution is not to zero, because THD::row_count_func has
      been set to -1 already in mysql_execute_command(), a later fix, which obsoletes
      the incorrect fix of #4095
      
      
      mysql-test/r/sp.result:
        update result
      mysql-test/t/sp.test:
        test for bug#23760 ROW_COUNT() and store procedure not owrking together
      sql/sql_parse.cc:
        Remove zeroing for thd->row_count_func
        The fix for #4905 wasn't right. Now, it's ok without this zeroing
        because if there was an error THD::
      645aac54