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

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


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new bbd4970ed84 [feature](jdbc catalog) support gbase jdbc catalog #41027 
#41587 (#42123)
bbd4970ed84 is described below

commit bbd4970ed8497196db41559b4f951a63ac02e45f
Author: Rayner Chen <morning...@163.com>
AuthorDate: Mon Oct 21 16:52:23 2024 +0800

    [feature](jdbc catalog) support gbase jdbc catalog #41027 #41587 (#42123)
    
    cherry pick from #41027 #41587
    
    ---------
    
    Co-authored-by: zy-kkk <zhongy...@gmail.com>
---
 .../org/apache/doris/jdbc/GbaseJdbcExecutor.java   |  89 ++++++++++++
 .../org/apache/doris/jdbc/JdbcExecutorFactory.java |   2 +
 .../org/apache/doris/catalog/JdbcResource.java     |   4 +
 .../java/org/apache/doris/catalog/JdbcTable.java   |   3 +
 .../doris/datasource/jdbc/client/JdbcClient.java   |   2 +
 .../datasource/jdbc/client/JdbcGbaseClient.java    | 158 +++++++++++++++++++++
 .../doris/datasource/jdbc/source/JdbcScanNode.java |   3 +-
 gensrc/thrift/Types.thrift                         |   3 +-
 .../jdbc/test_gbase_jdbc_catalog.out               |  31 ++++
 .../jdbc/test_gbase_jdbc_catalog.groovy            | 143 +++++++++++++++++++
 10 files changed, 436 insertions(+), 2 deletions(-)

diff --git 
a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/GbaseJdbcExecutor.java
 
b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/GbaseJdbcExecutor.java
new file mode 100644
index 00000000000..e8e29a8178f
--- /dev/null
+++ 
b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/GbaseJdbcExecutor.java
@@ -0,0 +1,89 @@
+// 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.jdbc;
+
+import org.apache.doris.common.jni.vec.ColumnType;
+import org.apache.doris.common.jni.vec.ColumnType.Type;
+import org.apache.doris.common.jni.vec.ColumnValueConverter;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Objects;
+
+public class GbaseJdbcExecutor extends BaseJdbcExecutor {
+
+    public GbaseJdbcExecutor(byte[] thriftParams) throws Exception {
+        super(thriftParams);
+    }
+
+    @Override
+    protected Object getColumnValue(int columnIndex, ColumnType type, String[] 
replaceStringList) throws SQLException {
+        switch (type.getType()) {
+            case TINYINT:
+                byte tinyIntVal = resultSet.getByte(columnIndex + 1);
+                return resultSet.wasNull() ? null : tinyIntVal;
+            case SMALLINT:
+                short smallIntVal = resultSet.getShort(columnIndex + 1);
+                return resultSet.wasNull() ? null : smallIntVal;
+            case INT:
+                int intVal = resultSet.getInt(columnIndex + 1);
+                return resultSet.wasNull() ? null : intVal;
+            case BIGINT:
+                long bigIntVal = resultSet.getLong(columnIndex + 1);
+                return resultSet.wasNull() ? null : bigIntVal;
+            case FLOAT:
+                float floatVal = resultSet.getFloat(columnIndex + 1);
+                return resultSet.wasNull() ? null : floatVal;
+            case DOUBLE:
+                double doubleVal = resultSet.getDouble(columnIndex + 1);
+                return resultSet.wasNull() ? null : doubleVal;
+            case DECIMALV2:
+            case DECIMAL32:
+            case DECIMAL64:
+            case DECIMAL128:
+                BigDecimal decimalVal = resultSet.getBigDecimal(columnIndex + 
1);
+                return resultSet.wasNull() ? null : decimalVal;
+            case DATE:
+            case DATEV2:
+                Date dateVal = resultSet.getDate(columnIndex + 1);
+                return resultSet.wasNull() ? null : dateVal.toLocalDate();
+            case DATETIME:
+            case DATETIMEV2:
+                Timestamp timestampVal = resultSet.getTimestamp(columnIndex + 
1);
+                return resultSet.wasNull() ? null : 
timestampVal.toLocalDateTime();
+            case CHAR:
+            case VARCHAR:
+            case STRING:
+                String stringVal = (String) resultSet.getObject(columnIndex + 
1);
+                return resultSet.wasNull() ? null : stringVal;
+            default:
+                throw new IllegalArgumentException("Unsupported column type: " 
+ type.getType());
+        }
+    }
+
+    @Override
+    protected ColumnValueConverter getOutputConverter(ColumnType columnType, 
String replaceString) {
+        if (Objects.requireNonNull(columnType.getType()) == Type.CHAR) {
+            return createConverter(
+                    input -> trimSpaces(input.toString()), String.class);
+        }
+        return null;
+    }
+}
diff --git 
a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutorFactory.java
 
b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutorFactory.java
index b4787bebabb..c5866fcc353 100644
--- 
a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutorFactory.java
+++ 
b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutorFactory.java
@@ -41,6 +41,8 @@ public class JdbcExecutorFactory {
             case TRINO:
             case PRESTO:
                 return "org/apache/doris/jdbc/TrinoJdbcExecutor";
+            case GBASE:
+                return "org/apache/doris/jdbc/GbaseJdbcExecutor";
             default:
                 throw new IllegalArgumentException("Unsupported jdbc type: " + 
type);
         }
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 bd14740a6f8..cd078b4376a 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
@@ -76,6 +76,7 @@ public class JdbcResource extends Resource {
     public static final String JDBC_PRESTO = "jdbc:presto";
     public static final String JDBC_OCEANBASE = "jdbc:oceanbase";
     public static final String JDBC_DB2 = "jdbc:db2";
+    public static final String JDBC_GBASE = "jdbc:gbase";
 
     public static final String MYSQL = "MYSQL";
     public static final String POSTGRESQL = "POSTGRESQL";
@@ -88,6 +89,7 @@ public class JdbcResource extends Resource {
     public static final String OCEANBASE = "OCEANBASE";
     public static final String OCEANBASE_ORACLE = "OCEANBASE_ORACLE";
     public static final String DB2 = "DB2";
+    public static final String GBASE = "GBASE";
 
     public static final String JDBC_PROPERTIES_PREFIX = "jdbc.";
     public static final String JDBC_URL = "jdbc_url";
@@ -323,6 +325,8 @@ public class JdbcResource extends Resource {
             return OCEANBASE;
         } else if (url.startsWith(JDBC_DB2)) {
             return DB2;
+        } else if (url.startsWith(JDBC_GBASE)) {
+            return GBASE;
         }
         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 d81b82fd3eb..f48c1caf8c8 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
@@ -103,6 +103,7 @@ public class JdbcTable extends Table {
         tempMap.put("oceanbase", TOdbcTableType.OCEANBASE);
         tempMap.put("oceanbase_oracle", TOdbcTableType.OCEANBASE_ORACLE);
         tempMap.put("db2", TOdbcTableType.DB2);
+        tempMap.put("gbase", TOdbcTableType.GBASE);
         TABLE_TYPE_MAP = Collections.unmodifiableMap(tempMap);
     }
 
@@ -481,6 +482,7 @@ public class JdbcTable extends Table {
         switch (tableType) {
             case MYSQL:
             case OCEANBASE:
+            case GBASE:
                 return formatName(name, "`", "`", false, false);
             case SQLSERVER:
                 return formatName(name, "[", "]", false, false);
@@ -503,6 +505,7 @@ public class JdbcTable extends Table {
         switch (tableType) {
             case MYSQL:
             case OCEANBASE:
+            case GBASE:
                 return formatNameWithRemoteName(remoteName, "`", "`");
             case SQLSERVER:
                 return formatNameWithRemoteName(remoteName, "[", "]");
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java
index eccfbe7ae8e..80a858e86a8 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java
@@ -91,6 +91,8 @@ public abstract class JdbcClient {
                 return new JdbcTrinoClient(jdbcClientConfig);
             case JdbcResource.DB2:
                 return new JdbcDB2Client(jdbcClientConfig);
+            case JdbcResource.GBASE:
+                return new JdbcGbaseClient(jdbcClientConfig);
             default:
                 throw new IllegalArgumentException("Unsupported DB type: " + 
dbType);
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcGbaseClient.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcGbaseClient.java
new file mode 100644
index 00000000000..5aaacb3e673
--- /dev/null
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcGbaseClient.java
@@ -0,0 +1,158 @@
+// 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.datasource.jdbc.client;
+
+import org.apache.doris.catalog.PrimitiveType;
+import org.apache.doris.catalog.ScalarType;
+import org.apache.doris.catalog.Type;
+import org.apache.doris.common.util.Util;
+import org.apache.doris.datasource.jdbc.util.JdbcFieldSchema;
+
+import com.google.common.collect.Lists;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.List;
+import java.util.function.Consumer;
+
+public class JdbcGbaseClient extends JdbcClient {
+
+    protected JdbcGbaseClient(JdbcClientConfig jdbcClientConfig) {
+        super(jdbcClientConfig);
+    }
+
+    @Override
+    public List<String> getDatabaseNameList() {
+        Connection conn = getConnection();
+        ResultSet rs = null;
+        List<String> remoteDatabaseNames = Lists.newArrayList();
+        try {
+            if (isOnlySpecifiedDatabase && includeDatabaseMap.isEmpty() && 
excludeDatabaseMap.isEmpty()) {
+                String currentDatabase = conn.getCatalog();
+                remoteDatabaseNames.add(currentDatabase);
+            } else {
+                rs = conn.getMetaData().getCatalogs();
+                while (rs.next()) {
+                    remoteDatabaseNames.add(rs.getString("TABLE_CAT"));
+                }
+            }
+        } catch (SQLException e) {
+            throw new JdbcClientException("failed to get database name list 
from jdbc", e);
+        } finally {
+            close(rs, conn);
+        }
+        return filterDatabaseNames(remoteDatabaseNames);
+    }
+
+    @Override
+    protected void processTable(String remoteDbName, String remoteTableName, 
String[] tableTypes,
+            Consumer<ResultSet> resultSetConsumer) {
+        Connection conn = null;
+        ResultSet rs = null;
+        try {
+            conn = super.getConnection();
+            DatabaseMetaData databaseMetaData = conn.getMetaData();
+            rs = databaseMetaData.getTables(remoteDbName, null, 
remoteTableName, tableTypes);
+            resultSetConsumer.accept(rs);
+        } catch (SQLException e) {
+            throw new JdbcClientException("Failed to process table", e);
+        } finally {
+            close(rs, conn);
+        }
+    }
+
+    @Override
+    protected ResultSet getRemoteColumns(DatabaseMetaData databaseMetaData, 
String catalogName, String remoteDbName,
+            String remoteTableName) throws SQLException {
+        return databaseMetaData.getColumns(remoteDbName, null, 
remoteTableName, null);
+    }
+
+    @Override
+    public List<JdbcFieldSchema> getJdbcColumnsInfo(String localDbName, String 
localTableName) {
+        Connection conn = getConnection();
+        ResultSet rs = null;
+        List<JdbcFieldSchema> tableSchema = Lists.newArrayList();
+        String remoteDbName = getRemoteDatabaseName(localDbName);
+        String remoteTableName = getRemoteTableName(localDbName, 
localTableName);
+        try {
+            DatabaseMetaData databaseMetaData = conn.getMetaData();
+            String catalogName = getCatalogName(conn);
+            rs = getRemoteColumns(databaseMetaData, catalogName, remoteDbName, 
remoteTableName);
+            while (rs.next()) {
+                JdbcFieldSchema field = new JdbcFieldSchema(rs);
+                tableSchema.add(field);
+            }
+        } catch (SQLException e) {
+            throw new JdbcClientException("failed to get jdbc columns info for 
remote table `%s.%s`: %s",
+                    remoteDbName, remoteTableName, 
Util.getRootCauseMessage(e));
+        } finally {
+            close(rs, conn);
+        }
+        return tableSchema;
+    }
+
+    @Override
+    protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) {
+        switch (fieldSchema.getDataType()) {
+            case Types.TINYINT:
+                return Type.TINYINT;
+            case Types.SMALLINT:
+                return Type.SMALLINT;
+            case Types.INTEGER:
+                return Type.INT;
+            case Types.BIGINT:
+                return Type.BIGINT;
+            case Types.FLOAT:
+            case Types.REAL:
+                return Type.FLOAT;
+            case Types.DOUBLE:
+                return Type.DOUBLE;
+            case Types.NUMERIC:
+            case Types.DECIMAL: {
+                int precision = fieldSchema.getColumnSize()
+                        .orElseThrow(() -> new 
IllegalArgumentException("Precision not present"));
+                int scale = fieldSchema.getDecimalDigits()
+                        .orElseThrow(() -> new JdbcClientException("Scale not 
present"));
+                return createDecimalOrStringType(precision, scale);
+            }
+            case Types.DATE:
+                return Type.DATEV2;
+            case Types.TIMESTAMP: {
+                int scale = fieldSchema.getDecimalDigits().orElse(0);
+                if (scale > 6) {
+                    scale = 6;
+                }
+                return ScalarType.createDatetimeV2Type(scale);
+            }
+            case Types.CHAR:
+                ScalarType charType = 
ScalarType.createType(PrimitiveType.CHAR);
+                charType.setLength(fieldSchema.getColumnSize()
+                        .orElseThrow(() -> new 
IllegalArgumentException("Length not present")));
+                return charType;
+            case Types.TIME:
+            case Types.VARCHAR:
+            case Types.LONGVARCHAR:
+                return ScalarType.createStringType();
+            default:
+                return Type.UNSUPPORTED;
+        }
+    }
+}
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/source/JdbcScanNode.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/source/JdbcScanNode.java
index cbb391bd3fa..bda7e7901fe 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/source/JdbcScanNode.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/source/JdbcScanNode.java
@@ -202,7 +202,8 @@ public class JdbcScanNode extends ExternalScanNode {
                 || jdbcType == TOdbcTableType.SAP_HANA
                 || jdbcType == TOdbcTableType.TRINO
                 || jdbcType == TOdbcTableType.PRESTO
-                || jdbcType == TOdbcTableType.OCEANBASE)) {
+                || jdbcType == TOdbcTableType.OCEANBASE
+                || jdbcType == TOdbcTableType.GBASE)) {
             sql.append(" LIMIT ").append(limit);
         }
 
diff --git a/gensrc/thrift/Types.thrift b/gensrc/thrift/Types.thrift
index fd37adb8654..89a67fdba15 100644
--- a/gensrc/thrift/Types.thrift
+++ b/gensrc/thrift/Types.thrift
@@ -401,7 +401,8 @@ enum TOdbcTableType {
     OCEANBASE,
     OCEANBASE_ORACLE,
     NEBULA, // Deprecated
-    DB2
+    DB2,
+    GBASE
 }
 
 struct TJdbcExecutorCtorParams {
diff --git 
a/regression-test/data/external_table_p0/jdbc/test_gbase_jdbc_catalog.out 
b/regression-test/data/external_table_p0/jdbc/test_gbase_jdbc_catalog.out
new file mode 100644
index 00000000000..12d03867430
--- /dev/null
+++ b/regression-test/data/external_table_p0/jdbc/test_gbase_jdbc_catalog.out
@@ -0,0 +1,31 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !sample_table_desc --
+bigint_col     bigint  Yes     true    \N      
+char_col       character(255)  Yes     true    \N      
+date_col       date    Yes     true    \N      
+datetime_col   datetime        Yes     true    \N      
+decimal_col    decimal(10,2)   Yes     true    \N      
+double_col     double  Yes     true    \N      
+float_col      float   Yes     true    \N      
+int_col        int     Yes     true    \N      
+numeric_col    decimal(10,2)   Yes     true    \N      
+smallint_col   smallint        Yes     true    \N      
+text_col       text    Yes     true    \N      
+time_col       text    Yes     true    \N      
+timestamp_col  datetime        No      true    \N      
+tinyint_col    tinyint Yes     true    \N      
+varchar_col    text    Yes     true    \N      
+
+-- !sample_table_select --
+\N     \N      \N      \N      \N      \N      \N      \N      \N      \N      
\N      \N      \N      \N      2024-10-09T11:42:11
+-127   -32767  -2147483647     -92233720368    -3.4E38 -inf    -9999999.99     
-9999999.99                             0001-01-01      0001-01-01T00:00        
-838:59:59      1970-01-01T08:00:01
+1      18      100     500000  1.75    70.5    12345.67        100.00  John 
Doe        A description   Detailed text data      2023-09-19      
2023-09-19T12:34:56     12:00:00        2023-09-19T14:45
+127    32767   2147483647      92233720368547758       3.4E38  inf     
9999999.99      9999999.99      
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 [...]
+
+-- !show_tables --
+gbase_test
+pt1
+pt2
+pt3
+pt4
+
diff --git 
a/regression-test/suites/external_table_p0/jdbc/test_gbase_jdbc_catalog.groovy 
b/regression-test/suites/external_table_p0/jdbc/test_gbase_jdbc_catalog.groovy
new file mode 100644
index 00000000000..6683981687d
--- /dev/null
+++ 
b/regression-test/suites/external_table_p0/jdbc/test_gbase_jdbc_catalog.groovy
@@ -0,0 +1,143 @@
+// 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.
+
+suite("test_gbase_jdbc_catalog", 
"p0,external,gbase,external_docker,external_docker_gbase") {
+    // Because there is no Gbase Dcoker test environment, the test case will 
not be executed for the time being.
+    // Gbase ddl
+    // CREATE TABLE gbase_test (
+    //     tinyint_col TINYINT,
+    //     smallint_col SMALLINT,
+    //     int_col INT,
+    //     bigint_col BIGINT,
+    //     float_col FLOAT,
+    //     double_col DOUBLE,
+    //     decimal_col DECIMAL(10, 2),
+    //     numeric_col NUMERIC(10, 2),
+    //     char_col CHAR(255),
+    //     varchar_col VARCHAR(10922),
+    //     text_col TEXT,
+    //     date_col DATE,
+    //     datetime_col DATETIME,
+    //     time_col TIME,
+    //     timestamp_col TIMESTAMP
+    // );
+
+    //     INSERT INTO gbase_test VALUES (
+    //         1,              -- tinyint_col
+    //         18,             -- smallint_col
+    //         100,            -- int_col
+    //         500000,         -- bigint_col
+    //         1.75,           -- float_col
+    //         70.5,           -- double_col
+    //         12345.67,       -- decimal_col
+    //         100.00,         -- numeric_col
+    //         'John Doe',     -- char_col
+    //         'A description',-- varchar_col
+    //         'Detailed text data', -- text_col
+    //         '2023-09-19',   -- date_col
+    //         '2023-09-19 12:34:56', -- datetime_col
+    //         '12:00:00',     -- time_col
+    //         '2023-09-19 14:45:00'  -- timestamp_col
+    //     );
+    //
+    //
+    //     INSERT INTO gbase_test VALUES (
+    //         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
NULL, NULL, NULL, NULL, NULL
+    //     );
+
+    // INSERT INTO gbase_test VALUES (
+    //     -127,                        -- tinyint_col (min value)
+    //     -32767,                      -- smallint_col (min value)
+    //     -2147483647,                 -- int_col (min value)
+    //     -92233720368,                -- bigint_col (min value)
+    //     -3.40E+38,                   -- float_col (min value)
+    //     -1.7976931348623157E+308,    -- double_col (min value)
+    //     -(1E+9 - 1)/(1E+2),          -- decimal_col (min value)
+    //     -(1E+9 - 1)/(1E+2),          -- numeric_col (min value)
+    //     '',                          -- char_col (empty string,min value)
+    //     '',                          -- varchar_col (empty string,min value)
+    //     '',                          -- text_col (empty string,min value)
+    //     '0001-01-01',                -- date_col (min value)
+    //     '0001-01-01 00:00:00.000000',-- datetime_col (min value)
+    //     '-838:59:59',                -- time_col (min value)
+    //     '1970-01-01 08:00:01'        -- timestamp_col (min value)
+    // );
+
+    // INSERT INTO gbase_test VALUES (
+    //     127,                         -- tinyint_col (max value)
+    //     32767,                       -- smallint_col (max value)
+    //     2147483647,                  -- int_col (max value)
+    //     92233720368547758,           -- bigint_col (max value)
+    //     3.40E+38,                    -- float_col (max value)
+    //     1.7976931348623157E+308,     -- double_col (max value)
+    //     (1E+9 - 1)/(1E+2),           -- decimal_col (max value)
+    //     (1E+9 - 1)/(1E+2),           -- numeric_col (max value)
+    //     REPEAT('Z', 255),            -- char_col (max value 255 characters)
+    //     REPEAT('A', 10922),          -- varchar_col (max value 10922 
characters)
+    //     REPEAT('A', 21845),          -- text_col (max value 21845 
characters)
+    //     '9999-12-31',                -- date_col (max value)
+    //     '9999-12-31 23:59:59.999999',-- datetime_col (max value)
+    //     '838:59:59',                 -- time_col (max value)
+    //     '2038-01-01 00:59:59'        -- timestamp_col (max value)
+    // );
+
+    // CREATE TABLE "pt1" (
+    //   a datetime DEFAULT NULL
+    // ) PARTITION BY RANGE(dayofmonth(a))
+    // (PARTITION p0 VALUES LESS THAN (10));
+    //
+    // CREATE TABLE "pt2" (
+    //   a datetime DEFAULT NULL
+    // )
+    //  PARTITION BY LIST (time_to_sec(a))
+    // (PARTITION p0 VALUES IN (3,5,6,9,17));
+    //
+    // CREATE TABLE "pt3" (
+    //   "a" int(11) DEFAULT NULL
+    // )
+    // PARTITION BY HASH (abs(a));
+    //
+    // CREATE TABLE "pt4" (
+    //   "a" varchar(100) DEFAULT NULL
+    // ) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace'
+    //  PARTITION BY KEY (a)
+    // PARTITIONS 1;
+
+    // Doris Catalog
+    // sql """
+    // CREATE CATALOG `gbase` PROPERTIES (
+    // "user" = "root",
+    // "type" = "jdbc",
+    // "password" = "",
+    // "jdbc_url" = "jdbc:gbase://127.0.0.1:5258/doris_test",
+    // "driver_url" = "gbase-connector-java-9.5.0.7-build1-bin.jar",
+    // "driver_class" = "com.gbase.jdbc.Driver"
+    // ); """
+
+    //sql """switch gbase;"""
+    //sql """use doris_test;"""
+    //order_qt_sample_table_desc """ desc gbase_test; """
+    //order_qt_sample_table_select  """ select * from gbase_test order by 1; 
"""
+    //order_qt_show_tables  """ show tables; """
+
+    // explain {
+    //     sql("select tinyint_col from gbase_test limit 2;")
+
+    //     contains "QUERY: SELECT `tinyint_col` FROM 
`doris_test`.`gbase_test` LIMIT 2"
+    // }
+
+}


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

Reply via email to