1. 25 Aug, 2006 3 commits
    • unknown's avatar
      Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 7e9ed378
      unknown authored
      into  mysql.com:/home/psergey/mysql-5.0-bug16255-merge
      
      
      7e9ed378
    • unknown's avatar
      Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 75865af6
      unknown authored
      into  rurik.mysql.com:/home/igor/mysql-5.0-opt
      
      
      75865af6
    • unknown's avatar
      Fixed bug #21390: wrong estimate of rows after elimination of · f121994d
      unknown authored
      const tables. This resulted in choosing extremely inefficient
      execution plans in same cases when distribution of data in
      joined were skewed (see the customer test case for the bug).
      
      
      
      mysql-test/r/select.result:
        Added a test case for bug #21390: wrong estimate of rows
        after elimination of const tables.
        Includded a test case that checks the code added by the patch
        that handles outer joins with no matches after substitution of
        a const table in an efficient way.
      mysql-test/t/select.test:
        Added a test case for bug #21390: wrong estimate of rows
        after elimination of const tables.
        Included a test case that checks the code added by the patch
        that handles outer joins with no matches after substitution of
        a const table in an efficient way.
      sql/sql_select.cc:
        Fixed bug #21390: wrong estimate of rows after elimination of
        const tables. This resulted in choosing extremely inefficient
        execution plans in same cases when distribution of data in
        joined were skewed (see the customer test case for the bug).
        Also added the code to handle outer joins with no matches after
        substitution of a const table in an efficient way. 
        Corrected calculation of the null rejecting key conditions.
      f121994d
  2. 24 Aug, 2006 5 commits
    • unknown's avatar
      opt_range.cc: · da2e23f1
      unknown authored
        Corrected fix for bug#18165
      
      
      sql/opt_range.cc:
        Corrected fix for bug#18165
      da2e23f1
    • unknown's avatar
      opt_range.cc: · 84a65393
      unknown authored
        Corrected fix for bug#18165
      
      
      sql/opt_range.cc:
        Corrected fix for bug#18165
      84a65393
    • unknown's avatar
      BUG#16255: Merge to 5.0 · 251409bb
      unknown authored
      251409bb
    • unknown's avatar
      BUG#16255: Post-review fixes: adjust the testcase. · f895a16c
      unknown authored
      
      mysql-test/r/subselect.result:
        BUG#16255: A proper testcase
      mysql-test/t/subselect.test:
        BUG#16255: A proper testcase
      f895a16c
    • unknown's avatar
      Bug #16255: Subquery in WHERE (the cset by Georgi Kodinov) · c74c8195
      unknown authored
       Must not use Item_direct_ref in HAVING because it points to
       the new value (witch is not yet calculated for the first row).
      
      
      mysql-test/r/subselect.result:
        Bug #16255: Subquery in where
         - test case
      mysql-test/t/subselect.test:
        Bug #16255: Subquery in where
         - test case
      sql/item_subselect.cc:
        Bug #16255: Subquery in where
         Must not use Item_direct_ref in HAVING because it points to
         the new value (witch is not yet calculated for the first row).
      c74c8195
  3. 23 Aug, 2006 1 commit
    • unknown's avatar
      view.result, view.test: · d0394c70
      unknown authored
        Corrected test case for the bug#21261
      sql_parse.cc:
        Corrected fix for bug#21261
      
      
      mysql-test/t/view.test:
        Corrected test case for the bug#21261
      mysql-test/r/view.result:
        Corrected test case for the bug#21261
      sql/sql_parse.cc:
        Corrected fix for bug#21261
      d0394c70
  4. 22 Aug, 2006 8 commits
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · e8bb0c92
      unknown authored
      into  moonbone.local:/work/21475-fix-5.0-opt-mysql
      
      
      e8bb0c92
    • unknown's avatar
      item_cmpfunc.cc, item.cc: · d8c9de79
      unknown authored
        Additional fix for bug #21475
      item_func.h, item_func.cc:
        Additional fix for bug#16861
      
      
      sql/item_func.h:
        Additional fix for bug#16861
      sql/item_func.cc:
        Additional fix for bug#16861
      sql/item_cmpfunc.cc:
        Additional fix for bug #21475
      sql/item.cc:
        Additional fix for bug #21475
      d8c9de79
    • unknown's avatar
      Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · bbda4dd3
      unknown authored
      into  rurik.mysql.com:/home/igor/mysql-5.0-opt
      
      
      bbda4dd3
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 3a23139a
      unknown authored
      into  sunlight.local:/local_work/16861-bug-5.0-mysql
      
      
      sql/sql_select.cc:
        Auto merged
      3a23139a
    • unknown's avatar
      Fixed bug#16861: User defined variable can have a wrong value if a tmp table was · c623e54f
      unknown authored
      used.
      
      Sorting by RAND() uses a temporary table in order to get a correct results.
      User defined variable was set during filling the temporary table and later
      on it is substituted for its value from the temporary table. Due to this
      it contains the last value stored in the temporary table.
      
      Now if the result_field is set for the Item_func_set_user_var object it 
      updates variable from the result_field value when being sent to a client.
      
      The Item_func_set_user_var::check() now accepts a use_result_field
      parameter. Depending on its value the result_field or the args[0] is used
      to get current value.
      
      
      mysql-test/r/user_var.result:
        Added a test case for bug#16861: User defined variable can have a wrong value if a tmp table was used.
      mysql-test/t/user_var.test:
        Added a test case for bug#16861: User defined variable can have a wrong value if a tmp table was used.
      sql/item_func.cc:
        Fixed bug#16861: User defined variable can have a wrong value if a tmp table was used.
        Now if the result_field is set for the Item_func_set_user_var object it 
        updates variable from the result_field value when being sent to a client.
        
        The Item_func_set_user_var::check() now accepts a use_result_field
        parameter. Depending on its value the result_field or the args[0] is used
        to get current value.
      sql/item_func.h:
        Fixed bug#16861: User defined variable can have a wrong value if a tmp table was used.
        Added a new SUSERVAR_FUNC function type.
        Updated the Item_func_set_user_var::check() function declaration.
        Added the Item_func_set_user_var::send() member function.
      sql/set_var.cc:
        Fixed bug#16861: User defined variable can have a wrong value if a tmp table was used.
        Modified to use updated Item_func_set_user_var::check() function.
      sql/sql_class.cc:
        Fixed bug#16861: User defined variable can have a wrong value if a tmp table was used.
        Modified to use updated Item_func_set_user_var::check() function.
      sql/sql_select.cc:
        Fixed bug#16861: User defined variable can have a wrong value if a tmp table was used.
        Now an Item_func_set_user_var object isn't substituted for an Item_field object after filling a temporary table.
      c623e54f
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 8776a1e1
      unknown authored
      into  moonbone.local:/work/21475-bug-5.0-opt-mysql
      
      
      8776a1e1
    • unknown's avatar
      Fixed bug 16201: a memory corruption causing crashes due to a too small · 38558705
      unknown authored
      buffer for a MY_BITMAP temporary buffer allocated on stack in the
      function get_best_covering_ror_intersect().
      Now the buffer of a proper size is allocated by a request from this
      function in mem_root.
      
      We succeeded to demonstrate the bug only on Windows with a very large
      database. That's why no test case is provided for in the patch.
      
      
      sql/opt_range.cc:
        Fixed bug 16201: a memory corruption causing crashes due to a too small 
        buffer for a MY_BITMAP temporary buffer allocated on stack in the
        function get_best_covering_ror_intersect().
        Now the buffer of a proper size is allocated by a request from this
        function in mem_root.
      38558705
    • unknown's avatar
      adb31669
  5. 21 Aug, 2006 2 commits
    • unknown's avatar
      Fix compile errors in VC++ 7.0 · 686ca813
      unknown authored
      686ca813
    • unknown's avatar
      Fix by Georgi Kodinov: · d2fa8e3a
      unknown authored
      Bug #18744 Test 'join_outer' fails if "classic" configuration in 5.0
       - moved an InnoDB dependent test to the appropriate file
      
      
      mysql-test/r/innodb_mysql.result:
        Bug #18744 Test 'join_outer' fails if "classic" configuration in 5.0
         - moved an InnoDB dependent test to the appropriate file
      mysql-test/r/join_outer.result:
        Bug #18744 Test 'join_outer' fails if "classic" configuration in 5.0
         - moved an InnoDB dependent test to the appropriate file
      mysql-test/t/innodb_mysql.test:
        Bug #18744 Test 'join_outer' fails if "classic" configuration in 5.0
         - moved an InnoDB dependent test to the appropriate file
      mysql-test/t/join_outer.test:
        Bug #18744 Test 'join_outer' fails if "classic" configuration in 5.0
         - moved an InnoDB dependent test to the appropriate file
      d2fa8e3a
  6. 20 Aug, 2006 1 commit
    • unknown's avatar
      Fixed bug#21475: Wrongly applied constant propagation leads to a false comparison. · 7a11df8c
      unknown authored
      A date can be represented as an int (like 20060101) and as a string (like
      "2006.01.01"). When a DATE/TIME field is compared in one SELECT against both
      representations the constant propagation mechanism leads to comparison
      of DATE as a string and DATE as an int. In this example it compares 2006 and
      20060101 integers. Obviously it fails comparison although they represents the
      same date.
      
      
      Now the Item_bool_func2::fix_length_and_dec() function sets the comparison
      context for items being compared. I.e. if items compared as strings the
      comparison context is STRING.
      The constant propagation mechanism now doesn't mix items used in different
      comparison contexts. The context check is done in the
      Item_field::equal_fields_propagator() and in the change_cond_ref_to_const() 
      functions.
      
      Also the better fix for bug 21159 is introduced.
      
      
      mysql-test/t/type_datetime.test:
        Added a test case for bug#21475: Wrongly applied constant propagation leads to a false comparison.
      mysql-test/r/type_datetime.result:
        Added a test case for bug#21475: Wrongly applied constant propagation leads to a false comparison.
      sql/sql_select.cc:
        Fixed bug#21475: Wrongly applied constant propagation leads to a false comparison.
        The constant propagation mechanism now doesn't mix items used in different
        comparison contexts. The check is done in the change_cond_ref_to_const() function.
      sql/item_cmpfunc.cc:
        Fixed bug#21475: Wrongly applied constant propagation leads to a false comparison.
        Now the Item_bool_func2::fix_length_and_dec() function sets the comparison
        context for items being compared.
      sql/item.h:
        Fixed bug#21475: Wrongly applied constant propagation leads to a false comparison.
        To the Item class a new field called cmp_context is added.
        It represents the comparison context of an item.
      sql/item.cc:
        Fixed bug#21475: Wrongly applied constant propagation leads to a false comparison.
        The constant propagation mechanism now doesn't mix items used in different
        comparison contexts. The context check is done in the
        Item_field::equal_fields_propagator() function.
      7a11df8c
  7. 17 Aug, 2006 1 commit
    • unknown's avatar
      ndb_condition_pushdown.result: · 1cbebc6e
      unknown authored
        Corrected test case result after fix for bug#18165
      view.result, view.test:
        Corrected test case for bug#21261
      
      
      mysql-test/t/view.test:
        Corrected test case for bug#21261
      mysql-test/r/view.result:
        Corrected test case for bug#21261
      mysql-test/r/ndb_condition_pushdown.result:
        Corrected test case result after fix for bug#18165
      1cbebc6e
  8. 16 Aug, 2006 3 commits
    • unknown's avatar
      Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 5a76d760
      unknown authored
      into  rurik.mysql.com:/home/igor/mysql-5.0-opt
      
      
      sql/sql_select.cc:
        Auto merged
      5a76d760
    • unknown's avatar
      Fixed bug #18165. · c8cafde7
      unknown authored
      Made [NOT]BETWEEN predicates SARGable in respect to the second and 
      the third arguments.
      
      
      mysql-test/r/range.result:
        Added a test case to bug #18165.
      mysql-test/t/range.test:
        Added a test case to bug #18165.
      sql/opt_range.cc:
        Fixed bug #18165.
        Made [NOT]BETWEEN predicates SARGable in respect to the second and 
        the third arguments.
        Put in a separate function called get_full_func_mm_tree the functionality
        that builds a conjunction of all SEL_TREEs for a simple predicate of the
        form (f op c), where f was a field and c was a constant, applying different
        equalities f=f' with f' being another field.
      c8cafde7
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · c234aaa0
      unknown authored
      into  sunlight.local:/local_work/21261-bug-5.0-mysql
      
      
      sql/sql_select.cc:
        Auto merged
      sql/sql_update.cc:
        Auto merged
      mysql-test/r/view.result:
        SCCS merged
      mysql-test/t/view.test:
        SCCS merged
      c234aaa0
  9. 15 Aug, 2006 13 commits
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 03a5e2e7
      unknown authored
      into  moonbone.local:/work/15950-bug-5.0-opt-mysql
      
      
      03a5e2e7
    • unknown's avatar
      Fixed bug#21261: Wrong access rights was required for an insert into a view · a23d1792
      unknown authored
      SELECT right instead of INSERT right was required for an insert into to a view.
      This wrong behaviour appeared after the fix for bug #20989. Its intention was
      to ask only SELECT right for all tables except the very first for a complex
      INSERT query. But that patch has done it in a wrong way and lead to asking 
      a wrong access right for an insert into a view.
      
      The setup_tables_and_check_access() function now accepts two want_access
      parameters. One will be used for the first table and the second for other
      tables.
      
      
      mysql-test/t/view.test:
        Added a test case for bug#21261: Wrong access rights was required for an insert into a view
      mysql-test/r/view.result:
        Added a test case for bug#21261: Wrong access rights was required for an insert into a view
      sql/sql_update.cc:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        Modified to use updated setup_tables_and_check_access() function.
      sql/sql_select.cc:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        Modified to use updated setup_tables_and_check_access() function.
      sql/sql_load.cc:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        Modified to use updated setup_tables_and_check_access() function.
      sql/sql_insert.cc:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        Modified to use updated setup_tables_and_check_access() function.
      sql/sql_delete.cc:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        Modified to use updated setup_tables_and_check_access() function.
      sql/sql_base.cc:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        The setup_tables_and_check_access() function now accepts two want_access
        parameters. One will be used for the first table and the second for other
        tables.
      sql/mysql_priv.h:
        Fixed bug#21261: Wrong access rights was required for an insert into a view
        The setup_tables_and_check_access() function now accepts two want_access
        parameters.
      a23d1792
    • unknown's avatar
      Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 85ac350c
      unknown authored
      into  mysql.com:/home/psergey/mysql-5.0-opt-bug21282-r2
      
      
      85ac350c
    • unknown's avatar
      BUG#21077: 4.1->5.0 merge · 4ed157ee
      unknown authored
      4ed157ee
    • unknown's avatar
      BUG#21282: Incorrect query results for "t.key NOT IN (<big const list>) · 9cf4750e
      unknown authored
      In fix for BUG#15872, a condition of type "t.key NOT IN (c1, .... cN)"
      where N>1000, was incorrectly converted to
        (-inf < X < c_min) OR (c_max < X)
      Now this conversion is removed, we dont produce any range lists for such
      conditions.
      
      
      mysql-test/r/range.result:
        BUG#21282: Testcase
      mysql-test/t/range.test:
        BUG#21282: Testcase
      sql/opt_range.cc:
        BUG#21282: Incorrect query results for "t.key NOT IN (<big const list>) 
        In fix for BUG#15872, a condition of type "t.key NOT IN (c1, .... cN)"
        where N>1000, was incorrectly converted to 
          (-inf < X < c_min) OR (c_max < X)
        Now this conversion is removed, we dont produce any range lists for such
        conditions.
      9cf4750e
    • unknown's avatar
      Fixed bug#15950: NOW() optimized away in VIEWs · c2ef98ad
      unknown authored
      This bug is a side-effect of bug fix #16377. NOW() is optimized in
      BETWEEN to integer constants to speed up query execution. When view is being
      created it saves already modified query and thus becomes wrong.
      
      The agg_cmp_type() function now substitutes constant result DATE/TIME functions 
      for their results only if the current query isn't CREATE VIEW or SHOW CREATE
      VIEW.
      
      
      mysql-test/t/view.test:
        Added a test case for bug#15950: NOW() optimized away in VIEWs
      mysql-test/r/view.result:
        Added a test case for bug#15950: NOW() optimized away in VIEWs
      sql/item_cmpfunc.cc:
        Fixed bug#15950: NOW() optimized away in VIEWs
        The agg_cmp_type() function now substitutes constant result DATE/TIME functions 
        for their results only if the current query isn't CREATE VIEW or SHOW CREATE
        VIEW.
      c2ef98ad
    • unknown's avatar
      BUG#21077: Possible crash caused by invalid sequence of handler::* calls: ... · 9907e970
      unknown authored
      BUG#21077: Possible crash caused by invalid sequence of handler::* calls:                                                
      The crash was caused by invalid sequence of handler::** calls:                                                           
        ha_smth->index_init();                                                                                                 
        ha_smth->index_next_same(); (2)                                                                                        
      (2) is an invalid call as it was not preceeded by any 'scan setup' call
      like index_first() or index_read(). The cause was that QUICK_SELECT::reset()
      didn't "fully reset" the quick select- current QUICK_RANGE wasn't forgotten,
      and quick select might attempt to continue reading the range, which would
      result in the above mentioned invalid sequence of handler calls.
      
      5.x versions are not affected by the bug - they already have the missing
      "range=NULL" clause.                                                    
                                                             
      
      
      mysql-test/r/innodb_mysql.result:
        Testcase for BUG#21077
      mysql-test/t/innodb_mysql.test:
        Testcase for BUG#21077
      sql/opt_range.h:
        BUG#21077: Possible crash caused by invalid sequence of handler::* calls:                                              
         - Make QUICK_SELECT::reset() really reset the quick select
      9907e970
    • unknown's avatar
      Bug #21302: Result not properly sorted when using an ORDER BY on a second table in a join · 2f5ae7c5
      unknown authored
       - undeterminstic tests fixed
      
      
      mysql-test/r/order_by.result:
        Bug #21302: Result not properly sorted when using an ORDER BY on a second table in a join
         - more undeterminstic tests fixed
      mysql-test/t/order_by.test:
        Bug #21302: Result not properly sorted when using an ORDER BY on a second table in a join
         - more undeterminstic tests fixed
      2f5ae7c5
    • unknown's avatar
      Bug #21302: Result not properly sorted when using an ORDER BY · 57745f96
      unknown authored
                  on a second table in a join
      - undeterministic output of the test case removed.
      
      
      57745f96
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 5bf943a9
      unknown authored
      into  rakia.(none):/home/kgeorge/mysql/autopush/B21159-5.0-opt
      
      
      sql/sql_select.cc:
        Auto merged
      5bf943a9
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · fd65e53a
      unknown authored
      into  rakia.(none):/home/kgeorge/mysql/autopush/B21174-5.0-opt
      
      
      sql/sql_select.cc:
        Auto merged
      fd65e53a
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · a0474a81
      unknown authored
      into  rakia.(none):/home/kgeorge/mysql/autopush/B21159-5.0-opt
      
      
      sql/sql_select.cc:
        Auto merged
      a0474a81
    • unknown's avatar
      Bug #21159: Optimizer: wrong result after AND with different data types · 3915c3d9
      unknown authored
      Disable const propagation for Item_hex_string.
      This must be done because Item_hex_string->val_int() is not
      the same as (Item_hex_string->val_str() in BINARY column)->val_int().
      We cannot simply disable the replacement in a particular context (
      e.g. <bin_col> = <int_col> AND <bin_col> = <hex_string>) since
      Items don't know the context they are in and there are functions like 
      IF (<hex_string>, 'yes', 'no').
      Note that this will disable some valid cases as well 
      (e.g. : <bin_col> = <hex_string> AND <bin_col2> = <bin_col>) but 
      there's no way to distinguish the valid cases without having the
      Item's parent say something like : Item->set_context(Item::STRING_RESULT)
      and have all the Items that contain other Items do that consistently.
      
      
      mysql-test/r/compare.result:
        Bug #21159: Optimizer: wrong result after AND with different data types
         - test case
      mysql-test/t/compare.test:
        Bug #21159: Optimizer: wrong result after AND with different data types
         - test case
      sql/sql_select.cc:
        Bug #21159: Optimizer: wrong result after AND with different data types
         - disable const propagation for Item_hex_string.
      3915c3d9
  10. 14 Aug, 2006 3 commits
    • unknown's avatar
      Bug #21174: Index degrades sort performance and · 6675c2c2
      unknown authored
                   optimizer does not honor IGNORE INDEX
       - Allow an index to be used for sorting the table 
         instead of filesort only if it is not disabled by
         IGNORE INDEX.
      
      
      mysql-test/r/group_by.result:
        Bug #21174: Index degrades sort performance and 
                     optimizer does not honor IGNORE INDEX
         - test case
      mysql-test/t/group_by.test:
        Bug #21174: Index degrades sort performance and 
                     optimizer does not honor IGNORE INDEX
         - test case
      6675c2c2
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 3dfd0a22
      unknown authored
      into  rakia.(none):/home/kgeorge/mysql/autopush/B21302-5.0-opt
      
      
      mysql-test/r/join_outer.result:
        Auto merged
      mysql-test/r/order_by.result:
        Auto merged
      3dfd0a22
    • unknown's avatar
      Bug #21302: Result not properly sorted when using an ORDER BY on a second · 06a302ef
      unknown authored
                   table in a join
       The optimizer removes redundant columns in ORDER BY. It is considering 
      redundant every reference to const table column, e.g b in :
      create table t1 (a int, b int, primary key(a)); 
      select 1 from t1 order by b where a = 1
      
      But it must not remove references to const table columns if the 
      const table is an outer table because there still can be 2 values :
      the const value and NULL. e.g.:
      create table t1 (a int, b int, primary key(a));
      select t2.b c from t1 left join t1 t2 on (t1.a = t2.a and t2.a = 5) 
        order by c;
      
      
      mysql-test/r/join_outer.result:
        Bug #21302: Result not properly sorted when using an ORDER BY on a second 
                    table in a join
         - don't remove columns of const tables in ORDER BY if the const table 
           is an outer table.
      mysql-test/r/order_by.result:
        Bug #21302: Result not properly sorted when using an ORDER BY on a second 
                    table in a join
         - test case
      mysql-test/t/order_by.test:
        Bug #21302: Result not properly sorted when using an ORDER BY on a second 
                    table in a join
         - test case
      sql/sql_select.cc:
        Bug #21302: Result not properly sorted when using an ORDER BY on a second 
                    table in a join
         - don't remove columns of const tables in ORDER BY if the const table 
           is an outer table.
      06a302ef