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
The following commit(s) were added to refs/heads/branch-2.1 by this push:
new 3a1e95c6c2f branch-2.1: [improvement](jdbc catalog) Optimize the
acquisition of indentity type in SQLServer (#51659)
3a1e95c6c2f is described below
commit 3a1e95c6c2f971a49228e1fc5747086ff8acd56f
Author: zy-kkk <[email protected]>
AuthorDate: Mon Jun 16 16:50:37 2025 +0800
branch-2.1: [improvement](jdbc catalog) Optimize the acquisition of
indentity type in SQLServer (#51659)
pick #51285
---
.../docker-compose/sqlserver/init/03-create-table.sql | 5 +++++
.../docker-compose/sqlserver/init/04-insert.sql | 2 ++
.../datasource/jdbc/client/JdbcSQLServerClient.java | 9 ++++++++-
.../jdbc/test_sqlserver_jdbc_catalog.out | Bin 5638 -> 5667 bytes
.../jdbc/test_sqlserver_jdbc_catalog.groovy | 2 ++
5 files changed, 17 insertions(+), 1 deletion(-)
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 f6c50707214..2baf191956c 100644
--- a/docker/thirdparties/docker-compose/sqlserver/init/03-create-table.sql
+++ b/docker/thirdparties/docker-compose/sqlserver/init/03-create-table.sql
@@ -267,3 +267,8 @@ CREATE TABLE dbo.extreme_test_multi_block
IPv6_Col VARCHAR(39) NOT NULL, -- e.g.,
'FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF'
IPv6_Nullable VARCHAR(39) NULL
);
+
+CREATE TABLE dbo.test_identity_decimal (
+ id decimal(18,0) IDENTITY(1,1),
+ col int
+);
diff --git a/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql
b/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql
index a67e00165de..906a16f1259 100644
--- a/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql
+++ b/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql
@@ -118,3 +118,5 @@ insert into dbo.extreme_test_multi_block select * from
dbo.extreme_test_multi_bl
insert into dbo.extreme_test_multi_block select * from
dbo.extreme_test_multi_block;
insert into dbo.extreme_test_multi_block select * from
dbo.extreme_test_multi_block;
insert into dbo.extreme_test_multi_block select * from dbo.extreme_test;
+
+INSERT INTO dbo.test_identity_decimal(col) select 1;
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 1bb3ece7f09..e737d5fd236 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
@@ -32,7 +32,14 @@ public class JdbcSQLServerClient extends JdbcClient {
String originSqlserverType =
fieldSchema.getDataTypeName().orElse("unknown");
// For sqlserver IDENTITY type, such as 'INT IDENTITY'
// originSqlserverType is "int identity", so we only get "int".
+ // For types with parameters like 'decimal(18,0) IDENTITY(1,1)', we
need to extract the base type
String sqlserverType = originSqlserverType.split(" ")[0];
+
+ // Handle types with parentheses like decimal(18,0), varchar(50), etc.
+ if (sqlserverType.contains("(")) {
+ sqlserverType = sqlserverType.substring(0,
sqlserverType.indexOf("("));
+ }
+
switch (sqlserverType) {
case "bit":
return Type.BOOLEAN;
@@ -55,7 +62,7 @@ public class JdbcSQLServerClient extends JdbcClient {
case "numeric": {
int precision = fieldSchema.getColumnSize().orElse(0);
int scale = fieldSchema.getDecimalDigits().orElse(0);
- return ScalarType.createDecimalV3Type(precision, scale);
+ return createDecimalOrStringType(precision, scale);
}
case "date":
return ScalarType.createDateV2Type();
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 2f3d33633ef..af2b6f9d2b3 100644
Binary files
a/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out
and
b/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out
differ
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 edbf243f4c5..b693cd0cad4 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
@@ -83,6 +83,8 @@ suite("test_sqlserver_jdbc_catalog",
"p0,external,sqlserver,external_docker,exte
order_qt_all_types_tvf """ select * from query('catalog' =
'${catalog_name}', 'query' = 'select * from all_type;') order by 1"""
+ order_qt_identity_decimal """ select * from test_identity_decimal
order by id; """
+
sql """ drop catalog if exists ${catalog_name} """
sql """ create catalog if not exists ${catalog_name} properties(
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]