From: Ole John Aske Date: January 17 2011 1:04pm Subject: bzr commit into mysql-5.1-telco-7.0 branch (ole.john.aske:4120) Bug#58791 List-Archive: http://lists.mysql.com/commits/128964 X-Bug: 58791 Message-Id: <20110117130408.47788223@fimafeng09.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5193324537120245832==" --===============5193324537120245832== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///net/fimafeng09/export/home/tmp/oleja/mysql/mysql-5.1-telco-7.0/ based on revid:ole.john.aske@stripped 4120 Ole John Aske 2011-01-17 Updated fix for Bug#58791 'Incorrect result as Cluster may fail to reject an unpushable condition' ha_ndbcluster::cond_push() should reject to push any condition which refer fields outside the scope of 'this' table. The rejection of pushing should be signaled by returning the remaining unpushed condition - or entire 'cond' if nothing was pushed. Also fixes two existing bugs in ha_ndbcluster::cond_push where we should return 'cond' instead of 'NULL' to signal that the condition was unpushable (Due to memory alloc failure.) @ sql/ha_ndbcluster_cond.cc Fixed a bug in rejecting pushing of 'cond'. When a condition is rejected, the unpushable part of the condition should be returned. modified: mysql-test/suite/ndb/r/ndb_condition_pushdown.result mysql-test/suite/ndb/t/ndb_condition_pushdown.test sql/ha_ndbcluster.cc sql/ha_ndbcluster_cond.cc === modified file 'mysql-test/suite/ndb/r/ndb_condition_pushdown.result' --- a/mysql-test/suite/ndb/r/ndb_condition_pushdown.result 2011-01-14 15:08:09 +0000 +++ b/mysql-test/suite/ndb/r/ndb_condition_pushdown.result 2011-01-17 13:04:02 +0000 @@ -2279,5 +2279,18 @@ select * from t where exists pk i 1 3 drop table t,subq; +create table t (pk1 int, pk2 int, primary key(pk1,pk2)) engine = ndb; +insert into t values (1,0), (2,0), (3,0), (4,0); +set engine_condition_pushdown=1; +select table1.pk1, table2.pk1, table1.pk2, table2.pk2 +from t as table1, t as table2 +where table2.pk1 in (0,3) and +(table1.pk1 = 7 or table2.pk1 = 3); +pk1 pk1 pk2 pk2 +1 3 0 0 +2 3 0 0 +3 3 0 0 +4 3 0 0 +drop table t; set engine_condition_pushdown = @old_ecpd; DROP TABLE t1,t2,t3,t4,t5; === modified file 'mysql-test/suite/ndb/t/ndb_condition_pushdown.test' --- a/mysql-test/suite/ndb/t/ndb_condition_pushdown.test 2011-01-14 10:42:53 +0000 +++ b/mysql-test/suite/ndb/t/ndb_condition_pushdown.test 2011-01-17 13:04:02 +0000 @@ -2346,6 +2346,28 @@ select * from t where exists drop table t,subq; + +# Bug#58791 Incorrect result as Cluster may fail to reject an unpushable condition + +create table t (pk1 int, pk2 int, primary key(pk1,pk2)) engine = ndb; +insert into t values (1,0), (2,0), (3,0), (4,0); + +set engine_condition_pushdown=1; + +# Multiple instances of same table (t as table, ) confused +# ha_ndbcluster::cond_push() which accepted +# '(table1.pk1 = 7 or table2.pk1 = 3)' as a pushable cond. +# for 'table2' +# + +--sorted_result +select table1.pk1, table2.pk1, table1.pk2, table2.pk2 + from t as table1, t as table2 + where table2.pk1 in (0,3) and + (table1.pk1 = 7 or table2.pk1 = 3); + +drop table t; + set engine_condition_pushdown = @old_ecpd; DROP TABLE t1,t2,t3,t4,t5; === modified file 'sql/ha_ndbcluster.cc' --- a/sql/ha_ndbcluster.cc 2011-01-17 12:31:29 +0000 +++ b/sql/ha_ndbcluster.cc 2011-01-17 13:04:02 +0000 @@ -12785,12 +12785,24 @@ Item* ha_ndbcluster::cond_push(const Item *cond) { DBUG_ENTER("cond_push"); + + if (cond->used_tables() & ~table->map) + { + /** + * 'cond' refers fields from other tables, or other instances + * of this table, -> reject it. + * (Optimizer need to have a better understanding of what is + * pushable by each handler.) + */ + DBUG_EXECUTE("where",print_where((Item *)cond, "Rejected cond_push", QT_ORDINARY);); + DBUG_RETURN(cond); + } if (!m_cond) m_cond= new ha_ndbcluster_cond; if (!m_cond) { my_errno= HA_ERR_OUT_OF_MEM; - DBUG_RETURN(NULL); + DBUG_RETURN(cond); } DBUG_EXECUTE("where",print_where((Item *)cond, m_tabname, QT_ORDINARY);); DBUG_RETURN(m_cond->cond_push(cond, table, (NDBTAB *)m_table)); === modified file 'sql/ha_ndbcluster_cond.cc' --- a/sql/ha_ndbcluster_cond.cc 2011-01-14 14:15:54 +0000 +++ b/sql/ha_ndbcluster_cond.cc 2011-01-17 13:04:02 +0000 @@ -972,7 +972,7 @@ ha_ndbcluster_cond::cond_push(const Item if (ndb_cond == NULL) { my_errno= HA_ERR_OUT_OF_MEM; - DBUG_RETURN(NULL); + DBUG_RETURN(cond); } if (m_cond_stack) ndb_cond->next= m_cond_stack; --===============5193324537120245832== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/ole.john.aske@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: ole.john.aske@stripped\ # 87epxam4flb5w1po # target_branch: file:///net/fimafeng09/export/home/tmp/oleja/mysql\ # /mysql-5.1-telco-7.0/ # testament_sha1: 7b4c3615fe3378a7e145d0e0de0146ea0d95d9e6 # timestamp: 2011-01-17 14:04:08 +0100 # base_revision_id: ole.john.aske@stripped\ # 54dxnx7g2x88iefg # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWRG4kRYABLnfgGAwWff//3+3 tuC////7YApc+Tm6oAddmBV2A0KEhQFFUNBomqT9MSJ5qmDSaeozKaabU8kAAaDQBoaaCVSZqfqp +lPym0TUaGhie1QYIAZAZBkAwmOMmTRiGmhgJoYmjTJiBkYTRpphBkwlNEQp5NFT9miU9qRPZSek epjSMajI0GjI9QM2pDjJk0YhpoYCaGJo0yYgZGE0aaYQZMJJAmgAQE0yaDSMCJtNE00mCAMjEkx+ CYoGAY0jKCO+hX5HOd7f0cqzCAf3e/4d39wa6tOOqOXhxI3cKPw9uL1Xl85ldcRPRp2sSkaTtUgC EA7mCL9j8ZS7JQpfleT10P/XCn9oRaHC9yRQZQopiCJpDNoY5Z9GP9aqZv3M8tKRSlGiwhZL/lLu Qf2DWDMwkkwlLtZuaVsO2W+N0tIcqRo79PW1kpCUq08lNlJbahkass8yc4w8EaWV9vKhzkOcExWf yf1bCSiyIoFxUhB3EortVrAtJeT8jXRMky7VXZGxzuciDyqDhBloK5FRUa2aRj6fRuvgZwrhkBiA 7Y3mS1qyF2epO2cVDpvRW+Vm99bLIxHj0fsW3sXEhxmpDwe+0D9rLoIFRo1Yc5xxBboAaN2Np9sc c095UuGOqITiPTkDb4GSiDlo18gKNDhB6axXENujZvW78pPYD77Y3EEixv0TBiB4DipxXWVBcYQI 8XgTwiuFET6qrn0AQ8qmVwVVym7OHQLEm4cYHSYkCd2rpOkGXkkE/FfAI2Ap4Xcy8kdeUfQcxIiH VogdP2SNN/g+utx1wh5efNnikG6lTZhppIIqxMDDDEjj8tQbIZTDYHzSvGvmC5mDFzhXaL/gB7CM QWxkCiCGzmCYpLjbEYFYSGBiKo52pIjgwwevQdKlT7akqVwKLTiF5ZLM6fUzSvg4dY5oCgwSqHBo GLnpdcUg+2brA3F32ZQSC9ziTJBGV+R99QWkzQEkaQur0l1M6Z0gnXFOoUlQrEeV+0vhF7c2GRSA PRAg7S2xdOysmfAvDbjkGrYaA1EDa9BM/gF6b77svV+5ue1z2IOcHA2AtsEGyfcLnGVQMkFhtpHS YTAxSyB220Jc+fj4vxLrQvVBAtT/Omb4VGXzFY45ILzxkVGY8+ZmuYO0N2F7bF2jluNNMgWaUYP4 54Gwp8pSFkY98Y9RtJttECSDj3HSnBCON9Vg0ipCiBy23+EHWle8W0wBsBGtjinEgm7iCxwdiy44 b6Bla1UFZsyY+q8JF5u4g3IVR5ieGGQs8bggJYaN2F5tIZ5NYFcHmmwO9LKevE+o1MC3AxO82wBd DSw0uDFON5Fi8y1tEsKC6pz3yDozpsZDJbCBuqKyGqtXn8dXeox462wV27Osmt14BoGRn1Eh2Jer lIsnuyIvMBi0arP263ixqYslrKgUlMOiZ08CrYVjlbcxqhTTkUQTDx5rBarQzL5545sGTpPZrwws w7LyANQSmxrOfmV8TObh5fVg6G8fbWWlK2aCWzdqY6GtfY9tzSe6+i5odCYkmacDSetOxZS5mppb fP0cyLxnsdiN2pBKI8GGD3BrQMbfUN7++5VUhg9d10DgmEe4PxkJHYH++X/rO6TcujuC632OV46y mFoW1rF/tYmF8yKeWmzSBbtFo17DH/izKghhBSFLgByF4JG8IARd9v0oEQg60PMiI8z49a7rTwPB 57nHkYnzrSMCNb72QySXzwt9dIIcXWZA80EUvH0TazGv/J8gU4hfEYpcOwdTb+BgCeflEBvySCiD Ngc9D/pFxy5pDG7V6mykFn9tBMtNrDhH0HjzeQSPp+i0kS8m95cfgc5q2iQd1ydMPES/pqMGJpi0 yhkVYdg4ocYGsaoGIUvunQYyNRQZrqm0GczAihI2VAjR6h6r721+qIuYZJwDcrDaXAtRyJQkXiY2 OPACWQO6THgzNC26pvzMszmGuhUC5KHfaSQb4BUcvE4EEIoOE9+iLdNKHgHIaFXaBgTWJV16OQY8 1LUGm0d3MojCwZ1je1zwx7io16ZvJAzJCNxsHIMD8xwL2OuzdJqnS8QuDNIL9HchtJQipKJmdbs6 DM+XbyNRwNR1rUpl45FkOEovVd7xtg0lZHHqxK9ZO3ZRZm04BY4edNx5vEtXvfbSYjp8+jcD0N1p wsvYC4SmdDnczLmg5BBFkouOqnqG31GGBWmuCkzcIwMZIPcbSJPWqhkcEjsOk9p7TtLyZLcdRImY LZ0m9RqNyKStDBp3FR+odvcDPFsMQW8Y7CAR3jijiQicWS9jjo0BlsYYBVBez4iJV0OktKq+KECu oPAx1ecwwTtHtmNKzyPAEN2IpBygqY9IiRDeIGHCIbUMIOHTx9nONuy94it3vDeV5nOWIoOHAoEm sJqaO9L3BlbHCxzsBqpFKVTH2ctsfIqAxSYDwG801MrDuSnDSYJLz0/+bSrgh3d9BtNPHgBl3nkd XxSC8ce3uEDMIz8hjFZAhjSdiXbDxKHGRy5HZ4kg0hQlzO3750Bo2hd0wTP0QXBR2Z1kDGbMEBAz CRIv54Fg/ra2/8HBkP974lf1LkjyV14kdegmC15cZap+tpzLgUlSHUETobFayvfoLaqUWHS60moV jm9s3PZpjKCQcRyGPByDSYhTQvxGIpKlJgiVh6HYhZ0SSTUBTODxmAuCmL47yaLCJ7JHJkqUMzDJ mFFy7w8LeenyObtNVnAB6KA6XBwo8hx2Vx0gfv0pBszOgXxN6GB3RUr0IkkhhAXM9M15Yjy/cEZp QUjRjnFTPhx6wfrD3kSJunUk20sxQIZL9psV/Wukc6+30AdggQ7pWnaOavYC099pQUX93xh4hpcM nANe8iCed1mJ5m8hrExgO7daqQ21k4fc5LQoOAZIXxkPgwaeg6jJBnQkVPNjLVFyPMqlgvr5mC2F /axrH9mxVdZXSWBk5zeMRAibPnNnbKX2SeZNiE7mvWX6FCe9qjM3Yjj0PDBsgeIJhUxYlAPW5IK8 CgWHw91vmHmyWx3S6CR1zRjQZG5UYbGpmxKgfVhQXAggOqRWSk5kRJbLEVV+B40FUg4gTHQF/LK5 ML8WEVtIJk6x/G6LX6PjI3MmYDtzLAGKXLix1JsN6+RKNu0wswxBmSLdXdneJ5QkwVbnC3UspciJ yOrH/H1vO38xqC8wyNIWwD+ZK8T6udZ0fdrSRFCq7j6fdCLTiiG/IRSqkvhOLmhAKETGR040SsHg XHtx0TGsHZBuDYC0D5GsfoCY5B1MaaOjaPToDilWkvlrTrGKDctqysqFWuwo0bF/8XckU4UJARuJ EWA= --===============5193324537120245832==--