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 f6c507072149cd..2baf191956cdd5 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 a67e00165de8bd..906a16f1259018 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 1bb3ece7f094de..e737d5fd236718 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 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { 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 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { 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 2f3d33633ef05e..af2b6f9d2b33eb 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 @@ -130,6 +130,9 @@ timestamp_col text Yes true \N 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.3647 false 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 +-- !identity_decimal -- +1 1 + -- !sql -- db_accessadmin db_backupoperator 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 edbf243f4c5956..b693cd0cad4b0e 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(