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

panxiaolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 85ba7992922 [fix](ub) fix uninitialized accesses in BE (#35370)
85ba7992922 is described below

commit 85ba79929228547ccb3fd84fb209e9ebfa1d234e
Author: zclllyybb <zhaochan...@selectdb.com>
AuthorDate: Wed May 29 20:10:22 2024 +0800

    [fix](ub) fix uninitialized accesses in BE (#35370)
    
    
    ubsan hints:
    ```c++
    /root/doris/be/src/olap/hll.h:93:29: runtime error: load of value 
3078029312, which is not a valid value for type 'HllDataType'
    /root/doris/be/src/olap/hll.h:94:23: runtime error: load of value 
3078029312, which is not a valid value for type 'HllDataType'
    /root/doris/be/src/runtime/descriptors.h:439:38: runtime error: load of 
value 118, which is not a valid value for type 'bool'
    /root/doris/be/src/vec/exec/vjdbc_connector.cpp:61:50: runtime error: load 
of value 35, which is not a valid value for type 'bool'
    ```
---
 be/src/olap/hll.cpp                                |  19 ++--
 be/src/olap/hll.h                                  |  73 ++++++-------
 be/src/runtime/descriptors.h                       |   8 +-
 be/src/util/bitmap_value.h                         |   7 +-
 be/src/vec/columns/column_complex.h                |  30 ++++--
 be/src/vec/core/field.h                            |  15 ++-
 be/src/vec/data_types/data_type_hll.h              |  12 +--
 be/src/vec/exec/scan/new_jdbc_scanner.cpp          |   1 +
 be/src/vec/exec/vjdbc_connector.h                  |  15 +--
 .../vec/exprs/table_function/vexplode_bitmap.cpp   |   2 +-
 be/test/vec/core/column_complex_test.cpp           |   9 +-
 .../jdbc/test_doris_jdbc_catalog.groovy            | 118 ++++++++++-----------
 12 files changed, 148 insertions(+), 161 deletions(-)

diff --git a/be/src/olap/hll.cpp b/be/src/olap/hll.cpp
index bfbe954217f..80be40f5643 100644
--- a/be/src/olap/hll.cpp
+++ b/be/src/olap/hll.cpp
@@ -19,15 +19,12 @@
 
 #include <cmath>
 #include <map>
-#include <new>
 #include <ostream>
 
 #include "common/logging.h"
 #include "util/coding.h"
 #include "util/slice.h"
 
-using std::map;
-using std::nothrow;
 using std::string;
 using std::stringstream;
 
@@ -328,27 +325,27 @@ int64_t HyperLogLog::estimate_cardinality() const {
     float alpha = 0;
 
     if (num_streams == 16) {
-        alpha = 0.673f;
+        alpha = 0.673F;
     } else if (num_streams == 32) {
-        alpha = 0.697f;
+        alpha = 0.697F;
     } else if (num_streams == 64) {
-        alpha = 0.709f;
+        alpha = 0.709F;
     } else {
-        alpha = 0.7213f / (1 + 1.079f / num_streams);
+        alpha = 0.7213F / (1 + 1.079F / num_streams);
     }
 
     float harmonic_mean = 0;
     int num_zero_registers = 0;
 
     for (int i = 0; i < HLL_REGISTERS_COUNT; ++i) {
-        harmonic_mean += powf(2.0f, -_registers[i]);
+        harmonic_mean += powf(2.0F, -_registers[i]);
 
         if (_registers[i] == 0) {
             ++num_zero_registers;
         }
     }
 
-    harmonic_mean = 1.0f / harmonic_mean;
+    harmonic_mean = 1.0F / harmonic_mean;
     double estimate = alpha * num_streams * num_streams * harmonic_mean;
     // according to HyperLogLog current correction, if E is cardinal
     // E =< num_streams * 2.5 , LC has higher accuracy.
@@ -391,9 +388,9 @@ void HllSetResolver::parse() {
         _sparse_count = (SparseLengthValueType*)(pdata + 
sizeof(SetTypeValueType));
         sparse_data = pdata + sizeof(SetTypeValueType) + 
sizeof(SparseLengthValueType);
         for (int i = 0; i < *_sparse_count; i++) {
-            SparseIndexType* index = (SparseIndexType*)sparse_data;
+            auto* index = (SparseIndexType*)sparse_data;
             sparse_data += sizeof(SparseIndexType);
-            SparseValueType* value = (SparseValueType*)sparse_data;
+            auto* value = (SparseValueType*)sparse_data;
             _sparse_map[*index] = *value;
             sparse_data += sizeof(SetTypeValueType);
         }
diff --git a/be/src/olap/hll.h b/be/src/olap/hll.h
index 0ae5539163c..56cbd97110d 100644
--- a/be/src/olap/hll.h
+++ b/be/src/olap/hll.h
@@ -17,9 +17,8 @@
 
 #pragma once
 
-#include <stdint.h>
-#include <string.h>
-
+#include <cstdint>
+#include <cstring>
 #include <map>
 #include <string>
 #include <utility>
@@ -197,10 +196,10 @@ public:
         _registers = nullptr;
     }
 
-    typedef uint8_t SetTypeValueType;
-    typedef int32_t SparseLengthValueType;
-    typedef uint16_t SparseIndexType;
-    typedef uint8_t SparseValueType;
+    using SetTypeValueType = uint8_t;
+    using SparseLengthValueType = int32_t;
+    using SparseIndexType = uint16_t;
+    using SparseValueType = uint8_t;
 
     // Add a hash value to this HLL value
     // NOTE: input must be a hash_value
@@ -213,10 +212,11 @@ public:
 
     size_t memory_consumed() const {
         size_t size = sizeof(*this);
-        if (_type == HLL_DATA_EXPLICIT)
+        if (_type == HLL_DATA_EXPLICIT) {
             size += _hash_set.size() * sizeof(uint64_t);
-        else if (_type == HLL_DATA_SPARSE || _type == HLL_DATA_FULL)
+        } else if (_type == HLL_DATA_SPARSE || _type == HLL_DATA_FULL) {
             size += HLL_REGISTERS_COUNT;
+        }
         return size;
     }
 
@@ -231,13 +231,7 @@ public:
 
     int64_t estimate_cardinality() const;
 
-    static std::string empty() {
-        static HyperLogLog hll;
-        std::string buf;
-        buf.resize(HLL_EMPTY_SIZE);
-        hll.serialize((uint8_t*)buf.c_str());
-        return buf;
-    }
+    static HyperLogLog empty() { return HyperLogLog {}; }
 
     // Check if input slice is a valid serialized binary of HyperLogLog.
     // This function only check the encoded type in slice, whose complex
@@ -265,14 +259,6 @@ public:
         }
     }
 
-private:
-    HllDataType _type = HLL_DATA_EMPTY;
-    vectorized::flat_hash_set<uint64_t> _hash_set;
-
-    // This field is much space consuming(HLL_REGISTERS_COUNT), we create
-    // it only when it is really needed.
-    uint8_t* _registers = nullptr;
-
 private:
     void _convert_explicit_to_register();
 
@@ -308,26 +294,27 @@ private:
         }
 #endif
     }
+
+    HllDataType _type = HLL_DATA_EMPTY;
+    vectorized::flat_hash_set<uint64_t> _hash_set;
+
+    // This field is much space consuming(HLL_REGISTERS_COUNT), we create
+    // it only when it is really needed.
+    uint8_t* _registers = nullptr;
 };
 
 // todo(kks): remove this when dpp_sink class was removed
 class HllSetResolver {
 public:
-    HllSetResolver()
-            : _buf_ref(nullptr),
-              _buf_len(0),
-              _set_type(HLL_DATA_EMPTY),
-              _full_value_position(nullptr),
-              _explicit_value(nullptr),
-              _explicit_num(0) {}
-
-    ~HllSetResolver() {}
-
-    typedef uint8_t SetTypeValueType;
-    typedef uint8_t ExplicitLengthValueType;
-    typedef int32_t SparseLengthValueType;
-    typedef uint16_t SparseIndexType;
-    typedef uint8_t SparseValueType;
+    HllSetResolver() = default;
+
+    ~HllSetResolver() = default;
+
+    using SetTypeValueType = uint8_t;
+    using ExplicitLengthValueType = uint8_t;
+    using SparseLengthValueType = int32_t;
+    using SparseIndexType = uint16_t;
+    using SparseValueType = uint8_t;
 
     // only save pointer
     void init(char* buf, int len) {
@@ -339,7 +326,7 @@ public:
     HllDataType get_hll_data_type() { return _set_type; }
 
     // explicit value num
-    int get_explicit_count() { return (int)_explicit_num; }
+    int get_explicit_count() const { return (int)_explicit_num; }
 
     // get explicit index value 64bit
     uint64_t get_explicit_value(int index) {
@@ -360,11 +347,11 @@ public:
 
 private:
     char* _buf_ref = nullptr; // set
-    int _buf_len;             // set len
-    HllDataType _set_type;    //set type
+    int _buf_len {};          // set len
+    HllDataType _set_type {}; //set type
     char* _full_value_position = nullptr;
     uint64_t* _explicit_value = nullptr;
-    ExplicitLengthValueType _explicit_num;
+    ExplicitLengthValueType _explicit_num {};
     std::map<SparseIndexType, SparseValueType> _sparse_map;
     SparseLengthValueType* _sparse_count;
 };
diff --git a/be/src/runtime/descriptors.h b/be/src/runtime/descriptors.h
index 371bf395385..3379cebefce 100644
--- a/be/src/runtime/descriptors.h
+++ b/be/src/runtime/descriptors.h
@@ -437,8 +437,6 @@ public:
               _tuple_idx_nullable_map(desc._tuple_idx_nullable_map),
               _tuple_idx_map(desc._tuple_idx_map),
               _has_varlen_slots(desc._has_varlen_slots) {
-        _num_materialized_slots = 0;
-        _num_slots = 0;
         auto it = desc._tuple_desc_map.begin();
         for (; it != desc._tuple_desc_map.end(); ++it) {
             _num_materialized_slots += (*it)->num_materialized_slots();
@@ -500,10 +498,10 @@ private:
     std::vector<int> _tuple_idx_map;
 
     // Provide quick way to check if there are variable length slots.
-    bool _has_varlen_slots;
+    bool _has_varlen_slots = false;
 
-    int _num_materialized_slots;
-    int _num_slots;
+    int _num_materialized_slots = 0;
+    int _num_slots = 0;
 };
 
 } // namespace doris
diff --git a/be/src/util/bitmap_value.h b/be/src/util/bitmap_value.h
index b7a046921b5..d8f68a227e7 100644
--- a/be/src/util/bitmap_value.h
+++ b/be/src/util/bitmap_value.h
@@ -1258,12 +1258,7 @@ public:
         return *this;
     }
 
-    static std::string empty_bitmap() {
-        std::string buf(sizeof(BitmapValue), 0);
-        BitmapValue* bitmap_value = reinterpret_cast<BitmapValue*>(buf.data());
-        bitmap_value->_type = EMPTY;
-        return buf;
-    }
+    static BitmapValue empty_bitmap() { return BitmapValue {}; }
 
     BitmapValue& operator=(BitmapValue&& other) noexcept {
         if (this == &other) {
diff --git a/be/src/vec/columns/column_complex.h 
b/be/src/vec/columns/column_complex.h
index f173a1bf49b..6b570dddb72 100644
--- a/be/src/vec/columns/column_complex.h
+++ b/be/src/vec/columns/column_complex.h
@@ -26,10 +26,10 @@
 #include "util/bitmap_value.h"
 #include "util/quantile_state.h"
 #include "vec/columns/column.h"
-#include "vec/columns/column_impl.h"
 #include "vec/columns/column_string.h"
 #include "vec/columns/column_vector.h"
 #include "vec/columns/columns_common.h"
+#include "vec/core/field.h"
 #include "vec/core/types.h"
 
 namespace doris::vectorized {
@@ -37,7 +37,7 @@ namespace doris::vectorized {
 template <typename T>
 class ColumnComplexType final : public COWHelper<IColumn, 
ColumnComplexType<T>> {
 private:
-    ColumnComplexType() {}
+    ColumnComplexType() = default;
     ColumnComplexType(const size_t n) : data(n) {}
     friend class COWHelper<IColumn, ColumnComplexType<T>>;
 
@@ -55,7 +55,7 @@ public:
     size_t size() const override { return data.size(); }
 
     StringRef get_data_at(size_t n) const override {
-        return StringRef(reinterpret_cast<const char*>(&data[n]), 
sizeof(data[n]));
+        return {reinterpret_cast<const char*>(&data[n]), sizeof(data[n])};
     }
 
     void insert_from(const IColumn& src, size_t n) override {
@@ -130,18 +130,18 @@ public:
     MutableColumnPtr clone_resized(size_t size) const override;
 
     void insert(const Field& x) override {
-        const String& s = doris::vectorized::get<const String&>(x);
-        data.push_back(*reinterpret_cast<const T*>(s.c_str()));
+        const T& s = doris::vectorized::get<const T&>(x);
+        data.push_back(s);
     }
 
     Field operator[](size_t n) const override {
         assert(n < size());
-        return Field(reinterpret_cast<const char*>(&data[n]), sizeof(data[n]));
+        return {reinterpret_cast<const char*>(&data[n]), sizeof(data[n])};
     }
 
     void get(size_t n, Field& res) const override {
         assert(n < size());
-        res.assign_string(reinterpret_cast<const char*>(&data[n]), 
sizeof(data[n]));
+        res = Field(data[n]);
     }
 
     [[noreturn]] bool get_bool(size_t n) const override {
@@ -260,18 +260,24 @@ ColumnPtr ColumnComplexType<T>::filter(const 
IColumn::Filter& filt,
     size_t size = data.size();
     column_match_filter_size(size, filt.size());
 
-    if (data.size() == 0) return this->create();
+    if (data.size() == 0) {
+        return this->create();
+    }
     auto res = this->create();
     Container& res_data = res->get_data();
 
-    if (result_size_hint) res_data.reserve(result_size_hint > 0 ? 
result_size_hint : size);
+    if (result_size_hint) {
+        res_data.reserve(result_size_hint > 0 ? result_size_hint : size);
+    }
 
     const UInt8* filt_pos = filt.data();
     const UInt8* filt_end = filt_pos + size;
     const T* data_pos = data.data();
 
     while (filt_pos < filt_end) {
-        if (*filt_pos) res_data.push_back(*data_pos);
+        if (*filt_pos) {
+            res_data.push_back(*data_pos);
+        }
 
         ++filt_pos;
         ++data_pos;
@@ -335,7 +341,9 @@ ColumnPtr ColumnComplexType<T>::replicate(const 
IColumn::Offsets& offsets) const
     size_t size = data.size();
     column_match_offsets_size(size, offsets.size());
 
-    if (0 == size) return this->create();
+    if (0 == size) {
+        return this->create();
+    }
 
     auto res = this->create();
     typename Self::Container& res_data = res->get_data();
diff --git a/be/src/vec/core/field.h b/be/src/vec/core/field.h
index de2d544e7e0..87459f19ce6 100644
--- a/be/src/vec/core/field.h
+++ b/be/src/vec/core/field.h
@@ -58,7 +58,7 @@ namespace doris::vectorized {
 
 template <typename T>
 struct NearestFieldTypeImpl {
-    using Type = T;
+    using Type = T; // for HLL or some origin types. see def. of storage
 };
 
 template <typename T>
@@ -768,7 +768,9 @@ private:
     }
 
     ALWAYS_INLINE void destroy() {
-        if (which < Types::MIN_NON_POD) return;
+        if (which < Types::MIN_NON_POD) {
+            return;
+        }
 
         switch (which) {
         case Types::String:
@@ -789,6 +791,15 @@ private:
         case Types::VariantMap:
             destroy<VariantMap>();
             break;
+        case Types::Bitmap:
+            destroy<BitmapValue>();
+            break;
+        case Types::HyperLogLog:
+            destroy<HyperLogLog>();
+            break;
+        case Types::QuantileState:
+            destroy<QuantileState>();
+            break;
         default:
             break;
         }
diff --git a/be/src/vec/data_types/data_type_hll.h 
b/be/src/vec/data_types/data_type_hll.h
index 03293565907..f3856baecfb 100644
--- a/be/src/vec/data_types/data_type_hll.h
+++ b/be/src/vec/data_types/data_type_hll.h
@@ -18,9 +18,9 @@
 #pragma once
 #include <gen_cpp/Types_types.h>
 #include <glog/logging.h>
-#include <stddef.h>
-#include <stdint.h>
 
+#include <cstddef>
+#include <cstdint>
 #include <memory>
 #include <ostream>
 #include <string>
@@ -35,15 +35,11 @@
 #include "vec/data_types/data_type.h"
 #include "vec/data_types/serde/data_type_serde.h"
 
-namespace doris {
-namespace vectorized {
+namespace doris::vectorized {
 class BufferReadable;
 class BufferWritable;
 class IColumn;
-} // namespace vectorized
-} // namespace doris
 
-namespace doris::vectorized {
 class DataTypeHLL : public IDataType {
 public:
     DataTypeHLL() = default;
@@ -56,7 +52,7 @@ public:
     const char* get_family_name() const override { return "HLL"; }
 
     TypeIndex get_type_id() const override { return TypeIndex::HLL; }
-    TypeDescriptor get_type_as_type_descriptor() const override { return 
TypeDescriptor(TYPE_HLL); }
+    TypeDescriptor get_type_as_type_descriptor() const override { return 
{TYPE_HLL}; }
 
     doris::FieldType get_storage_field_type() const override {
         return doris::FieldType::OLAP_FIELD_TYPE_HLL;
diff --git a/be/src/vec/exec/scan/new_jdbc_scanner.cpp 
b/be/src/vec/exec/scan/new_jdbc_scanner.cpp
index e0c64b58fb5..60e86f06521 100644
--- a/be/src/vec/exec/scan/new_jdbc_scanner.cpp
+++ b/be/src/vec/exec/scan/new_jdbc_scanner.cpp
@@ -95,6 +95,7 @@ Status NewJdbcScanner::prepare(RuntimeState* state, const 
VExprContextSPtrs& con
     _jdbc_param.passwd = jdbc_table->jdbc_passwd();
     _jdbc_param.tuple_desc = _tuple_desc;
     _jdbc_param.query_string = std::move(_query_string);
+    _jdbc_param.use_transaction = false; // not useful for scanner but only 
sink.
     _jdbc_param.table_type = _table_type;
     _jdbc_param.connection_pool_min_size = 
jdbc_table->connection_pool_min_size();
     _jdbc_param.connection_pool_max_size = 
jdbc_table->connection_pool_max_size();
diff --git a/be/src/vec/exec/vjdbc_connector.h 
b/be/src/vec/exec/vjdbc_connector.h
index b308cfdf392..954b0abfa78 100644
--- a/be/src/vec/exec/vjdbc_connector.h
+++ b/be/src/vec/exec/vjdbc_connector.h
@@ -43,7 +43,8 @@ class IColumn;
 class VExprContext;
 
 struct JdbcConnectorParam {
-    int64_t catalog_id;
+    // use -1 as default value to find error earlier.
+    int64_t catalog_id = -1;
     std::string driver_path;
     std::string driver_class;
     std::string resource_name;
@@ -53,13 +54,13 @@ struct JdbcConnectorParam {
     std::string passwd;
     std::string query_string;
     std::string table_name;
-    bool use_transaction;
+    bool use_transaction = false;
     TOdbcTableType::type table_type;
-    int32_t connection_pool_min_size;
-    int32_t connection_pool_max_size;
-    int32_t connection_pool_max_wait_time;
-    int32_t connection_pool_max_life_time;
-    bool connection_pool_keep_alive;
+    int32_t connection_pool_min_size = -1;
+    int32_t connection_pool_max_size = -1;
+    int32_t connection_pool_max_wait_time = -1;
+    int32_t connection_pool_max_life_time = -1;
+    bool connection_pool_keep_alive = false;
 
     const TupleDescriptor* tuple_desc = nullptr;
 };
diff --git a/be/src/vec/exprs/table_function/vexplode_bitmap.cpp 
b/be/src/vec/exprs/table_function/vexplode_bitmap.cpp
index e6e4c843075..5327c2e1633 100644
--- a/be/src/vec/exprs/table_function/vexplode_bitmap.cpp
+++ b/be/src/vec/exprs/table_function/vexplode_bitmap.cpp
@@ -90,7 +90,7 @@ void 
VExplodeBitmapTableFunction::get_same_many_values(MutableColumnPtr& column,
 
 void VExplodeBitmapTableFunction::process_row(size_t row_idx) {
     TableFunction::process_row(row_idx);
-
+    //FIXME: use ColumnComplex instead
     StringRef value = _value_column->get_data_at(row_idx);
 
     if (value.data) {
diff --git a/be/test/vec/core/column_complex_test.cpp 
b/be/test/vec/core/column_complex_test.cpp
index dd2109d1f7b..73ea44dfc4b 100644
--- a/be/test/vec/core/column_complex_test.cpp
+++ b/be/test/vec/core/column_complex_test.cpp
@@ -48,7 +48,7 @@ TEST(ColumnComplexTest, BasicTest) {
 }
 
 // Test the compile failed
-TEST(ColumnComplexType, DataTypeBitmapTest) {
+TEST(ColumnComplexTest, DataTypeBitmapTest) {
     std::make_shared<DataTypeBitMap>();
 }
 
@@ -149,10 +149,9 @@ TEST_F(ColumnBitmapTest, ColumnBitmapReadWrite) {
 
     Field field;
     column->get(0, field);
-    auto str = field.get<String>();
-    auto* bitmap = reinterpret_cast<const BitmapValue*>(str.c_str());
-    EXPECT_TRUE(bitmap->contains(10));
-    EXPECT_TRUE(bitmap->contains(1000000));
+    auto bitmap = field.get<BitmapValue>();
+    EXPECT_TRUE(bitmap.contains(10));
+    EXPECT_TRUE(bitmap.contains(1000000));
 }
 
 TEST_F(ColumnQuantileStateTest, ColumnQuantileStateReadWrite) {
diff --git 
a/regression-test/suites/external_table_p0/jdbc/test_doris_jdbc_catalog.groovy 
b/regression-test/suites/external_table_p0/jdbc/test_doris_jdbc_catalog.groovy
index 014980816f5..bdccd9fa5e1 100644
--- 
a/regression-test/suites/external_table_p0/jdbc/test_doris_jdbc_catalog.groovy
+++ 
b/regression-test/suites/external_table_p0/jdbc/test_doris_jdbc_catalog.groovy
@@ -28,20 +28,14 @@ suite("test_doris_jdbc_catalog", 
"p0,external,doris,external_docker,external_doc
 
 
     String resource_name = "jdbc_resource_catalog_doris"
-    String catalog_name = "doris_jdbc_catalog";
-    String internal_db_name = "regression_test_jdbc_catalog_p0";
     String doris_port = context.config.otherConfigs.get("doris_port");
-    String inDorisTable = "test_doris_jdbc_doris_in_tb";
-    String hllTable = "bowen_hll_test"
-    String base_table = "base";
-    String arr_table = "arr";
 
-    sql """create database if not exists ${internal_db_name}; """
+    sql """create database if not exists regression_test_jdbc_catalog_p0; """
 
     qt_sql """select current_catalog()"""
-    sql """drop catalog if exists ${catalog_name} """
+    sql """drop catalog if exists doris_jdbc_catalog """
 
-    sql """ CREATE CATALOG `${catalog_name}` PROPERTIES (
+    sql """ CREATE CATALOG `doris_jdbc_catalog` PROPERTIES (
         "user" = "${jdbcUser}",
         "type" = "jdbc",
         "password" = "${jdbcPassword}",
@@ -49,36 +43,36 @@ suite("test_doris_jdbc_catalog", 
"p0,external,doris,external_docker,external_doc
         "driver_url" = "${driver_url}",
         "driver_class" = "com.mysql.cj.jdbc.Driver"
         )"""
-    sql """use ${internal_db_name}"""
-    sql  """ drop table if exists ${internal_db_name}.${inDorisTable} """
+    sql """use regression_test_jdbc_catalog_p0"""
+    sql  """ drop table if exists 
regression_test_jdbc_catalog_p0.test_doris_jdbc_doris_in_tb """
     sql  """
-          CREATE TABLE ${internal_db_name}.${inDorisTable} (
+          CREATE TABLE 
regression_test_jdbc_catalog_p0.test_doris_jdbc_doris_in_tb (
             `id` INT NULL COMMENT "主键id",
             `name` string NULL COMMENT "名字"
             ) DISTRIBUTED BY HASH(id) BUCKETS 10
             PROPERTIES("replication_num" = "1");
     """
-    sql """ insert into ${inDorisTable} values (1, 'doris1')"""
-    sql """ insert into ${inDorisTable} values (2, 'doris2')"""
-    sql """ insert into ${inDorisTable} values (3, 'doris3')"""
-    sql """ insert into ${inDorisTable} values (4, 'doris4')"""
-    sql """ insert into ${inDorisTable} values (5, 'doris5')"""
-    sql """ insert into ${inDorisTable} values (6, 'doris6')"""
+    sql """ insert into test_doris_jdbc_doris_in_tb values (1, 'doris1')"""
+    sql """ insert into test_doris_jdbc_doris_in_tb values (2, 'doris2')"""
+    sql """ insert into test_doris_jdbc_doris_in_tb values (3, 'doris3')"""
+    sql """ insert into test_doris_jdbc_doris_in_tb values (4, 'doris4')"""
+    sql """ insert into test_doris_jdbc_doris_in_tb values (5, 'doris5')"""
+    sql """ insert into test_doris_jdbc_doris_in_tb values (6, 'doris6')"""
 
-    order_qt_ex_tb1 """ select * from 
internal.${internal_db_name}.${inDorisTable} order by id; """
+    order_qt_ex_tb1 """ select * from 
internal.regression_test_jdbc_catalog_p0.test_doris_jdbc_doris_in_tb order by 
id; """
 
     qt_sql """select current_catalog()"""
-    sql "switch ${catalog_name}"
+    sql "switch doris_jdbc_catalog"
     qt_sql """select current_catalog()"""
-    sql """ use ${internal_db_name}"""
-    order_qt_ex_tb1 """ select * from ${inDorisTable} order by id; """
+    sql """ use regression_test_jdbc_catalog_p0"""
+    order_qt_ex_tb1 """ select * from test_doris_jdbc_doris_in_tb order by id; 
"""
 
     // test hll query
     sql "switch internal"
-    sql "use ${internal_db_name}"
+    sql "use regression_test_jdbc_catalog_p0"
 
-    sql """ drop table if exists ${hllTable}  """
-    sql """ CREATE TABLE `${hllTable}` (
+    sql """ drop table if exists bowen_hll_test  """
+    sql """ CREATE TABLE `bowen_hll_test` (
           `pin_id` bigint(20) NOT NULL COMMENT "",
           `pv_date` datev2 NOT NULL COMMENT "",
           `user_log_acct` hll HLL_UNION NULL COMMENT ""
@@ -89,16 +83,16 @@ suite("test_doris_jdbc_catalog", 
"p0,external,doris,external_docker,external_doc
         "replication_allocation" = "tag.location.default: 1"
         ); """
 
-    sql """ insert into ${hllTable} values(1, "2023-01-01", hll_hash("1"));"""
-    sql """ insert into ${hllTable} values(2, "2023-01-02", hll_hash("2"));"""
-    sql """ insert into ${hllTable} values(3, "2023-01-03", hll_hash("3"));"""
-    sql """ insert into ${hllTable} values(4, "2023-01-04", hll_hash("4"));"""
-    sql """ insert into ${hllTable} values(5, "2023-01-05", hll_hash("5"));"""
-    sql """ insert into ${hllTable} values(6, "2023-01-06", hll_hash("6"));"""
+    sql """ insert into bowen_hll_test values(1, "2023-01-01", 
hll_hash("1"));"""
+    sql """ insert into bowen_hll_test values(2, "2023-01-02", 
hll_hash("2"));"""
+    sql """ insert into bowen_hll_test values(3, "2023-01-03", 
hll_hash("3"));"""
+    sql """ insert into bowen_hll_test values(4, "2023-01-04", 
hll_hash("4"));"""
+    sql """ insert into bowen_hll_test values(5, "2023-01-05", 
hll_hash("5"));"""
+    sql """ insert into bowen_hll_test values(6, "2023-01-06", 
hll_hash("6"));"""
 
-    sql """drop table if exists ${base_table}"""
+    sql """drop table if exists base"""
     sql """
-        create table ${base_table} (
+        create table base (
             bool_col boolean,
             tinyint_col tinyint,
             smallint_col smallint,
@@ -121,10 +115,10 @@ suite("test_doris_jdbc_catalog", 
"p0,external,doris,external_docker,external_doc
             "replication_allocation" = "tag.location.default: 1"
         );
     """
-    sql """insert into ${base_table} values (true, 1, 1, 1, 1, 1, 1.0, 1.0, 
1.0, 1.0, '2021-01-01', '2021-01-01 00:00:00.000', 'a', 'a', '{\"a\": 1}');"""
+    sql """insert into base values (true, 1, 1, 1, 1, 1, 1.0, 1.0, 1.0, 1.0, 
'2021-01-01', '2021-01-01 00:00:00.000', 'a', 'a', '{\"a\": 1}');"""
     // insert NULL
-    sql """insert into ${base_table} values (null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null);"""
-    order_qt_base1 """ select * from ${base_table} order by int_col; """
+    sql """insert into base values (null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null);"""
+    order_qt_base1 """ select * from base order by int_col; """
 
     sql """drop table if exists all_null_tbl"""
     sql """
@@ -155,9 +149,9 @@ suite("test_doris_jdbc_catalog", 
"p0,external,doris,external_docker,external_doc
     sql """insert into all_null_tbl values (null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null);"""
     order_qt_all_null """ select * from all_null_tbl order by int_col; """
 
-    sql """drop table if exists ${arr_table}"""
+    sql """drop table if exists arr"""
     sql """
-        create table ${arr_table} (
+        create table arr (
             int_col int,
             arr_bool_col array<boolean>,
             arr_tinyint_col array<tinyint>,
@@ -182,10 +176,10 @@ suite("test_doris_jdbc_catalog", 
"p0,external,doris,external_docker,external_doc
         );
     """
 
-    sql """insert into ${arr_table} values (1, array(true), array(1), 
array(1), array(1), array(1), array(1), array(1.0), array(1.0), array(1.0), 
array(1.0), array('2021-01-01'), array('2021-01-01 00:00:00.000'), array('a'), 
array('a'), array('a'));"""
+    sql """insert into arr values (1, array(true), array(1), array(1), 
array(1), array(1), array(1), array(1.0), array(1.0), array(1.0), array(1.0), 
array('2021-01-01'), array('2021-01-01 00:00:00.000'), array('a'), array('a'), 
array('a'));"""
     // insert NULL
-    sql """insert into ${arr_table} values (2, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null);"""
-    order_qt_arr1 """ select * from ${arr_table} order by int_col; """
+    sql """insert into arr values (2, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null);"""
+    order_qt_arr1 """ select * from arr order by int_col; """
 
     sql """drop table if exists test_insert_order"""
 
@@ -208,26 +202,26 @@ suite("test_doris_jdbc_catalog", 
"p0,external,doris,external_docker,external_doc
 
 
     sql """ set return_object_data_as_binary=true """
-    order_qt_tb1 """ select pin_id, hll_union_agg(user_log_acct) from 
${hllTable} group by pin_id; """
+    order_qt_tb1 """ select pin_id, hll_union_agg(user_log_acct) from 
bowen_hll_test group by pin_id; """
 
     // query with jdbc external table
-    sql """ refresh catalog  ${catalog_name} """
+    sql """ refresh catalog  doris_jdbc_catalog """
     qt_sql """select current_catalog()"""
-    sql """ switch ${catalog_name} """
+    sql """ switch doris_jdbc_catalog """
     qt_sql """select current_catalog()"""
-    sql """ use ${internal_db_name} """
-    order_qt_tb2 """ select pin_id, hll_union_agg(user_log_acct) from 
${catalog_name}.${internal_db_name}.${hllTable} group by pin_id; """
-    order_qt_base2 """ select * from 
${catalog_name}.${internal_db_name}.${base_table} order by int_col; """
-    order_qt_all_null2 """ select * from 
${catalog_name}.${internal_db_name}.all_null_tbl order by int_col; """
-    order_qt_arr2 """ select * from 
${catalog_name}.${internal_db_name}.${arr_table} order by int_col; """
-    sql """ drop table if exists internal.${internal_db_name}.ctas_base; """
-    sql """ drop table if exists internal.${internal_db_name}.ctas_arr; """
-    order_qt_ctas_base """ create table internal.${internal_db_name}.ctas_base 
PROPERTIES("replication_num" = "1") as select * from 
${catalog_name}.${internal_db_name}.${base_table} order by int_col; """
-    order_qt_ctas_arr """ create table internal.${internal_db_name}.ctas_arr 
PROPERTIES("replication_num" = "1") as select * from 
${catalog_name}.${internal_db_name}.${arr_table} order by int_col; """
-    qt_desc_ctas_base """ desc internal.${internal_db_name}.ctas_base; """
-    qt_desc_ctas_arr """ desc internal.${internal_db_name}.ctas_arr; """
-    order_qt_query_ctas_base """ select * from 
internal.${internal_db_name}.ctas_base order by int_col; """
-    order_qt_query_ctas_arr """ select * from 
internal.${internal_db_name}.ctas_arr order by int_col; """
+    sql """ use regression_test_jdbc_catalog_p0 """
+    order_qt_tb2 """ select pin_id, hll_union_agg(user_log_acct) from 
doris_jdbc_catalog.regression_test_jdbc_catalog_p0.bowen_hll_test group by 
pin_id; """
+    order_qt_base2 """ select * from 
doris_jdbc_catalog.regression_test_jdbc_catalog_p0.base order by int_col; """
+    order_qt_all_null2 """ select * from 
doris_jdbc_catalog.regression_test_jdbc_catalog_p0.all_null_tbl order by 
int_col; """
+    order_qt_arr2 """ select * from 
doris_jdbc_catalog.regression_test_jdbc_catalog_p0.arr order by int_col; """
+    sql """ drop table if exists 
internal.regression_test_jdbc_catalog_p0.ctas_base; """
+    sql """ drop table if exists 
internal.regression_test_jdbc_catalog_p0.ctas_arr; """
+    order_qt_ctas_base """ create table 
internal.regression_test_jdbc_catalog_p0.ctas_base PROPERTIES("replication_num" 
= "1") as select * from doris_jdbc_catalog.regression_test_jdbc_catalog_p0.base 
order by int_col; """
+    order_qt_ctas_arr """ create table 
internal.regression_test_jdbc_catalog_p0.ctas_arr PROPERTIES("replication_num" 
= "1") as select * from doris_jdbc_catalog.regression_test_jdbc_catalog_p0.arr 
order by int_col; """
+    qt_desc_ctas_base """ desc 
internal.regression_test_jdbc_catalog_p0.ctas_base; """
+    qt_desc_ctas_arr """ desc 
internal.regression_test_jdbc_catalog_p0.ctas_arr; """
+    order_qt_query_ctas_base """ select * from 
internal.regression_test_jdbc_catalog_p0.ctas_base order by int_col; """
+    order_qt_query_ctas_arr """ select * from 
internal.regression_test_jdbc_catalog_p0.ctas_arr order by int_col; """
 
     // test insert order
     sql """insert into test_insert_order(gameid,did,cid,bid,aid,pname) 
values('g1',4,3,2,1,'p1')""";
@@ -238,12 +232,12 @@ suite("test_doris_jdbc_catalog", 
"p0,external,doris,external_docker,external_doc
     qt_sql """select current_catalog()"""
     sql "switch internal"
     qt_sql """select current_catalog()"""
-    sql "use ${internal_db_name}"
-    sql """ drop table if exists ${inDorisTable} """
-    sql """ drop table if exists ${hllTable} """
-    sql """ drop table if exists ${base_table} """
+    sql "use regression_test_jdbc_catalog_p0"
+    sql """ drop table if exists test_doris_jdbc_doris_in_tb """
+    sql """ drop table if exists bowen_hll_test """
+    sql """ drop table if exists base """
     sql """ drop table if exists all_null_tbl """
-    sql """ drop table if exists ${arr_table} """
+    sql """ drop table if exists arr """
     sql """ drop table if exists test_insert_order """
 
 }


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

Reply via email to