From b9225bb52c201bda3afd3543c7c7fb4cea17a927 Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Thu, 30 Nov 2017 23:23:15 +0300 Subject: [PATCH] SQL: outdated select_lex->where fix [#365 bug 5] Affected tests (forced mode): main.index_merge_myisam After optimization versioning AND takes operands from WHERE AND leaving `select_lex->where` as empty dangling AND. --- mysql-test/suite/versioning/r/select.result | 6 ++++++ mysql-test/suite/versioning/t/select.test | 6 ++++++ sql/sql_select.cc | 2 ++ 3 files changed, 14 insertions(+) diff --git a/mysql-test/suite/versioning/r/select.result b/mysql-test/suite/versioning/r/select.result index 99dd8845f03..7571af25bcd 100644 --- a/mysql-test/suite/versioning/r/select.result +++ b/mysql-test/suite/versioning/r/select.result @@ -367,6 +367,12 @@ order by i; f 0 0 +### Issue #365, bug 5 (dangling AND) +create or replace table t1 (a int); +create or replace table t2 (b int) with system versioning; +select * from t1 +where exists (select 1 from t2 where t2.b = t1.a and t2.b = t1.a); +a drop view v1; drop table t1, t2; call innodb_verify_vtq(28); diff --git a/mysql-test/suite/versioning/t/select.test b/mysql-test/suite/versioning/t/select.test index 6421524bc3b..dd7289fa9c7 100644 --- a/mysql-test/suite/versioning/t/select.test +++ b/mysql-test/suite/versioning/t/select.test @@ -188,6 +188,12 @@ select min(i) over (partition by b) as f from (select i + 0 as i, b from t1) as tt order by i; +--echo ### Issue #365, bug 5 (dangling AND) +create or replace table t1 (a int); +create or replace table t2 (b int) with system versioning; +select * from t1 +where exists (select 1 from t2 where t2.b = t1.a and t2.b = t1.a); + drop view v1; drop table t1, t2; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 9153e75a365..76e8eb4f175 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -976,6 +976,8 @@ int vers_setup_select(THD *thd, TABLE_LIST *tables, COND **where_expr, *dst_cond= cond1; else thd->change_item_tree(dst_cond, cond1); + + slex->where= *dst_cond; } } // if (... table->table->versioned()) } // for (table= tables; ...)