Skip to content

Commit 4648664

Browse files
committed
[Improve][Jdbc] Support write unicode text into sqlserver
1 parent 49d397c commit 4648664

File tree

3 files changed

+18
-16
lines changed

3 files changed

+18
-16
lines changed

seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/sqlserver/SqlServerTypeConverter.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public class SqlServerTypeConverter implements TypeConverter<BasicTypeDefine> {
8383
public static final int MAX_SCALE = MAX_PRECISION - 1;
8484
public static final int DEFAULT_SCALE = 18;
8585
public static final int MAX_CHAR_LENGTH = 8000;
86+
public static final int MAX_NVARCHAR_LENGTH = 4000;
8687
public static final int MAX_BINARY_LENGTH = 8000;
8788
public static final int MAX_TIME_SCALE = 7;
8889
public static final int MAX_TIMESTAMP_SCALE = 7;
@@ -403,16 +404,16 @@ public BasicTypeDefine reconvert(Column column) {
403404
break;
404405
case STRING:
405406
if (column.getColumnLength() == null || column.getColumnLength() <= 0) {
406-
builder.columnType(SQLSERVER_TEXT);
407-
builder.dataType(SQLSERVER_TEXT);
408-
} else if (column.getColumnLength() <= MAX_CHAR_LENGTH) {
407+
builder.columnType(MAX_NVARCHAR);
408+
builder.dataType(MAX_NVARCHAR);
409+
} else if (column.getColumnLength() <= MAX_NVARCHAR_LENGTH) {
409410
builder.columnType(
410-
String.format("%s(%s)", SQLSERVER_VARCHAR, column.getColumnLength()));
411-
builder.dataType(SQLSERVER_VARCHAR);
411+
String.format("%s(%s)", SQLSERVER_NVARCHAR, column.getColumnLength()));
412+
builder.dataType(SQLSERVER_NVARCHAR);
412413
builder.length(column.getColumnLength());
413414
} else {
414-
builder.columnType(SQLSERVER_TEXT);
415-
builder.dataType(SQLSERVER_TEXT);
415+
builder.columnType(MAX_NVARCHAR);
416+
builder.dataType(MAX_NVARCHAR);
416417
builder.length(column.getColumnLength());
417418
}
418419
break;

seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/PreviewActionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ public void testSqlServerPreviewAction() {
375375
"IF OBJECT_ID('[testddatabase].[testtable]', 'U') IS NULL \n"
376376
+ "BEGIN \n"
377377
+ "CREATE TABLE [testddatabase].[testtable] ( \n"
378-
+ "\t[test] TEXT NULL\n"
378+
+ "\t[test] NVARCHAR(MAX) NULL\n"
379379
+ ");\n"
380380
+ "EXEC testddatabase.sys.sp_addextendedproperty 'MS_Description', N'comment', 'schema', N'null', 'table', N'testtable';\n"
381381
+ "EXEC testddatabase.sys.sp_addextendedproperty 'MS_Description', N'', 'schema', N'null', 'table', N'testtable', 'column', N'test';\n"

seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/sqlserver/SqlServerTypeConverterTest.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -748,36 +748,37 @@ public void testReconvertString() {
748748

749749
BasicTypeDefine typeDefine = SqlServerTypeConverter.INSTANCE.reconvert(column);
750750
Assertions.assertEquals(column.getName(), typeDefine.getName());
751-
Assertions.assertEquals(SqlServerTypeConverter.SQLSERVER_TEXT, typeDefine.getColumnType());
752-
Assertions.assertEquals(SqlServerTypeConverter.SQLSERVER_TEXT, typeDefine.getDataType());
751+
Assertions.assertEquals(SqlServerTypeConverter.MAX_NVARCHAR, typeDefine.getColumnType());
752+
Assertions.assertEquals(SqlServerTypeConverter.MAX_NVARCHAR, typeDefine.getDataType());
753753

754754
column =
755755
PhysicalColumn.builder()
756756
.name("test")
757757
.dataType(BasicType.STRING_TYPE)
758-
.columnLength(8000L)
758+
.columnLength(4000L)
759759
.build();
760760

761761
typeDefine = SqlServerTypeConverter.INSTANCE.reconvert(column);
762762
Assertions.assertEquals(column.getName(), typeDefine.getName());
763763
Assertions.assertEquals(
764764
String.format(
765765
"%s(%s)",
766-
SqlServerTypeConverter.SQLSERVER_VARCHAR, column.getColumnLength()),
766+
SqlServerTypeConverter.SQLSERVER_NVARCHAR, column.getColumnLength()),
767767
typeDefine.getColumnType());
768-
Assertions.assertEquals(SqlServerTypeConverter.SQLSERVER_VARCHAR, typeDefine.getDataType());
768+
Assertions.assertEquals(
769+
SqlServerTypeConverter.SQLSERVER_NVARCHAR, typeDefine.getDataType());
769770

770771
column =
771772
PhysicalColumn.builder()
772773
.name("test")
773774
.dataType(BasicType.STRING_TYPE)
774-
.columnLength(8001L)
775+
.columnLength(4001L)
775776
.build();
776777

777778
typeDefine = SqlServerTypeConverter.INSTANCE.reconvert(column);
778779
Assertions.assertEquals(column.getName(), typeDefine.getName());
779-
Assertions.assertEquals(SqlServerTypeConverter.SQLSERVER_TEXT, typeDefine.getColumnType());
780-
Assertions.assertEquals(SqlServerTypeConverter.SQLSERVER_TEXT, typeDefine.getDataType());
780+
Assertions.assertEquals(SqlServerTypeConverter.MAX_NVARCHAR, typeDefine.getColumnType());
781+
Assertions.assertEquals(SqlServerTypeConverter.MAX_NVARCHAR, typeDefine.getDataType());
781782
}
782783

783784
@Test

0 commit comments

Comments
 (0)