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 620f081adb [Feature][Oracle] Support XMLTYPE data integration #5716 
(#5723)
620f081adb is described below

commit 620f081adb8eb4fcae9eda6bd1aa80f788b97823
Author: 丑西蒙 <[email protected]>
AuthorDate: Fri Nov 3 12:26:33 2023 +0800

    [Feature][Oracle] Support XMLTYPE data integration #5716 (#5723)
---
 seatunnel-connectors-v2/connector-jdbc/pom.xml       | 20 ++++++++++++++++++++
 .../jdbc/catalog/oracle/OracleDataTypeConvertor.java |  2 ++
 .../internal/dialect/oracle/OracleTypeMapper.java    |  2 ++
 seatunnel-dist/pom.xml                               | 12 ++++++++++++
 .../connector-jdbc-e2e-part-1/pom.xml                | 10 ++++++++++
 .../connectors/seatunnel/jdbc/JdbcOracleIT.java      | 11 +++++++----
 .../test/resources/jdbc_oracle_source_to_sink.conf   |  4 ++--
 7 files changed, 55 insertions(+), 6 deletions(-)

diff --git a/seatunnel-connectors-v2/connector-jdbc/pom.xml 
b/seatunnel-connectors-v2/connector-jdbc/pom.xml
index d2e405834e..2d081fa583 100644
--- a/seatunnel-connectors-v2/connector-jdbc/pom.xml
+++ b/seatunnel-connectors-v2/connector-jdbc/pom.xml
@@ -100,6 +100,18 @@
                 <version>${oracle.version}</version>
                 <scope>provided</scope>
             </dependency>
+            <dependency>
+                <groupId>com.oracle.database.xml</groupId>
+                <artifactId>xdb6</artifactId>
+                <version>${oracle.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>com.oracle.database.xml</groupId>
+                <artifactId>xmlparserv2</artifactId>
+                <version>${oracle.version}</version>
+                <scope>provided</scope>
+            </dependency>
             <dependency>
                 <groupId>org.xerial</groupId>
                 <artifactId>sqlite-jdbc</artifactId>
@@ -210,6 +222,14 @@
             <groupId>com.oracle.database.jdbc</groupId>
             <artifactId>ojdbc8</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.oracle.database.xml</groupId>
+            <artifactId>xdb6</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.oracle.database.xml</groupId>
+            <artifactId>xmlparserv2</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.xerial</groupId>
             <artifactId>sqlite-jdbc</artifactId>
diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/oracle/OracleDataTypeConvertor.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/oracle/OracleDataTypeConvertor.java
index 6b4b2d8cf9..f290fa2688 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/oracle/OracleDataTypeConvertor.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/oracle/OracleDataTypeConvertor.java
@@ -66,6 +66,7 @@ public class OracleDataTypeConvertor implements 
DataTypeConvertor<String> {
     public static final String ORACLE_ROWID = "ROWID";
     public static final String ORACLE_CLOB = "CLOB";
     public static final String ORACLE_NCLOB = "NCLOB";
+    private static final String ORACLE_XML = "XMLTYPE";
     // ------------------------------time-------------------------
     public static final String ORACLE_DATE = "DATE";
     public static final String ORACLE_TIMESTAMP = "TIMESTAMP";
@@ -124,6 +125,7 @@ public class OracleDataTypeConvertor implements 
DataTypeConvertor<String> {
             case ORACLE_ROWID:
             case ORACLE_NCLOB:
             case ORACLE_CLOB:
+            case ORACLE_XML:
                 return BasicType.STRING_TYPE;
             case ORACLE_DATE:
                 return LocalTimeType.LOCAL_DATE_TYPE;
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 c747ba08c6..ee5bfc7d7f 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
@@ -55,6 +55,7 @@ public class OracleTypeMapper implements 
JdbcDialectTypeMapper {
     private static final String ORACLE_ROWID = "ROWID";
     private static final String ORACLE_CLOB = "CLOB";
     private static final String ORACLE_NCLOB = "NCLOB";
+    private static final String ORACLE_XML = "SYS.XMLTYPE";
 
     // ------------------------------time-------------------------
     private static final String ORACLE_DATE = "DATE";
@@ -106,6 +107,7 @@ public class OracleTypeMapper implements 
JdbcDialectTypeMapper {
             case ORACLE_ROWID:
             case ORACLE_NCLOB:
             case ORACLE_CLOB:
+            case ORACLE_XML:
                 return BasicType.STRING_TYPE;
             case ORACLE_DATE:
                 return LocalTimeType.LOCAL_DATE_TYPE;
diff --git a/seatunnel-dist/pom.xml b/seatunnel-dist/pom.xml
index b8a99118ab..2dcde33436 100644
--- a/seatunnel-dist/pom.xml
+++ b/seatunnel-dist/pom.xml
@@ -571,6 +571,18 @@
                     <version>${oracle.version}</version>
                     <scope>provided</scope>
                 </dependency>
+                <dependency>
+                    <groupId>com.oracle.database.xml</groupId>
+                    <artifactId>xdb6</artifactId>
+                    <version>${oracle.version}</version>
+                    <scope>provided</scope>
+                </dependency>
+                <dependency>
+                    <groupId>com.oracle.database.xml</groupId>
+                    <artifactId>xmlparserv2</artifactId>
+                    <version>${oracle.version}</version>
+                    <scope>provided</scope>
+                </dependency>
                 <dependency>
                     <groupId>org.xerial</groupId>
                     <artifactId>sqlite-jdbc</artifactId>
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/pom.xml
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/pom.xml
index 0309f3f9fc..db678f7dc8 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/pom.xml
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/pom.xml
@@ -71,6 +71,16 @@
             <artifactId>ojdbc8</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.oracle.database.xml</groupId>
+            <artifactId>xdb6</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.oracle.database.xml</groupId>
+            <artifactId>xmlparserv2</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>com.ibm.db2.jcc</groupId>
             <artifactId>db2jcc</artifactId>
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcOracleIT.java
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcOracleIT.java
index e98da6a1ab..6866bbf934 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcOracleIT.java
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcOracleIT.java
@@ -74,7 +74,8 @@ public class JdbcOracleIT extends AbstractJdbcIT {
                     + "    BINARY_DOUBLE_COL             binary_double,\n"
                     + "    DATE_COL                      date,\n"
                     + "    TIMESTAMP_WITH_3_FRAC_SEC_COL timestamp(3),\n"
-                    + "    TIMESTAMP_WITH_LOCAL_TZ       timestamp with local 
time zone\n"
+                    + "    TIMESTAMP_WITH_LOCAL_TZ       timestamp with local 
time zone,\n"
+                    + "    XML_TYPE_COL                  \"SYS\".\"XMLTYPE\"\n"
                     + ")";
 
     @Override
@@ -120,7 +121,7 @@ public class JdbcOracleIT extends AbstractJdbcIT {
 
     @Override
     String driverUrl() {
-        return 
"https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/12.2.0.1/ojdbc8-12.2.0.1.jar";;
+        return 
"https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/12.2.0.1/ojdbc8-12.2.0.1.jar
 && wget 
https://repo1.maven.org/maven2/com/oracle/database/xml/xdb6/12.2.0.1/xdb6-12.2.0.1.jar
 && wget 
https://repo1.maven.org/maven2/com/oracle/database/xml/xmlparserv2/12.2.0.1/xmlparserv2-12.2.0.1.jar";;
     }
 
     @Override
@@ -138,7 +139,8 @@ public class JdbcOracleIT extends AbstractJdbcIT {
                     "BINARY_DOUBLE_COL",
                     "DATE_COL",
                     "TIMESTAMP_WITH_3_FRAC_SEC_COL",
-                    "TIMESTAMP_WITH_LOCAL_TZ"
+                    "TIMESTAMP_WITH_LOCAL_TZ",
+                    "XML_TYPE_COL"
                 };
 
         List<SeaTunnelRow> rows = new ArrayList<>();
@@ -157,7 +159,8 @@ public class JdbcOracleIT extends AbstractJdbcIT {
                                 Double.parseDouble("2.2"),
                                 Date.valueOf(LocalDate.now()),
                                 Timestamp.valueOf(LocalDateTime.now()),
-                                Timestamp.valueOf(LocalDateTime.now())
+                                Timestamp.valueOf(LocalDateTime.now()),
+                                "<?xml version=\"1.0\" 
encoding=\"UTF-8\"?><project xmlns=\"http://maven.apache.org/POM/4.0.0\"; 
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"; 
xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd\";><name>SeaTunnel : E2E : Connector 
V2 : Oracle XMLType</name></project>"
                             });
             rows.add(row);
         }
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/src/test/resources/jdbc_oracle_source_to_sink.conf
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/src/test/resources/jdbc_oracle_source_to_sink.conf
index 10eb26f74d..9353406f0c 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/src/test/resources/jdbc_oracle_source_to_sink.conf
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/src/test/resources/jdbc_oracle_source_to_sink.conf
@@ -33,7 +33,7 @@ source {
     url = "jdbc:oracle:thin:@e2e_oracleDb:1521/TESTUSER"
     user = testUser
     password = testPassword
-    query = "SELECT 
VARCHAR_10_COL,CHAR_10_COL,CLOB_COL,NUMBER_3_SF_2_DP,INTEGER_COL,FLOAT_COL,REAL_COL,BINARY_FLOAT_COL,BINARY_DOUBLE_COL,DATE_COL,TIMESTAMP_WITH_3_FRAC_SEC_COL,TIMESTAMP_WITH_LOCAL_TZ
 FROM E2E_TABLE_SOURCE"
+    query = "SELECT 
VARCHAR_10_COL,CHAR_10_COL,CLOB_COL,NUMBER_3_SF_2_DP,INTEGER_COL,FLOAT_COL,REAL_COL,BINARY_FLOAT_COL,BINARY_DOUBLE_COL,DATE_COL,TIMESTAMP_WITH_3_FRAC_SEC_COL,TIMESTAMP_WITH_LOCAL_TZ,XML_TYPE_COL
 FROM E2E_TABLE_SOURCE"
     properties {
        database.oracle.jdbc.timezoneAsRegion = "false"
     }
@@ -49,7 +49,7 @@ sink {
     url = "jdbc:oracle:thin:@e2e_oracleDb:1521/TESTUSER"
     user = testUser
     password = testPassword
-    query = "INSERT INTO E2E_TABLE_SINK 
(VARCHAR_10_COL,CHAR_10_COL,CLOB_COL,NUMBER_3_SF_2_DP,INTEGER_COL,FLOAT_COL,REAL_COL,BINARY_FLOAT_COL,BINARY_DOUBLE_COL,DATE_COL,TIMESTAMP_WITH_3_FRAC_SEC_COL,TIMESTAMP_WITH_LOCAL_TZ)
 VALUES(?,?,?,?,?,?,?,?,?,?,?,?)"
+    query = "INSERT INTO E2E_TABLE_SINK 
(VARCHAR_10_COL,CHAR_10_COL,CLOB_COL,NUMBER_3_SF_2_DP,INTEGER_COL,FLOAT_COL,REAL_COL,BINARY_FLOAT_COL,BINARY_DOUBLE_COL,DATE_COL,TIMESTAMP_WITH_3_FRAC_SEC_COL,TIMESTAMP_WITH_LOCAL_TZ,XML_TYPE_COL)
 VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)"
     properties {
        database.oracle.jdbc.timezoneAsRegion = "false"
     }

Reply via email to