This is an automated email from the ASF dual-hosted git repository.

dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 8e3146732da branch-3.0: [improvement](jdbc catalog) Optimize the 
acquisition of indentity type in SQLServer #51285 (#51317)
8e3146732da is described below

commit 8e3146732da41d0b607eaaa920aafcf8a44def76
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Jun 11 10:37:10 2025 +0800

    branch-3.0: [improvement](jdbc catalog) Optimize the acquisition of 
indentity type in SQLServer #51285 (#51317)
    
    Cherry-picked from #51285
    
    Co-authored-by: zy-kkk <zhongy...@gmail.com>
---
 .../docker-compose/sqlserver/init/03-create-table.sql |   7 ++++++-
 .../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, 18 insertions(+), 2 deletions(-)

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 09f4aed394e..8d62085b1b3 100644
--- a/docker/thirdparties/docker-compose/sqlserver/init/03-create-table.sql
+++ b/docker/thirdparties/docker-compose/sqlserver/init/03-create-table.sql
@@ -271,4 +271,9 @@ CREATE TABLE dbo.extreme_test_multi_block
     IPv4_Nullable    VARCHAR(15) NULL,
     IPv6_Col         VARCHAR(39) NOT NULL,  -- e.g., 
'FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF'
     IPv6_Nullable    VARCHAR(39) NULL
-);
\ No newline at end of file
+);
+
+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 ba1ddc9e66f..aadacd884a3 100644
--- a/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql
+++ b/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql
@@ -121,3 +121,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: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to