You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2024/03/06 05:09:52 UTC

(doris) 41/47: [improvement](jdbc catalog) support sqlserver timestamp type read (#31805)

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 <zh...@gmail.com>
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: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org