Skip to content

Commit e25930f

Browse files
Added null check. (#343)
Added null check for handling TimestampLTZ type.
1 parent 99fae58 commit e25930f

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceDBRecord.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.sql.ResultSet;
3636
import java.sql.ResultSetMetaData;
3737
import java.sql.SQLException;
38+
import java.sql.Timestamp;
3839
import java.sql.Types;
3940
import java.time.Instant;
4041
import java.time.ZoneId;
@@ -191,8 +192,9 @@ private void handleOracleSpecificType(ResultSet resultSet, StructuredRecord.Buil
191192
recordBuilder.set(field.getName(), resultSet.getString(columnIndex));
192193
break;
193194
case OracleSourceSchemaReader.TIMESTAMP_LTZ:
194-
Instant instant = resultSet.getTimestamp(columnIndex).toInstant();
195-
recordBuilder.setTimestamp(field.getName(), instant.atZone(ZoneId.ofOffset("UTC", ZoneOffset.UTC)));
195+
Timestamp timestamp = resultSet.getTimestamp(columnIndex);
196+
recordBuilder.setTimestamp(field.getName(), (timestamp != null) ?
197+
timestamp.toInstant().atZone(ZoneId.ofOffset("UTC", ZoneOffset.UTC)) : null);
196198
break;
197199
case OracleSourceSchemaReader.BINARY_FLOAT:
198200
recordBuilder.set(field.getName(), resultSet.getFloat(columnIndex));

oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleSourceDBRecordUnitTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,4 +143,27 @@ public void validateDefaultDecimalParsing() throws Exception {
143143
Assert.assertTrue(record.getDecimal("ID4") instanceof BigDecimal);
144144
Assert.assertEquals(record.getDecimal("ID4").toPlainString(), "123.456789");
145145
}
146+
147+
/**
148+
* Validate the Null value for TimestampLTZ datatype.
149+
* @throws Exception
150+
*/
151+
@Test
152+
public void validateTimestampLTZTypeNullHandling() throws Exception {
153+
Schema.Field field1 = Schema.Field.of("field1", Schema.nullableOf(Schema.of(Schema.LogicalType.TIMESTAMP_MICROS)));
154+
155+
Schema schema = Schema.recordOf(
156+
"dbRecord",
157+
field1
158+
);
159+
160+
when(resultSet.getTimestamp(eq(1))).thenReturn(null);
161+
162+
StructuredRecord.Builder builder = StructuredRecord.builder(schema);
163+
OracleSourceDBRecord dbRecord = new OracleSourceDBRecord(null, null);
164+
dbRecord.handleField(resultSet, builder, field1, 1, OracleSourceSchemaReader.TIMESTAMP_LTZ, DEFAULT_PRECISION, 0);
165+
166+
StructuredRecord record = builder.build();
167+
Assert.assertNull(record.getTimestamp("field1"));
168+
}
146169
}

0 commit comments

Comments
 (0)