This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
     new a7d959109d [branch-1.2][feature](multi-catalog) support trino jdbc 
catalog and jdbc external table (#18498)
a7d959109d is described below

commit a7d959109dbeb042b021b72f757477ee319014cb
Author: yongkang.zhong <zhong...@qq.com>
AuthorDate: Tue Apr 11 23:13:31 2023 +0800

    [branch-1.2][feature](multi-catalog) support trino jdbc catalog and jdbc 
external table (#18498)
---
 .../org/apache/doris/catalog/JdbcResource.java     |  4 ++
 .../java/org/apache/doris/catalog/JdbcTable.java   |  1 +
 .../java/org/apache/doris/catalog/OdbcTable.java   |  9 +++-
 .../org/apache/doris/external/jdbc/JdbcClient.java | 48 ++++++++++++++++++++++
 .../org/apache/doris/planner/JdbcScanNode.java     |  3 +-
 gensrc/thrift/Types.thrift                         |  3 +-
 6 files changed, 65 insertions(+), 3 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java
index 35e655526c..ad7d8dc0fd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java
@@ -68,6 +68,7 @@ public class JdbcResource extends Resource {
     public static final String JDBC_SQLSERVER = "jdbc:sqlserver";
     public static final String JDBC_CLICKHOUSE = "jdbc:clickhouse";
     public static final String JDBC_SAP_HANA = "jdbc:sap";
+    public static final String JDBC_TRINO = "jdbc:trino";
 
     public static final String MYSQL = "MYSQL";
     public static final String POSTGRESQL = "POSTGRESQL";
@@ -75,6 +76,7 @@ public class JdbcResource extends Resource {
     public static final String SQLSERVER = "SQLSERVER";
     public static final String CLICKHOUSE = "CLICKHOUSE";
     public static final String SAP_HANA = "SAP_HANA";
+    public static final String TRINO = "TRINO";
 
     public static final String JDBC_PROPERTIES_PREFIX = "jdbc.";
     public static final String JDBC_URL = "jdbc_url";
@@ -263,6 +265,8 @@ public class JdbcResource extends Resource {
             return CLICKHOUSE;
         } else if (url.startsWith(JDBC_SAP_HANA)) {
             return SAP_HANA;
+        } else if (url.startsWith(JDBC_TRINO)) {
+            return TRINO;
         }
         throw new DdlException("Unsupported jdbc database type, please check 
jdbcUrl: " + url);
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcTable.java
index c9a36c0439..aeaa1fd60b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcTable.java
@@ -75,6 +75,7 @@ public class JdbcTable extends Table {
         tempMap.put("oracle", TOdbcTableType.ORACLE);
         tempMap.put("clickhouse", TOdbcTableType.CLICKHOUSE);
         tempMap.put("sap_hana", TOdbcTableType.SAP_HANA);
+        tempMap.put("trino", TOdbcTableType.TRINO);
         TABLE_TYPE_MAP = Collections.unmodifiableMap(tempMap);
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OdbcTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/OdbcTable.java
index c10bfacaa0..81ed59686a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OdbcTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OdbcTable.java
@@ -104,7 +104,12 @@ public class OdbcTable extends Table {
 
     private static String saphanaProperName(String name) {
         List<String> list = Arrays.asList(name.split("\\."));
-        return list.stream().map(s -> "\"" + s.toUpperCase() + 
"\"").collect(Collectors.joining("."));
+        return list.stream().map(s -> "\"" + s + 
"\"").collect(Collectors.joining("."));
+    }
+
+    private static String trinoProperName(String name) {
+        List<String> list = Arrays.asList(name.split("\\."));
+        return list.stream().map(s -> "\"" + s + 
"\"").collect(Collectors.joining("."));
     }
 
     public static String databaseProperName(TOdbcTableType tableType, String 
name) {
@@ -121,6 +126,8 @@ public class OdbcTable extends Table {
                 return clickhouseProperName(name);
             case SAP_HANA:
                 return saphanaProperName(name);
+            case TRINO:
+                return trinoProperName(name);
             default:
                 return name;
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java 
b/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java
index c29b18dae0..fb5c6dd23c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java
@@ -194,6 +194,9 @@ public class JdbcClient {
                 case JdbcResource.SAP_HANA:
                     rs = stmt.executeQuery("SELECT SCHEMA_NAME FROM 
SYS.SCHEMAS WHERE HAS_PRIVILEGES = 'TRUE'");
                     break;
+                case JdbcResource.TRINO:
+                    rs = stmt.executeQuery("SHOW SCHEMAS");
+                    break;
                 default:
                     throw new JdbcClientException("Not supported jdbc type");
             }
@@ -221,6 +224,7 @@ public class JdbcClient {
                 case JdbcResource.ORACLE:
                 case JdbcResource.SQLSERVER:
                 case JdbcResource.SAP_HANA:
+                case JdbcResource.TRINO:
                     databaseNames.add(conn.getSchema());
                     break;
                 default:
@@ -253,6 +257,7 @@ public class JdbcClient {
                 case JdbcResource.CLICKHOUSE:
                 case JdbcResource.SQLSERVER:
                 case JdbcResource.SAP_HANA:
+                case JdbcResource.TRINO:
                     rs = databaseMetaData.getTables(null, dbName, null, types);
                     break;
                 default:
@@ -289,6 +294,7 @@ public class JdbcClient {
                 case JdbcResource.CLICKHOUSE:
                 case JdbcResource.SQLSERVER:
                 case JdbcResource.SAP_HANA:
+                case JdbcResource.TRINO:
                     rs = databaseMetaData.getTables(null, dbName, null, types);
                     break;
                 default:
@@ -360,6 +366,7 @@ public class JdbcClient {
                 case JdbcResource.CLICKHOUSE:
                 case JdbcResource.SQLSERVER:
                 case JdbcResource.SAP_HANA:
+                case JdbcResource.TRINO:
                     rs = databaseMetaData.getColumns(null, dbName, tableName, 
null);
                     break;
                 default:
@@ -407,6 +414,8 @@ public class JdbcClient {
                 return sqlserverTypeToDoris(fieldSchema);
             case JdbcResource.SAP_HANA:
                 return saphanaTypeToDoris(fieldSchema);
+            case JdbcResource.TRINO:
+                return trinoTypeToDoris(fieldSchema);
             default:
                 throw new JdbcClientException("Unknown database type");
         }
@@ -795,6 +804,45 @@ public class JdbcClient {
         }
     }
 
+    public Type trinoTypeToDoris(JdbcFieldSchema fieldSchema) {
+        String trinoType = fieldSchema.getDataTypeName();
+        if (trinoType.startsWith("decimal")) {
+            String[] split = trinoType.split("\\(");
+            String[] precisionAndScale = split[1].split(",");
+            int precision = Integer.parseInt(precisionAndScale[0]);
+            int scale = Integer.parseInt(precisionAndScale[1].substring(0, 
precisionAndScale[1].length() - 1));
+            return createDecimalOrStringType(precision, scale);
+        } else if (trinoType.startsWith("char")) {
+            ScalarType charType = ScalarType.createType(PrimitiveType.CHAR);
+            charType.setLength(fieldSchema.columnSize);
+            return charType;
+        } else if (trinoType.startsWith("timestamp")) {
+            return ScalarType.createDatetimeV2Type(6);
+        }
+        switch (trinoType) {
+            case "integer":
+                return Type.INT;
+            case "bigint":
+                return Type.BIGINT;
+            case "smallint":
+                return Type.SMALLINT;
+            case "tinyint":
+                return Type.TINYINT;
+            case "double":
+                return Type.DOUBLE;
+            case "real":
+                return Type.FLOAT;
+            case "boolean":
+                return Type.BOOLEAN;
+            case "varchar":
+                return ScalarType.createStringType();
+            case "date":
+                return ScalarType.createDateV2Type();
+            default:
+                return Type.UNSUPPORTED;
+        }
+    }
+
     private Type createDecimalOrStringType(int precision, int scale) {
         if (precision <= ScalarType.MAX_DECIMAL128_PRECISION) {
             if (!Config.enable_decimal_conversion && (precision > 
ScalarType.MAX_DECIMALV2_PRECISION
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java
index 2749dcc213..c7bb47b7b7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java
@@ -148,7 +148,8 @@ public class JdbcScanNode extends ScanNode {
                 || jdbcType == TOdbcTableType.POSTGRESQL
                 || jdbcType == TOdbcTableType.MONGODB
                 || jdbcType == TOdbcTableType.CLICKHOUSE
-                || jdbcType == TOdbcTableType.SAP_HANA)) {
+                || jdbcType == TOdbcTableType.SAP_HANA
+                || jdbcType == TOdbcTableType.TRINO)) {
             sql.append(" LIMIT ").append(limit);
         }
 
diff --git a/gensrc/thrift/Types.thrift b/gensrc/thrift/Types.thrift
index f55f747126..6794433d7b 100644
--- a/gensrc/thrift/Types.thrift
+++ b/gensrc/thrift/Types.thrift
@@ -372,7 +372,8 @@ enum TOdbcTableType {
     REDIS,
     MONGODB,
     CLICKHOUSE,
-    SAP_HANA
+    SAP_HANA,
+    TRINO
 }
 
 struct TJdbcExecutorCtorParams {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to