Skip to content

Commit b19649d

Browse files
Backport to branch(3.16) : For Oracle, allow importing a table with NUMBER(1) data type to a ScalarDB BOOLEAN (#3251)
Co-authored-by: Vincent Guilpain <[email protected]>
1 parent 72606e6 commit b19649d

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,12 +330,20 @@ private LinkedHashMap<String, String> prepareColumnsForOracle() {
330330
columns.put("col19", "TIMESTAMP"); // override to TIME
331331
columns.put("col20", "TIMESTAMP WITH TIME ZONE");
332332
columns.put("col21", "TIMESTAMP WITH LOCAL TIME ZONE");
333+
columns.put("col22", "NUMBER(1)"); // override to BOOLEAN
333334
return columns;
334335
}
335336

336337
private Map<String, DataType> prepareOverrideColumnsTypeForOracle() {
337338
return ImmutableMap.of(
338-
"col16", DataType.TIME, "col17", DataType.TIMESTAMP, "col19", DataType.TIME);
339+
"col16",
340+
DataType.TIME,
341+
"col17",
342+
DataType.TIMESTAMP,
343+
"col19",
344+
DataType.TIME,
345+
"col22",
346+
DataType.BOOLEAN);
339347
}
340348

341349
private TableMetadata prepareTableMetadataForOracle() {
@@ -363,6 +371,7 @@ private TableMetadata prepareTableMetadataForOracle() {
363371
.addColumn("col19", DataType.TIME)
364372
.addColumn("col20", DataType.TIMESTAMPTZ)
365373
.addColumn("col21", DataType.TIMESTAMPTZ)
374+
.addColumn("col22", DataType.BOOLEAN)
366375
.addPartitionKey("pk1")
367376
.addPartitionKey("pk2")
368377
.build();

core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineOracle.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,9 @@ DataType getDataTypeForScalarDbInternal(
270270
numericTypeDescription, columnDescription));
271271
}
272272
if (digits == 0) {
273+
if (columnSize == 1 && overrideDataType == DataType.BOOLEAN) {
274+
return DataType.BOOLEAN;
275+
}
273276
logger.info(
274277
"Data type larger than that of underlying database is assigned: {} to BIGINT",
275278
numericTypeDescription);

core/src/test/java/com/scalar/db/storage/jdbc/RdbEngineTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ private static void prepareDataTypeMap() {
9999
DATA_TYPE_MAP.get(POSTGRESQL).put(new Column(JDBCType.BIT, "bool", 1, 0), DataType.BOOLEAN);
100100
DATA_TYPE_MAP.get(SQL_SERVER).put(new Column(JDBCType.BIT, "bit", 1, 0), DataType.BOOLEAN);
101101
DATA_TYPE_MAP.get(DB2).put(new Column(JDBCType.BOOLEAN, "BOOLEAN"), DataType.BOOLEAN);
102+
DATA_TYPE_MAP
103+
.get(ORACLE)
104+
.put(new Column(JDBCType.NUMERIC, "NUMBER", 1, 0, DataType.BOOLEAN), DataType.BOOLEAN);
102105

103106
// INT
104107
DATA_TYPE_MAP.get(MYSQL).put(new Column(JDBCType.TINYINT, "TINYINT"), DataType.INT);
@@ -203,6 +206,7 @@ private static void prepareDataTypeMap() {
203206
DATA_TYPE_MAP.get(ORACLE).put(new Column(JDBCType.NUMERIC, "NUMBER", 15, 0), DataType.BIGINT);
204207
DATA_TYPE_MAP.get(ORACLE).put(new Column(JDBCType.NUMERIC, "NUMBER", 15, 2), DataType.DOUBLE);
205208
DATA_TYPE_MAP.get(ORACLE).put(new Column(JDBCType.NUMERIC, "NUMBER", 16, 0), null);
209+
DATA_TYPE_MAP.get(ORACLE).put(new Column(JDBCType.NUMERIC, "NUMBER", 1, 0), DataType.BIGINT);
206210
DATA_TYPE_MAP.get(SQL_SERVER).put(new Column(JDBCType.NUMERIC, "numeric"), null);
207211
DATA_TYPE_MAP.get(SQL_SERVER).put(new Column(JDBCType.DECIMAL, "decimal"), null);
208212
DATA_TYPE_MAP.get(DB2).put(new Column(JDBCType.DECIMAL, "DECIMAL"), null);

0 commit comments

Comments
 (0)