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

dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git

commit d27992f84411e2b6d2d4c6265e5c64a8081547db
Author: Tiewei Fang <43782773+bepppo...@users.noreply.github.com>
AuthorDate: Fri Jul 19 14:37:51 2024 +0800

    [fix](trino-connector) Refactor some code of trino-connector jni reader 
(#37302)
    
    Previously, TrinoConnectorJniScanner converted Trino types to Hive
    types, and then to Doris types.
    In fact, the Hive type can be directly obtained from `columns_types`.
    In this way, the step of converting Trino types to Hive types can be
    deleted.
---
 .../format/table/trino_connector_jni_reader.cpp    |   5 +-
 .../trinoconnector/TrinoConnectorJniScanner.java   |  16 +--
 .../TrinoTypeToHiveTypeTranslator.java             | 115 ---------------------
 3 files changed, 12 insertions(+), 124 deletions(-)

diff --git a/be/src/vec/exec/format/table/trino_connector_jni_reader.cpp 
b/be/src/vec/exec/format/table/trino_connector_jni_reader.cpp
index b72da757629..eaced8572b9 100644
--- a/be/src/vec/exec/format/table/trino_connector_jni_reader.cpp
+++ b/be/src/vec/exec/format/table/trino_connector_jni_reader.cpp
@@ -43,9 +43,11 @@ TrinoConnectorJniReader::TrinoConnectorJniReader(
         RuntimeProfile* profile, const TFileRangeDesc& range)
         : JniReader(file_slot_descs, state, profile) {
     std::vector<std::string> column_names;
+    std::vector<std::string> column_types;
     for (const auto& desc : _file_slot_descs) {
         std::string field = desc->col_name();
         column_names.emplace_back(field);
+        column_types.emplace_back(JniConnector::get_jni_type(desc->type()));
     }
     std::map<String, String> params = {
             {"catalog_name", 
range.table_format_params.trino_connector_params.catalog_name},
@@ -63,7 +65,8 @@ TrinoConnectorJniReader::TrinoConnectorJniReader(
              
range.table_format_params.trino_connector_params.trino_connector_predicate},
             {"trino_connector_trascation_handle",
              
range.table_format_params.trino_connector_params.trino_connector_trascation_handle},
-            {"required_fields", join(column_names, ",")}};
+            {"required_fields", join(column_names, ",")},
+            {"columns_types", join(column_types, "#")}};
 
     // Used to create trino connector options
     for (const auto& kv :
diff --git 
a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java
 
b/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java
index af20668081d..6b15abfa413 100644
--- 
a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java
+++ 
b/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java
@@ -129,11 +129,16 @@ public class TrinoConnectorJniScanner extends JniScanner {
 
 
     public TrinoConnectorJniScanner(int batchSize, Map<String, String> params) 
{
-        catalogNameString = params.get("catalog_name");
-        super.batchSize = batchSize;
-        super.fields = params.get("required_fields").split(",");
+        String[] requiredFields = params.get("required_fields").split(",");
+        String[] requiredTypes = params.get("columns_types").split("#");
+        ColumnType[] columnTypes = new ColumnType[requiredTypes.length];
+        for (int i = 0; i < requiredTypes.length; i++) {
+            columnTypes[i] = ColumnType.parseType(requiredFields[i], 
requiredTypes[i]);
+        }
+        initTableInfo(columnTypes, requiredFields, batchSize);
         appendDataTimeNs = new long[fields.length];
 
+        catalogNameString = params.get("catalog_name");
         connectorSplitString = params.get("trino_connector_split");
         connectorTableHandleString = 
params.get("trino_connector_table_handle");
         connectorColumnHandleString = 
params.get("trino_connector_column_handles");
@@ -336,7 +341,6 @@ public class TrinoConnectorJniScanner extends JniScanner {
     }
 
     private void parseRequiredTypes() {
-        ColumnType[] columnTypes = new ColumnType[fields.length];
         appendDataTimeNs = new long[fields.length];
         trinoTypeList = Lists.newArrayList();
         for (int i = 0; i < fields.length; i++) {
@@ -345,12 +349,8 @@ public class TrinoConnectorJniScanner extends JniScanner {
                 throw new RuntimeException(String.format("Cannot find field %s 
in schema %s",
                         fields[i], trinoConnectorAllFieldNames));
             }
-
             trinoTypeList.add(columnMetadataList.get(index).getType());
-            String hiveType = 
TrinoTypeToHiveTypeTranslator.fromTrinoTypeToHiveType(trinoTypeList.get(i));
-            columnTypes[i] = ColumnType.parseType(fields[i], hiveType);
         }
-        super.types = columnTypes;
     }
 
     private Session createSession(TrinoConnectorServicesProvider 
trinoConnectorServicesProvider) {
diff --git 
a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoTypeToHiveTypeTranslator.java
 
b/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoTypeToHiveTypeTranslator.java
deleted file mode 100644
index 4948e5067a3..00000000000
--- 
a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoTypeToHiveTypeTranslator.java
+++ /dev/null
@@ -1,115 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.doris.trinoconnector;
-
-import io.trino.spi.type.ArrayType;
-import io.trino.spi.type.BigintType;
-import io.trino.spi.type.BooleanType;
-import io.trino.spi.type.CharType;
-import io.trino.spi.type.DateType;
-import io.trino.spi.type.DecimalType;
-import io.trino.spi.type.DoubleType;
-import io.trino.spi.type.IntegerType;
-import io.trino.spi.type.MapType;
-import io.trino.spi.type.RealType;
-import io.trino.spi.type.RowType;
-import io.trino.spi.type.SmallintType;
-import io.trino.spi.type.TimeType;
-import io.trino.spi.type.TimestampType;
-import io.trino.spi.type.TimestampWithTimeZoneType;
-import io.trino.spi.type.TinyintType;
-import io.trino.spi.type.Type;
-import io.trino.spi.type.VarbinaryType;
-import io.trino.spi.type.VarcharType;
-
-public final class TrinoTypeToHiveTypeTranslator {
-    private TrinoTypeToHiveTypeTranslator() {
-    }
-
-    // trino do not support LargeInt
-    public static String fromTrinoTypeToHiveType(Type type) {
-        if (type instanceof BooleanType) {
-            return "boolean";
-        } else if (type instanceof TinyintType) {
-            return "tinyint";
-        } else if (type instanceof SmallintType) {
-            return "smallint";
-        } else if (type instanceof IntegerType) {
-            return "int";
-        } else if (type instanceof BigintType) {
-            return "bigint";
-        } else if (type instanceof RealType) {
-            return "float";
-        } else if (type instanceof DoubleType) {
-            return "double";
-        } else if (type instanceof CharType) {
-            return type.toString();
-        } else if (type instanceof VarcharType) {
-            return "string";
-        } else if (type instanceof VarbinaryType) {
-            return "string";
-        } else if (type instanceof DecimalType) {
-            StringBuilder sb = new StringBuilder("decimal");
-            sb.append("(");
-            sb.append(((DecimalType) type).getPrecision());
-            sb.append(", ");
-            sb.append(((DecimalType) type).getScale());
-            sb.append(")");
-            return sb.toString();
-        } else if (type instanceof TimeType) {
-            return "string";
-        } else if (type instanceof DateType) {
-            return "date";
-        } else if (type instanceof TimestampType) {
-            return "timestamp";
-        } else if (type instanceof TimestampWithTimeZoneType) {
-            return "timestamp";
-        } else if (type instanceof ArrayType) {
-            StringBuilder sb = new StringBuilder();
-            sb.append("array<")
-                    .append(fromTrinoTypeToHiveType(((ArrayType) 
type).getElementType()))
-                    .append(">");
-            return sb.toString();
-        } else if (type instanceof MapType) {
-            StringBuilder sb = new StringBuilder();
-            sb.append("map<")
-                    .append(fromTrinoTypeToHiveType(((MapType) 
type).getKeyType()))
-                    .append(",")
-                    .append(fromTrinoTypeToHiveType(((MapType) 
type).getValueType()));
-            sb.append(">");
-            return sb.toString();
-        } else if (type instanceof RowType) {
-            StringBuilder sb = new StringBuilder();
-            sb.append("struct<");
-            for (int i = 0; i < type.getTypeParameters().size(); ++i) {
-                if (i != 0) {
-                    sb.append(",");
-                }
-                Type field = type.getTypeParameters().get(i);
-                sb.append(field.getDisplayName())
-                        .append(":")
-                        .append(fromTrinoTypeToHiveType(field));
-            }
-            sb.append(">");
-            return sb.toString();
-        } else {
-            throw new IllegalArgumentException("Cannot transform unknown type: 
" + type);
-        }
-    }
-}
-


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

Reply via email to