An error occurred fetching the project authors.
  1. 10 Oct, 2007 2 commits
  2. 26 Sep, 2007 1 commit
    • unknown's avatar
      merge of the fix for bug 27802 & 27216 to 5.1-opt · bc25c6ca
      unknown authored
      mysql-test/r/view.result:
        merge of the fix for bug 27802 to 5.1
      sql/item_cmpfunc.h:
        merge of the fix for bug 27216 to 5.1
      sql/sql_insert.cc:
        merge of the fix for bug 27216 to 5.1
      sql/sql_lex.h:
        merge of the fix for bug 27802 to 5.1
      sql/sql_select.cc:
        merge of the fix for bug 27802 to 5.1
      sql/table.h:
        merge of the fix for bug 27802 to 5.1
      bc25c6ca
  3. 24 Sep, 2007 2 commits
    • unknown's avatar
      Bug #28702: VIEWs defined with USE/FORCE KEY ignore that request · ca448acc
      unknown authored
      When storing the VIEW the CREATE VIEW command is reconstructed 
      from the parse tree. While constructing the command string
      the index hints specified should also be printed.
      Fixed by adding code to print the index hints when printing a 
      table in the FROM clause.
      
      
      mysql-test/r/view.result:
        Bug #28702: test case
      mysql-test/t/view.test:
        Bug #28702: test case
      sql/sql_select.cc:
        Bug #28702: preserve index hints in a VIEW definition.
      sql/table.h:
        Bug #28702: preserve index hints in a VIEW definition.
      ca448acc
    • unknown's avatar
      merging bug 28701 to 5.1-opt · c2c760bd
      unknown authored
      c2c760bd
  4. 28 Jul, 2007 1 commit
    • unknown's avatar
      Bug#30020: Insufficient check led to a wrong info provided by the · aa4a3c9a
      unknown authored
      information schema table.
      
      The get_schema_views_record() function fills records in the view table of
      the informations schema with data about given views. Among other info
      the is_updatable flag is set. But the check whether the view is updatable or
      not wasn't covering all cases thus sometimes providing wrong info.
      This might led to a user confusion.
      
      Now the get_schema_views_record function additionally calls to the 
      view->can_be_merge() function to find out whether the view can be updated or
      not.
      
      
      mysql-test/t/view.test:
        Added a test case for the bug#30020: Insufficient check led to a wrong info
        provided by the information schema table.
      mysql-test/r/view.result:
        Added a test case for the bug#30020: Insufficient check led to a wrong info
        provided by the information schema table.
      sql/sql_show.cc:
        Bug#30020: Insufficient check led to a wrong info provided by the
        information schema table.
        Now the get_schema_views_record function additionally calls to the 
        view->can_be_merge() function to find out whether the view can be updated or
        not.
      aa4a3c9a
  5. 05 Jul, 2007 1 commit
    • unknown's avatar
      Fixed bug #29392. · 5d88b654
      unknown authored
      This bug may manifest itself for select queries over a multi-table view
      that includes an ORDER BY clause in its definition. If the select list of 
      the query contains references to the same view column with different
      aliases the names of the columns in the result output will be nevertheless
      the same, coinciding with one of the alias.
      
      The bug happened because the method Item_ref::get_tmp_table_item that
      was inherited by the class Item_direct_view_ref ignored the fact that
      the name of the view column reference must be inherited by the fields
      of the temporary table that was created in order to get the result rows
      sorted.
      
      
      mysql-test/r/view.result:
        Added a test case for bug #29392.
      mysql-test/t/view.test:
        Added a test case for bug #29392.
      sql/item.h:
        Fixed bug #29392.
        This bug may manifest itself for select queries over a multi-table view
        that includes an ORDER BY clause in its definition. If the select list of 
        the query contains references to the same view column with different
        aliases the names of the columns in the result output will be nevertheless
        the same, coinciding with one of the alias.
        
        The bug happened because the method Item_ref::get_tmp_table_item that
        was inherited by the class Item_direct_view_ref ignored the fact that
        the name of the view column reference must be inherited by the fields
        of the temporary table that was created in order to get the result rows
        sorted.
        
        Fixed by providing a proper implementation of the get_tmp_table_item 
        method for the Item_direct_view_ref class.
      5d88b654
  6. 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
  7. 20 Jun, 2007 1 commit
    • unknown's avatar
      Fixed bug #29104: assertion abort for grouping queries using views. · 39bf2b96
      unknown authored
      The abort happened when a query contained a conjunctive predicate
      of the form 'view column = constant' in the WHERE condition and 
      the grouping list also contained a reference to a view column yet
      a different one.
      
      Removed the failing assertion as invalid in a general case.
      
      Also fixed a bug that prevented applying some optimization for grouping
      queries using views. If the WHERE condition of such a query contains
      a conjunctive condition of the form 'view column = constant' and
      this view column is used in the grouping list then grouping by this
      column can be eliminated. The bug blocked performing this elimination.
      
      
      mysql-test/r/view.result:
        Added a test case for bug #29104.
      mysql-test/t/view.test:
        Added a test case for bug #29104.
      sql/item.cc:
        Fixed bug #29104: assertion abort for grouping queries using views.
        The abort happened when a query contained a conjunctive predicate
        of the form 'view column = constant' in the WHERE condition and 
        the grouping list also contained a reference to a view column yet
        a different one.
        
        Removed the failing assertion as invalid in a general case.
        
        Also fixed a bug that prevented applying some optimization for grouping
        queries using views. If the WHERE condition of such a query contains
        a conjunctive condition of the form 'view column = constant' and
        this view column is used in the grouping list then grouping by this
        column can be eliminated. The bug blocked performing this elimination.
        This bug was in the function Item_field::eq while the failing
        assertion was in the function Item_direct_view_ref::eq.
      39bf2b96
  8. 09 Jun, 2007 1 commit
    • unknown's avatar
      Bug#28266 IS_UPDATABLE field on VIEWS table in I_S database is wrong · ce4e9f75
      unknown authored
      IS_UPDATABLE flag is set to 'yes' when the view has at least one updatable column and
      the algorithm is not 'temporary'.
      
      
      mysql-test/r/information_schema.result:
        test result
      mysql-test/r/view.result:
        test result
      mysql-test/t/information_schema.test:
        test case
      mysql-test/t/view.test:
        test case
      sql/sql_show.cc:
        IS_UPDATABLE flag is set to 'yes' when the view has at least one updatable column and
        the algorithm is not 'temporary'.
      ce4e9f75
  9. 06 Jun, 2007 1 commit
    • unknown's avatar
      Bug #28701: · 05390731
      unknown authored
      Views don't have indexes. So they can't take index hints.
      Added a check and disabled the usage of hints for views.
      
      
      mysql-test/r/view.result:
        Bug #28701: test case
      mysql-test/t/view.test:
        Bug #28701: test case
      sql/sql_view.cc:
        Bug #28701: disable usage of hints for views
      05390731
  10. 05 Jun, 2007 1 commit
    • unknown's avatar
      BUG#26976 - Missing table in merge not noted in related error msg + · 55c76592
      unknown authored
                  SHOW CREATE TABLE fails
      
      Underlying table names, that merge engine fails to open were not
      reported.
      
      With this fix CHECK TABLE issued against merge table reports all
      underlying table names that it fails to open. Other statements
      are unaffected, that is underlying table names are not included
      into error message.
      
      This fix doesn't solve SHOW CREATE TABLE issue.
      
      
      myisammrg/myrg_def.h:
        Added myrg_print_wrong_table declaration.
      myisammrg/myrg_open.c:
        If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
        report names of tables that we fail to open.
      mysql-test/r/backup.result:
        Updated test result.
      mysql-test/r/key_cache.result:
        Updated test result - removed duplicate error.
      mysql-test/r/lock.result:
        Updated test result - added summary row.
      mysql-test/r/merge.result:
        A test case for BUG#26976.
      mysql-test/r/preload.result:
        Updated test result - removed duplicate error, added summary row.
      mysql-test/r/ps.result:
        Updated test result - removed duplicate error, added summary row.
      mysql-test/r/repair.result:
        Updated test result - removed duplicate error, added summary row.
      mysql-test/r/rpl_failed_optimize.result:
        Updated test result - removed duplicate error, added summary row.
      mysql-test/r/sp.result:
        Updated test result - removed duplicate error, added summary row.
      mysql-test/r/view.result:
        Updated test result - removed duplicate error, added summary row.
      mysql-test/t/merge.test:
        A test case for BUG#26976.
      sql/ha_myisam.cc:
        Do not report same error twice.
      sql/ha_myisammrg.cc:
        If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
        report names of tables that we fail to open.
        
        Added dummy ha_myisammrg::check to not confuse users with
        "not implemented" error in case all underlying tables are
        fine.
      sql/ha_myisammrg.h:
         Added ha_myisammrg::check declaration.
      sql/share/errmsg.txt:
        Added ER_ADMIN_WRONG_MRG_TABLE errno. It is used instead
        of ER_WRONG_MRG_TABLE in case HA_OPEN_FOR_REPAIR is
        passed to merge engine handler open function.
      sql/sql_error.cc:
        warning_level_* are now public. It is required by mysql_admin_table to
        report message level.
      sql/sql_error.h:
        warning_level_* are now public. It is required by mysql_admin_table to
        report message level.
      sql/sql_table.cc:
        Reorder mysql_admin_table arguments to meet it's definition.
        
        Report errors that are pending in thd->warn_list as results of
        admin function.
      55c76592
  11. 31 May, 2007 2 commits
    • unknown's avatar
      Fixed bug #27827. · e2c7a5b0
      unknown authored
      ON conditions from JOIN expression were ignored at CHECK OPTION
      check when updating a multi-table view with CHECK OPTION.
      
      The st_table_list::prep_check_option function has been
      modified to to take into account ON conditions at CHECK OPTION check
      It was also changed to build the check option condition only once
      for any update used in PS/SP.
      
      
      sql/table.h:
        Fixed bug #27827.
        The st_table_list::check_option_processed variable has been added
        to build the check option condition only once for any update used
        in PS/SP.
      sql/table.cc:
        Fixed bug #27827.
        The st_table_list::prep_check_option function has been
        modified to to take into account ON conditions at CHECK OPTION check
        It was also changed to build the check option condition only once
        for any update used in PS/SP.
      mysql-test/t/view.test:
        Updated test case for bug #27827.
      mysql-test/r/view.result:
        Updated test case for bug #27827.
      e2c7a5b0
    • unknown's avatar
      Post merge fix. · 73f436b5
      unknown authored
      73f436b5
  12. 30 May, 2007 3 commits
    • unknown's avatar
      backport of Bug#11491 Misleading error message if not NULL column set to NULL, SQL mode TRADITIONAL · 11b08410
      unknown authored
      mysql-test/r/auto_increment.result:
        result fix
      mysql-test/r/create.result:
        result fix
      mysql-test/r/insert.result:
        result fix
      mysql-test/r/insert_select.result:
        result fix
      mysql-test/r/insert_update.result:
        result fix
      mysql-test/r/key.result:
        result fix
      mysql-test/r/null.result:
        result fix
      mysql-test/r/null_key.result:
        result fix
      mysql-test/r/ps_2myisam.result:
        result fix
      mysql-test/r/ps_3innodb.result:
        result fix
      mysql-test/r/ps_4heap.result:
        result fix
      mysql-test/r/ps_5merge.result:
        result fix
      mysql-test/r/ps_6bdb.result:
        result fix
      mysql-test/r/ps_7ndb.result:
        result fix
      mysql-test/r/strict.result:
        result fix
      mysql-test/r/view.result:
        result fix
      mysql-test/r/warnings.result:
        result fix
      mysql-test/t/strict.test:
        test fix
      11b08410
    • unknown's avatar
      Fixed bug #28716. · 94507ee7
      unknown authored
      The result of the CHECK OPTION condition evaluation over an
      updated record and records of merged tables was arbitrary and
      dependant on the order of records in the merged tables during
      the execution of SELECT statement.
      
      The CHECK OPTION expression was evaluated over expired record
      buffers (with arbitrary data in the fields).
      
      Rowids of tables used in the CHECK OPTION expression were
      added to temporary table rows. The multi_update::do_updates()
      method was modified to restore necessary record buffers
      before evaluation of the CHECK OPTION condition.
      
      
      sql/sql_class.h:
        Fixed bug #29716.
        The multi_update::unupdatable_check_opt_tables variable
        has been added.
      sql/sql_update.cc:
        Fixed bug #29716.
        Rowids of tables used in the CHECK OPTION expression were
        added to temporary table rows. The multi_update::do_updates()
        method was modified to restore necessary record buffers
        before evaluation of the CHECK OPTION condition.
      mysql-test/t/view.test:
        Updated test case for bug #28716.
      mysql-test/r/view.result:
        Updated test case for bug #28716.
      94507ee7
    • unknown's avatar
      Bug #28492: subselect returns LONG in >5.0.24a and LONGLONG in <=5.0.24a · 4e9cef54
      unknown authored
      Integer values with 10 digits may or may not fit into an int column 
      (e.g. 2147483647 vs 6147483647).
      Thus when creating a temp table column for such an int we must
      use bigint instead.
      Fixed to use bigint.
      Also subsituted a "magic number" with a named constant.
      
      
      mysql-test/r/analyse.result:
        Bug #28492: Adjusted the results after having fixed the bug
      mysql-test/r/metadata.result:
        Bug #28492: test case
      mysql-test/r/olap.result:
        Bug #28492: Adjusted the results after having fixed the bug
      mysql-test/r/sp.result:
        Bug #28492: Adjusted the results after having fixed the bug
      mysql-test/r/view.result:
        Bug #28492: Adjusted the results after having fixed the bug
      mysql-test/t/metadata.test:
        Bug #28492: test case
      sql/field.h:
        Bug #28492: Replaced a magic number with a constant
      sql/sql_select.cc:
        Bug #28492: Treat integers with 10 and more digits as 
        bigint.
      4e9cef54
  13. 29 May, 2007 1 commit
    • unknown's avatar
      Bug #27531: 5.1 part of the fix · aff34a8c
      unknown authored
      - Renamed "Using join cache" to "Using join buffer".
      - "Using join buffer" is now printed on the last
        table that "reads" from the join buffer cache.
      
      
      mysql-test/r/archive_gis.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/compress.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/ctype_utf8.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/derived.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/distinct.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/func_group.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/func_group_innodb.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/gis.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/greedy_optimizer.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/group_by.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/group_min_max.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/index_merge_myisam.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/information_schema.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/innodb_gis.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/innodb_mysql.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/join.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/join_nested.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/key_diff.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/myisam.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/ndb_condition_pushdown.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/ndb_gis.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/range.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/row.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/select.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/ssl.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/ssl_compress.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/subselect.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/subselect3.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/union.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      mysql-test/r/view.result:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      sql/sql_select.cc:
        Bug #27531: renamed "Using join cache" to "Using join buffer"
        and moved to the last table in the batch.
      aff34a8c
  14. 27 May, 2007 1 commit
    • unknown's avatar
      view.result, mysqldump.result: · 1e40d325
      unknown authored
        Merge with 5.0-opt.
      
      
      mysql-test/r/view.result:
        Merge with 5.0-opt.
      mysql-test/r/mysqldump.result:
        Merge with 5.0-opt.
      1e40d325
  15. 24 May, 2007 1 commit
    • unknown's avatar
      Fixed bug #28561: assertion abort for update on multi-table view with · 48af05a8
      unknown authored
      CHECK OPTION and a subquery in WHERE condition.
      The abort was triggered by setting the value of join->tables for
      subqueries in the function JOIN::cleanup. This function was called
      after an invocation of the JOIN::join_free method for subqueries
      used in WHERE condition.
      
      
      mysql-test/r/view.result:
        Added a test case for bug #28561.
      mysql-test/t/view.test:
        Added a test case for bug #28561.
      sql/sql_select.cc:
        Fixed bug #28561: assertion abort for update on multi-table view with
        CHECK OPTION and a subquery in WHERE condition.
        The abort was triggered by setting the value of join->tables for
        subqueries in the function JOIN::cleanup. This function was called
        after an invocation of the JOIN::join_free method for subqueries
        used in WHERE condition.
        Setting the value of join->tables to for a subquery created serious
        problems for checking WHERE condition after update of the multi-table
        view as this check is performed in the do_select function right
        after a call of the JOIN::join_free method.
        In fact setting join->tables to 0 in JOIN::cleanup is not needed 
        anywhere in the current code.
      48af05a8
  16. 09 May, 2007 1 commit
    • unknown's avatar
      Bug #27921 View ignores precision for CAST() · f2a52dd0
      unknown authored
      Item_decimal_typecast::print properly implemented
      
      
      mysql-test/r/view.result:
        Bug #27921 View ignores precision for CAST()
        test result
      mysql-test/t/view.test:
        Bug #27921 View ignores precision for CAST()
        test case
      sql/field.cc:
        zero decimals handling unified
      sql/item_create.cc:
        Bug #27921 View ignores precision for CAST()
        create_func_cast parameters changed, zero precision handling unified
      sql/item_create.h:
        Bug #27921 View ignores precision for CAST()
        create_func_cast parameters changed
      sql/item_func.cc:
        Bug #27921 View ignores precision for CAST() 
        Item_decimal_typecast::print properly implemented
      sql/item_func.h:
        Bug #27921 View ignores precision for CAST()
        max_length counting fixed
      sql/my_decimal.h:
        Bug #27921 View ignores precision for CAST()
        my_decimal_trim() implemented to unify zero precision handling
      sql/sql_yacc.yy:
        Bug #27921 View ignores precision for CAST()
        create_func_cast calls simplified
      f2a52dd0
  17. 04 May, 2007 1 commit
    • unknown's avatar
      bug #27531: 5.1 part of the fix: · 0c835da8
      unknown authored
       - added join cache indication in EXPLAIN (Extra column).
       - prefer filesort over full scan over 
         index for ORDER BY (because it's faster).
       - when switching from REF to RANGE because
         RANGE uses longer key turn off sort on
         the head table only as the resulting 
         RANGE access is a candidate for join cache
         and we don't want to disable it by sorting
         on the first table only. 
      
      
      mysql-test/r/archive_gis.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/compress.result:
        bug #27531:
         - join cache in EXPLAIN. 
         - prefer filesort over full scan over index for ORDER BY.
      mysql-test/r/ctype_utf8.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/derived.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/distinct.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/func_group.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/func_group_innodb.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/gis.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/greedy_optimizer.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/group_by.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/group_min_max.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/index_merge_myisam.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/information_schema.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/innodb_gis.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/innodb_mysql.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/join.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/join_nested.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/key_diff.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/myisam.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/ndb_condition_pushdown.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/ndb_gis.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/range.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/row.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/select.result:
        bug #27531:
         - join cache in EXPLAIN.
         - prefer filesort over full scan over index for ORDER BY.
      mysql-test/r/ssl.result:
        bug #27531:
         - join cache in EXPLAIN.
         - prefer filesort over full scan over index for ORDER BY.
      mysql-test/r/ssl_compress.result:
        bug #27531:
         - join cache in EXPLAIN.
         - prefer filesort over full scan over index for ORDER BY.
      mysql-test/r/subselect.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/subselect3.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/union.result:
        bug #27531: join cache in EXPLAIN
      mysql-test/r/view.result:
        bug #27531: join cache in EXPLAIN
      sql/sql_select.cc:
        bug #27531:
         - join cache in EXPLAIN.
         - prefer filesort over full scan over
           index for ORDER BY.
         - disable sorting on the first table only
           when switching from REF to RANGE.
      0c835da8
  18. 20 Apr, 2007 1 commit
    • unknown's avatar
      Bug #27786: · e0444ba4
      unknown authored
      When merging views into the enclosing statement
      the ORDER BY clause of the view is merged to the
      parent's ORDER BY clause.
      However when the VIEW is merged into an UNION
      branch the ORDER BY should be ignored. 
      Use of ORDER BY for individual SELECT statements
      implies nothing about the order in which the rows
      appear in the final result because UNION by default
      produces unordered set of rows.
      Fixed by ignoring the ORDER BY clause from the merge
      view when expanded in an UNION branch.
      
      
      mysql-test/r/view.result:
        Bug #27786: test case
      mysql-test/t/view.test:
        Bug #27786: test case
      sql/sql_lex.h:
        Bug #27786: add a is_union() inlined function
        Returns true if the unit represents an UNION.
      sql/sql_view.cc:
        Bug #27786: ignore ORDER BY in mergeable views when in UNION context
      e0444ba4
  19. 12 Apr, 2007 1 commit
    • unknown's avatar
      Bug#5507: TRUNCATE does not work with views. · 0b54001b
      unknown authored
      Support of views wasn't implemented for the TRUNCATE statement.
      Now TRUNCATE on views has the same semantics as DELETE FROM view:
      mysql_truncate() checks whether the table is a view and falls back
      to delete if so.
      In order to initialize properly the LEX::updatable for a view
      st_lex::can_use_merged() now allows usage of merged views for the
      TRUNCATE statement.
      
      
      mysql-test/r/truncate.result:
        Added a test case for the Bug#5507: TRUNCATE does not work with views.
      mysql-test/t/truncate.test:
        Added a test case for the Bug#5507: TRUNCATE does not work with views.
      sql/sql_lex.cc:
        Bug#5507: TRUNCATE does not work with views.
        can_use_merged() was denying of usage of merged views for a
        TRUNCATE statement. This results in improper initialization
        of view LEX::updatable. Fixed.
      sql/sql_delete.cc:
        Bug#5507: TRUNCATE does not work with views.
        1.mysql_truncate() was lacking of check whether the table is view. Added.
        2.mysql_truncate() calls mysql_delete(), but mysql_delete() always reports
        errors as "DELETE" errors. Fixed.
      mysql-test/t/view.test:
        Updated test case for Bug#14540: OPTIMIZE, ANALYZE, REPAIR applied 
        to not a view.
      mysql-test/r/view.result:
        Updated test case for Bug#14540: OPTIMIZE, ANALYZE, REPAIR applied 
        to not a view.
      0b54001b
  20. 23 Mar, 2007 1 commit
    • unknown's avatar
      fixes to make embedded-server test working · 49383e87
      unknown authored
      mysql-test/r/view.result:
        result fixed
      mysql-test/r/view_grant.result:
        result fixed
      mysql-test/t/query_cache_sql_prepare.test:
        test fixed
      mysql-test/t/view.test:
        moved to view_grant
      mysql-test/t/view_grant.test:
        moved here from view.test
      49383e87
  21. 22 Mar, 2007 1 commit
  22. 09 Mar, 2007 4 commits
    • unknown's avatar
      Resolve one shift/reduce conflict introduced with the push of the fix · febb6b92
      unknown authored
      for bug#16425: Events: no DEFINER clause.  The problem was that there
      were two rules
      
        ALTER view_algorithm_opt definer ... VIEW ...
        ALTER definer EVENT ...
      
      so when there was 'ALTER definer' in the input it was unclear if empty
      view_algorithm_opt should be executed or not.
      
      We solve this by introducing three distinct rules
      
        ALTER view_algorithm definer ... VIEW ...
        ALTER definer ... VIEW ...
        ALTER definer EVENT ...
      
      that remove the ambiguity.
      
      
      mysql-test/r/view.result:
        Add result for the test of ALTER ALGORITHM= DEFINER= VIEW.
      mysql-test/t/view.test:
        Add test case for ALTER ALGORITHM= DEFINER= VIEW.
      febb6b92
    • unknown's avatar
      BUG#9953: CONVERT_TZ requires mysql.time_zone_name to be locked · 0ea47f3e
      unknown authored
      The problem was that some facilities (like CONVERT_TZ() function or
      server HELP statement) may require implicit access to some tables in
      'mysql' database.  This access was done by ordinary means of adding
      such tables to the list of tables the query is going to open.
      However, if we issued LOCK TABLES before that, we would get "table
      was not locked" error trying to open such implicit tables.
      
      The solution is to treat certain tables as MySQL system tables, like
      we already do for mysql.proc.  Such tables may be opened for reading
      at any moment regardless of any locks in effect.  The cost of this is
      that system table may be locked for writing only together with other
      system tables, it is disallowed to lock system tables for writing and
      have any other lock on any other table.
      
      After this patch the following tables are treated as MySQL system
      tables:
        mysql.help_category
        mysql.help_keyword
        mysql.help_relation
        mysql.help_topic
        mysql.proc (it already was)
        mysql.time_zone
        mysql.time_zone_leap_second
        mysql.time_zone_name
        mysql.time_zone_transition
        mysql.time_zone_transition_type
      
      These tables are now opened with open_system_tables_for_read() and
      closed with close_system_tables(), or one table may be opened with
      open_system_table_for_update() and closed with close_thread_tables()
      (the latter is used for mysql.proc table, which is updated as part of
      normal MySQL server operation).  These functions may be used when
      some tables were opened and locked already.
      
      NOTE: online update of time zone tables is not possible during
      replication, because there's no time zone cache flush neither on LOCK
      TABLES, nor on FLUSH TABLES, so the master may serve stale time zone
      data from cache, while on slave updated data will be loaded from the
      time zone tables.
      
      
      mysql-test/r/help.result:
        Update result.
      mysql-test/r/lock.result:
        Update result.
      mysql-test/r/sp-error.result:
        Update result.
      mysql-test/r/timezone2.result:
        Add result for bug#9953: CONVERT_TZ requires mysql.time_zone_name
        to be locked.
      mysql-test/r/view.result:
        Update result: use table t3 rather than utilize MySQL system table.
      mysql-test/t/help.test:
        Test that we can use HELP even under LOCK TABLES.
      mysql-test/t/lock.test:
        Test LOCK TABLE on system tables.
      mysql-test/t/timezone2.test:
        Add test case for bug#9953: CONVERT_TZ requires mysql.time_zone_name
        to be locked.
      mysql-test/t/view.test:
        Update test: use table t3 rather that utilize MySQL system table.
      sql/handler.h:
        Fix comment for 'count' parameter of check_if_locking_is_allowed().
        Add 'current' and 'system_count' parameters.
      sql/item_create.cc:
        We no longer have LEX::add_time_zone_tables_to_query_tables().
      sql/item_timefunc.cc:
        We no longer have LEX::time_zone_tables_used, so
        Item_func_convert_tz::fix_fields() became the same as base
        Item_date_func::fix_fields().
        
        my_tz_find() no longer takes table list, but takes THD pointer now.
      sql/item_timefunc.h:
        Remove dead field and method.
      sql/lock.cc:
        Pass values for 'current' and 'system_count' to
        check_if_locking_is_allowed().
      sql/log_event.cc:
        We no longer have my_tz_find_with_opening_tz_tables(), its functions is
        performed by my_tz_find().
      sql/mysql_priv.h:
        Add functions to work with MySQL system tables.
      sql/set_var.cc:
        my_tz_find() no longer takes table list, but takes THD pointer now.
      sql/sp.cc:
        Remove close_proc_table().  Use close_system_tables() instead.
        
        Use open_system_tables_for_read() and open_system_table_for_update().
      sql/sp.h:
        Remove close_proc_table() declaration.
      sql/sql_base.cc:
        Add implementation of open_system_tables_for_read(),
        close_system_tables(), open_system_table_for_update().
      sql/sql_help.cc:
        Operate on MySQL system tables mysql.help_* with
        open_system_tables_for_read() and close_system_tables() to allow the
        usage of HELP statement under LOCK TABLES.
      sql/sql_lex.cc:
        Remove LEX::time_zone_tables_used and
        LEX::add_time_zone_tables_to_query_tables() which are no longer used.
      sql/sql_lex.h:
        Remove LEX::time_zone_tables_used and
        LEX::add_time_zone_tables_to_query_tables() which are no longer used.
      sql/sql_parse.cc:
        Remove references to LEX::time_zone_tables_used and
        my_tz_check_n_skip_implicit_tables() which are no longer used.
      sql/sql_show.cc:
        Use close_system_tables() instead of removed close_proc_table().
      sql/sql_view.cc:
        LEX::time_zone_tables_used is no longer there.
      sql/sql_yacc.yy:
        LEX::add_time_zone_tables_to_query_tables() is no longer there.
      sql/table.cc:
        Add more tables that should be treated as MySQL system tables.
      sql/share/errmsg.txt:
        Change the error message, as now we allow write-locking of several
        system tables if not mixed with ordinary tables.
      sql/tztime.cc:
        Do not add time zone tables to the list of query tables in
        tz_init_table_list().
        
        Remove fake_time_zone_tables_list and my_tz_get_tables_list().
        
        In my_tz_init(), open mysql.time_zone_leap_second with
        simple_open_n_lock_tables(), but pass time zone name to my_tz_find(),
        which will open and close time zone tables as necessary.
        
        In tz_load_from_open_tables() do not call table->use_all_columns(), as
        this was already done in open_system_tables_for_read().
        
        my_tz_find() takes THD pointer instead of table list, and calls
        open_system_tables_for_read() and close_system_tables() as necessary.
        
        Remove my_tz_find_with_opening_tz_tables().
      sql/tztime.h:
        Remove declarations of my_tz_get_table_list(),
        my_tz_find_with_opening_tz_tables(), fake_time_zone_tables_list,
        definition of my_tz_check_n_skip_implicit_tables().
        Update prototype for my_tz_find().
      storage/csv/ha_tina.cc:
        Add new parameters to check_if_locking_is_allowed().
      storage/csv/ha_tina.h:
        Add new parameters to check_if_locking_is_allowed().
      storage/myisam/ha_myisam.cc:
        Add new parameters to check_if_locking_is_allowed().  In this
        function we count system tables.  If there are system tables, but
        there are also non-system tables, we report an error.
      storage/myisam/ha_myisam.h:
        Add new parameters to check_if_locking_is_allowed().
      0ea47f3e
    • unknown's avatar
      aftermerge fix · 32ed7ddc
      unknown authored
      mysql-test/r/sp.result:
        merging
      mysql-test/r/view.result:
        merging
      32ed7ddc
    • unknown's avatar
      aftermerge fix · 5c1e48c5
      unknown authored
      mysql-test/r/view.result:
        merging
      5c1e48c5
  23. 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
  24. 05 Mar, 2007 1 commit
    • unknown's avatar
      Fixed bug #26560. · 6da758c2
      unknown authored
      The flag alias_name_used was not set on for the outer references
      in subqueries. It resulted in replacement of any outer reference
      resolved against an alias for a full field name when the frm 
      representation of a view with a subquery was generated. 
      If the subquery and the outer query referenced the same table in
      their from lists this replacement effectively changed the meaning
      of the view and led to wrong results for selects from this view. 
      
      Modified several functions to ensure setting the right value of
      the alias_name_used flag for outer references resolved against
      aliases.
       
      
      
      mysql-test/r/view.result:
        Added a test case for bug #26560.
      mysql-test/t/view.test:
        Added a test case for bug #26560.
      sql/item.cc:
        Fixed bug #26560.
        Made the function resolve_ref_in_select_and_group analyze the return
        value of the last parameter with the type of the name resolution for
        the submitted reference. If the reference has been resolved against 
        an alias name from select list then its flag alias_name_used is set on.
        Now this value is used in Item_field::fix_outer_field to initialize the flag
        when the item_ref object is created for an outer reference.
        Added a parameter for the second Item_ref::Item_ref constructor to initialize
        properly the flag alias_name_used. The default value of the parameter is FALSE.
        If this flag is set on at the creation of an object by this constructor it
        will never be changed. Corrected appropriately the Item_ref::set_properties
        function.
        The function Item_ref::print now prints alias name for an outer reference
        if the flag alias_name_used is set on.
      sql/item.h:
        Fixed bug #26560.
        Added a parameter for the second Item_ref::Item_ref constructor to initialize
        properly the flag alias_name_used. The default value of the parameter is FALSE.
        A similar change has been applied to the first Item_direct_ref::Item_direct_ref
        constructor.
      sql/mysql_priv.h:
        Fixed bug #26560.
        Added an an enumeration type enum_resolution_type to return info on
        how the function find_item_in_list has resolved the submitted item.
        The type is used only for this function.
      sql/sql_base.cc:
        Fixed bug #26560.
        Made the last parameter of the function find_field_in_tables return
        more detailed information on how the submitted item has been resolved.
        Now it says whether the item has been resolved
          against an alias name,
          or as a field name without alias,
          or as a field name hidden by alias, 
          or was resolved ignoring alias.
      sql/sql_select.cc:
        Fixed bug #26560.
        Took into account the new type of the last parameter of the function
        find_item_in_list.
      6da758c2
  25. 23 Feb, 2007 1 commit
    • unknown's avatar
      Fix test for views with national characters, · 49b66418
      unknown authored
      which accidentally got broken during the merge
      on 16-Feb-2007.
      
      
      mysql-test/r/view.result:
        Updated result file.
      mysql-test/t/view.test:
        Fix test for views with national characters,
        which accidentally got broken during the merge
        on 16-Feb-2007.
        
        Now view.test is in UTF8 character set,
        so SET NAMES is required.
      49b66418
  26. 16 Feb, 2007 2 commits
  27. 14 Feb, 2007 1 commit
  28. 13 Feb, 2007 1 commit
  29. 12 Feb, 2007 2 commits
    • unknown's avatar
      Bug#24532 (The return data type of IS TRUE is different from similar · a475ed7c
      unknown authored
        operations)
      
      Before this change, the boolean predicates:
      - X IS TRUE,
      - X IS NOT TRUE,
      - X IS FALSE,
      - X IS NOT FALSE
      were implemented by expanding the Item tree in the parser, by using a
      construct like:
      Item_func_if(Item_func_ifnull(X, <value>), <value>, <value>)
      
      Each <value> was a constant integer, either 0 or 1.
      
      A bug in the implementation of the function IF(a, b, c), in
      Item_func_if::fix_length_and_dec(), would cause the following :
      
      When the arguments b and c are both unsigned, the result type of the
      function was signed, instead of unsigned.
      
      When the result of the if function is signed, space for the sign could be
      counted twice (in the max() expression for a signed argument, and in the
      total), causing the member max_length to be too high.
      
      An effect of this is that the final type of IF(x, int(1), int(1)) would be
      int(2) instead of int(1).
      
      With this fix, the problems found in Item_func_if::fix_length_and_dec()
      have been fixed.
      
      While it's semantically correct to represent 'X IS TRUE' with
      Item_func_if(Item_func_ifnull(X, <value>), <value>, <value>),
      there are however more problems with this construct.
      
      a)
      Building the parse tree involves :
      - creating 5 Item instances (3 ints, 1 ifnull, 1 if),
      - creating each Item calls my_pthread_getspecific_ptr() once in the operator
        new(size), and a second time in the Item::Item() constructor, resulting
        in a total of 10 calls to get the current thread.
      Evaluating the expression involves evaluating up to 4 nodes at runtime.
      This representation could be greatly simplified and improved.
      
      b)
      Transforming the parse tree internally with if(ifnull(...)) is fine as long
      as this transformation is internal to the server implementation.
      With views however, the result of the parse tree is later exposed by the
      ::print() functions, and stored as part of the view definition.
      Doing this has long term consequences:
      
      1)
      The original semantic 'X IS TRUE' is lost, and replaced by the
      if(ifnull(...)) expression. As a result, SHOW CREATE VIEW does not restore
      the original code.
      
      2)
      Should a future version of MySQL implement the SQL BOOLEAN data type for
      example, views created today using 'X IS NULL' can be exported using
      mysqldump, and imported again. Such views would be converted correctly and
      automatically to use a BOOLEAN column in the future version.
      With 'X IS TRUE' and the current implementations, views using these
      "boolean" predicates would not be converted during the export/import, and
      would use integer columns instead.
      The difference traces back to how SHOW CREATE VIEW preserves 'X IS NULL' but
      does not preserve the 'X IS TRUE' semantic.
      
      With this fix, internal representation of 'X IS TRUE' booleans predicates
      has changed, so that:
      - dedicated Item classes are created for each predicate,
      - only 1 Item is created to represent 1 predicate
      - my_pthread_getspecific_ptr() is invoked 1 time instead of 10
      - SHOW CREATE VIEW preserves the original semantic, and prints 'X IS TRUE'.
      
      Note that, because of the fix in Item_func_if, views created before this fix
      will:
      - correctly use a int(1) type instead of int(2) for boolean predicates,
      - incorrectly print the if(ifnull(...), ...) expression in SHOW CREATE VIEW,
      since the original semantic (X IS TRUE) has been lost.
      - except for the syntax used in SHOW CREATE VIEW, these views will operate
      properly, no action is needed.
      
      Views created after this fix will operate correctly, and will preserve the
      original code semantic in SHOW CREATE VIEW.
      
      
      mysql-test/r/func_if.result:
        IF(x, unsigned, unsigned) should be unsigned.
      mysql-test/r/view.result:
        Preserve the semantic of 'X IS [NOT] (TRUE|FALSE)' boolean predicates.
      mysql-test/t/func_if.test:
        IF(x, unsigned, unsigned) should be unsigned.
      mysql-test/t/view.test:
        Preserve the semantic of 'X IS [NOT] (TRUE|FALSE)' boolean predicates.
      sql/item_cmpfunc.cc:
        Preserve the semantic of 'X IS [NOT] (TRUE|FALSE)' boolean predicates.
        IF(x, unsigned, unsigned) should be unsigned.
      sql/item_cmpfunc.h:
        Preserve the semantic of 'X IS [NOT] (TRUE|FALSE)' boolean predicates.
      sql/sql_yacc.yy:
        Preserve the semantic of 'X IS [NOT] (TRUE|FALSE)' boolean predicates.
      a475ed7c
    • unknown's avatar
      Fixed bug #26209. · ac8e0293
      unknown authored
      The function make_unireg_sortorder ignored the fact that any
      view field is represented by a 'ref' object.
      This could lead to wrong results for the queries containing
      both GROUP BY and ORDER BY clauses.
      
      
      mysql-test/r/view.result:
        Added a test case for bug #26209.
      mysql-test/t/view.test:
        Added a test case for bug #26209.
      ac8e0293
  30. 09 Feb, 2007 1 commit
    • unknown's avatar
      Bug#12122: The MERGE algorithm isn't applicable if the ORDER BY clause is · 308da651
      unknown authored
      present.
      
      A view created with CREATE VIEW ... ORDER BY ... cannot be resolved with
      the MERGE algorithm, even when no other part of the CREATE VIEW statement
      would require the view to be resolved using the TEMPTABLE algorithm.
      
      The check for presence of the ORDER BY clause in the underlying select is 
      removed from the st_lex::can_be_merged() function.
      The ORDER BY list of the underlying select is appended to the ORDER BY list 
      
      
      mysql-test/t/view.test:
        Added a test case for bug#12122: Views with ORDER BY can't be resolved using MERGE algorithm.
      mysql-test/r/view.result:
        Added a test case for bug#12122: Views with ORDER BY can't be resolved using MERGE algorithm.
      sql/sql_lex.cc:
        Bug#12122: Views with ORDER BY can't be resolved using MERGE algorithm.
        The st_lex::can_be_merged() function now allows views with the ORDER BY
        clause to be resolved using MERGE algorithm. The ORDER BY list of the view 
        is appended to the ORDER BY list of the embedding select.
      308da651