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

wanghailin pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new 2e002ce09b [bugfix] fix oracle query table length (#7627)
2e002ce09b is described below

commit 2e002ce09b84fb41e5fbb4c204e32f1aeaa87d97
Author: 老王 <[email protected]>
AuthorDate: Wed Sep 11 15:38:31 2024 +0800

    [bugfix] fix oracle query table length (#7627)
---
 .../jdbc/internal/dialect/oracle/OracleTypeConverter.java    |  2 +-
 .../jdbc/internal/dialect/oracle/OracleTypeMapper.java       |  3 ---
 .../internal/dialect/oracle/OracleTypeConverterTest.java     |  6 +++---
 .../seatunnel/jdbc/JdbcOracleLowercaseTableIT.java           | 12 ++++++++++++
 4 files changed, 16 insertions(+), 7 deletions(-)

diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverter.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverter.java
index 023fa949cf..01aa92ce7e 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverter.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverter.java
@@ -173,7 +173,7 @@ public class OracleTypeConverter implements 
TypeConverter<BasicTypeDefine> {
             case ORACLE_VARCHAR:
             case ORACLE_VARCHAR2:
                 builder.dataType(BasicType.STRING_TYPE);
-                builder.columnLength(typeDefine.getLength());
+                
builder.columnLength(TypeDefineUtils.charTo4ByteLength(typeDefine.getLength()));
                 break;
             case ORACLE_NCHAR:
             case ORACLE_NVARCHAR2:
diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeMapper.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeMapper.java
index bbdd19af8e..ee725fb1b4 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeMapper.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeMapper.java
@@ -59,9 +59,6 @@ public class OracleTypeMapper implements 
JdbcDialectTypeMapper {
         } else if (Arrays.asList("NVARCHAR2", "NCHAR").contains(nativeType)) {
             long doubleByteLength = 
TypeDefineUtils.charToDoubleByteLength(precision);
             precision = doubleByteLength;
-        } else if (Arrays.asList("CHAR", "VARCHAR", 
"VARCHAR2").contains(nativeType)) {
-            long octetByteLength = 
TypeDefineUtils.charTo4ByteLength(precision);
-            precision = octetByteLength;
         }
 
         BasicTypeDefine typeDefine =
diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverterTest.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverterTest.java
index d4a8defdda..72e6c1bde1 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverterTest.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverterTest.java
@@ -355,7 +355,7 @@ public class OracleTypeConverterTest {
 
         Assertions.assertEquals(typeDefine.getName(), column.getName());
         Assertions.assertEquals(BasicType.STRING_TYPE, column.getDataType());
-        Assertions.assertEquals(typeDefine.getLength(), 
column.getColumnLength());
+        Assertions.assertEquals(typeDefine.getLength() * 4, 
column.getColumnLength());
         Assertions.assertEquals(typeDefine.getColumnType(), 
column.getSourceType());
 
         typeDefine =
@@ -383,7 +383,7 @@ public class OracleTypeConverterTest {
 
         Assertions.assertEquals(typeDefine.getName(), column.getName());
         Assertions.assertEquals(BasicType.STRING_TYPE, column.getDataType());
-        Assertions.assertEquals(typeDefine.getLength(), 
column.getColumnLength());
+        Assertions.assertEquals(typeDefine.getLength() * 4, 
column.getColumnLength());
         Assertions.assertEquals(typeDefine.getColumnType(), 
column.getSourceType());
 
         typeDefine =
@@ -397,7 +397,7 @@ public class OracleTypeConverterTest {
 
         Assertions.assertEquals(typeDefine.getName(), column.getName());
         Assertions.assertEquals(BasicType.STRING_TYPE, column.getDataType());
-        Assertions.assertEquals(typeDefine.getLength(), 
column.getColumnLength());
+        Assertions.assertEquals(typeDefine.getLength() * 4, 
column.getColumnLength());
         Assertions.assertEquals(typeDefine.getColumnType(), 
column.getSourceType());
 
         typeDefine =
diff --git 
a/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
 
b/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
index 73feb9ab57..54316d678b 100644
--- 
a/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
+++ 
b/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
@@ -19,6 +19,7 @@
 package org.apache.seatunnel.connectors.seatunnel.jdbc;
 
 import org.apache.seatunnel.api.table.catalog.CatalogTable;
+import org.apache.seatunnel.api.table.catalog.Column;
 import org.apache.seatunnel.api.table.catalog.TablePath;
 import org.apache.seatunnel.api.table.type.SeaTunnelRow;
 import 
org.apache.seatunnel.connectors.seatunnel.jdbc.catalog.oracle.OracleCatalog;
@@ -36,6 +37,7 @@ import org.testcontainers.utility.DockerLoggerFactory;
 import org.testcontainers.utility.MountableFile;
 
 import com.google.common.collect.Lists;
+import lombok.SneakyThrows;
 
 import java.math.BigDecimal;
 import java.sql.Date;
@@ -275,6 +277,16 @@ public class JdbcOracleLowercaseTableIT extends 
AbstractJdbcIT {
         Assertions.assertEquals(
                 table.getTableSchema().getColumns().get(1).getComment(),
                 "\"#¥%……&*();;',,..``````//'@特殊注释'\\'\"");
+        testTableOfQuery(oracleCatalog);
         oracleCatalog.close();
     }
+
+    @SneakyThrows
+    private void testTableOfQuery(OracleCatalog oracleCatalog) {
+        String querySql = "select * from TESTUSER.E2E_TABLE_SOURCE_LOWER";
+        CatalogTable tableOfQuery = oracleCatalog.getTable(querySql);
+        final List<Column> columns = 
tableOfQuery.getTableSchema().getColumns();
+        Assertions.assertEquals(columns.get(0).getColumnLength(), 40);
+        Assertions.assertEquals(columns.get(1).getColumnLength(), 40);
+    }
 }

Reply via email to