This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
commit cf0297ce894151ddd9b7b0020334a2aad5865a74 Author: Ashin Gau <[email protected]> AuthorDate: Tue May 23 09:29:57 2023 +0800 [fix](multi-catalog) JDBC Catalog Unknown UNSIGNED type of mysql, type: [DOUBLE] (#19912) --- .../docker-compose/mysql/init/03-create-table.sql | 35 ++++++++++++++++++++++ .../docker-compose/mysql/init/04-insert.sql | 14 +++++++++ .../org/apache/doris/external/jdbc/JdbcClient.java | 8 +++++ .../jdbc_catalog_p0/test_mysql_jdbc_catalog.out | 5 ++++ .../jdbc_catalog_p0/test_mysql_jdbc_catalog.groovy | 5 ++++ 5 files changed, 67 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 b47ea6d169..ad8ab8d500 100644 --- a/docker/thirdparties/docker-compose/mysql/init/03-create-table.sql +++ b/docker/thirdparties/docker-compose/mysql/init/03-create-table.sql @@ -248,3 +248,38 @@ create table doris_test.test_insert2 ( k14 datetime, k15 timestamp ) engine=innodb charset=utf8; + +create table doris_test.all_types ( + `tinyint_u` tinyint unsigned, + `smallint_u` smallint unsigned, + `mediumint_u` mediumint unsigned, + `int_u` int unsigned, + `bigint_u` bigint unsigned, + `decimal_u` decimal(18, 5) unsigned, + `double_u` double unsigned, + `float_u` float unsigned, + `boolean` boolean, + `tinyint` tinyint, + `smallint` smallint, + `year` year, + `mediumint` mediumint, + `int` int, + `bigint` bigint, + `date` date, + `timestamp` timestamp(4), + `datetime` datetime, + `float` float, + `double` double, + `decimal` decimal(12, 4), + `char` char(5), + `varchar` varchar(10), + `time` time(4), + `text` text, + `blob` blob, + `json` json, + `set` set('Option1', 'Option2', 'Option3'), + `bit` bit(6), + `binary` binary(12), + `varbinary` varbinary(12), + `enum` enum('Value1', 'Value2', 'Value3') +) engine=innodb charset=utf8; diff --git a/docker/thirdparties/docker-compose/mysql/init/04-insert.sql b/docker/thirdparties/docker-compose/mysql/init/04-insert.sql index d978a2298d..bf347a0780 100644 --- a/docker/thirdparties/docker-compose/mysql/init/04-insert.sql +++ b/docker/thirdparties/docker-compose/mysql/init/04-insert.sql @@ -1124,3 +1124,17 @@ INSERT INTO doris_test.ex_tb20 VALUES (1.12345, 1.12345, 1.12345, 1.12345, 1.12345, 1.12345), (123456789012345678901234567890123.12345, 12345678901234567890123456789012.12345, 1234567890123456789012345678901234.12345, 123456789012345678901234567890123.12345, 123456789012345678901234567890123456789012345678901234567890.12345, 123456789012345678901234567890123456789012345678901234567890.12345); + +INSERT INTO doris_test.all_types VALUES +(201, 301, 401, 501, 601, 3.14159, 4.1415926, 5.141592, true, -123, -301, 2012, -401, -501, -601, '2012-10-30', '2012-10-25 12:05:36.3456712', '2012-10-25 08:08:08.3456712', + -4.14145001, -5.1400000001, -6.140000001, 'row1', 'line1', '09:09:09.56782346', 'text1', X'48656C6C6F20576F726C64', '{"name": "Alice", "age": 30, "city": "London"}', + 'Option1,Option3', b'101010', X'48656C6C6F', X'48656C6C6F', 'Value2'), +(202, 302, 402, 502, 602, 4.14159, 5.1415926, 6.141592, false, -124, -302, 2013, -402, -502, -602, '2012-11-01', '2012-10-26 02:08:39.3456712', '2013-10-26 08:09:18.3456712', + -5.14145001, -6.1400000001, -7.140000001, 'row2', 'line2', '09:11:09.56782346', 'text2', X'E86F6C6C6F20576F726C67', '{"name": "Gaoxin", "age": 18, "city": "ChongQing"}', + 'Option1,Option2', b'101111', X'58676C6C6F', X'88656C6C9F', 'Value3'), +(null, 302, null, 502, 602, 4.14159, null, 6.141592, null, -124, -302, 2013, -402, -502, -602, null, '2012-10-26 02:08:39.3456712', '2013-10-26 08:09:18.3456712', + -5.14145001, null, -7.140000001, 'row2', null, '09:11:09.56782346', 'text2', X'E86F6C6C6F20576F726C67', null, + null, b'101111', null, X'88656C6C9F', 'Value3'), +(203, 303, 403, 503, 603, 7.14159, 8.1415926, 9.141592, false, null, -402, 2017, -602, -902, -1102, '2012-11-02', null, '2013-10-27 08:11:18.3456712', + -5.14145000001, -6.1400000000001, -7.140000000001, 'row3', 'line3', '09:11:09.56782346', 'text3', X'E86F6C6C6F20576F726C67', '{"name": "ChenQi", "age": 24, "city": "ChongQing"}', + 'Option2', b'101111', X'58676C6C6F', null, 'Value1'); diff --git a/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java b/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java index 4b4a94cf85..6981c5342d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java @@ -477,6 +477,14 @@ public class JdbcClient { int precision = fieldSchema.getColumnSize() + 1; int scale = fieldSchema.getDecimalDigits(); return createDecimalOrStringType(precision, scale); + case "DOUBLE": + // As of MySQL 8.0.17, the UNSIGNED attribute is deprecated + // for columns of type FLOAT, DOUBLE, and DECIMAL (and any synonyms) + // https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html + // The maximum value may cause errors due to insufficient accuracy + return Type.DOUBLE; + case "FLOAT": + return Type.FLOAT; default: throw new JdbcClientException("Unknown UNSIGNED type of mysql, type: [" + mysqlType + "]"); } diff --git a/regression-test/data/jdbc_catalog_p0/test_mysql_jdbc_catalog.out b/regression-test/data/jdbc_catalog_p0/test_mysql_jdbc_catalog.out index 3165ca1e37..982b79b310 100644 --- a/regression-test/data/jdbc_catalog_p0/test_mysql_jdbc_catalog.out +++ b/regression-test/data/jdbc_catalog_p0/test_mysql_jdbc_catalog.out @@ -170,3 +170,8 @@ doris_test -- !ex_tb1 -- {"k1":"v1", "k2":"v2"} +-- !mysql_all_types -- +\N 302 \N 502 602 4.14159 \N 6.14159 \N -124 -302 2013 -402 -502 -602 \N 2012-10-26T02:08:39.345700 2013-10-26T08:09:18 -5.14145 \N -7.1400 row2 \N 09:11:09.567 text2 \\xe86f6c6c6f20576f726c67 \N \N \\x2f \N \\x88656c6c9f Value3 +201 301 401 501 601 3.14159 4.1415926 5.14159 true -123 -301 2012 -401 -501 -601 2012-10-30 2012-10-25T12:05:36.345700 2012-10-25T08:08:08 -4.14145 -5.1400000001 -6.1400 row1 line1 09:09:09.567 text1 \\x48656c6c6f20576f726c64 {"age": 30, "city": "London", "name": "Alice"} Option1,Option3 \\x2a \\x48656c6c6f00000000000000 \\x48656c6c6f Value2 +202 302 402 502 602 4.14159 5.1415926 6.14159 false -124 -302 2013 -402 -502 -602 2012-11-01 2012-10-26T02:08:39.345700 2013-10-26T08:09:18 -5.14145 -6.1400000001 -7.1400 row2 line2 09:11:09.567 text2 \\xe86f6c6c6f20576f726c67 {"age": 18, "city": "ChongQing", "name": "Gaoxin"} Option1,Option2 \\x2f \\x58676c6c6f00000000000000 \\x88656c6c9f Value3 +203 303 403 503 603 7.14159 8.1415926 9.14159 false \N -402 2017 -602 -902 -1102 2012-11-02 2023-05-22T16:01:20.063700 2013-10-27T08:11:18 -5.14145 -6.1400000000001 -7.1400 row3 line3 09:11:09.567 text3 \\xe86f6c6c6f20576f726c67 {"age": 24, "city": "ChongQing", "name": "ChenQi"} Option2 \\x2f \\x58676c6c6f00000000000000 \N Value1 diff --git a/regression-test/suites/jdbc_catalog_p0/test_mysql_jdbc_catalog.groovy b/regression-test/suites/jdbc_catalog_p0/test_mysql_jdbc_catalog.groovy index 0e58ff9fca..400fa4ec44 100644 --- a/regression-test/suites/jdbc_catalog_p0/test_mysql_jdbc_catalog.groovy +++ b/regression-test/suites/jdbc_catalog_p0/test_mysql_jdbc_catalog.groovy @@ -151,6 +151,11 @@ suite("test_mysql_jdbc_catalog", "p0") { sql """ switch ${catalog_name} """ sql """ use ${ex_db_name} """ order_qt_ex_tb1 """ select * from ${ex_tb1} order by id; """ + + // test all types supported by MySQL + sql """use doris_test;""" + qt_mysql_all_types """select * from all_types order by tinyint_u;""" + sql """ drop catalog if exists ${catalog_name} """ } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
