Skip to content

Commit c919aec

Browse files
committed
test(oracle): Enable test class for Oracle connector
1 parent 8f11e50 commit c919aec

File tree

7 files changed

+1421
-220
lines changed

7 files changed

+1421
-220
lines changed

.github/workflows/tests.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ jobs:
6363
- :presto-mongodb -P ci-full-tests
6464
- :presto-redis -P ci-full-tests
6565
- :presto-elasticsearch
66+
- :presto-oracle -P ci
6667
- :presto-orc
6768
- :presto-thrift-connector
6869
- :presto-spark-base -P presto-spark-tests-smoke

presto-oracle/src/main/java/com/facebook/presto/plugin/oracle/OracleClient.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515

1616
import com.facebook.airlift.log.Logger;
1717
import com.facebook.presto.common.predicate.TupleDomain;
18+
import com.facebook.presto.common.type.CharType;
19+
import com.facebook.presto.common.type.DecimalType;
1820
import com.facebook.presto.common.type.Decimals;
21+
import com.facebook.presto.common.type.Type;
1922
import com.facebook.presto.common.type.VarcharType;
2023
import com.facebook.presto.plugin.jdbc.BaseJdbcClient;
2124
import com.facebook.presto.plugin.jdbc.BaseJdbcConfig;
@@ -36,6 +39,7 @@
3639
import com.facebook.presto.spi.statistics.TableStatistics;
3740
import com.google.common.collect.Maps;
3841
import jakarta.inject.Inject;
42+
import oracle.jdbc.OracleTypes;
3943

4044
import java.sql.Connection;
4145
import java.sql.DatabaseMetaData;
@@ -49,15 +53,24 @@
4953
import java.util.Map;
5054
import java.util.Optional;
5155

56+
import static com.facebook.presto.common.type.BigintType.BIGINT;
57+
import static com.facebook.presto.common.type.BooleanType.BOOLEAN;
58+
import static com.facebook.presto.common.type.DateType.DATE;
5259
import static com.facebook.presto.common.type.DecimalType.createDecimalType;
60+
import static com.facebook.presto.common.type.DoubleType.DOUBLE;
61+
import static com.facebook.presto.common.type.IntegerType.INTEGER;
62+
import static com.facebook.presto.common.type.RealType.REAL;
63+
import static com.facebook.presto.common.type.TimestampType.TIMESTAMP;
5364
import static com.facebook.presto.common.type.VarcharType.createUnboundedVarcharType;
5465
import static com.facebook.presto.common.type.VarcharType.createVarcharType;
66+
import static com.facebook.presto.common.type.Varchars.isVarcharType;
5567
import static com.facebook.presto.plugin.jdbc.JdbcErrorCode.JDBC_ERROR;
5668
import static com.facebook.presto.plugin.jdbc.mapping.StandardColumnMappings.bigintReadMapping;
5769
import static com.facebook.presto.plugin.jdbc.mapping.StandardColumnMappings.decimalReadMapping;
5870
import static com.facebook.presto.plugin.jdbc.mapping.StandardColumnMappings.doubleReadMapping;
5971
import static com.facebook.presto.plugin.jdbc.mapping.StandardColumnMappings.realReadMapping;
6072
import static com.facebook.presto.plugin.jdbc.mapping.StandardColumnMappings.smallintReadMapping;
73+
import static com.facebook.presto.plugin.jdbc.mapping.StandardColumnMappings.timestampReadMapping;
6174
import static com.facebook.presto.plugin.jdbc.mapping.StandardColumnMappings.varbinaryReadMapping;
6275
import static com.facebook.presto.plugin.jdbc.mapping.StandardColumnMappings.varcharReadMapping;
6376
import static com.facebook.presto.spi.StandardErrorCode.NOT_SUPPORTED;
@@ -261,6 +274,7 @@ public Optional<ReadMapping> toPrestoType(ConnectorSession session, JdbcTypeHand
261274
return Optional.of(smallintReadMapping());
262275
case Types.FLOAT:
263276
case Types.DOUBLE:
277+
case OracleTypes.BINARY_DOUBLE:
264278
return Optional.of(doubleReadMapping());
265279
case Types.REAL:
266280
return Optional.of(realReadMapping());
@@ -283,10 +297,56 @@ public Optional<ReadMapping> toPrestoType(ConnectorSession session, JdbcTypeHand
283297
return Optional.of(varcharReadMapping(createVarcharType(columnSize)));
284298
case Types.VARCHAR:
285299
return Optional.of(varcharReadMapping(createVarcharType(columnSize)));
300+
case Types.DATE:
301+
case Types.TIMESTAMP:
302+
return Optional.of(timestampReadMapping());
286303
}
287304
return super.toPrestoType(session, typeHandle);
288305
}
289306

307+
@Override
308+
protected String toSqlType(Type type)
309+
{
310+
if (isVarcharType(type)) {
311+
VarcharType varcharType = (VarcharType) type;
312+
if (varcharType.isUnbounded()) {
313+
return "VARCHAR2(4000)"; // Oracle max before CLOB
314+
}
315+
return format("VARCHAR2(%s)", varcharType.getLengthSafe());
316+
}
317+
if (type instanceof CharType) {
318+
return format("CHAR(%s)", ((CharType) type).getLength());
319+
}
320+
if (type instanceof DecimalType) {
321+
return format("NUMBER(%s, %s)",
322+
((DecimalType) type).getPrecision(),
323+
((DecimalType) type).getScale());
324+
}
325+
326+
if (BIGINT.equals(type)) {
327+
return "NUMBER(19)";
328+
}
329+
if (INTEGER.equals(type)) {
330+
return "NUMBER(10)";
331+
}
332+
if (DOUBLE.equals(type)) {
333+
return "BINARY_DOUBLE";
334+
}
335+
if (REAL.equals(type)) {
336+
return "BINARY_FLOAT";
337+
}
338+
if (BOOLEAN.equals(type)) {
339+
return "NUMBER(1)";
340+
}
341+
if (DATE.equals(type)) {
342+
return "DATE";
343+
}
344+
if (TIMESTAMP.equals(type)) {
345+
return "TIMESTAMP";
346+
}
347+
return super.toSqlType(type);
348+
}
349+
290350
@Override
291351
public String normalizeIdentifier(ConnectorSession session, String identifier)
292352
{

presto-oracle/src/test/java/com/facebook/presto/plugin/oracle/DisabledTestOracleDistributedQueries.java

Lines changed: 0 additions & 187 deletions
This file was deleted.

0 commit comments

Comments
 (0)