diff --git a/oracle-plugin/pom.xml b/oracle-plugin/pom.xml index 922c7f188..7343bf860 100644 --- a/oracle-plugin/pom.xml +++ b/oracle-plugin/pom.xml @@ -120,6 +120,16 @@ 21.1.0.0 test + + com.oracle.database.xml + xdb + 21.1.0.0 + + + com.oracle.database.xml + xmlparserv2 + 21.1.0.0 + org.mockito mockito-core diff --git a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceDBRecord.java b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceDBRecord.java index 44131a01b..219f754a6 100644 --- a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceDBRecord.java +++ b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceDBRecord.java @@ -265,6 +265,7 @@ private void handleOracleSpecificType(ResultSet resultSet, StructuredRecord.Buil switch (sqlType) { case OracleSourceSchemaReader.INTERVAL_YM: case OracleSourceSchemaReader.INTERVAL_DS: + case OracleSourceSchemaReader.XML: case OracleSourceSchemaReader.LONG: case Types.NCLOB: recordBuilder.set(field.getName(), resultSet.getString(columnIndex)); diff --git a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceSchemaReader.java b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceSchemaReader.java index 208b70410..b0fe5f0af 100644 --- a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceSchemaReader.java +++ b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceSchemaReader.java @@ -44,6 +44,7 @@ public class OracleSourceSchemaReader extends CommonSchemaReader { public static final int BINARY_DOUBLE = 101; public static final int BFILE = -13; public static final int LONG = -1; + public static final int XML = 2009; public static final int LONG_RAW = -4; /** @@ -61,6 +62,7 @@ public class OracleSourceSchemaReader extends CommonSchemaReader { BINARY_DOUBLE, BFILE, LONG, + XML, LONG_RAW, Types.NUMERIC, Types.DECIMAL @@ -102,6 +104,7 @@ public Schema getSchema(ResultSetMetaData metadata, int index) throws SQLExcepti return Schema.of(Schema.Type.BYTES); case INTERVAL_DS: case INTERVAL_YM: + case XML: case LONG: return Schema.of(Schema.Type.STRING); case Types.NUMERIC: diff --git a/oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleSchemaReaderTest.java b/oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleSchemaReaderTest.java index 1ff77c533..350c3e56b 100644 --- a/oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleSchemaReaderTest.java +++ b/oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleSchemaReaderTest.java @@ -91,4 +91,22 @@ public void getSchema_timestampLTZFieldFalse_returnDatetime() throws SQLExceptio Assert.assertEquals(expectedSchemaFields.get(1).getName(), actualSchemaFields.get(1).getName()); Assert.assertEquals(expectedSchemaFields.get(1).getSchema(), actualSchemaFields.get(1).getSchema()); } + + @Test + public void getSchema_xmlField_returnString() throws SQLException { + OracleSourceSchemaReader schemaReader = new OracleSourceSchemaReader(null, false, false, false); + ResultSet resultSet = Mockito.mock(ResultSet.class); + ResultSetMetaData metadata = Mockito.mock(ResultSetMetaData.class); + Mockito.when(resultSet.getMetaData()).thenReturn(metadata); + Mockito.when(metadata.getColumnCount()).thenReturn(1); + Mockito.when(metadata.getColumnType(1)).thenReturn(OracleSourceSchemaReader.XML); + Mockito.when(metadata.getColumnName(1)).thenReturn("xmlData"); + + List actualSchemaFields = schemaReader.getSchemaFields(resultSet); + + List expectedSchemaFields = Lists.newArrayList(); + expectedSchemaFields.add(Schema.Field.of("xmlData", Schema.of(Schema.Type.STRING))); + Assert.assertEquals(expectedSchemaFields.get(0).getName(), actualSchemaFields.get(0).getName()); + Assert.assertEquals(expectedSchemaFields.get(0).getSchema(), actualSchemaFields.get(0).getSchema()); + } }