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]

Reply via email to