From 4a9bc48ba581c986c15271247f0432acecb931db Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 22 Dec 2017 16:32:28 +0100 Subject: [PATCH] lp1739734: Fixed federated SE regression introduced in the gcc7 fixes. Also added a related test. (cherry picked from commit a63b34811be4dbe812933ee04ba93306567ae684) --- .../suite/federated/percona_bug1739734.result | 44 ++++++++++++++++ .../suite/federated/percona_bug1739734.test | 50 +++++++++++++++++++ storage/federated/ha_federated.cc | 6 ++- 3 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/federated/percona_bug1739734.result create mode 100644 mysql-test/suite/federated/percona_bug1739734.test diff --git a/mysql-test/suite/federated/percona_bug1739734.result b/mysql-test/suite/federated/percona_bug1739734.result new file mode 100644 index 000000000000..5f4bdd9a1318 --- /dev/null +++ b/mysql-test/suite/federated/percona_bug1739734.result @@ -0,0 +1,44 @@ +# +# Bug lp1739734 "Federated table returns error 1430 from storage engine" +# +# This is a bug introduced in the artful/gcc7 compilation fixes, caused by +# a moved break statement. +CREATE DATABASE federated; +CREATE DATABASE federated; +CREATE DATABASE lp1739734; +use lp1739734; +CREATE SERVER local_server +FOREIGN DATA WRAPPER mysql +OPTIONS ( +HOST '127.0.0.1', +PORT MASTER_PORT, +USER 'root', +PASSWORD '', +DATABASE 'lp1739734' +); +CREATE TABLE remote_table ( +a INT, +b INT, +KEY ab (a,b), +KEY ba (b,a) +); +CREATE TABLE local_table ( +a INT, +b INT, +KEY ab (a,b), +KEY ba (b,a) +) ENGINE=federated CONNECTION='local_server/remote_table'; +SELECT * FROM local_table; +a b +SELECT * FROM local_table USE INDEX (ab) +WHERE a<1 AND b=0; +a b +SELECT * FROM local_table USE INDEX (ba) +WHERE a<1 AND b=0; +a b +DROP DATABASE lp1739734; +DROP SERVER local_server; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; diff --git a/mysql-test/suite/federated/percona_bug1739734.test b/mysql-test/suite/federated/percona_bug1739734.test new file mode 100644 index 000000000000..cbb4c90dd756 --- /dev/null +++ b/mysql-test/suite/federated/percona_bug1739734.test @@ -0,0 +1,50 @@ +--echo # +--echo # Bug lp1739734 "Federated table returns error 1430 from storage engine" +--echo # +--echo # This is a bug introduced in the artful/gcc7 compilation fixes, caused by +--echo # a moved break statement. + +--source suite/federated/include/federated.inc + +connection master; +CREATE DATABASE lp1739734; +use lp1739734; + +--replace_result $MASTER_MYPORT MASTER_PORT +eval CREATE SERVER local_server +FOREIGN DATA WRAPPER mysql +OPTIONS ( + HOST '127.0.0.1', + PORT $MASTER_MYPORT, + USER 'root', + PASSWORD '', + DATABASE 'lp1739734' +); + +CREATE TABLE remote_table ( + a INT, + b INT, + KEY ab (a,b), + KEY ba (b,a) +); + + +CREATE TABLE local_table ( + a INT, + b INT, + KEY ab (a,b), + KEY ba (b,a) +) ENGINE=federated CONNECTION='local_server/remote_table'; + +SELECT * FROM local_table; + +SELECT * FROM local_table USE INDEX (ab) +WHERE a<1 AND b=0; + +SELECT * FROM local_table USE INDEX (ba) +WHERE a<1 AND b=0; + +DROP DATABASE lp1739734; +DROP SERVER local_server; + +--source suite/federated/include/federated_cleanup.inc diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index 6f0ca88bea5c..427bcdd20cfb 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -1415,8 +1415,9 @@ bool ha_federated::create_where_from_key(String *to, { goto err; } + break; } - break; + // fallthrough case HA_READ_KEY_OR_NEXT: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_NEXT %d", i)); if (emit_key_part_name(&tmp, key_part) || @@ -1434,8 +1435,9 @@ bool ha_federated::create_where_from_key(String *to, emit_key_part_element(&tmp, key_part, needs_quotes, 0, ptr, part_length)) goto err; + break; } - break; + // fallthrough case HA_READ_KEY_OR_PREV: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_PREV %d", i)); if (emit_key_part_name(&tmp, key_part) ||