Skip to content

Commit 2e002ce

Browse files
authored
[bugfix] fix oracle query table length (apache#7627)
1 parent 65c14aa commit 2e002ce

File tree

4 files changed

+16
-7
lines changed

4 files changed

+16
-7
lines changed

seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ public Column convert(BasicTypeDefine typeDefine) {
173173
case ORACLE_VARCHAR:
174174
case ORACLE_VARCHAR2:
175175
builder.dataType(BasicType.STRING_TYPE);
176-
builder.columnLength(typeDefine.getLength());
176+
builder.columnLength(TypeDefineUtils.charTo4ByteLength(typeDefine.getLength()));
177177
break;
178178
case ORACLE_NCHAR:
179179
case ORACLE_NVARCHAR2:

seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeMapper.java

-3
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,6 @@ public Column mappingColumn(ResultSetMetaData metadata, int colIndex) throws SQL
5959
} else if (Arrays.asList("NVARCHAR2", "NCHAR").contains(nativeType)) {
6060
long doubleByteLength = TypeDefineUtils.charToDoubleByteLength(precision);
6161
precision = doubleByteLength;
62-
} else if (Arrays.asList("CHAR", "VARCHAR", "VARCHAR2").contains(nativeType)) {
63-
long octetByteLength = TypeDefineUtils.charTo4ByteLength(precision);
64-
precision = octetByteLength;
6562
}
6663

6764
BasicTypeDefine typeDefine =

seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverterTest.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ public void testConvertChar() {
355355

356356
Assertions.assertEquals(typeDefine.getName(), column.getName());
357357
Assertions.assertEquals(BasicType.STRING_TYPE, column.getDataType());
358-
Assertions.assertEquals(typeDefine.getLength(), column.getColumnLength());
358+
Assertions.assertEquals(typeDefine.getLength() * 4, column.getColumnLength());
359359
Assertions.assertEquals(typeDefine.getColumnType(), column.getSourceType());
360360

361361
typeDefine =
@@ -383,7 +383,7 @@ public void testConvertChar() {
383383

384384
Assertions.assertEquals(typeDefine.getName(), column.getName());
385385
Assertions.assertEquals(BasicType.STRING_TYPE, column.getDataType());
386-
Assertions.assertEquals(typeDefine.getLength(), column.getColumnLength());
386+
Assertions.assertEquals(typeDefine.getLength() * 4, column.getColumnLength());
387387
Assertions.assertEquals(typeDefine.getColumnType(), column.getSourceType());
388388

389389
typeDefine =
@@ -397,7 +397,7 @@ public void testConvertChar() {
397397

398398
Assertions.assertEquals(typeDefine.getName(), column.getName());
399399
Assertions.assertEquals(BasicType.STRING_TYPE, column.getDataType());
400-
Assertions.assertEquals(typeDefine.getLength(), column.getColumnLength());
400+
Assertions.assertEquals(typeDefine.getLength() * 4, column.getColumnLength());
401401
Assertions.assertEquals(typeDefine.getColumnType(), column.getSourceType());
402402

403403
typeDefine =

seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-6/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcOracleLowercaseTableIT.java

+12
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.apache.seatunnel.connectors.seatunnel.jdbc;
2020

2121
import org.apache.seatunnel.api.table.catalog.CatalogTable;
22+
import org.apache.seatunnel.api.table.catalog.Column;
2223
import org.apache.seatunnel.api.table.catalog.TablePath;
2324
import org.apache.seatunnel.api.table.type.SeaTunnelRow;
2425
import org.apache.seatunnel.connectors.seatunnel.jdbc.catalog.oracle.OracleCatalog;
@@ -36,6 +37,7 @@
3637
import org.testcontainers.utility.MountableFile;
3738

3839
import com.google.common.collect.Lists;
40+
import lombok.SneakyThrows;
3941

4042
import java.math.BigDecimal;
4143
import java.sql.Date;
@@ -275,6 +277,16 @@ public void testCatalog() {
275277
Assertions.assertEquals(
276278
table.getTableSchema().getColumns().get(1).getComment(),
277279
"\"#¥%……&*();;',,..``````//'@特殊注释'\\'\"");
280+
testTableOfQuery(oracleCatalog);
278281
oracleCatalog.close();
279282
}
283+
284+
@SneakyThrows
285+
private void testTableOfQuery(OracleCatalog oracleCatalog) {
286+
String querySql = "select * from TESTUSER.E2E_TABLE_SOURCE_LOWER";
287+
CatalogTable tableOfQuery = oracleCatalog.getTable(querySql);
288+
final List<Column> columns = tableOfQuery.getTableSchema().getColumns();
289+
Assertions.assertEquals(columns.get(0).getColumnLength(), 40);
290+
Assertions.assertEquals(columns.get(1).getColumnLength(), 40);
291+
}
280292
}

0 commit comments

Comments
 (0)