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"
}