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