List:Commits« Previous MessageNext Message »
From:Mattias Jonsson Date:January 28 2011 2:11pm
Subject:bzr push into mysql-trunk branch (mattias.jonsson:3567 to 3568)
View as plain text  
 3568 Mattias Jonsson	2011-01-28 [merge]
      merge

    modified:
      mysql-test/suite/parts/inc/partition_layout_check1.inc
      mysql-test/suite/parts/inc/partition_layout_check2.inc
      mysql-test/suite/parts/r/partition_recover_myisam.result
      mysql-test/suite/parts/t/partition_alter1_1_2_myisam.test
      mysql-test/suite/parts/t/partition_alter1_1_myisam.test
      mysql-test/suite/parts/t/partition_alter1_2_myisam.test
      mysql-test/suite/parts/t/partition_basic_myisam.test
      mysql-test/suite/parts/t/partition_engine_myisam.test
      mysql-test/suite/parts/t/partition_recover_myisam.test
      mysql-test/suite/parts/t/partition_syntax_myisam.test
      sql/item.h
      sql/item_func.h
      sql/item_timefunc.h
      sql/sql_partition.cc
      sql/table.cc
 3567 Olav Sandstaa	2011-01-28
      Fix for Bug#59186 Wrong results of join when ICP is enabled
      
      When index condition pushdown was used an extra row appeared in the
      result set due to parts of the select condition for the second table
      in the JOIN was not evaluated. 
      
      This was caused when computing the "remainder" for the second table's
      select condition after pushing down parts of it to the storage
      engine. If parts of the select condition was common for both tables in
      the JOIN and the common part was pushed down for the first table the
      common part could have the marker field set to
      ICP_COND_USES_INDEX_ONLY during evaluation of make_cond_for_index()
      for the first table. If the common part of the select condition was
      not pushed down for the second table it would still be marked with
      ICP_COND_USES_INDEX_ONLY when computing the remainder for the select
      condition for the second table. This would cause that this part of the
      select condition neither was pushed down to the storage engine nor
      included in the select condition to be evaluated by the server.
      
      The fix for this is to extend make_cond_for_index() so that it clears
      the marker field for the parts of the item tree that it decides should
      not be pushed down to the storage engine. This will prevent that
      common items in select conditions for different tables that have been
      marked with ICP_COND_USES_INDEX_ONLY when evaluating one table does
      not keep this value when computing the "remainder" for a following
      table in a JOIN.
      
      The patch also contains some re-write and clean-up code to 
      make_cond_for_index():
      -remove unnessary cast for return of NULL.
      -ensure that make_cond_for_index() is always called with a cond value.
     @ mysql-test/include/icp_tests.inc
        Test case for Bug#59186 Wrong results of join when ICP is enabled.
     @ mysql-test/r/innodb_icp.result
        Result file for the test for Bug#59186 Wrong results of join when 
        ICP is enabled.
     @ mysql-test/r/innodb_icp_none.result
        Result file for the test for Bug#59186 Wrong results of join when 
        ICP is enabled.
     @ mysql-test/r/myisam_icp.result
        Result file for the test for Bug#59186 Wrong results of join when 
        ICP is enabled.
     @ mysql-test/r/myisam_icp_none.result
        Result file for the test for Bug#59186 Wrong results of join when 
        ICP is enabled.
     @ sql/sql_select.cc
        Reset the condition's marker field in make_cond_for_index() when it has
        determined that this part of the select condition should not be
        included in the condition to be pushed down to the storage engine. 
        
        The reason this must be cleared is that if the condition
        is a common part of for the select condition of two tables in
        a JOIN operation then the marker field might have gotten the value
        set to ICP_COND_USES_INDEX_ONLY when evaluating the select
        condition for the first table. If this is the case we need
        to reset it to avoid that this part of the select condition
        is wrongly concluded to not be needed in the select condition
        to be evaluated by the server after pushing parts of the
        condition down to the storage engine.

    modified:
      mysql-test/include/icp_tests.inc
      mysql-test/r/innodb_icp.result
      mysql-test/r/innodb_icp_none.result
      mysql-test/r/myisam_icp.result
      mysql-test/r/myisam_icp_none.result
      sql/sql_select.cc
=== modified file 'mysql-test/suite/parts/inc/partition_layout_check1.inc'
--- a/mysql-test/suite/parts/inc/partition_layout_check1.inc	2010-09-15 08:22:12 +0000
+++ b/mysql-test/suite/parts/inc/partition_layout_check1.inc	2011-01-28 12:28:15 +0000
@@ -29,14 +29,10 @@ DELETE FROM t0_definition;
 let $MYSQLD_DATADIR= `select LEFT(@@datadir, LENGTH(@@datadir)-1)`;
 #echo MYSQLD_DATADIR: $MYSQLD_DATADIR;
 
-# Dump the current definition of the table t1 to tmp1
-# This complicated method - let another mysqltest collect the output - is used
-# because of two reasons
+# Save the current definition of the table t1
 # - SHOW CREATE TABLE t1 is at least currently most probably more reliable than
 #   the corresponding SELECT on the INFORMATION_SCHEMA
-# - SHOW CREATE TABLE .. cannot write its out put into a file like SELECT
-let $show_file= $MYSQLD_DATADIR/test/tmp1;
---exec echo "SHOW CREATE TABLE t1; exit; " | $MYSQL_TEST > $show_file 2>&1
+let $show_create= `SHOW CREATE TABLE t1`;
 if ($do_file_tests)
 {
   # List the files belonging to the table t1
@@ -57,12 +53,13 @@ if (!$do_file_tests)
 
 # Insert the current definition of the table t1 into t0_definition
 eval INSERT INTO t0_definition SET state = 'old',
-     create_command = load_file('$show_file'),
+     create_command = "$show_create",
      file_list      = @aux;
 
 # Print the create table statement into the protocol
+# Added the concat to avoid changing the result files
 --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR '\r' ''
-SELECT create_command FROM t0_definition WHERE state = 'old';
+SELECT concat('SHOW CREATE TABLE t1;\nTable\tCreate Table\n',create_command,'\n') as `create_command` FROM t0_definition WHERE state = 'old';
 if ($do_file_tests)
 {
    # We stored the list of files, therefore printing the content makes sense

=== modified file 'mysql-test/suite/parts/inc/partition_layout_check2.inc'
--- a/mysql-test/suite/parts/inc/partition_layout_check2.inc	2010-09-15 08:22:12 +0000
+++ b/mysql-test/suite/parts/inc/partition_layout_check2.inc	2011-01-28 12:28:15 +0000
@@ -28,9 +28,8 @@ DELETE FROM t0_definition WHERE state = 
 let $MYSQLD_DATADIR= `select LEFT(@@datadir, LENGTH(@@datadir)-1)`;
 #echo MYSQLD_DATADIR: $MYSQLD_DATADIR;
 
-# Dump the current definition of the table t1 to tmp1
-let $show_file= $MYSQLD_DATADIR/test/tmp1;
---exec echo "SHOW CREATE TABLE t1; exit; " | $MYSQL_TEST > $show_file 2>&1
+# Save the current definition of the table t1
+let $show_create= `SHOW CREATE TABLE t1`;
 
 if ($do_file_tests)
 {
@@ -52,7 +51,7 @@ if (!$do_file_tests)
 
 # Insert the current definition of the table t1 into t0_definition
 eval INSERT INTO t0_definition SET state = 'new',
-     create_command = load_file('$show_file'),
+     create_command = "$show_create",
      file_list      = @aux;
 
 # Print the old and new table layout, if they differ

=== modified file 'mysql-test/suite/parts/r/partition_recover_myisam.result'
--- a/mysql-test/suite/parts/r/partition_recover_myisam.result	2010-10-01 16:11:50 +0000
+++ b/mysql-test/suite/parts/r/partition_recover_myisam.result	2011-01-28 13:49:59 +0000
@@ -18,6 +18,13 @@ a
 9
 10
 11
+Warnings:
+Error	145	Table './test/t1_will_crash' is marked as crashed and should be repaired
+Error	1194	Table 't1_will_crash' is marked as crashed and should be repaired
+Error	1034	1 client is using or hasn't closed the table properly
+Error	1034	Size of indexfile is: 1024        Should be: 2048
+Error	1034	Size of datafile is: 77       Should be: 7
+Error	1034	Number of rows changed from 1 to 11
 DROP TABLE t1_will_crash;
 CREATE TABLE t1_will_crash (a INT, KEY (a))
 ENGINE=MyISAM
@@ -41,4 +48,11 @@ a
 9
 10
 11
+Warnings:
+Error	145	Table './test/t1_will_crash#P#p1' is marked as crashed and should be repaired
+Error	1194	Table 't1_will_crash' is marked as crashed and should be repaired
+Error	1034	1 client is using or hasn't closed the table properly
+Error	1034	Size of indexfile is: 1024        Should be: 2048
+Error	1034	Size of datafile is: 28       Should be: 7
+Error	1034	Number of rows changed from 1 to 4
 DROP TABLE t1_will_crash;

=== modified file 'mysql-test/suite/parts/t/partition_alter1_1_2_myisam.test'
--- a/mysql-test/suite/parts/t/partition_alter1_1_2_myisam.test	2010-06-17 17:17:17 +0000
+++ b/mysql-test/suite/parts/t/partition_alter1_1_2_myisam.test	2011-01-28 13:49:59 +0000
@@ -45,9 +45,6 @@ let $more_pk_ui_tests= 0;
 # The server must support partitioning.
 --source include/have_partition.inc
 
-# Does not work with --embedded
---source include/not_embedded.inc
-
 #------------------------------------------------------------------------------#
 # Engine specific settings and requirements
 

=== modified file 'mysql-test/suite/parts/t/partition_alter1_1_myisam.test'
--- a/mysql-test/suite/parts/t/partition_alter1_1_myisam.test	2010-06-17 17:17:17 +0000
+++ b/mysql-test/suite/parts/t/partition_alter1_1_myisam.test	2011-01-28 13:49:59 +0000
@@ -46,9 +46,6 @@ let $more_pk_ui_tests= 0;
 # The server must support partitioning.
 --source include/have_partition.inc
 
-# Does not work with --embedded
---source include/not_embedded.inc
-
 #------------------------------------------------------------------------------#
 # Engine specific settings and requirements
 

=== modified file 'mysql-test/suite/parts/t/partition_alter1_2_myisam.test'
--- a/mysql-test/suite/parts/t/partition_alter1_2_myisam.test	2010-06-17 17:17:17 +0000
+++ b/mysql-test/suite/parts/t/partition_alter1_2_myisam.test	2011-01-28 13:49:59 +0000
@@ -46,9 +46,6 @@ let $more_pk_ui_tests= 0;
 # The server must support partitioning.
 --source include/have_partition.inc
 
-# Does not work with --embedded
---source include/not_embedded.inc
-
 #------------------------------------------------------------------------------#
 # Engine specific settings and requirements
 

=== modified file 'mysql-test/suite/parts/t/partition_basic_myisam.test'
--- a/mysql-test/suite/parts/t/partition_basic_myisam.test	2010-06-17 17:17:17 +0000
+++ b/mysql-test/suite/parts/t/partition_basic_myisam.test	2011-01-28 13:49:59 +0000
@@ -43,9 +43,6 @@ let $more_pk_ui_tests= 0;
 # The server must support partitioning.
 --source include/have_partition.inc
 
-# Does not work with --embedded
---source include/not_embedded.inc
-
 #------------------------------------------------------------------------------#
 # Engine specific settings and requirements
 

=== modified file 'mysql-test/suite/parts/t/partition_engine_myisam.test'
--- a/mysql-test/suite/parts/t/partition_engine_myisam.test	2010-06-17 17:17:17 +0000
+++ b/mysql-test/suite/parts/t/partition_engine_myisam.test	2011-01-28 13:49:59 +0000
@@ -42,9 +42,6 @@ let $more_pk_ui_tests= 0;
 # The server must support partitioning.
 --source include/have_partition.inc
 
-# Does not work with --embedded
---source include/not_embedded.inc
-
 #------------------------------------------------------------------------------#
 # Engine specific settings and requirements
 

=== modified file 'mysql-test/suite/parts/t/partition_recover_myisam.test'
--- a/mysql-test/suite/parts/t/partition_recover_myisam.test	2010-10-01 16:11:50 +0000
+++ b/mysql-test/suite/parts/t/partition_recover_myisam.test	2011-01-28 13:49:59 +0000
@@ -20,7 +20,8 @@ FLUSH TABLES;
 let $MYSQLD_DATADIR= `select @@datadir`;
 --remove_file $MYSQLD_DATADIR/test/t1_will_crash.MYI
 --copy_file std_data/corrupt_t1.MYI $MYSQLD_DATADIR/test/t1_will_crash.MYI
---disable_warnings
+--replace_result \\ /
+--replace_regex /Table '.*data/Table './
 SELECT * FROM t1_will_crash;
 --enable_warnings
 DROP TABLE t1_will_crash;
@@ -35,7 +36,8 @@ FLUSH TABLES;
 --echo # head -c1024 t1#P#p1.MYI > corrupt_t1#P#p1.MYI 
 --remove_file $MYSQLD_DATADIR/test/t1_will_crash#P#p1.MYI
 --copy_file std_data/corrupt_t1#P#p1.MYI $MYSQLD_DATADIR/test/t1_will_crash#P#p1.MYI
---disable_warnings
+--replace_result \\ /
+--replace_regex /Table '.*data/Table './
 SELECT * FROM t1_will_crash;
 --enable_warnings
 DROP TABLE t1_will_crash;

=== modified file 'mysql-test/suite/parts/t/partition_syntax_myisam.test'
--- a/mysql-test/suite/parts/t/partition_syntax_myisam.test	2010-06-17 17:17:17 +0000
+++ b/mysql-test/suite/parts/t/partition_syntax_myisam.test	2011-01-28 13:49:59 +0000
@@ -42,9 +42,6 @@ let $more_pk_ui_tests= 0;
 # The server must support partitioning.
 --source include/have_partition.inc
 
-# Does not work with --embedded
---source include/not_embedded.inc
-
 #------------------------------------------------------------------------------#
 # Engine specific settings and requirements
 

=== modified file 'sql/item.h'
--- a/sql/item.h	2011-01-10 16:37:47 +0000
+++ b/sql/item.h	2011-01-28 13:49:59 +0000
@@ -1,7 +1,7 @@
 #ifndef ITEM_INCLUDED
 #define ITEM_INCLUDED
 
-/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by

=== modified file 'sql/item_func.h'
--- a/sql/item_func.h	2011-01-10 16:37:47 +0000
+++ b/sql/item_func.h	2011-01-28 13:49:59 +0000
@@ -1,7 +1,7 @@
 #ifndef ITEM_FUNC_INCLUDED
 #define ITEM_FUNC_INCLUDED
 
-/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by

=== modified file 'sql/item_timefunc.h'
--- a/sql/item_timefunc.h	2011-01-10 16:37:47 +0000
+++ b/sql/item_timefunc.h	2011-01-28 13:49:59 +0000
@@ -1,7 +1,7 @@
 #ifndef ITEM_TIMEFUNC_INCLUDED
 #define ITEM_TIMEFUNC_INCLUDED
 
-/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by

=== modified file 'sql/sql_partition.cc'
--- a/sql/sql_partition.cc	2011-01-26 21:12:56 +0000
+++ b/sql/sql_partition.cc	2011-01-28 13:49:59 +0000
@@ -1,4 +1,4 @@
-/* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by

=== modified file 'sql/table.cc'
--- a/sql/table.cc	2011-01-18 10:32:38 +0000
+++ b/sql/table.cc	2011-01-28 13:49:59 +0000
@@ -1,4 +1,4 @@
-/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-trunk branch (mattias.jonsson:3567 to 3568) Mattias Jonsson28 Jan