This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 2e9bd268cd87fd2e2f592f380173c5ddba14e068 Author: zy-kkk <[email protected]> AuthorDate: Tue Mar 5 23:48:19 2024 +0800 [improvement](jdbc catalog) support sqlserver timestamp type read (#31805) --- .../docker-compose/sqlserver/init/03-create-table.sql | 4 ++++ .../docker-compose/sqlserver/init/04-insert.sql | 2 ++ .../java/org/apache/doris/jdbc/SQLServerJdbcExecutor.java | 14 ++++++++++++++ .../doris/datasource/jdbc/client/JdbcSQLServerClient.java | 1 + .../external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out | 7 +++++++ .../jdbc/test_sqlserver_jdbc_catalog.groovy | 3 +++ 6 files changed, 31 insertions(+) diff --git a/docker/thirdparties/docker-compose/sqlserver/init/03-create-table.sql b/docker/thirdparties/docker-compose/sqlserver/init/03-create-table.sql index cddd38f7863..b09a2ca47a6 100644 --- a/docker/thirdparties/docker-compose/sqlserver/init/03-create-table.sql +++ b/docker/thirdparties/docker-compose/sqlserver/init/03-create-table.sql @@ -134,3 +134,7 @@ CREATE TABLE dbo.all_type ( bit_value bit NULL ); +CREATE TABLE dbo.test_timestamp ( +id_col int PRIMARY KEY NOT NULL, +timestamp_col timestamp NULL +); diff --git a/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql b/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql index c18f629707d..930ad497dba 100644 --- a/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql +++ b/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql @@ -97,3 +97,5 @@ Insert into dbo.all_type values 0 ), (2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); + +insert into dbo.test_timestamp(id_col) values(1); diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SQLServerJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SQLServerJdbcExecutor.java index 655217fd07e..efe47b2d075 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SQLServerJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SQLServerJdbcExecutor.java @@ -109,6 +109,8 @@ public class SQLServerJdbcExecutor extends BaseJdbcExecutor { return createConverter(input -> { if (input instanceof java.sql.Time) { return timeToString((java.sql.Time) input); + } else if (input instanceof byte[]) { + return sqlserverByteArrayToHexString((byte[]) input); } else { return input.toString(); } @@ -117,4 +119,16 @@ public class SQLServerJdbcExecutor extends BaseJdbcExecutor { return null; } } + + private String sqlserverByteArrayToHexString(byte[] bytes) { + StringBuilder hexString = new StringBuilder("0x"); + for (byte b : bytes) { + String hex = Integer.toHexString(0xFF & b); + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); + } + return hexString.toString(); + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSQLServerClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSQLServerClient.java index 8657b381b09..6ac3ca40e61 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSQLServerClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSQLServerClient.java @@ -82,6 +82,7 @@ public class JdbcSQLServerClient extends JdbcClient { case "time": case "datetimeoffset": case "uniqueidentifier": + case "timestamp": return ScalarType.createStringType(); case "image": case "binary": diff --git a/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out b/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out index 29036aa3429..3b9c571e595 100644 --- a/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out +++ b/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out @@ -107,6 +107,13 @@ bit_value BOOLEAN Yes false \N NONE 1 doris 18 0 1 1 123.123 123.123 123.123 12345678901234567890123456789012345678 12345678901234567890123456789012345678 1234567890123456789012345678.0123456789 1234567890123456789012345678.0123456789 Make Doris Great! Make Doris Great! Make Doris Great! Make Doris Great! Make Doris Great! Make Doris Great! 2023-01-17 16:49:05.123 2023-01-17T16:49:05 2023-01-17T16:49:05.123456 2023-01-17T16:49 2023-01-17 16:49:05 +08:00 Make Doris Great! Make Doris Great! 922337203685477.5807 214748. [...] 2 \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N +-- !desc_timestamp -- +id_col INT No true \N +timestamp_col TEXT Yes true \N + +-- !query_timestamp -- +1 + -- !sql -- INFORMATION_SCHEMA db_accessadmin diff --git a/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy index 068f781fad6..f297e0b51b3 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy @@ -84,6 +84,9 @@ suite("test_sqlserver_jdbc_catalog", "p0,external,sqlserver,external_docker,exte order_qt_ctas """ create table internal.${internal_db_name}.ctas_all_type PROPERTIES("replication_num" = "1") as select * from all_type; """ qt_desc_query_ctas """ desc internal.${internal_db_name}.ctas_all_type; """ order_qt_query_ctas """ select * from internal.${internal_db_name}.ctas_all_type order by id; """ + order_qt_desc_timestamp """desc dbo.test_timestamp; """ + order_qt_query_timestamp """select count(timestamp_col) from dbo.test_timestamp; """ + sql """ drop catalog if exists ${catalog_name} """ --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
