From 8dde524e4b4965fe42e98db53ed42bd307064d8a Mon Sep 17 00:00:00 2001 From: zy-kkk Date: Wed, 8 Nov 2023 21:41:56 +0800 Subject: [PATCH] [fix](jdbc catalog) fix mysql zero date (#26569) --- .../docker-compose/mysql/init/03-create-table.sql | 5 +++++ docker/thirdparties/docker-compose/mysql/init/04-insert.sql | 5 +++++ .../apache/doris/datasource/jdbc/client/JdbcMySQLClient.java | 3 +++ .../data/external_table_p0/jdbc/test_mysql_jdbc_catalog.out | 4 ++++ .../external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy | 2 ++ 5 files changed, 19 insertions(+) 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 3908f73eabe35b..4467851606a1ce 100644 --- a/docker/thirdparties/docker-compose/mysql/init/03-create-table.sql +++ b/docker/thirdparties/docker-compose/mysql/init/03-create-table.sql @@ -326,3 +326,8 @@ CREATE TABLE show_test_do_not_modify.ex_tb2 ( id int, count_value varchar(20) ); + +CREATE TABLE doris_test.test_zd ( +`id` int(10) unsigned NOT NULL, +`d_z` date NOT NULL +); diff --git a/docker/thirdparties/docker-compose/mysql/init/04-insert.sql b/docker/thirdparties/docker-compose/mysql/init/04-insert.sql index bcf14c49275e90..b19765c769f86a 100644 --- a/docker/thirdparties/docker-compose/mysql/init/04-insert.sql +++ b/docker/thirdparties/docker-compose/mysql/init/04-insert.sql @@ -1154,3 +1154,8 @@ 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','')); + +insert into doris_test.test_zd (id,d_z) VALUES (1,'0000-00-00'),(2,'2022-01-01'); diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java index cb06722a05dbd9..61ba2a0db47d07 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java @@ -265,6 +265,9 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { case "BIGINT": return Type.BIGINT; case "DATE": + if (convertDateToNull) { + fieldSchema.setAllowNull(true); + } return ScalarType.createDateV2Type(); case "TIMESTAMP": case "DATETIME": { 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 fffbcabacdf4dd..3645341c9959cf 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 @@ -241,6 +241,10 @@ VIEWS \N 2023-06-17T10:00 +-- !test_dz -- +1 \N +2 2022-01-01 + -- !test_insert1 -- doris1 18 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 7677a516328389..ab810e6af254ba 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 @@ -62,6 +62,7 @@ suite("test_mysql_jdbc_catalog", "p0,external,mysql,external_docker,external_doc String auto_default_t = "auto_default_t"; String dt = "dt"; String dt_null = "dt_null"; + String test_zd = "test_zd" try_sql("DROP USER ${user}") sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'""" @@ -163,6 +164,7 @@ suite("test_mysql_jdbc_catalog", "p0,external,mysql,external_docker,external_doc order_qt_auto_default_t """insert into ${auto_default_t}(name) values('a'); """ order_qt_dt """select * from ${dt}; """ order_qt_dt_null """select * from ${dt_null} order by 1; """ + order_qt_test_dz """select * from ${test_zd} order by 1; """ // test insert String uuid1 = UUID.randomUUID().toString();