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
commit 70430c8a05c4c951646ca0175386f0d71c419c46 Author: Gabriel <gabrielleeb...@gmail.com> AuthorDate: Thu Dec 1 15:18:40 2022 +0800 [test](decimalv3) add regression test cases for decimalv3 (#14672) --- .../segment_v2/bloom_filter_index_writer.cpp | 60 ++---- .../aggregate_function_stddev.cpp | 2 +- be/src/vec/data_types/data_type_decimal.cpp | 24 --- be/src/vec/data_types/data_type_decimal.h | 33 +++- be/src/vec/exec/scan/vscan_node.cpp | 4 +- be/src/vec/io/io_helper.h | 15 +- .../apache/doris/analysis/FunctionCallExpr.java | 4 + .../java/org/apache/doris/analysis/TypeDef.java | 8 +- .../apache/doris/datasource/InternalCatalog.java | 2 +- .../test_create_table_with_bloom_filter.out | 8 +- .../correctness_p0/test_select_variance_agg.out | 11 +- .../decimalv3/test_agg_tab_decimalv3.out | 84 ++++++++ .../decimalv3/test_dup_tab_decimalv3.out | 213 +++++++++++++++++++++ .../decimalv3/test_uniq_tab_decimalv3.out | 87 +++++++++ .../data/ddl_p0/test_ctas_decimalv3.out | 13 ++ .../test_agg_keys_schema_change_decimalv3.out | 31 +++ .../test_create_table_with_bloom_filter.groovy | 25 ++- .../correctness_p0/test_select_variance_agg.groovy | 11 +- .../decimalv3/test_agg_tab_decimalv3.groovy | 91 +++++++++ .../decimalv3/test_dup_tab_decimalv3.groovy | 91 +++++++++ .../decimalv3/test_uniq_tab_decimalv3.groovy | 91 +++++++++ .../suites/ddl_p0/test_ctas_decimalv3.groovy | 66 +++++++ .../test_agg_keys_schema_change_decimalv3.groovy | 209 ++++++++++++++++++++ 23 files changed, 1088 insertions(+), 95 deletions(-) diff --git a/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.cpp b/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.cpp index 3e57a1db90..5542a6068d 100644 --- a/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.cpp +++ b/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.cpp @@ -176,47 +176,27 @@ Status BloomFilterIndexWriter::create(const BloomFilterOptions& bf_options, std::unique_ptr<BloomFilterIndexWriter>* res) { FieldType type = type_info->type(); switch (type) { - case OLAP_FIELD_TYPE_SMALLINT: - res->reset(new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_SMALLINT>(bf_options, type_info)); - break; - case OLAP_FIELD_TYPE_INT: - res->reset(new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_INT>(bf_options, type_info)); - break; - case OLAP_FIELD_TYPE_UNSIGNED_INT: - res->reset(new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_UNSIGNED_INT>(bf_options, - type_info)); - break; - case OLAP_FIELD_TYPE_BIGINT: - res->reset(new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_BIGINT>(bf_options, type_info)); - break; - case OLAP_FIELD_TYPE_LARGEINT: - res->reset(new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_LARGEINT>(bf_options, type_info)); - break; - case OLAP_FIELD_TYPE_CHAR: - res->reset(new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_CHAR>(bf_options, type_info)); - break; - case OLAP_FIELD_TYPE_VARCHAR: - res->reset(new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_VARCHAR>(bf_options, type_info)); - break; - case OLAP_FIELD_TYPE_STRING: - res->reset(new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_STRING>(bf_options, type_info)); - break; - case OLAP_FIELD_TYPE_DATE: - res->reset(new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_DATE>(bf_options, type_info)); - break; - case OLAP_FIELD_TYPE_DATETIME: - res->reset(new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_DATETIME>(bf_options, type_info)); - break; - case OLAP_FIELD_TYPE_DECIMAL: - res->reset(new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_DECIMAL>(bf_options, type_info)); - break; - case OLAP_FIELD_TYPE_DATEV2: - res->reset(new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_DATEV2>(bf_options, type_info)); - break; - case OLAP_FIELD_TYPE_DATETIMEV2: - res->reset( - new BloomFilterIndexWriterImpl<OLAP_FIELD_TYPE_DATETIMEV2>(bf_options, type_info)); +#define M(TYPE) \ + case TYPE: \ + res->reset(new BloomFilterIndexWriterImpl<TYPE>(bf_options, type_info)); \ break; + M(OLAP_FIELD_TYPE_SMALLINT) + M(OLAP_FIELD_TYPE_INT) + M(OLAP_FIELD_TYPE_UNSIGNED_INT) + M(OLAP_FIELD_TYPE_BIGINT) + M(OLAP_FIELD_TYPE_LARGEINT) + M(OLAP_FIELD_TYPE_CHAR) + M(OLAP_FIELD_TYPE_VARCHAR) + M(OLAP_FIELD_TYPE_STRING) + M(OLAP_FIELD_TYPE_DATE) + M(OLAP_FIELD_TYPE_DATETIME) + M(OLAP_FIELD_TYPE_DECIMAL) + M(OLAP_FIELD_TYPE_DATEV2) + M(OLAP_FIELD_TYPE_DATETIMEV2) + M(OLAP_FIELD_TYPE_DECIMAL32) + M(OLAP_FIELD_TYPE_DECIMAL64) + M(OLAP_FIELD_TYPE_DECIMAL128I) +#undef M default: return Status::NotSupported("unsupported type for bitmap index: {}", std::to_string(type)); } diff --git a/be/src/vec/aggregate_functions/aggregate_function_stddev.cpp b/be/src/vec/aggregate_functions/aggregate_function_stddev.cpp index f1510dd568..b83c9043bd 100644 --- a/be/src/vec/aggregate_functions/aggregate_function_stddev.cpp +++ b/be/src/vec/aggregate_functions/aggregate_function_stddev.cpp @@ -60,7 +60,7 @@ static IAggregateFunction* create_function_single_value(const String& name, } if (which.is_decimal128i()) { return new AggregateFunctionTemplate< - NameData<Data<Decimal128, BaseDatadecimal<Decimal128, is_stddev>>>, is_nullable>( + NameData<Data<Decimal128I, BaseDatadecimal<Decimal128I, is_stddev>>>, is_nullable>( argument_types); } DCHECK(false) << "with unknowed type, failed in create_aggregate_function_stddev_variance"; diff --git a/be/src/vec/data_types/data_type_decimal.cpp b/be/src/vec/data_types/data_type_decimal.cpp index 075469d42e..aa1da12e4d 100644 --- a/be/src/vec/data_types/data_type_decimal.cpp +++ b/be/src/vec/data_types/data_type_decimal.cpp @@ -202,30 +202,6 @@ Decimal128I DataTypeDecimal<Decimal128I>::get_scale_multiplier(UInt32 scale) { return common::exp10_i128(scale); } -template <typename T> -void convert_to_decimal(T* from_value, T* to_value, int32_t from_scale, int32_t to_scale, - bool* loss_accuracy) { - if (from_scale == to_scale) { - *to_value = *from_value; - return; - } - if (from_scale > to_scale) { - *to_value = - (*from_value) / static_cast<T>(DataTypeDecimal<Decimal<T>>::get_scale_multiplier( - from_scale - to_scale)); - *loss_accuracy = - ((*from_value) % static_cast<T>(DataTypeDecimal<Decimal<T>>::get_scale_multiplier( - from_scale - to_scale))) != 0; - } else { - if (common::mul_overflow(*from_value, - static_cast<T>(DataTypeDecimal<Decimal<T>>::get_scale_multiplier( - to_scale - from_scale)), - *to_value)) { - LOG(WARNING) << "Decimal convert overflow"; - } - } -} - template <typename T> typename T::NativeType max_decimal_value(UInt32 precision) { return 0; diff --git a/be/src/vec/data_types/data_type_decimal.h b/be/src/vec/data_types/data_type_decimal.h index d07db5f2ef..1ccce064cf 100644 --- a/be/src/vec/data_types/data_type_decimal.h +++ b/be/src/vec/data_types/data_type_decimal.h @@ -337,6 +337,9 @@ convert_decimals(const typename FromDataType::FieldType& value, UInt32 scale_fro if (common::mul_overflow(static_cast<MaxNativeType>(value), converted_value, converted_value)) { LOG(WARNING) << "Decimal convert overflow"; + return converted_value < 0 + ? std::numeric_limits<typename ToFieldType::NativeType>::min() + : std::numeric_limits<typename ToFieldType::NativeType>::max(); } } else { converted_value = @@ -344,9 +347,13 @@ convert_decimals(const typename FromDataType::FieldType& value, UInt32 scale_fro } if constexpr (sizeof(FromFieldType) > sizeof(ToFieldType)) { - if (converted_value < std::numeric_limits<typename ToFieldType::NativeType>::min() || - converted_value > std::numeric_limits<typename ToFieldType::NativeType>::max()) { + if (converted_value < std::numeric_limits<typename ToFieldType::NativeType>::min()) { LOG(WARNING) << "Decimal convert overflow"; + return std::numeric_limits<typename ToFieldType::NativeType>::min(); + } + if (converted_value > std::numeric_limits<typename ToFieldType::NativeType>::max()) { + LOG(WARNING) << "Decimal convert overflow"; + return std::numeric_limits<typename ToFieldType::NativeType>::max(); } } @@ -373,9 +380,13 @@ convert_from_decimal(const typename FromDataType::FieldType& value, UInt32 scale if constexpr (sizeof(FromFieldType) > sizeof(ToFieldType) || !std::numeric_limits<ToFieldType>::is_signed) { if constexpr (std::numeric_limits<ToFieldType>::is_signed) { - if (converted_value < std::numeric_limits<ToFieldType>::min() || - converted_value > std::numeric_limits<ToFieldType>::max()) { + if (converted_value < std::numeric_limits<ToFieldType>::min()) { + LOG(WARNING) << "Decimal convert overflow"; + return std::numeric_limits<ToFieldType>::min(); + } + if (converted_value > std::numeric_limits<ToFieldType>::max()) { LOG(WARNING) << "Decimal convert overflow"; + return std::numeric_limits<ToFieldType>::max(); } } else { using CastIntType = @@ -385,6 +396,7 @@ convert_from_decimal(const typename FromDataType::FieldType& value, UInt32 scale converted_value > static_cast<CastIntType>(std::numeric_limits<ToFieldType>::max())) { LOG(WARNING) << "Decimal convert overflow"; + return std::numeric_limits<ToFieldType>::max(); } } } @@ -402,13 +414,19 @@ convert_to_decimal(const typename FromDataType::FieldType& value, UInt32 scale) if constexpr (std::is_floating_point_v<FromFieldType>) { if (!std::isfinite(value)) { LOG(WARNING) << "Decimal convert overflow. Cannot convert infinity or NaN to decimal"; + return value < 0 ? std::numeric_limits<ToNativeType>::min() + : std::numeric_limits<ToNativeType>::max(); } FromFieldType out; out = value * ToDataType::get_scale_multiplier(scale); - if (out <= static_cast<FromFieldType>(std::numeric_limits<ToNativeType>::min()) || - out >= static_cast<FromFieldType>(std::numeric_limits<ToNativeType>::max())) { + if (out <= static_cast<FromFieldType>(std::numeric_limits<ToNativeType>::min())) { LOG(WARNING) << "Decimal convert overflow. Float is out of Decimal range"; + return std::numeric_limits<ToNativeType>::min(); + } + if (out >= static_cast<FromFieldType>(std::numeric_limits<ToNativeType>::max())) { + LOG(WARNING) << "Decimal convert overflow. Float is out of Decimal range"; + return std::numeric_limits<ToNativeType>::max(); } return out; } else { @@ -421,9 +439,6 @@ convert_to_decimal(const typename FromDataType::FieldType& value, UInt32 scale) } } -template <typename T> -void convert_to_decimal(T* from_value, T* to_value, int32_t from_scale, int32_t to_scale, - bool* loss_accuracy); template <typename T> typename T::NativeType max_decimal_value(UInt32 precision); diff --git a/be/src/vec/exec/scan/vscan_node.cpp b/be/src/vec/exec/scan/vscan_node.cpp index cda9cb6197..870e81d1ed 100644 --- a/be/src/vec/exec/scan/vscan_node.cpp +++ b/be/src/vec/exec/scan/vscan_node.cpp @@ -544,7 +544,9 @@ bool VScanNode::_is_predicate_acting_on_slot( } *slot_desc = entry->second.first; DCHECK(child_contains_slot != nullptr); - if (child_contains_slot->type().type != (*slot_desc)->type().type) { + if (child_contains_slot->type().type != (*slot_desc)->type().type || + child_contains_slot->type().precision != (*slot_desc)->type().precision || + child_contains_slot->type().scale != (*slot_desc)->type().scale) { if (!ignore_cast(*slot_desc, child_contains_slot)) { // the type of predicate not match the slot's type return false; diff --git a/be/src/vec/io/io_helper.h b/be/src/vec/io/io_helper.h index 0da73a5416..990b67fd62 100644 --- a/be/src/vec/io/io_helper.h +++ b/be/src/vec/io/io_helper.h @@ -71,7 +71,9 @@ template <typename T> void write_text(Decimal<T> value, UInt32 scale, std::ostream& ostr) { if (value < Decimal<T>(0)) { value *= Decimal<T>(-1); - ostr << '-'; + if (value > Decimal<T>(0)) { + ostr << '-'; + } } using Type = std::conditional_t<std::is_same_v<T, Int128I>, int128_t, T>; @@ -88,7 +90,16 @@ void write_text(Decimal<T> value, UInt32 scale, std::ostream& ostr) { if (scale) { ostr << '.'; String str_fractional(scale, '0'); - for (Int32 pos = scale - 1; pos >= 0; --pos, value /= 10) { + Int32 pos = scale - 1; + if (value < Decimal<T>(0) && pos >= 0) { + // Reach here iff this value is a min value of a signed numeric type. It means min<int>() + // which is -2147483648 multiply -1 is still -2147483648. + str_fractional[pos] += (value / 10 * 10) - value; + pos--; + value /= 10; + value *= Decimal<T>(-1); + } + for (; pos >= 0; --pos, value /= 10) { str_fractional[pos] += value % 10; } ostr.write(str_fractional.data(), scale); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java index 29f76a471c..02e7b6a979 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java @@ -1157,6 +1157,10 @@ public class FunctionCallExpr extends Expr { System.arraycopy(childTypes, 0, newChildTypes, 0, newChildTypes.length); fn = getBuiltinFunction(fnName.getFunction(), newChildTypes, Function.CompareMode.IS_NONSTRICT_SUPERTYPE_OF); + } else if (STDDEV_FUNCTION_SET.contains(fnName.getFunction().toLowerCase()) && children.size() == 1 + && collectChildReturnTypes()[0].isDecimalV3()) { + fn = getBuiltinFunction(fnName.getFunction(), new Type[] {Type.DOUBLE}, + Function.CompareMode.IS_NONSTRICT_SUPERTYPE_OF); } else { // now first find table function in table function sets if (isTableFnCall) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/TypeDef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/TypeDef.java index bf641f4db1..df00ef62b5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/TypeDef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TypeDef.java @@ -177,7 +177,7 @@ public class TypeDef implements ParseNode { "Scale of decimal must between 0 and 9." + " Scale was set to: " + scale + "."); } // scale < precision - if (scale >= precision) { + if (scale > precision) { throw new AnalysisException("Scale of decimal must be smaller than precision." + " Scale is " + scale + " and precision is " + precision); } @@ -196,7 +196,7 @@ public class TypeDef implements ParseNode { "Scale of decimal must not be less than 0." + " Scale was set to: " + decimal32Scale + "."); } // scale < precision - if (decimal32Scale >= decimal32Precision) { + if (decimal32Scale > decimal32Precision) { throw new AnalysisException("Scale of decimal must be smaller than precision." + " Scale is " + decimal32Scale + " and precision is " + decimal32Precision); } @@ -215,7 +215,7 @@ public class TypeDef implements ParseNode { "Scale of decimal must not be less than 0." + " Scale was set to: " + decimal64Scale + "."); } // scale < precision - if (decimal64Scale >= decimal64Precision) { + if (decimal64Scale > decimal64Precision) { throw new AnalysisException("Scale of decimal must be smaller than precision." + " Scale is " + decimal64Scale + " and precision is " + decimal64Precision); } @@ -234,7 +234,7 @@ public class TypeDef implements ParseNode { + decimal128Scale + "."); } // scale < precision - if (decimal128Scale >= decimal128Precision) { + if (decimal128Scale > decimal128Precision) { throw new AnalysisException("Scale of decimal must be smaller than precision." + " Scale is " + decimal128Scale + " and precision is " + decimal128Precision); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java index 31b1893e7f..c28ed27bc3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java @@ -1218,7 +1218,7 @@ public class InternalCatalog implements CatalogIf<Database> { } else if (resultType.isDecimalV2() && resultType.equals(ScalarType.DECIMALV2)) { typeDef = new TypeDef(ScalarType.createDecimalType(27, 9)); } else if (resultType.isDecimalV3()) { - typeDef = new TypeDef(ScalarType.createDecimalType(resultType.getPrecision(), + typeDef = new TypeDef(ScalarType.createDecimalV3Type(resultType.getPrecision(), ((ScalarType) resultType).getScalarScale())); } else { typeDef = new TypeDef(resultExpr.getType()); diff --git a/regression-test/data/bloom_filter_p0/test_create_table_with_bloom_filter.out b/regression-test/data/bloom_filter_p0/test_create_table_with_bloom_filter.out index 266c5df0a7..070fd800bc 100644 --- a/regression-test/data/bloom_filter_p0/test_create_table_with_bloom_filter.out +++ b/regression-test/data/bloom_filter_p0/test_create_table_with_bloom_filter.out @@ -1,6 +1,6 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !select_tb -- -1 2 4 8 50string 500varchar c 65535varchar 0 123456789012345678.123456789 2013-12-01 1900-01-01T00:00 2013-12-01 1900-01-01T00:00 1900-01-01T00:00:00.111 1900-01-01T00:00:00.111111 1 2 4 8 50string 500varchar_replace c 65535varchar 12345678901234.123456 123456789012345678.123456789 1900-01-01 1900-01-01 1900-01-01 1900-01-01T00:00 1900-01-01T00:00 1900-01-01T00:00 2013-12-01 2013-12-01 2013-12-01 1900-01-01T00:00 1900-01-01T00:00 1900-01-01T00:00 1900-01-01T00:00:00.111 1900-01-01T00:00: [...] +1 2 4 8 50string 500varchar c 65535varchar 0.000000 123456789012345678.123456789 111.1 11222323232.1 11345643534234231.1 2013-12-01 1900-01-01T00:00 2013-12-01 1900-01-01T00:00 1900-01-01T00:00:00.111 1900-01-01T00:00:00.111111 1 2 4 8 50string 500varchar_replace c 65535varchar 12345678901234.123456 123456789012345678.123456789 111.1 11222323232.1 11345643534234231.1 1900-01-01 1900-01-01 1900-01-01 1900-01-01T00:00 1900-01-01T00:00 1900-01-01T00:00 2013-12-01 2013-12-01 2013-12-01 1900- [...] -- !desc_tb -- tinyint_key TINYINT No true \N @@ -13,6 +13,9 @@ char_key CHAR(1) No true \N BLOOM_FILTER character_most_key VARCHAR(65533) No true \N BLOOM_FILTER decimal_key DECIMAL(20,6) No true \N BLOOM_FILTER decimal_most_key DECIMAL(27,9) No true \N BLOOM_FILTER +decimal32_key DECIMALV3(5,1) No true \N BLOOM_FILTER +decimal64_key DECIMALV3(14,1) No true \N BLOOM_FILTER +decimal128_key DECIMALV3(38,1) No true \N BLOOM_FILTER date_key DATE No true \N BLOOM_FILTER datetime_key DATETIME No true \N BLOOM_FILTER datev2_key DATEV2 No true \N BLOOM_FILTER @@ -29,6 +32,9 @@ char_value CHAR(1) No false \N REPLACE character_most_value VARCHAR(65533) No false \N REPLACE decimal_value DECIMAL(20,6) No false \N SUM decimal_most_value DECIMAL(27,9) No false \N SUM +decimal32_value DECIMALV3(5,1) No false \N SUM +decimal64_value DECIMALV3(14,1) No false \N SUM +decimal128_value DECIMALV3(38,1) No false \N SUM date_value_max DATE No false \N MAX date_value_replace DATE No false \N REPLACE date_value_min DATE No false \N MIN diff --git a/regression-test/data/correctness_p0/test_select_variance_agg.out b/regression-test/data/correctness_p0/test_select_variance_agg.out index 66ad4d8c9e..5360845d02 100644 --- a/regression-test/data/correctness_p0/test_select_variance_agg.out +++ b/regression-test/data/correctness_p0/test_select_variance_agg.out @@ -3,5 +3,14 @@ 31200.0 -- !select_default2 -- -564.666666667 +564.666667 + +-- !select_decimal32 -- +1.6674 + +-- !select_decimal64 -- +1.3290205760164607E11 + +-- !select_decimal128 -- +564.666667 diff --git a/regression-test/data/datatype_p0/decimalv3/test_agg_tab_decimalv3.out b/regression-test/data/datatype_p0/decimalv3/test_agg_tab_decimalv3.out new file mode 100644 index 0000000000..11d9c99f11 --- /dev/null +++ b/regression-test/data/datatype_p0/decimalv3/test_agg_tab_decimalv3.out @@ -0,0 +1,84 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !select_all -- +\N \N \N \N \N \N +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + +-- !select_pred_decimal32_key -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 + +-- !select_pred_decimal32_key -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 + +-- !select_pred_decimal32_value -- + +-- !select_pred_decimal32_value -- + +-- !select_pred_decimal64_key -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + +-- !select_pred_decimal64_key -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + +-- !select_pred_decimal64_value -- + +-- !select_pred_decimal64_value -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + +-- !select_pred_decimal128_key -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + +-- !select_pred_decimal128_key -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + +-- !select_pred_decimal128_value -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 + +-- !select_pred_decimal128_value -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + +-- !select_between_pred_decimal32_key -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 + +-- !select_in_pred_decimal32_key1 -- + +-- !select_in_pred_decimal32_key2 -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 + +-- !select_in_pred_decimal32_key3 -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 + +-- !select_between_pred_decimal64_key -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + +-- !select_in_pred_decimal64_key1 -- + +-- !select_in_pred_decimal64_key2 -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + +-- !select_in_pred_decimal64_key3 -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + +-- !select_between_pred_decimal128_key -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + +-- !select_in_pred_decimal128_key1 -- + +-- !select_in_pred_decimal128_key2 -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + +-- !select_in_pred_decimal128_key3 -- +1.10000 1.20000 1.30000 7.00000 1.34400 1.60000 +2.10000 1.20000 1.30000 4.20000 1.21000 1.23420 + diff --git a/regression-test/data/datatype_p0/decimalv3/test_dup_tab_decimalv3.out b/regression-test/data/datatype_p0/decimalv3/test_dup_tab_decimalv3.out new file mode 100644 index 0000000000..119ce2a68c --- /dev/null +++ b/regression-test/data/datatype_p0/decimalv3/test_dup_tab_decimalv3.out @@ -0,0 +1,213 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !select_all -- +\N \N \N \N \N \N +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_pred_decimal32_key -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_pred_decimal32_key -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_pred_decimal32_value -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_pred_decimal32_value -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_pred_decimal64_key -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_pred_decimal64_key -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_pred_decimal64_value -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_pred_decimal64_value -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_pred_decimal128_key -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_pred_decimal128_key -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_pred_decimal128_value -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_pred_decimal128_value -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_between_pred_decimal32_key -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_in_pred_decimal32_key1 -- + +-- !select_in_pred_decimal32_key2 -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_in_pred_decimal32_key3 -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_between_pred_decimal64_key -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_in_pred_decimal64_key1 -- + +-- !select_in_pred_decimal64_key2 -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_in_pred_decimal64_key3 -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_between_pred_decimal128_key -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_in_pred_decimal128_key1 -- + +-- !select_in_pred_decimal128_key2 -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + +-- !select_in_pred_decimal128_key3 -- +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +1.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 +2.10000 1.20000 1.30000 1.40000 1.50000 1.60000 + diff --git a/regression-test/data/datatype_p0/decimalv3/test_uniq_tab_decimalv3.out b/regression-test/data/datatype_p0/decimalv3/test_uniq_tab_decimalv3.out new file mode 100644 index 0000000000..1595a8c5b5 --- /dev/null +++ b/regression-test/data/datatype_p0/decimalv3/test_uniq_tab_decimalv3.out @@ -0,0 +1,87 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !select_all -- +\N \N \N \N \N \N +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_pred_decimal32_key -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 + +-- !select_pred_decimal32_key -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 + +-- !select_pred_decimal32_value -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_pred_decimal32_value -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_pred_decimal64_key -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_pred_decimal64_key -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_pred_decimal64_value -- + +-- !select_pred_decimal64_value -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_pred_decimal128_key -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_pred_decimal128_key -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_pred_decimal128_value -- + +-- !select_pred_decimal128_value -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_between_pred_decimal32_key -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 + +-- !select_in_pred_decimal32_key1 -- + +-- !select_in_pred_decimal32_key2 -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 + +-- !select_in_pred_decimal32_key3 -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 + +-- !select_between_pred_decimal64_key -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_in_pred_decimal64_key1 -- + +-- !select_in_pred_decimal64_key2 -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_in_pred_decimal64_key3 -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_between_pred_decimal128_key -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_in_pred_decimal128_key1 -- + +-- !select_in_pred_decimal128_key2 -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + +-- !select_in_pred_decimal128_key3 -- +1.10000 1.20000 1.30000 1.40000 1.45600 1.34543 +2.10000 1.20000 1.30000 1.40000 1.21000 1.12300 + diff --git a/regression-test/data/ddl_p0/test_ctas_decimalv3.out b/regression-test/data/ddl_p0/test_ctas_decimalv3.out new file mode 100644 index 0000000000..c0f7a1e12a --- /dev/null +++ b/regression-test/data/ddl_p0/test_ctas_decimalv3.out @@ -0,0 +1,13 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !select -- +1.1 1.20000 1.3 1.400000 1.500000 1.600000 +1.1 1.20000 1.3 1.400000 1.500000 1.600000 +2.1 2.20000 2.3 2.400000 2.500000 2.600000 +2.1 2.20000 2.3 2.400000 2.500000 2.600000 + +-- !select -- +1.1 1.20000 1.3 1.400000 1.500000 1.600000 +1.1 1.20000 1.3 1.400000 1.500000 1.600000 +2.1 2.20000 2.3 2.400000 2.500000 2.600000 +2.1 2.20000 2.3 2.400000 2.500000 2.600000 + diff --git a/regression-test/data/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.out b/regression-test/data/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.out new file mode 100644 index 0000000000..1b9f52fd5e --- /dev/null +++ b/regression-test/data/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.out @@ -0,0 +1,31 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +0.11111111111111111111111111111111100000 11111111111111111111111111111.110 0.11111111111111111111111111111111100000 11111111111111111111111111111.110 + +-- !sql -- +0.11111111111111111111111111111111100000 11111111111111111111111111111.110 \N 0.11111111111111111111111111111111100000 11111111111111111111111111111.110 + +-- !sql -- +0.11111111111111111111111111111111100000 11111111111111111111111111111.110 \N 0.11111111111111111111111111111111100000 11111111111111111111111111111.110 + +-- !sql -- +0.11111111111111111111111111111111100000 11111111111111111111111111111.110 0.11111111111111111111111111111111100000 11111111111111111111111111111.110 + +-- !sql -- +0.11111111111111111111111111111111100000 11111111111111111111111111111.110 0.11111111111111111111111111111111100000 11111111111111111111111111111.110 + +-- !sql -- +0.11111111111111111111111111111111100000 11111111111111111111111111111.1100000000 0.11111111111111111111111111111111100000 11111111111111111111111111111.110 + +-- !sql -- +0.11111111111111111111111111111111100000 9223372036854775.807 0.11111111111111111111111111111111100000 11111111111111111111111111111.110 + +-- !sql -- +0.11111111111111111111111111111111100000 -9223.372036854775808 0.11111111111111111111111111111111100000 11111111111111111111111111111.110 + +-- !sql -- +0.11111111111111111111111111111111100000 -9223 0.11111111111111111111111111111111100000 11111111111111111111111111111.110 + +-- !sql -- +0.11111111111111111111111111111111100000 -2147.483648 0.11111111111111111111111111111111100000 11111111111111111111111111111.110 + diff --git a/regression-test/suites/bloom_filter_p0/test_create_table_with_bloom_filter.groovy b/regression-test/suites/bloom_filter_p0/test_create_table_with_bloom_filter.groovy index 09a6967684..c95b131d0e 100644 --- a/regression-test/suites/bloom_filter_p0/test_create_table_with_bloom_filter.groovy +++ b/regression-test/suites/bloom_filter_p0/test_create_table_with_bloom_filter.groovy @@ -28,8 +28,11 @@ suite("test_create_table_with_bloom_filter") { char_key CHAR NOT NULL, character_most_key VARCHAR(65533) NOT NULL, decimal_key DECIMAL(20, 6) NOT NULL, - decimal_most_key DECIMAL(27, 9) NOT NULL, - date_key DATE NOT NULL, + decimal_most_key DECIMAL(27, 9) NOT NULL, + decimal32_key DECIMALV3(5, 1) NOT NULL, + decimal64_key DECIMALV3(14, 1) NOT NULL, + decimal128_key DECIMALV3(38, 1) NOT NULL, + date_key DATE NOT NULL, datetime_key DATETIME NOT NULL, datev2_key DATEV2 NOT NULL, datetimev2_key_1 DATETIMEV2 NOT NULL, @@ -44,7 +47,10 @@ suite("test_create_table_with_bloom_filter") { char_value CHAR REPLACE NOT NULL, character_most_value VARCHAR(65533) REPLACE NOT NULL, decimal_value DECIMAL(20, 6) SUM NOT NULL, - decimal_most_value DECIMAL(27, 9) SUM NOT NULL, + decimal_most_value DECIMAL(27, 9) SUM NOT NULL, + decimal32_value DECIMALV3(5, 1) SUM NOT NULL, + decimal64_value DECIMALV3(14, 1) SUM NOT NULL, + decimal128_value DECIMALV3(38, 1) SUM NOT NULL, date_value_max DATE MAX NOT NULL, date_value_replace DATE REPLACE NOT NULL, date_value_min DATE MIN NOT NULL, @@ -76,6 +82,9 @@ suite("test_create_table_with_bloom_filter") { character_most_key, decimal_key, decimal_most_key, + decimal32_key, + decimal64_key, + decimal128_key, date_key, datetime_key, datev2_key, @@ -85,19 +94,21 @@ suite("test_create_table_with_bloom_filter") { DISTRIBUTED BY HASH(tinyint_key) BUCKETS 5 PROPERTIES ( "bloom_filter_columns"="smallint_key,int_key,bigint_key,char_50_key,character_key, - char_key,character_most_key,decimal_key,decimal_most_key, - date_key,datetime_key,datev2_key, datetimev2_key_1, datetimev2_key_2, datetimev2_key_3", + char_key,character_most_key,decimal_key,decimal_most_key, decimal32_key, + decimal64_key, decimal128_key, date_key,datetime_key,datev2_key, datetimev2_key_1, + datetimev2_key_2, datetimev2_key_3", "replication_num" = "1" ) """ sql """ INSERT INTO test_bloom_filter VALUES ('1', '2', '4', '8', '50string', '500varchar', 'c', '65535varchar', - '0', '123456789012345678.123456789', '2013-12-01', '1900-01-01 00:00:00', + '0', '123456789012345678.123456789', '111.1', '11222323232.1', '11345643534234231.1', + '2013-12-01', '1900-01-01 00:00:00', '2013-12-01', '1900-01-01 00:00:00.111111', '1900-01-01 00:00:00.111111', '1900-01-01 00:00:00.111111', '1', '2', '4', '8', '50string', '500varchar_replace', - 'c', '65535varchar', '12345678901234.123456', '123456789012345678.123456789', + 'c', '65535varchar', '12345678901234.123456', '123456789012345678.123456789', '111.1', '11222323232.1', '11345643534234231.1', '1900-01-01', '1900-01-01', '1900-01-01', '1900-01-01 00:00:00', '1900-01-01 00:00:00', '1900-01-01 00:00:00', '2013-12-01', '2013-12-01', '2013-12-01', '1900-01-01 00:00:00.111111', '1900-01-01 00:00:00.111111', '1900-01-01 00:00:00.111111', '1900-01-01 00:00:00.111111', diff --git a/regression-test/suites/correctness_p0/test_select_variance_agg.groovy b/regression-test/suites/correctness_p0/test_select_variance_agg.groovy index f07898c23e..190ac65e2d 100644 --- a/regression-test/suites/correctness_p0/test_select_variance_agg.groovy +++ b/regression-test/suites/correctness_p0/test_select_variance_agg.groovy @@ -21,15 +21,15 @@ sql """ DROP TABLE IF EXISTS ${tableName} """ sql """ - CREATE TABLE IF NOT EXISTS ${tableName} ( `aa` int NULL COMMENT "", `bb` decimal(27,9) NULL COMMENT "" ) + CREATE TABLE IF NOT EXISTS ${tableName} ( `aa` int NULL COMMENT "", `bb` decimal(27,9), `decimal32_col` decimalv3(5,2), `decimal64_col` decimalv3(15,9), `decimal128_col` decimal(27,9) NULL COMMENT "" ) ENGINE=OLAP UNIQUE KEY(`aa`) DISTRIBUTED BY HASH(`aa`) BUCKETS 3 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "in_memory" = "false", "storage_format" = "V2" ); """ sql """ INSERT INTO ${tableName} VALUES - (123,34), - (423,78), - (3,23); """ + (123,34, 1.22,6666.6666,34), + (423,78,2.33,777777.7777,78), + (3,23,4.34,2222.2222,23); """ // test_vectorized sql """ set enable_vectorized_engine = true; """ @@ -39,5 +39,8 @@ // doris decimal variance implementation have deviation, // use round to check result qt_select_default2 """ select round(variance(bb), 6) from ${tableName}; """ + qt_select_decimal32 """ select round(variance(decimal32_col), 6) from ${tableName}; """ + qt_select_decimal64 """ select round(variance(decimal64_col), 6) from ${tableName}; """ + qt_select_decimal128 """ select round(variance(decimal128_col), 6) from ${tableName}; """ } \ No newline at end of file diff --git a/regression-test/suites/datatype_p0/decimalv3/test_agg_tab_decimalv3.groovy b/regression-test/suites/datatype_p0/decimalv3/test_agg_tab_decimalv3.groovy new file mode 100644 index 0000000000..1869e19373 --- /dev/null +++ b/regression-test/suites/datatype_p0/decimalv3/test_agg_tab_decimalv3.groovy @@ -0,0 +1,91 @@ +// 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_agg_tab_decimalv3") { + + def table1 = "test_agg_tab_decimalv3" + + sql "drop table if exists ${table1}" + + sql """ + CREATE TABLE IF NOT EXISTS `${table1}` ( + `decimal32_key` decimalv3(8, 5) NULL COMMENT "", + `decimal64_key` decimalv3(16, 5) NULL COMMENT "", + `decimal128_key` decimalv3(38, 5) NULL COMMENT "", + `decimal32_value` decimalv3(8, 5) SUM NULL COMMENT "", + `decimal64_value` decimalv3(16, 5) MIN NULL COMMENT "", + `decimal128_value` decimalv3(38, 5) MAX NULL COMMENT "" + ) ENGINE=OLAP + AGGREGATE KEY(`decimal32_key`, `decimal64_key`, `decimal128_key`) + COMMENT "OLAP" + DISTRIBUTED BY HASH(`decimal32_key`, `decimal64_key`, `decimal128_key`) BUCKETS 8 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "in_memory" = "false", + "storage_format" = "V2" + ) + """ + sql "set enable_vectorized_engine = true" + + sql """insert into ${table1} values(1.1,1.2,1.3,1.4,1.5,1.6), + (1.1,1.2,1.3,1.4,1.56,1.234), + (1.1,1.2,1.3,1.4,1.66,1.534654), + (1.1,1.2,1.3,1.4,1.344,1.32432), + (1.1,1.2,1.3,1.4,1.456,1.345435), + (2.1,1.2,1.3,1.4,1.5,1.234), + (2.1,1.2,1.3,1.4,1.66,1.2342), + (2.1,1.2,1.3,1.4,1.21,1.123), + (NULL, NULL, NULL, NULL, NULL, NULL) + """ + qt_select_all "select * from ${table1} order by decimal32_key" + + qt_select_pred_decimal32_key "select * from ${table1} where decimal32_key = 1.1 order by decimal32_key" + qt_select_pred_decimal32_key "select * from ${table1} where decimal32_key < 1.1111111111111111111 order by decimal32_key" + + qt_select_pred_decimal32_value "select * from ${table1} where decimal32_value = 1.4 order by decimal32_key" + qt_select_pred_decimal32_value "select * from ${table1} where decimal32_value < 1.444444444444444 order by decimal32_key" + + qt_select_pred_decimal64_key "select * from ${table1} where decimal64_key = 1.2 order by decimal32_key" + qt_select_pred_decimal64_key "select * from ${table1} where decimal64_key < 1.222222222222222222 order by decimal32_key" + + qt_select_pred_decimal64_value "select * from ${table1} where decimal64_value = 1.5 order by decimal32_key" + qt_select_pred_decimal64_value "select * from ${table1} where decimal64_value < 1.5555555555555555 order by decimal32_key" + + qt_select_pred_decimal128_key "select * from ${table1} where decimal128_key = 1.3 order by decimal32_key" + qt_select_pred_decimal128_key "select * from ${table1} where decimal128_key < 1.333333333333 order by decimal32_key" + + qt_select_pred_decimal128_value "select * from ${table1} where decimal128_value = 1.6 order by decimal32_key" + qt_select_pred_decimal128_value "select * from ${table1} where decimal128_value < 1.666666666666 order by decimal32_key" + + + qt_select_between_pred_decimal32_key "select * from ${table1} where decimal32_key between 1.0991 and 1.1111 order by decimal32_key" + qt_select_in_pred_decimal32_key1 "select * from ${table1} where decimal32_key in(1.1111) order by decimal32_key" + qt_select_in_pred_decimal32_key2 "select * from ${table1} where decimal32_key in(1.10000000000) order by decimal32_key" + qt_select_in_pred_decimal32_key3 "select * from ${table1} where decimal32_key in(1.1, 1.4) order by decimal32_key" + + qt_select_between_pred_decimal64_key "select * from ${table1} where decimal64_key between 1.1991 and 1.2111 order by decimal32_key" + qt_select_in_pred_decimal64_key1 "select * from ${table1} where decimal64_key in(1.2111) order by decimal32_key" + qt_select_in_pred_decimal64_key2 "select * from ${table1} where decimal64_key in(1.20000000000) order by decimal32_key" + qt_select_in_pred_decimal64_key3 "select * from ${table1} where decimal64_key in(1.2, 1.4) order by decimal32_key" + + qt_select_between_pred_decimal128_key "select * from ${table1} where decimal128_key between 1.2991 and 1.3111 order by decimal32_key" + qt_select_in_pred_decimal128_key1 "select * from ${table1} where decimal128_key in(1.3111) order by decimal32_key" + qt_select_in_pred_decimal128_key2 "select * from ${table1} where decimal128_key in(1.30000000000) order by decimal32_key" + qt_select_in_pred_decimal128_key3 "select * from ${table1} where decimal128_key in(1.3, 1.4) order by decimal32_key" + + sql "drop table if exists ${table1}" +} diff --git a/regression-test/suites/datatype_p0/decimalv3/test_dup_tab_decimalv3.groovy b/regression-test/suites/datatype_p0/decimalv3/test_dup_tab_decimalv3.groovy new file mode 100644 index 0000000000..fa4842fb4a --- /dev/null +++ b/regression-test/suites/datatype_p0/decimalv3/test_dup_tab_decimalv3.groovy @@ -0,0 +1,91 @@ +// 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_dup_tab_decimalv3") { + + def table1 = "test_dup_tab_decimalv3" + + sql "drop table if exists ${table1}" + + sql """ + CREATE TABLE IF NOT EXISTS `${table1}` ( + `decimal32_key` decimalv3(8, 5) NULL COMMENT "", + `decimal64_key` decimalv3(16, 5) NULL COMMENT "", + `decimal128_key` decimalv3(38, 5) NULL COMMENT "", + `decimal32_value` decimalv3(8, 5) NULL COMMENT "", + `decimal64_value` decimalv3(16, 5) NULL COMMENT "", + `decimal128_value` decimalv3(38, 5) NULL COMMENT "" + ) ENGINE=OLAP + DUPLICATE KEY(`decimal32_key`, `decimal64_key`, `decimal128_key`) + COMMENT "OLAP" + DISTRIBUTED BY HASH(`decimal32_key`, `decimal64_key`, `decimal128_key`) BUCKETS 8 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "in_memory" = "false", + "storage_format" = "V2" + ) + """ + sql "set enable_vectorized_engine = true" + + sql """insert into ${table1} values(1.1,1.2,1.3,1.4,1.5,1.6), + (1.1,1.2,1.3,1.4,1.5,1.6), + (1.1,1.2,1.3,1.4,1.5,1.6), + (1.1,1.2,1.3,1.4,1.5,1.6), + (1.1,1.2,1.3,1.4,1.5,1.6), + (2.1,1.2,1.3,1.4,1.5,1.6), + (2.1,1.2,1.3,1.4,1.5,1.6), + (2.1,1.2,1.3,1.4,1.5,1.6), + (NULL, NULL, NULL, NULL, NULL, NULL) + """ + qt_select_all "select * from ${table1} order by decimal32_key" + + qt_select_pred_decimal32_key "select * from ${table1} where decimal32_key = 1.1 order by decimal32_key" + qt_select_pred_decimal32_key "select * from ${table1} where decimal32_key < 1.1111111111111111111 order by decimal32_key" + + qt_select_pred_decimal32_value "select * from ${table1} where decimal32_value = 1.4 order by decimal32_key" + qt_select_pred_decimal32_value "select * from ${table1} where decimal32_value < 1.444444444444444 order by decimal32_key" + + qt_select_pred_decimal64_key "select * from ${table1} where decimal64_key = 1.2 order by decimal32_key" + qt_select_pred_decimal64_key "select * from ${table1} where decimal64_key < 1.222222222222222222 order by decimal32_key" + + qt_select_pred_decimal64_value "select * from ${table1} where decimal64_value = 1.5 order by decimal32_key" + qt_select_pred_decimal64_value "select * from ${table1} where decimal64_value < 1.5555555555555555 order by decimal32_key" + + qt_select_pred_decimal128_key "select * from ${table1} where decimal128_key = 1.3 order by decimal32_key" + qt_select_pred_decimal128_key "select * from ${table1} where decimal128_key < 1.333333333333 order by decimal32_key" + + qt_select_pred_decimal128_value "select * from ${table1} where decimal128_value = 1.6 order by decimal32_key" + qt_select_pred_decimal128_value "select * from ${table1} where decimal128_value < 1.666666666666 order by decimal32_key" + + + qt_select_between_pred_decimal32_key "select * from ${table1} where decimal32_key between 1.0991 and 1.1111 order by decimal32_key" + qt_select_in_pred_decimal32_key1 "select * from ${table1} where decimal32_key in(1.1111) order by decimal32_key" + qt_select_in_pred_decimal32_key2 "select * from ${table1} where decimal32_key in(1.10000000000) order by decimal32_key" + qt_select_in_pred_decimal32_key3 "select * from ${table1} where decimal32_key in(1.1, 1.4) order by decimal32_key" + + qt_select_between_pred_decimal64_key "select * from ${table1} where decimal64_key between 1.1991 and 1.2111 order by decimal32_key" + qt_select_in_pred_decimal64_key1 "select * from ${table1} where decimal64_key in(1.2111) order by decimal32_key" + qt_select_in_pred_decimal64_key2 "select * from ${table1} where decimal64_key in(1.20000000000) order by decimal32_key" + qt_select_in_pred_decimal64_key3 "select * from ${table1} where decimal64_key in(1.2, 1.4) order by decimal32_key" + + qt_select_between_pred_decimal128_key "select * from ${table1} where decimal128_key between 1.2991 and 1.3111 order by decimal32_key" + qt_select_in_pred_decimal128_key1 "select * from ${table1} where decimal128_key in(1.3111) order by decimal32_key" + qt_select_in_pred_decimal128_key2 "select * from ${table1} where decimal128_key in(1.30000000000) order by decimal32_key" + qt_select_in_pred_decimal128_key3 "select * from ${table1} where decimal128_key in(1.3, 1.4) order by decimal32_key" + + sql "drop table if exists ${table1}" +} diff --git a/regression-test/suites/datatype_p0/decimalv3/test_uniq_tab_decimalv3.groovy b/regression-test/suites/datatype_p0/decimalv3/test_uniq_tab_decimalv3.groovy new file mode 100644 index 0000000000..b810ee53f7 --- /dev/null +++ b/regression-test/suites/datatype_p0/decimalv3/test_uniq_tab_decimalv3.groovy @@ -0,0 +1,91 @@ +// 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_uniq_tab_decimalv3") { + + def table1 = "test_uniq_tab_decimalv3" + + sql "drop table if exists ${table1}" + + sql """ + CREATE TABLE IF NOT EXISTS `${table1}` ( + `decimal32_key` decimalv3(8, 5) NULL COMMENT "", + `decimal64_key` decimalv3(16, 5) NULL COMMENT "", + `decimal128_key` decimalv3(38, 5) NULL COMMENT "", + `decimal32_value` decimalv3(8, 5) NULL COMMENT "", + `decimal64_value` decimalv3(16, 5) NULL COMMENT "", + `decimal128_value` decimalv3(38, 5) NULL COMMENT "" + ) ENGINE=OLAP + UNIQUE KEY(`decimal32_key`, `decimal64_key`, `decimal128_key`) + COMMENT "OLAP" + DISTRIBUTED BY HASH(`decimal32_key`, `decimal64_key`, `decimal128_key`) BUCKETS 8 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "in_memory" = "false", + "storage_format" = "V2" + ) + """ + sql "set enable_vectorized_engine = true" + + sql """insert into ${table1} values(1.1,1.2,1.3,1.4,1.5,1.6), + (1.1,1.2,1.3,1.4,1.56,1.234), + (1.1,1.2,1.3,1.4,1.66,1.534654), + (1.1,1.2,1.3,1.4,1.344,1.32432), + (1.1,1.2,1.3,1.4,1.456,1.345435), + (2.1,1.2,1.3,1.4,1.5,1.234), + (2.1,1.2,1.3,1.4,1.66,1.2342), + (2.1,1.2,1.3,1.4,1.21,1.123), + (NULL, NULL, NULL, NULL, NULL, NULL) + """ + qt_select_all "select * from ${table1} order by decimal32_key" + + qt_select_pred_decimal32_key "select * from ${table1} where decimal32_key = 1.1 order by decimal32_key" + qt_select_pred_decimal32_key "select * from ${table1} where decimal32_key < 1.1111111111111111111 order by decimal32_key" + + qt_select_pred_decimal32_value "select * from ${table1} where decimal32_value = 1.4 order by decimal32_key" + qt_select_pred_decimal32_value "select * from ${table1} where decimal32_value < 1.444444444444444 order by decimal32_key" + + qt_select_pred_decimal64_key "select * from ${table1} where decimal64_key = 1.2 order by decimal32_key" + qt_select_pred_decimal64_key "select * from ${table1} where decimal64_key < 1.222222222222222222 order by decimal32_key" + + qt_select_pred_decimal64_value "select * from ${table1} where decimal64_value = 1.5 order by decimal32_key" + qt_select_pred_decimal64_value "select * from ${table1} where decimal64_value < 1.5555555555555555 order by decimal32_key" + + qt_select_pred_decimal128_key "select * from ${table1} where decimal128_key = 1.3 order by decimal32_key" + qt_select_pred_decimal128_key "select * from ${table1} where decimal128_key < 1.333333333333 order by decimal32_key" + + qt_select_pred_decimal128_value "select * from ${table1} where decimal128_value = 1.6 order by decimal32_key" + qt_select_pred_decimal128_value "select * from ${table1} where decimal128_value < 1.666666666666 order by decimal32_key" + + + qt_select_between_pred_decimal32_key "select * from ${table1} where decimal32_key between 1.0991 and 1.1111 order by decimal32_key" + qt_select_in_pred_decimal32_key1 "select * from ${table1} where decimal32_key in(1.1111) order by decimal32_key" + qt_select_in_pred_decimal32_key2 "select * from ${table1} where decimal32_key in(1.10000000000) order by decimal32_key" + qt_select_in_pred_decimal32_key3 "select * from ${table1} where decimal32_key in(1.1, 1.4) order by decimal32_key" + + qt_select_between_pred_decimal64_key "select * from ${table1} where decimal64_key between 1.1991 and 1.2111 order by decimal32_key" + qt_select_in_pred_decimal64_key1 "select * from ${table1} where decimal64_key in(1.2111) order by decimal32_key" + qt_select_in_pred_decimal64_key2 "select * from ${table1} where decimal64_key in(1.20000000000) order by decimal32_key" + qt_select_in_pred_decimal64_key3 "select * from ${table1} where decimal64_key in(1.2, 1.4) order by decimal32_key" + + qt_select_between_pred_decimal128_key "select * from ${table1} where decimal128_key between 1.2991 and 1.3111 order by decimal32_key" + qt_select_in_pred_decimal128_key1 "select * from ${table1} where decimal128_key in(1.3111) order by decimal32_key" + qt_select_in_pred_decimal128_key2 "select * from ${table1} where decimal128_key in(1.30000000000) order by decimal32_key" + qt_select_in_pred_decimal128_key3 "select * from ${table1} where decimal128_key in(1.3, 1.4) order by decimal32_key" + + sql "drop table if exists ${table1}" +} diff --git a/regression-test/suites/ddl_p0/test_ctas_decimalv3.groovy b/regression-test/suites/ddl_p0/test_ctas_decimalv3.groovy new file mode 100644 index 0000000000..e359dfc7a5 --- /dev/null +++ b/regression-test/suites/ddl_p0/test_ctas_decimalv3.groovy @@ -0,0 +1,66 @@ +// 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_ctas_decimalv3") { + def table1 = "test_uniq_tab_decimalv3" + def table2 = "test_uniq_tab_decimalv3_2" + try { + sql """ + CREATE TABLE ${table1} ( + c1 DECIMALV3(7,1) NULL, + c2 DECIMALV3(15,5) NULL, + c3 DECIMALV3(30,1) NULL, + v1 DECIMALV3(7,6) NULL COMMENT "", + v2 DECIMALV3(18,6) NULL COMMENT "", + v3 DECIMALV3(30,6) NULL COMMENT "" + ) ENGINE=OLAP + DUPLICATE KEY(c1,c2,c3) + COMMENT "OLAP" + DISTRIBUTED BY HASH(c1,c2,c3) BUCKETS 3 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "in_memory" = "false", + "storage_format" = "V2" + ) + """ + + sql """ insert into ${table1} values (1.1,1.2,1.3,1.4,1.5,1.6) """ + sql """ insert into ${table1} values (2.1,2.2,2.3,2.4,2.5,2.6) """ + sql """ insert into ${table1} values (1.1,1.2,1.3,1.4,1.5,1.6) """ + sql """ insert into ${table1} values (2.1,2.2,2.3,2.4,2.5,2.6) """ + + qt_select """select * from ${table1} order by c1;""" + sql """ + CREATE TABLE IF NOT EXISTS `${table2}` + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "in_memory" = "false", + "storage_format" = "V2" + ) as select * from ${table1}; + """ + + qt_select """select * from ${table2} order by c1;""" + + + } finally { + sql """ DROP TABLE IF EXISTS ${table1} """ + + sql """ DROP TABLE IF EXISTS ${table2} """ + } + +} + diff --git a/regression-test/suites/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.groovy b/regression-test/suites/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.groovy new file mode 100644 index 0000000000..7b3a4bfb6f --- /dev/null +++ b/regression-test/suites/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.groovy @@ -0,0 +1,209 @@ +// 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. + +import org.codehaus.groovy.runtime.IOGroovyMethods + +suite("test_agg_keys_schema_change_decimalv3") { + def tbName = "test_agg_keys_schema_change_decimalv3" + def getJobState = { tableName -> + def jobStateResult = sql """ SHOW ALTER TABLE COLUMN WHERE IndexName='${tableName}' ORDER BY createtime DESC LIMIT 1 """ + return jobStateResult[0][9] + } + + String[][] backends = sql """ show backends; """ + assertTrue(backends.size() > 0) + String backend_id; + def backendId_to_backendIP = [:] + def backendId_to_backendHttpPort = [:] + for (String[] backend in backends) { + backendId_to_backendIP.put(backend[0], backend[2]) + backendId_to_backendHttpPort.put(backend[0], backend[5]) + } + + backend_id = backendId_to_backendIP.keySet()[0] + StringBuilder showConfigCommand = new StringBuilder(); + showConfigCommand.append("curl -X GET http://") + showConfigCommand.append(backendId_to_backendIP.get(backend_id)) + showConfigCommand.append(":") + showConfigCommand.append(backendId_to_backendHttpPort.get(backend_id)) + showConfigCommand.append("/api/show_config") + logger.info(showConfigCommand.toString()) + def process = showConfigCommand.toString().execute() + int code = process.waitFor() + String err = IOGroovyMethods.getText(new BufferedReader(new InputStreamReader(process.getErrorStream()))); + String out = process.getText() + logger.info("Show config: code=" + code + ", out=" + out + ", err=" + err) + assertEquals(code, 0) + def configList = parseJson(out.trim()) + assert configList instanceof List + + def do_compact = { tableName -> + String[][] tablets = sql """ show tablets from ${tableName}; """ + for (String[] tablet in tablets) { + String tablet_id = tablet[0] + backend_id = tablet[2] + logger.info("run compaction:" + tablet_id) + StringBuilder sb = new StringBuilder(); + sb.append("curl -X POST http://") + sb.append(backendId_to_backendIP.get(backend_id)) + sb.append(":") + sb.append(backendId_to_backendHttpPort.get(backend_id)) + sb.append("/api/compaction/run?tablet_id=") + sb.append(tablet_id) + sb.append("&compact_type=cumulative") + + String command = sb.toString() + process = command.execute() + code = process.waitFor() + err = IOGroovyMethods.getText(new BufferedReader(new InputStreamReader(process.getErrorStream()))); + out = process.getText() + logger.info("Run compaction: code=" + code + ", out=" + out + ", err=" + err) + } + + // wait for all compactions done + for (String[] tablet in tablets) { + boolean running = true + do { + Thread.sleep(100) + String tablet_id = tablet[0] + backend_id = tablet[2] + StringBuilder sb = new StringBuilder(); + sb.append("curl -X GET http://") + sb.append(backendId_to_backendIP.get(backend_id)) + sb.append(":") + sb.append(backendId_to_backendHttpPort.get(backend_id)) + sb.append("/api/compaction/run_status?tablet_id=") + sb.append(tablet_id) + + String command = sb.toString() + process = command.execute() + code = process.waitFor() + err = IOGroovyMethods.getText(new BufferedReader(new InputStreamReader(process.getErrorStream()))); + out = process.getText() + logger.info("Get compaction status: code=" + code + ", out=" + out + ", err=" + err) + assertEquals(code, 0) + def compactionStatus = parseJson(out.trim()) + assertEquals("success", compactionStatus.status.toLowerCase()) + running = compactionStatus.run_status + } while (running) + } + } + + sql """ DROP TABLE IF EXISTS ${tbName} FORCE""" + // Create table and disable light weight schema change + sql """ + CREATE TABLE IF NOT EXISTS ${tbName} + ( + `decimalv3k1` DECIMALV3(38,38), + `decimalv3k2` DECIMALV3(38,3), + `decimalv3v1` DECIMALV3(38,38) SUM, + `decimalv3v2` DECIMALV3(38,3) SUM + ) + AGGREGATE KEY(`decimalv3k1`,`decimalv3k2`) + DISTRIBUTED BY HASH(`decimalv3k1`) BUCKETS 1 + PROPERTIES("replication_num" = "1", "light_schema_change" = "false"); + """ + sql """ insert into ${tbName} values(0.111111111111111111111111111111111,11111111111111111111111111111.11,0.111111111111111111111111111111111,11111111111111111111111111111.11);""" + qt_sql """select /*+ SET_VAR(enable_vectorized_engine=true) */ * from ${tbName} ORDER BY `decimalv3k1`;""" + + sql """ alter table ${tbName} add column `decimalv3v3` DECIMALV3(38,4) """ + int max_try_time = 1000 + while(max_try_time--){ + String result = getJobState(tbName) + if (result == "FINISHED") { + break + } else { + sleep(100) + if (max_try_time < 1){ + assertEquals(1,2) + } + } + } + sql """sync""" + qt_sql """select /*+ SET_VAR(enable_vectorized_engine=true) */ * from ${tbName} ORDER BY `decimalv3k1`;""" + do_compact(tbName) + sql """sync""" + qt_sql """select /*+ SET_VAR(enable_vectorized_engine=true) */ * from ${tbName} ORDER BY `decimalv3k1`;""" + sql """ alter table ${tbName} drop column `decimalv3v3` """ + max_try_time = 1000 + while(max_try_time--){ + String result = getJobState(tbName) + if (result == "FINISHED") { + break + } else { + sleep(100) + if (max_try_time < 1){ + assertEquals(1,2) + } + } + } + + sql """sync""" + qt_sql """select /*+ SET_VAR(enable_vectorized_engine=true) */ * from ${tbName} ORDER BY `decimalv3k1`;""" + sql """ alter table ${tbName} modify column decimalv3k2 DECIMALV3(19,3) key """ + max_try_time = 1000 + while(max_try_time--){ + String result = getJobState(tbName) + if (result == "FINISHED") { + break + } else { + sleep(100) + if (max_try_time < 1){ + assertEquals(1,2) + } + } + } + + sql """sync""" + qt_sql """select /*+ SET_VAR(enable_vectorized_engine=true) */ * from ${tbName} ORDER BY `decimalv3k1`;""" + + sql """ alter table ${tbName} modify column decimalv3k2 DECIMALV3(38,10) key """ + max_try_time = 1000 + while(max_try_time--){ + String result = getJobState(tbName) + if (result == "FINISHED") { + break + } else { + sleep(100) + if (max_try_time < 1){ + assertEquals(1,2) + } + } + } + + sql """sync""" + qt_sql """select /*+ SET_VAR(enable_vectorized_engine=true) */ * from ${tbName} ORDER BY `decimalv3k1`;""" + + sql """ alter table ${tbName} modify column decimalv3k2 DECIMALV3(16,3) key """ + max_try_time = 1000 + while(max_try_time--){ + String result = getJobState(tbName) + if (result == "FINISHED") { + break + } else { + sleep(100) + if (max_try_time < 1){ + assertEquals(1,2) + } + } + } + + sql """sync""" + qt_sql """select /*+ SET_VAR(enable_vectorized_engine=true) */ * from ${tbName} ORDER BY `decimalv3k1`;""" + + sql """ DROP TABLE ${tbName} FORCE """ +} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org