From 3cd1c7745abefb27c8bede13b44a03d8c23e811f Mon Sep 17 00:00:00 2001 From: zy-kkk Date: Mon, 8 Jan 2024 17:53:52 +0800 Subject: [PATCH] [fix](jdbc catalog) Fix the precision of decimal type mapping to 0 (#29407) --- .../docker-compose/postgresql/init/02-create-table.sql | 7 ++++++- .../docker-compose/postgresql/init/04-insert.sql | 4 ++++ .../apache/doris/datasource/jdbc/client/JdbcClient.java | 2 +- .../data/external_table_p0/jdbc/test_pg_jdbc_catalog.out | 5 +++++ .../external_table_p0/jdbc/test_pg_jdbc_catalog.groovy | 1 + 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/docker/thirdparties/docker-compose/postgresql/init/02-create-table.sql b/docker/thirdparties/docker-compose/postgresql/init/02-create-table.sql index a026e560d0..7983d55a01 100644 --- a/docker/thirdparties/docker-compose/postgresql/init/02-create-table.sql +++ b/docker/thirdparties/docker-compose/postgresql/init/02-create-table.sql @@ -257,4 +257,9 @@ LANGUAGE plpgsql; --挂载分区Trigger CREATE TRIGGER insert_almart_partition_trigger BEFORE INSERT ON catalog_pg_test.tb_test_alarm - FOR EACH ROW EXECUTE PROCEDURE alarm_partition_trigger(); \ No newline at end of file + FOR EACH ROW EXECUTE PROCEDURE alarm_partition_trigger(); + +CREATE TABLE catalog_pg_test.num_zero ( + id varchar(20) NULL, + num numeric NULL +); diff --git a/docker/thirdparties/docker-compose/postgresql/init/04-insert.sql b/docker/thirdparties/docker-compose/postgresql/init/04-insert.sql index 2ea1e15b8b..c39e9924a7 100644 --- a/docker/thirdparties/docker-compose/postgresql/init/04-insert.sql +++ b/docker/thirdparties/docker-compose/postgresql/init/04-insert.sql @@ -2725,3 +2725,7 @@ values('1','A','2020-09-02 00:00:00') ,('3','A','2020-11-02 00:00:00') ,('4','A','2020-12-02 00:00:00') ; + +INSERT INTO catalog_pg_test.num_zero (id, num) VALUES ('001', 123.45); +INSERT INTO catalog_pg_test.num_zero (id, num) VALUES ('002', 678.90); +INSERT INTO catalog_pg_test.num_zero (id, num) VALUES ('003', 1011.12); diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java index 8d91791c33..d53b720829 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java @@ -520,7 +520,7 @@ public abstract class JdbcClient { protected abstract Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema); protected Type createDecimalOrStringType(int precision, int scale) { - if (precision <= ScalarType.MAX_DECIMAL128_PRECISION) { + if (precision <= ScalarType.MAX_DECIMAL128_PRECISION && precision > 0) { return ScalarType.createDecimalV3Type(precision, scale); } return ScalarType.createStringType(); diff --git a/regression-test/data/external_table_p0/jdbc/test_pg_jdbc_catalog.out b/regression-test/data/external_table_p0/jdbc/test_pg_jdbc_catalog.out index 3920c1d7f9..d63ee2c0ba 100644 --- a/regression-test/data/external_table_p0/jdbc/test_pg_jdbc_catalog.out +++ b/regression-test/data/external_table_p0/jdbc/test_pg_jdbc_catalog.out @@ -2207,6 +2207,11 @@ true abc def 2022-10-11 1.234 1 2 99 2022-10-22T10:59:59 34.123 -- !partition_2_4 -- 4 A 2020-12-02T08:00 +-- !num_zero -- +001 123.45 +002 678.90 +003 1011.12 + -- !test_insert1 -- doris1 18 diff --git a/regression-test/suites/external_table_p0/jdbc/test_pg_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_pg_jdbc_catalog.groovy index f65ca4ca6f..9546b12c2a 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_pg_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_pg_jdbc_catalog.groovy @@ -129,6 +129,7 @@ suite("test_pg_jdbc_catalog", "p0,external,pg,external_docker,external_docker_pg order_qt_partition_2_2 "select * from tb_test_alarm_2020_10;" order_qt_partition_2_3 "select * from tb_test_alarm_2020_11;" order_qt_partition_2_4 "select * from tb_test_alarm_2020_12;" + order_qt_num_zero "select * from num_zero;" // test insert String uuid1 = UUID.randomUUID().toString();