An error occurred fetching the project authors.
  1. 30 Aug, 2009 1 commit
    • Alexey Kopytov's avatar
      Bug #46607: Assertion failed: (cond_type == Item::FUNC_ITEM) · 6ce48392
      Alexey Kopytov authored
                  results in server crash 
       
      check_group_min_max_predicates() assumed the input condition 
      item to be one of COND_ITEM, SUBSELECT_ITEM, or FUNC_ITEM. 
      Since a condition of the form "field" is also a valid condition 
      equivalent to "field <> 0", using such a condition in a query 
      where the loose index scan was chosen resulted in a debug 
      assertion failure. 
       
      Fixed by handling conditions of the FIELD_ITEM type in 
      check_group_min_max_predicates(). 
      
      mysql-test/r/group_min_max.result:
        Added a test case for bug #46607.
      mysql-test/t/group_min_max.test:
        Added a test case for bug #46607.
      sql/opt_range.cc:
        Handle conditions of the FUNC_ITEM type in 
        check_group_mix_max_predicates().
      6ce48392
  2. 13 Jul, 2009 1 commit
    • Georgi Kodinov's avatar
      Bug #40113: Embedded SELECT inside UPDATE or DELETE can timeout · 410e1a72
      Georgi Kodinov authored
      without error
      
      When using quick access methods for searching rows in UPDATE or 
      DELETE there was no check if a fatal error was not already sent 
      to the client while evaluating the quick condition.
      As a result a false OK (following the error) was sent to the 
      client and the error was thus transformed into a warning.
      
      Fixed by checking for errors sent to the client during 
      SQL_SELECT::check_quick() and treating them as real errors.
      
      Fixed a wrong test case in group_min_max.test
      Fixed a wrong return code in mysql_update() and mysql_delete()
      
      mysql-test/r/bug40113.result:
        Bug #40013: test case
      mysql-test/r/group_min_max.result:
        Bug #40013: fixed a wrong test case
      mysql-test/t/bug40113-master.opt:
        Bug #40013: test case
      mysql-test/t/bug40113.test:
        Bug #40013: test case
      mysql-test/t/group_min_max.test:
        Bug #40013: fixed a wrong test case
      sql/sql_delete.cc:
        Bug #40113: check for errors evaluating the quick select
      sql/sql_update.cc:
        Bug #40113: check for errors evaluating the quick select
      410e1a72
  3. 16 Jun, 2009 1 commit
  4. 12 Jun, 2009 1 commit
    • Georgi Kodinov's avatar
      Bug #45386: Wrong query result with MIN function in field list, · 3e82a86e
      Georgi Kodinov authored
      WHERE and GROUP BY clause
      
      Loose index scan may use range conditions on the argument of 
      the MIN/MAX aggregate functions to find the beginning/end of 
      the interval that satisfies the range conditions in a single go.
      These range conditions may have open or closed minimum/maximum 
      values. When the comparison returns 0 (equal) the code should 
      check the type of the min/max values of the current interval 
      and accept or reject the row based on whether the limit is 
      open or not.
      There was a wrong composite condition on checking this and it was
      not working in all cases.
      Fixed by simplifying the conditions and reversing the logic.
      
      mysql-test/r/group_min_max.result:
        Bug #45386: test case
      mysql-test/t/group_min_max.test:
        Bug #45386: test case
      sql/opt_range.cc:
        Bug #45386: fix the check whether to use the value if on the
        interval boundry
      3e82a86e
  5. 10 Jun, 2009 1 commit
    • Martin Hansson's avatar
      Bug#44821: select distinct on partitioned table returns wrong results · f2448c93
      Martin Hansson authored
      Range analysis did not request sorted output from the storage engine,
      which cause partitioned handlers to process one partition at a time
      while reading key prefixes in ascending order, causing values to be 
      missed. Fixed by always requesting sorted order during range analysis.
      This fix is introduced in 6.0 by the fix for bug no 41136.
      
      mysql-test/r/group_min_max.result:
        Bug#44821: Test result.
      mysql-test/t/group_min_max.test:
        Bug#44821: Test case
      sql/opt_range.cc:
        Bug#44821: Fix.
      f2448c93
  6. 27 Feb, 2009 1 commit
    • Georgi Kodinov's avatar
      Bug #41610: key_infix_len can be overwritten causing some group by queries to · 15760fe9
      Georgi Kodinov authored
      return no rows
      
      The algorithm of determining the best key for loose index scan is doing a loop
      over the available indexes and selects the one that has the best cost.
      It retrieves the parameters of the current index into a set of variables.
      If the cost of using the current index is lower than the best cost so far it 
      copies these variables into another set of variables that contain the 
      information for the best index so far.
      After having checked all the indexes it uses these variables (outside of the 
      index loop) to create the table read plan object instance.
      The was a single omission : the key_infix/key_infix_len variables were used 
      outside of the loop without being preserved in the loop for the best index 
      so far.
      This causes these variables to get overwritten by the next index(es) checked.
      Fixed by adding variables to hold the data for the current index, passing 
      the new variables to the function that assigns values to them and copying 
      the new variables into the existing ones when selecting a new current best 
      index.
      To avoid further such problems moved the declarations of the variables used 
      to keep information about the current index inside the loop's compound 
      statement.
      
      mysql-test/r/group_min_max.result:
        Bug #41610: test case
      mysql-test/t/group_min_max.test:
        Bug #41610: test case
      sql/opt_range.cc:
        Bug #41610: copy the infix data for the current best index
      15760fe9
  7. 27 Aug, 2008 1 commit
    • Evgeny Potemkin's avatar
      Bug#38195: Incorrect handling of aggregate functions when loose index scan is · 06bf25e4
      Evgeny Potemkin authored
      used causes server crash.
            
      When the loose index scan access method is used values of aggregated functions
      are precomputed by it. Aggregation of such functions shouldn't be performed
      in this case and functions should be treated as normal ones.
      The create_tmp_table function wasn't taking this into account and this led to
      a crash if a query has MIN/MAX aggregate functions and employs temporary table
      and loose index scan.
      Now the JOIN::exec and the create_tmp_table functions treat MIN/MAX aggregate
      functions as normal ones when the loose index scan is used.
      
      
      mysql-test/r/group_min_max.result:
        Added a test case for the bug#38195.
      mysql-test/t/group_min_max.test:
        Added a test case for the bug#38195.
      sql/sql_select.cc:
        Bug#38195: Incorrect handling of aggregate functions when loose index scan is
        used causes server crash.
        The JOIN::exec and the create_tmp_table functions treat MIN/MAX aggregate
        functions as normal ones when the loose index scan is used.
      06bf25e4
  8. 19 Aug, 2008 1 commit
  9. 15 Aug, 2008 1 commit
  10. 14 Aug, 2008 1 commit
  11. 13 Aug, 2008 1 commit
    • Evgeny Potemkin's avatar
      Bug#38195: Incorrect handling of aggregate functions when loose index scan is · b789b4f3
      Evgeny Potemkin authored
      used causes server crash.
      
      When the loose index scan access method is used values of aggregated functions
      are precomputed by it. Aggregation of such functions shouldn't be performed
      in this case and functions should be treated as normal ones.
      The create_tmp_table function wasn't taking this into account and this led to
      a crash if a query has MIN/MAX aggregate functions and employs temporary table
      and loose index scan.
      Now the JOIN::exec and the create_tmp_table functions treat MIN/MAX aggregate
      functions as normal ones when the loose index scan is used.
      
      
      mysql-test/r/group_min_max.result:
        Added a test case for the bug#38195.
      mysql-test/t/group_min_max.test:
        Added a test case for the bug#38195.
      sql/sql_select.cc:
        Bug#38195: Incorrect handling of aggregate functions when loose index scan is
        used causes server crash.
        Now the JOIN::exec and the create_tmp_table functions treat MIN/MAX aggregate
        functions as normal ones when the loose index scan is used.
      b789b4f3
  12. 12 Feb, 2008 1 commit
    • unknown's avatar
      Fix for Bug#32538: View definition picks up character set, · c1d0dd94
      unknown authored
      but not collation.
      
      The problem here was that text literals in a view were always
      dumped with character set introducer. That lead to loosing
      collation information.
      
      The fix is to dump character set introducer only if it was
      in the original query. That is now possible because there 
      is no problem any more of loss of character set of string
      literals in views -- after WL#4052 the view is dumped 
      in the original character set.
      
      
      mysql-test/r/case.result:
        Update result file.
      mysql-test/r/compress.result:
        Update result file.
      mysql-test/r/ctype_collate.result:
        Update result file.
      mysql-test/r/date_formats.result:
        Update result file.
      mysql-test/r/ddl_i18n_koi8r.result:
        Update result file.
      mysql-test/r/ddl_i18n_utf8.result:
        Update result file.
      mysql-test/r/fulltext.result:
        Update result file.
      mysql-test/r/func_crypt.result:
        Update result file.
      mysql-test/r/func_encrypt.result:
        Update result file.
      mysql-test/r/func_if.result:
        Update result file.
      mysql-test/r/func_in.result:
        Update result file.
      mysql-test/r/func_like.result:
        Update result file.
      mysql-test/r/func_regexp.result:
        Update result file.
      mysql-test/r/func_set.result:
        Update result file.
      mysql-test/r/func_str.result:
        Update result file.
      mysql-test/r/func_time.result:
        Update result file.
      mysql-test/r/gis.result:
        Update result file.
      mysql-test/r/group_min_max.result:
        Update result file.
      mysql-test/r/mysqldump.result:
        Update result file.
      mysql-test/r/negation_elimination.result:
        Update result file.
      mysql-test/r/null.result:
        Update result file.
      mysql-test/r/select.result:
        Update result file.
      mysql-test/r/show_check.result:
        Update result file.
      mysql-test/r/sp-code.result:
        Update result file.
      mysql-test/r/ssl.result:
        Update result file.
      mysql-test/r/ssl_compress.result:
        Update result file.
      mysql-test/r/subselect.result:
        Update result file.
      mysql-test/r/temp_table.result:
        Update result file.
      mysql-test/r/type_blob.result:
        Update result file.
      mysql-test/r/view.result:
        Update result file.
      mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
        Update result file.
      mysql-test/suite/rpl/r/rpl_get_lock.result:
        Update result file.
      mysql-test/suite/rpl/r/rpl_master_pos_wait.result:
        Update result file.
      mysql-test/t/view.test:
        Add a test case for Bug#32538.
      sql/item.cc:
        Do not dump character set introducer if it was not specified
        explicitly in the original query.
      sql/item.h:
        Add 'cs_specified' property to Item_string.
      sql/sql_yacc.yy:
        Set Item_string::cs_specified property to TRUE
        when character set introducer is explicitly specified.
      c1d0dd94
  13. 20 Nov, 2007 1 commit
    • unknown's avatar
      Bug #32268: Indexed queries give bogus MIN and MAX results · 429abc58
      unknown authored
      Loose index scan does the grouping so the temp table does 
      not need to do it, even when sorting.
      Fixed by checking if the grouping is already done before
      doing sorting and grouping in a temp table and do only 
      sorting.
      
      
      mysql-test/r/group_min_max.result:
        Bug #32268: test case
      mysql-test/t/group_min_max.test:
        Bug #32268: test case
      sql/sql_select.cc:
        Bug #32268: don't group in the temp table if already done
      429abc58
  14. 06 Nov, 2007 1 commit
    • unknown's avatar
      Bug #31974: additional commit (test case updates) · 17698ca0
      unknown authored
       loose index scan enabled for subqueries
      
      
      mysql-test/r/group_min_max.result:
        Bug #31974: test case updates
         loose index scan enabled for subqueries
      mysql-test/r/index_merge_myisam.result:
        Bug #31974: test case updates
         loose index scan enabled for subqueries
      17698ca0
  15. 01 Nov, 2007 1 commit
    • unknown's avatar
      A fix for Bug#32030 "DELETE does not return an error and deletes rows if · 0c1bdcbd
      unknown authored
      error evaluating WHERE"
      
      DELETE with a subquery in WHERE clause would sometimes ignore subquery
      evaluation error and proceed with deletion.
      
      The fix is to check for an error after evaluation of the WHERE clause
      in DELETE.
      
      Addressed review comments.
      
      
      mysql-test/r/group_min_max.result:
        Update the test results to reflect the fix for Bug#32030.
      mysql-test/r/ps.result:
        Update test results (Bug#32030)
      mysql-test/t/group_min_max.test:
        Update the test case to reflect the fix for Bug#32030
      mysql-test/t/ps.test:
        Add a test case for Bug#32030
      sql/sql_delete.cc:
        Check for an error before calling send_ok(). Two different places are
        covered because the subquery code has slightly different execution
        paths depending on ps-protocol/old-protocol
      0c1bdcbd
  16. 31 Oct, 2007 1 commit
  17. 02 Aug, 2007 1 commit
    • unknown's avatar
      Fixed bug#28404. · c9049374
      unknown authored
      This patch adds cost estimation for the queries with ORDER BY / GROUP BY
      and LIMIT. 
      If there was a ref/range access to the table whose rows were required
      to be ordered in the result set the optimizer always employed this access
      though a scan by a different index that was compatible with the required 
      order could be cheaper to produce the first L rows of the result set.
      Now for such queries the optimizer makes a choice between the cheapest
      ref/range accesses not compatible with the given order and index scans
      compatible with it.
      
      
      mysql-test/r/distinct.result:
        Adjusted results for test cases affected fy the fix for bug #28404.
      mysql-test/r/endspace.result:
        Adjusted results for test cases affected fy the fix for bug #28404.
      mysql-test/r/group_by.result:
        Adjusted results for test cases affected fy the fix for bug #28404.
      mysql-test/r/group_min_max.result:
        Adjusted results for test cases affected fy the fix for bug #28404.
      mysql-test/r/innodb.result:
        Adjusted results for test cases affected fy the fix for bug #28404.
      mysql-test/r/innodb_mysql.result:
        Adjusted results for test cases affected fy the fix for bug #28404.
      mysql-test/r/merge.result:
        Adjusted results for test cases affected fy the fix for bug #28404.
      mysql-test/r/order_by.result:
        Added a test case for bug #28404.
      mysql-test/r/select_found.result:
        Adjusted results for test cases affected fy the fix for bug #28404.
      mysql-test/r/subselect.result:
        Adjusted results for test cases affected fy the fix for bug #28404.
      mysql-test/t/distinct.test:
        Changed a test case after adding the fix for bug #28404.
      mysql-test/t/order_by.test:
        Added a test case for bug #28404.
      sql/sql_select.cc:
        Fixed bug#28404.
        This patch adds cost estimation for the queries with ORDER BY / GROUP BY
        and LIMIT. 
        Now for such queries the optimizer makes a choice between the cheapest
        ref/range accesses not compatible with the given order and index scans
        compatible with it.
        
        Modified the function test_if_skip_sort_order to make the above mentioned
        choice cost based.
      sql/sql_select.h:
        Fixed bug#28404.
        This patch adds cost estimation for the queries with ORDER BY / GROUP BY
        and LIMIT. 
        Added a new field fot the JOIN_TAB structure.
      c9049374
  18. 24 Jun, 2007 1 commit
    • unknown's avatar
      Fixed bug #25602. A query with DISTINCT in the select list to which · e009b764
      unknown authored
      the loose scan optimization for grouping queries was applied returned 
      a wrong result set when the query was used with the SQL_BIG_RESULT
      option.
      
      The SQL_BIG_RESULT option forces to use sorting algorithm for grouping
      queries instead of employing a suitable index. The current loose scan
      optimization is applied only for one table queries when the suitable
      index is covering. It does not make sense to use sort algorithm in this
      case. However the create_sort_index function does not take into account
      the possible choice of the loose scan to implement the DISTINCT operator
      which makes sorting unnecessary. Moreover the current implementation of
      the loose scan for queries with distinct assumes that sorting will
      never happen. Thus in this case create_sort_index should not call
      the function filesort.
      
      
      mysql-test/r/group_min_max.result:
        Added a test case for bug #25602.
      mysql-test/t/group_min_max.test:
        Added a test case for bug #25602.
      e009b764
  19. 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
  20. 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
  21. 29 Nov, 2006 1 commit
  22. 28 Nov, 2006 1 commit
    • unknown's avatar
      Bug#24156: Loose index scan not used with CREATE TABLE ...SELECT and similar · 762f4ac1
      unknown authored
                 statements
      Currently the optimizer evaluates loose index scan only for top-level SELECT
      statements
      Extend loose index scan applicability by :
       - Test the applicability of loose scan for each sub-select, instead of the
         whole query. This change enables loose index scan for sub-queries.
       - allow non-select statements with SELECT parts (like, e.g. 
         CREATE TABLE .. SELECT ...) to use loose index scan.
      
      
      mysql-test/r/group_min_max.result:
        Bug#24156: Loose index scan not used with CREATE TABLE ...SELECT and similar
                   statements
         - test case
      mysql-test/t/group_min_max.test:
        Bug#24156: Loose index scan not used with CREATE TABLE ...SELECT and similar
                   statements
         - test case
      sql/opt_range.cc:
        Bug#24156: Loose index scan not used with CREATE TABLE ...SELECT and similar
                   statements
         - loose index scan will be tried over the current subselect 
           (lex->current_select) instead of the whole query (lex->select_lex).
         - allow non-select statements with SELECT parts (like, e.g. 
           CREATE TABLE .. SELECT ...) to use loose index scan.
      762f4ac1
  23. 19 Oct, 2006 1 commit
  24. 16 Oct, 2006 1 commit
    • unknown's avatar
      Bug #22342: No results returned for query using max and group by · decf9082
      unknown authored
       When using index for group by and range access the server isolates    
       a set of ranges based on the conditions over the key parts of the
       index used. Then it uses only the ranges over the GROUP BY fields to
       jump from one group to another. Since the GROUP BY fields may form a
       prefix over the index, we may use only a prefix of the ranges produced
       by the range optimizer.
       Each range contains a notion on whether it includes its border values.
       The problem is that when using a range prefix, the last range is open
       because it assumes that there is a range on the next keypart. Thus when
       we use a prefix range as it is, it excludes all border values.
       The solution is when ignoring the suffix of the range conditions 
       (to jump over the GROUP BY prefix only) the server must change the 
       remaining intervals so they always contain their borders, e.g. 
       if the whole range was :
       (1,-inf) <= (<group_by_col>,<min_max_arg_col>) < (1, 3) we must make
       (1) <= (<group_by_col>) <= (1) because (a,b) < (c1,c2) means :
       a < c1 OR (a = c1 AND b < c2).
      
      
      mysql-test/r/group_min_max.result:
        Bug #22342: No results returned for query using max and group by
         - test case
      mysql-test/t/group_min_max.test:
        Bug #22342: No results returned for query using max and group by
         - test case
      sql/opt_range.cc:
        Bug #22342: No results returned for query using max and group by
         - open the intervals for prefix select when there are more conditions
           than used for the prefix search.
      sql/opt_range.h:
        Bug #22342: No results returned for query using max and group by
         - open the intervals for prefix select when there are more conditions
           than used for the prefix search.
      decf9082
  25. 28 Jul, 2006 1 commit
    • unknown's avatar
      BUG#14940 "MySQL choose wrong index", v.2 · ef452e19
      unknown authored
      - Make the range-et-al optimizer produce E(#table records after table 
                                                 condition is applied),
      - Make the join optimizer use this value,
      - Add "filtered" column to EXPLAIN EXTENDED to show 
        fraction of records left after table condition is applied
      - Adjust test results, add comments
      
      
      mysql-test/r/archive_gis.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/auto_increment.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/bdb_gis.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/bench_count_distinct.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/binlog_stm_blackhole.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/case.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/cast.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/compress.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/ctype_collate.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/ctype_cp1250_ch.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/date_formats.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/distinct.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/fulltext.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_compress.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_crypt.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_default.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_encrypt.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_gconcat.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_group.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_if.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_in.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_like.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_math.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_op.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_regexp.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_set.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_str.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_system.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_test.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/func_time.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/gis.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/group_by.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/group_min_max.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/having.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/heap.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/heap_hash.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/index_merge.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/index_merge_innodb.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/index_merge_ror.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/innodb_gis.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/insert_update.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/join.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/join_nested.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/key_diff.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/myisam.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/ndb_gis.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/negation_elimination.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/null.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/olap.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/partition_pruning.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/query_cache.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/row.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/rpl_get_lock.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/rpl_master_pos_wait.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/select.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/ssl.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/ssl_compress.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/subselect.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/type_blob.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/union.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/varbinary.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/variables.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/r/view.result:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/t/ctype_cp1250_ch.test:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/t/func_like.test:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/t/group_min_max.test:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/t/index_merge_ror.test:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/t/index_merge_ror_cpk.test:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/t/join.test:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      mysql-test/t/partition_pruning.test:
        BUG#14940: Adjust the test results: EXPLAIN EXTENDED now has extra "filtered" column
      sql/opt_range.cc:
        BUG#14940: Make range/index_merge/group-min-max optimizer produce TABLE::quick_condition_rows -
          estimate of #records that will match the table condition.
      sql/sql_class.cc:
        BUG#14940: Add "filtered" column to output of EXPLAIN EXTENDED
      sql/sql_select.cc:
        BUG#14940: 
        - Make the join optimizer to use TABLE::quick_condition_rows=
          = E(#table records after filtering with table condition) 
        - Add "filtered" column to output of EXPLAIN EXTENDED
      sql/sql_select.h:
        BUG#14940: Added comments
      sql/table.h:
        BUG#14940: Added comments
      ef452e19
  26. 21 Jul, 2006 1 commit
    • unknown's avatar
      Fix for BUG#21007. · 4e59d30d
      unknown authored
      The problem was that store_top_level_join_columns() incorrectly assumed
      that the left/right neighbor of a nested join table reference can be only
      at the same level in the join tree.
      
      The fix checks if the current nested join table reference has no immediate
      left/right neighbor, and if so chooses the left/right neighbors of the
      nearest upper level, where these references are != NULL.
      
      
      mysql-test/r/group_min_max.result:
        Test for BUG#21007.
      mysql-test/t/group_min_max.test:
        Test for BUG#21007.
      sql/sql_base.cc:
        After computing and materializing the columns of all NATURAL joins in a FROM clause,
        the procedure store_top_level_join_columns() has to change the current natural join
        into a leaf table reference for name resolution. For this it needs to make the left
        neighbor point to the natural join table reference, and the natural join itself point
        to its left neighbor.
        
        This fix correctly determines the left/right neighbors of a table reference, even if
        the neghbors are at higher levels in the nested join tree. The rule is that if a table
        reference has no immediate left/right neighbors, we recursively pick the left/right
        neighbor of the level(s) above.
      4e59d30d
  27. 23 May, 2006 1 commit
    • unknown's avatar
      Bug #18742: Test 'group_min_max' fails if "classic" configuration in 5.0 · f112e407
      unknown authored
      Moved the InnoDB related tests to innodb_mysql
      
      
      mysql-test/r/group_min_max.result:
        Moved innodb related tests out of group_min_max
      mysql-test/r/innodb_mysql.result:
        Moved innodb related tests out of group_min_max
      mysql-test/t/group_min_max.test:
        Moved innodb related tests out of group_min_max
      mysql-test/t/innodb_mysql.test:
        Moved innodb related tests out of group_min_max
      f112e407
  28. 22 May, 2006 1 commit
  29. 09 May, 2006 1 commit
    • unknown's avatar
      BUG#18068: SELECT DISTINCT (with duplicates and covering index) · baae7a97
      unknown authored
      When converting DISTINCT to GROUP BY where the columns are from the covering
      index and they are quoted twice in the SELECT list the optimizer is creating
      improper processing sequence. This is because of the fact that the columns
      of the covering index are not recognized as such and treated as non-index
      columns.
      
      Generally speaking duplicate columns can safely be removed from the GROUP
      BY/DISTINCT list because this will not add or remove new rows in the
      resulting set. Duplicates can be removed even if they are not consecutive
      (as is the case for ORDER BY, where the duplicate columns can be removed
      only if they are consecutive).
      
      So we can safely transform "SELECT DISTINCT a,a FROM ... ORDER BY a" to
      "SELECT a,a FROM ... GROUP BY a ORDER BY a" instead of 
      "SELECT a,a FROM .. GROUP BY a,a ORDER BY a". We can even transform 
      "SELECT DISTINCT a,b,a FROM ... ORDER BY a,b" to
      "SELECT a,b,a FROM ... GROUP BY a,b ORDER BY a,b".
      
      The fix to this bug consists of checking for duplicate columns in the SELECT
      list when constructing the GROUP BY list in transforming DISTINCT to GROUP
      BY and skipping the ones that are already in.
      
      
      mysql-test/r/distinct.result:
        test case for the bug without loose index scan
      mysql-test/r/group_min_max.result:
        test case for the bug
      mysql-test/t/distinct.test:
        test case for the bug without loose index scan
      mysql-test/t/group_min_max.test:
        test case for the bug
      sql/sql_select.cc:
        duplicates check and removal
      baae7a97
  30. 31 Mar, 2006 1 commit
    • unknown's avatar
      Fix for BUG#16710. · a01d48f9
      unknown authored
      The bug was due to a missed case in the detection of whether an index
      can be used for loose scan. More precisely, the range optimizer chose
      to use loose index scan for queries for which the condition(s) over
      an index key part could not be pushed to the index together with the
      loose scan.
      
      As a result, loose index scan was selecting the first row in the
      index with a given GROUP BY prefix, and was applying the WHERE
      clause after that, while it should have inspected all rows with
      the given prefix, and apply the WHERE clause to all of them.
      
      The fix detects and skips such cases.
      
      
      mysql-test/r/group_min_max.result:
        Added test for BUG#16710.
      mysql-test/t/group_min_max.test:
        Added test for BUG#16710.
      sql/item.cc:
        Added new method [Item | Item_field]::find_item_in_field_list_processor.
      sql/item.h:
        Added new method [Item | Item_field]::find_item_in_field_list_processor.
      sql/opt_range.cc:
        Handle the case when there is no MIN/MAX aggregate function, and a
        keypart of the index being considered, that is after the GROUP BY
        prefix, is used in the WHERE clause and the condition where it is
        used cannot be pushed to the index.
        If this is the case, we rule out this index.
      a01d48f9
  31. 27 Mar, 2006 1 commit
    • unknown's avatar
      Test case for BUG#15102 : select distinct returns empty result, select count distinct > 0 (correct) · b3230cc2
      unknown authored
        Reproduced in 5.0.16-nt. Tested to work in 5.0.20
        
      
      
      mysql-test/r/group_min_max.result:
        Test case for BUG#15102 : select distinct returns empty result, select count distinct > 0 (correct)
          Reproduced in 5.0.16-nt. Tested to be fixed in 5.0.20
      mysql-test/t/group_min_max.test:
        Test case for BUG#15102 : select distinct returns empty result, select count distinct > 0 (correct)
          Reproduced in 5.0.16-nt. Tested to be fixed in 5.0.20
      b3230cc2
  32. 06 Feb, 2006 1 commit
    • unknown's avatar
      Fixed bug #16203. · d8c96f28
      unknown authored
      If check_quick_select returns non-empty range then the function cost_group_min_max
      cannot return 0 as an estimate of the number of retrieved records.
      Yet the function erroneously returned 0 as the estimate in some situations.
      
      
      mysql-test/r/group_min_max.result:
        Added a test case for bug #16203.
      mysql-test/t/group_min_max.test:
        Added a test case for bug #16203.
      d8c96f28
  33. 30 Nov, 2005 1 commit
    • unknown's avatar
      Fix for BUG#14920 Ordering aggregated result sets corrupts resultset. · e3f57552
      unknown authored
      The cause of the bug was the use of end_write_group instead of end_write
      in the case when ORDER BY required a temporary table, which didn't take
      into account the fact that loose index scan already computes the result
      of MIN/MAX aggregate functions (and performs grouping).
      
      The solution is to call end_write instead of end_write_group and to add
      the MIN/MAX functions to the list of regular functions so that their
      values are inserted into the temporary table.
      
      
      mysql-test/r/group_min_max.result:
        Test for BUG#14920
      mysql-test/t/group_min_max.test:
        Test for BUG#14920
      sql/sql_class.cc:
        Added new member to TMP_TABLE_PARAM.
      sql/sql_class.h:
        Added new member to TMP_TABLE_PARAM.
      sql/sql_select.cc:
        Enable result rows generated by loose index scan being written into
        a temporary table. The change is necessary because loose index
        scan already computes the result of GROUP BY and the MIN/MAX aggregate
        functions. This is realized by three changes:
        - create_tmp_table allocates space for aggregate functions in the
          list of regular functions,
        - use end_write instead of end_write group,
        - copy the pointers to the MIN/MAX aggregate functions to the list
          of regular functions TMP_TABLE_PARAM::items_to_copy.
      sql/sql_select.h:
        New parameter to create_tmp_table.
      e3f57552
  34. 24 Nov, 2005 1 commit
    • unknown's avatar
      Fix bug#13293 Wrongly used index results in endless loop. · 591fabb3
      unknown authored
      Loose index scan using only second part of multipart index was choosen, which
      results in creating wrong keys and endless loop.
      
      get_best_group_min_max() now allows loose index scan for distinct only if used
      keyparts forms a prefix of the index.
      
      
      mysql-test/t/group_min_max.test:
        Test case for bug #13293 Wrongly used index results in endless loop.
      mysql-test/r/group_min_max.result:
        Test case for bug #13293 Wrongly used index results in endless loop.
      sql/opt_range.cc:
        Fix bug #13293 Wrongly used index results in endless loop.
        get_best_group_min_max() now allows loose index scan for distinct only if used keyparts forms a prefix of the index.
      591fabb3
  35. 25 Sep, 2005 1 commit
  36. 31 Aug, 2005 1 commit
  37. 29 Aug, 2005 1 commit
    • unknown's avatar
      Fix for BUG#12672. · 64e6d7b1
      unknown authored
      mysql-test/r/group_min_max.result:
        Test for BUG#12672.
      mysql-test/t/group_min_max.test:
        Test for BUG#12672.
      sql/opt_range.cc:
        Some storage managers like InnoDB always retrieve the value of
        the primary key (if any) with any other key. For such storage
        managers the optimizer marks an index as covering if that index
        and the primary key contain all query fields. This is good for
        reading data from an index, but not for lookup. The patch detects
        such cases and tests whether an index is really a covering index
        by itself, without the primary key. If yes, then that index can
        be used for the index skip algorithm of the GROUP_MIN_MAX
        access method.
      64e6d7b1
  38. 14 Jun, 2005 1 commit
    • unknown's avatar
      Fix for BUG#11044 - "SELECT DISTINCT on indexed column returns inconsistent results" · d87c2dd6
      unknown authored
      The problem was that when there was no MIN or MAX function, after finding the
      group prefix based on the DISTINCT or GROUP BY attributes we did not search further
      for a key in the group that satisfies the equi-join conditions on attributes that
      follow the group attributes. Thus we ended up with the wrong rows, and subsequent
      calls to select_cond->val_int() in evaluate_join_record() were filtering those
      rows. Hence - the query result set was empty.
      
      The problem occured both for GROUP BY queries without MIN/MAX and for queries
      with DISTINCT (which were internally executed as GROUP BY queries).
      
      
      mysql-test/r/group_min_max.result:
        Added test result for BUG#11044. Notice that the group by query is
        equivalent to the distinct query and both are executed via the same
        algorithm.
      mysql-test/t/group_min_max.test:
        Added test for BUG#11044. Notice that the group by query is
        equivalent to the distinct query and both are executed via the
        same algorithm.
      sql/opt_range.cc:
        * Use the extended prefix in QUICK_GROUP_MIN_MAX_SELECT::get_next()
          to find keys that satisfy equality conditions in the case when there is
          no MIN or MAX function.
        * Corrected some method comments.
        * Corrected debug printout of cost information.
      d87c2dd6
  39. 30 May, 2005 1 commit
    • unknown's avatar
      Preparatory (and the most problematic) patch for Bug#7306 · 78422442
      unknown authored
      "the server side preparedStatement error for LIMIT placeholder",
      which moves all uses of LIMIT clause from PREPARE to OPTIMIZE
      and later steps.
      After-review fixes.
      
      
      mysql-test/r/group_min_max.result:
        Test results fixed for EXPLAINs when using GROUP_MIN_MAX access plan.
      sql/item_subselect.cc:
        Move setting of the internal LIMIT used for IN/ALL/ANY/EXISTS 
        subqueries to one place: Item_exists_subselect::fix_length_and_dec().
        This implies that unit->select_limit_cnt is not set until the item is 
        fixed. This is OK, as now LIMIT values are not used until JOIN::optimize.
      sql/mysql_priv.h:
        setup_tables no longer needs a special flag for the case when
        it's called from JOIN::reinit() (we don't need to call setup_tables
        between two executions of a correlated subquery).
      sql/opt_range.cc:
        Fix a glitch in GROUP_MIN_MAX access plan: we should use table metadata,
        not field data, to evaluate max_used_key_length, which is then
        used for explain.
      sql/sp.cc:
        - setup_tables signature changed.
      sql/sql_base.cc:
        - setup_tables no longer needs a special mode for subqueries.
          Unused checks were removed.
      sql/sql_delete.cc:
        - setup_tables signature changed
      sql/sql_help.cc:
        - setup_tables signature changed
      sql/sql_insert.cc:
        - setup_tables signature changed
      sql/sql_lex.cc:
        Consolidate setting of internal LIMIT for IN/ALL/ANY/EXISTS subqeries
        in one place, and hence remove it from st_select_lex::test_limit().
      sql/sql_lex.h:
        Cleanup signature of st_select_lex_unit::init_prepare_fake_select_lex().
      sql/sql_load.cc:
        - setup_tables signature changed
      sql/sql_olap.cc:
        - setup_tables signature changed
      sql/sql_parse.cc:
        - st_select_lex_unit::set_limit() signature changed
      sql/sql_select.cc:
        Move setting of JOIN::select_limit from JOIN::prepare
        to JOIN::optimize. At prepare, limit is unknown yet.
        Remove excessive cleanups from JOIN::reinit which were overwriting
        join->join_tab[i]->table->used_keys. This fixes the bug which was triggered
        by the change in item_subselect.cc.
      sql/sql_union.cc:
        Class st_select_lex_unit was changed to avoid calls to 
         st_select_lex_unit::set_limit from places where it may be unknown.
        Now unit->select_limit_cnt is set at ::exec(). 
        st_select_lex_unit::init_prepare_fake_select_lex(): 
         - move out set_limit functionality
         - remove a few lines of dead code.
        st_select_lex_unit::prepare():
          - now we don't call set_limit at the time of prepare, so the value  
            of unit->select_limit_cnt may be unknown here. Use sl->select_limit
            instead.
        st_select_lex_unit::exec():
          - cleanup
          - call set_limit explicitly as it has been moved out of 
           init_prepare_fake_select_lex.
      sql/sql_update.cc:
        - setup_tables signature changed
      78422442
  40. 19 May, 2005 1 commit