From 49cffd0bc98324d8d61c10785b0c9aaad672c2a4 Mon Sep 17 00:00:00 2001 From: Tiewei Fang <43782773+BePPPower@users.noreply.github.com> Date: Fri, 10 Nov 2023 09:54:39 +0800 Subject: [PATCH] [fix](JdbcCatalog) fix that the predicate column name does not have back quote when querying the JDBC appearance (#26479) --- .../docker-compose/mysql/init/03-create-table.sql | 5 +++++ .../docker-compose/mysql/init/04-insert.sql | 3 +++ .../doris/planner/external/jdbc/JdbcScanNode.java | 13 +++++++++++++ .../jdbc/test_mysql_jdbc_catalog.out | 3 +++ .../jdbc/test_clickhouse_jdbc_catalog.groovy | 2 +- .../jdbc/test_mysql_jdbc_catalog.groovy | 4 +++- .../jdbc/test_mysql_jdbc_catalog_nereids.groovy | 2 +- 7 files changed, 29 insertions(+), 3 deletions(-) diff --git a/docker/thirdparties/docker-compose/mysql/init/03-create-table.sql b/docker/thirdparties/docker-compose/mysql/init/03-create-table.sql index ee44e1c87a..4467851606 100644 --- a/docker/thirdparties/docker-compose/mysql/init/03-create-table.sql +++ b/docker/thirdparties/docker-compose/mysql/init/03-create-table.sql @@ -308,6 +308,11 @@ CREATE TABLE doris_test.dt_null ( CREATE VIEW doris_test.mysql_view as select 10086 as col_1, 4294967295 as col_2, tinyint_u as col_3 from doris_test.all_types where tinyint_u=201; +CREATE TABLE doris_test.test_key_word ( +`id` int, +`key` int +) ENGINE=INNODB CHARSET=utf8; + CREATE TABLE show_test_do_not_modify.ex_tb0 ( `id` int PRIMARY KEY, `name` varchar(128) diff --git a/docker/thirdparties/docker-compose/mysql/init/04-insert.sql b/docker/thirdparties/docker-compose/mysql/init/04-insert.sql index 3ff51a9a12..588f9dd915 100644 --- a/docker/thirdparties/docker-compose/mysql/init/04-insert.sql +++ b/docker/thirdparties/docker-compose/mysql/init/04-insert.sql @@ -1153,6 +1153,9 @@ SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'STRICT_TRANS_TABLES','')); INSERT INTO doris_test.dt_null VALUES ('2023-06-17 10:00:00'),('0000-00-00 00:00:00'); + +insert into doris_test.test_key_word values (1, 1), (2, 2); + SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'NO_ZERO_DATE','')); SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'NO_ZERO_IN_DATE','')); diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/external/jdbc/JdbcScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/external/jdbc/JdbcScanNode.java index 3295284da9..23a44ed643 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/external/jdbc/JdbcScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/external/jdbc/JdbcScanNode.java @@ -353,6 +353,19 @@ public class JdbcScanNode extends ExternalScanNode { return filter; } + if (expr.contains(SlotRef.class) && expr instanceof BinaryPredicate) { + ArrayList children = expr.getChildren(); + String filter; + if (children.get(0) instanceof SlotRef) { + filter = JdbcTable.databaseProperName(tableType, children.get(0).toMySql()); + } else { + filter = children.get(0).toMySql(); + } + filter += " " + ((BinaryPredicate) expr).getOp().toString() + " "; + filter += children.get(1).toMySql(); + return filter; + } + // only for old planner if (expr.contains(BoolLiteral.class) && "1".equals(expr.getStringValue()) && expr.getChildren().isEmpty()) { return "1 = 1"; diff --git a/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_catalog.out b/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_catalog.out index 38bb7a6782..3645341c99 100644 --- a/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_catalog.out +++ b/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_catalog.out @@ -165,6 +165,9 @@ bca 2022-11-02 2022-11-02 8012 vivo 1.12345 1.12345 1.12345 1.12345 1.12345 1.12345 123456789012345678901234567890123.12345 12345678901234567890123456789012.12345 1234567890123456789012345678901234.12345 123456789012345678901234567890123.12345 123456789012345678901234567890123456789012345678901234567890.12345 123456789012345678901234567890123456789012345678901234567890.12345 +-- !ex_tb21 -- +2 2 + -- !information_schema -- CHARACTER_SETS COLLATIONS diff --git a/regression-test/suites/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.groovy index 2d0707101f..987cbe9402 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.groovy @@ -88,7 +88,7 @@ suite("test_clickhouse_jdbc_catalog", "p0,external,clickhouse,external_docker,ex order_qt_func_push2 """select * from ts where ts <= unix_timestamp(from_unixtime(ts,'yyyyMMdd'));""" explain { sql("select * from ts where ts <= unix_timestamp(from_unixtime(ts,'yyyy-MM-dd'));") - contains """QUERY: SELECT "id", "ts" FROM "doris_test"."ts" WHERE (ts <= toUnixTimestamp(FROM_UNIXTIME(ts, '%Y-%m-%d')))""" + contains """QUERY: SELECT "id", "ts" FROM "doris_test"."ts" WHERE ("ts" <= toUnixTimestamp(FROM_UNIXTIME(ts, '%Y-%m-%d')))""" } sql """ drop catalog if exists ${catalog_name} """ diff --git a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy index f70c44057b..f7896b66f1 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy @@ -54,6 +54,7 @@ suite("test_mysql_jdbc_catalog", "p0,external,mysql,external_docker,external_doc String ex_tb18 = "ex_tb18"; String ex_tb19 = "ex_tb19"; String ex_tb20 = "ex_tb20"; + String ex_tb21 = "test_key_word"; String test_insert = "test_insert"; String test_insert2 = "test_insert2"; String test_insert_all_types = "test_insert_all_types"; @@ -158,6 +159,7 @@ suite("test_mysql_jdbc_catalog", "p0,external,mysql,external_docker,external_doc order_qt_ex_tb18 """ select * from ${ex_tb18} order by num_tinyint; """ order_qt_ex_tb19 """ select * from ${ex_tb19} order by date_value; """ order_qt_ex_tb20 """ select * from ${ex_tb20} order by decimal_normal; """ + order_qt_ex_tb21 """ select `key`, `id` from ${ex_tb21} where `key` = 2 order by id;""" order_qt_information_schema """ show tables from information_schema; """ order_qt_auto_default_t """insert into ${auto_default_t}(name) values('a'); """ order_qt_dt """select * from ${dt}; """ @@ -367,7 +369,7 @@ suite("test_mysql_jdbc_catalog", "p0,external,mysql,external_docker,external_doc explain { sql ("select k6, k8 from test1 where nvl(k6, null) = 1 and k8 = 1;") - contains "QUERY: SELECT `k6`, `k8` FROM `doris_test`.`test1` WHERE (k8 = 1)" + contains "QUERY: SELECT `k6`, `k8` FROM `doris_test`.`test1` WHERE (`k8` = 1)" } sql """ admin set frontend config ("enable_func_pushdown" = "true"); """ sql """ drop catalog if exists mysql_fun_push_catalog; """ diff --git a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog_nereids.groovy b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog_nereids.groovy index a25ce87ac9..c63314b186 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog_nereids.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog_nereids.groovy @@ -82,7 +82,7 @@ suite("test_mysql_jdbc_catalog_nereids", "p0,external,mysql,external_docker,exte explain { sql("""select id from ${ex_tb0} where id = 111;""") - contains "WHERE (id = 111)" + contains "WHERE (`id` = 111)" } qt_ex_tb0_where """select id from ${ex_tb0} where id = 111;""" order_qt_ex_tb0 """ select id, name from ${ex_tb0} order by id; """