diff --git a/be/src/vec/core/decimal_comparison.h b/be/src/vec/core/decimal_comparison.h index 4503a264c28014..413730669f60b0 100644 --- a/be/src/vec/core/decimal_comparison.h +++ b/be/src/vec/core/decimal_comparison.h @@ -155,8 +155,8 @@ class DecimalComparison { using Type = std::conditional_t= sizeof(U), T, U>; auto type_ptr = decimal_result_type(*decimal0, *decimal1, false, false, false); const DataTypeDecimal* result_type = check_decimal(*type_ptr); - shift.a = result_type->scale_factor_for(*decimal0, false).value; - shift.b = result_type->scale_factor_for(*decimal1, false).value; + shift.a = result_type->scale_factor_for(*decimal0).value; + shift.b = result_type->scale_factor_for(*decimal1).value; } else if (decimal0) { shift.b = decimal0->get_scale_multiplier().value; } else if (decimal1) { diff --git a/be/src/vec/data_types/data_type_decimal.h b/be/src/vec/data_types/data_type_decimal.h index d1e99ada4161a7..e7113e65613b00 100644 --- a/be/src/vec/data_types/data_type_decimal.h +++ b/be/src/vec/data_types/data_type_decimal.h @@ -245,7 +245,7 @@ class DataTypeDecimal final : public IDataType { std::string to_string(const T& value) const; Status from_string(ReadBuffer& rb, IColumn* column) const override; DataTypeSerDeSPtr get_serde(int nesting_level = 1) const override { - return std::make_shared>(scale, precision, nesting_level); + return std::make_shared>(precision, scale, nesting_level); }; /// Decimal specific @@ -259,7 +259,7 @@ class DataTypeDecimal final : public IDataType { /// @returns multiplier for U to become T with correct scale template - T scale_factor_for(const DataTypeDecimal& x, bool) const { + T scale_factor_for(const DataTypeDecimal& x) const { if (get_scale() < x.get_scale()) { throw doris::Exception(ErrorCode::NOT_IMPLEMENTED_ERROR, "Decimal result's scale is less then argument's one"); @@ -269,14 +269,6 @@ class DataTypeDecimal final : public IDataType { return get_scale_multiplier(scale_delta); } - template - T scale_factor_for(const DataTypeNumber&, bool is_multiply_or_divisor) const { - if (is_multiply_or_divisor) { - return 1; - } - return get_scale_multiplier(); - } - static T get_scale_multiplier(UInt32 scale); static T get_max_digits_number(UInt32 digit_count); @@ -318,7 +310,7 @@ DataTypePtr decimal_result_type(const DataTypeDecimal& tx, const DataTypeDeci bool is_multiply, bool is_divide, bool is_plus_minus) { using Type = std::conditional_t= sizeof(U), T, U>; if constexpr (IsDecimalV2 && IsDecimalV2) { - return std::make_shared>((max_decimal_precision(), 9)); + return std::make_shared>(max_decimal_precision(), 9); } else { UInt32 scale = std::max(tx.get_scale(), ty.get_scale()); auto precision = max_decimal_precision(); diff --git a/be/src/vec/data_types/serde/data_type_decimal_serde.h b/be/src/vec/data_types/serde/data_type_decimal_serde.h index 56ed6716820ae5..dfb191869458ca 100644 --- a/be/src/vec/data_types/serde/data_type_decimal_serde.h +++ b/be/src/vec/data_types/serde/data_type_decimal_serde.h @@ -48,6 +48,8 @@ class Arena; template class DataTypeDecimalSerDe : public DataTypeSerDe { static_assert(IsDecimalNumber); + using ColumnType = ColumnDecimal; + using FieldType = T; public: static constexpr PrimitiveType get_primitive_type() { @@ -68,13 +70,12 @@ class DataTypeDecimalSerDe : public DataTypeSerDe { } throw doris::Exception(ErrorCode::INTERNAL_ERROR, "get_primitive_type __builtin_unreachable"); - __builtin_unreachable(); } - DataTypeDecimalSerDe(int scale_, int precision_, int nesting_level = 1) + DataTypeDecimalSerDe(int precision_, int scale_, int nesting_level = 1) : DataTypeSerDe(nesting_level), - scale(scale_), precision(precision_), + scale(scale_), scale_multiplier(decimal_scale_multiplier(scale)) {} Status serialize_one_cell_to_json(const IColumn& column, int64_t row_num, BufferWritable& bw, @@ -128,8 +129,8 @@ class DataTypeDecimalSerDe : public DataTypeSerDe { int64_t row_idx, bool col_const, const FormatOptions& options) const; - int scale; int precision; + int scale; const typename T::NativeType scale_multiplier; mutable char buf[T::max_string_length()]; }; diff --git a/be/src/vec/data_types/serde/data_type_string_serde.h b/be/src/vec/data_types/serde/data_type_string_serde.h index d0f428be67362b..bd1dac19725d99 100644 --- a/be/src/vec/data_types/serde/data_type_string_serde.h +++ b/be/src/vec/data_types/serde/data_type_string_serde.h @@ -66,6 +66,8 @@ inline void escape_string(const char* src, size_t& len, char escape_char) { template class DataTypeStringSerDeBase : public DataTypeSerDe { + using ColumnStrType = ColumnType; + public: DataTypeStringSerDeBase(int nesting_level = 1) : DataTypeSerDe(nesting_level) {}; diff --git a/be/src/vec/sink/vmysql_result_writer.cpp b/be/src/vec/sink/vmysql_result_writer.cpp index b51a60255deabf..ac04c6367cbe9a 100644 --- a/be/src/vec/sink/vmysql_result_writer.cpp +++ b/be/src/vec/sink/vmysql_result_writer.cpp @@ -215,12 +215,12 @@ Status VMysqlResultWriter::_write_one_block(RuntimeState* stat if (_output_vexpr_ctxs[col_idx]->root()->type().is_decimal_v2_type()) { if (_output_vexpr_ctxs[col_idx]->root()->is_nullable()) { auto nested_serde = - std::make_shared>(scale, - 27); + std::make_shared>(27, + scale); serde = std::make_shared(nested_serde); } else { - serde = std::make_shared>(scale, - 27); + serde = std::make_shared>(27, + scale); } } else { serde = block.get_by_position(col_idx).type->get_serde(); diff --git a/be/test/expected_result/vec/data_types/decimalv3_18_0_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_18_0_get_field.out new file mode 100644 index 00000000000000..731cddb2976472 --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_18_0_get_field.out @@ -0,0 +1,132 @@ +0 +0 +0 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +1 +2 +3 +4 +5 +6 +7 +8 +9 +0 +1 +5 +9 +1000000000 +5000000000 +9000000000 +1000000001 +5000000005 +9000000009 +100000000000000000 +100000000000000001 +100000000000000005 +100000000000000009 +100000000000010000 +100000000000050000 +100000000000090000 +100000000000010001 +100000000000050005 +100000000000090009 +500000000000000000 +500000000000000001 +500000000000000005 +500000000000000009 +500000000000010000 +500000000000050000 +500000000000090000 +500000000000010001 +500000000000050005 +500000000000090009 +900000000000000000 +900000000000000001 +900000000000000005 +900000000000000009 +900000000000010000 +900000000000050000 +900000000000090000 +900000000000010001 +900000000000050005 +900000000000090009 +444444444444444444 +499999999999999999 +555555555555555555 +999999999999999999 +0 +0 +0 +0 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-8 +-9 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-8 +-9 +0 +-1 +-5 +-9 +-1000000000 +-5000000000 +-9000000000 +-1000000001 +-5000000005 +-9000000009 +-100000000000000000 +-100000000000000001 +-100000000000000005 +-100000000000000009 +-100000000000010000 +-100000000000050000 +-100000000000090000 +-100000000000010001 +-100000000000050005 +-100000000000090009 +-500000000000000000 +-500000000000000001 +-500000000000000005 +-500000000000000009 +-500000000000010000 +-500000000000050000 +-500000000000090000 +-500000000000010001 +-500000000000050005 +-500000000000090009 +-900000000000000000 +-900000000000000001 +-900000000000000005 +-900000000000000009 +-900000000000010000 +-900000000000050000 +-900000000000090000 +-900000000000010001 +-900000000000050005 +-900000000000090009 +-444444444444444444 +-499999999999999999 +-555555555555555555 +-999999999999999999 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_18_18_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_18_18_get_field.out new file mode 100644 index 00000000000000..017c5e963e31ed --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_18_18_get_field.out @@ -0,0 +1,202 @@ +0.000000000000000000 +0.000000000000000000 +0.000000000000000000 +0.000000000000000000 +0.100000000000000000 +0.200000000000000000 +0.300000000000000000 +0.400000000000000000 +0.500000000000000000 +0.600000000000000000 +0.700000000000000000 +0.800000000000000000 +0.900000000000000000 +0.000000000000000000 +0.000000000000000001 +0.000000000000000005 +0.000000000000000009 +0.000000001000000000 +0.000000005000000000 +0.000000009000000000 +0.000000001000000001 +0.000000005000000005 +0.000000009000000009 +0.100000000000000000 +0.100000000000000001 +0.100000000000000005 +0.100000000000000009 +0.100000000000010000 +0.100000000000050000 +0.100000000000090000 +0.100000000000010001 +0.100000000000050005 +0.100000000000090009 +0.500000000000000000 +0.500000000000000001 +0.500000000000000005 +0.500000000000000009 +0.500000000000010000 +0.500000000000050000 +0.500000000000090000 +0.500000000000010001 +0.500000000000050005 +0.500000000000090009 +0.900000000000000000 +0.900000000000000001 +0.900000000000000005 +0.900000000000000009 +0.900000000000010000 +0.900000000000050000 +0.900000000000090000 +0.900000000000010001 +0.900000000000050005 +0.900000000000090009 +0.444444444444444444 +0.499999999999999999 +0.555555555555555555 +0.999999999999999999 +0.000000000000000000 +0.000000000000010000 +0.000000000000050000 +0.000000000000090000 +0.000010000000000000 +0.000050000000000000 +0.000090000000000000 +0.000010000000010000 +0.000050000000050000 +0.000090000000090000 +0.100000000000000000 +0.100000000000010000 +0.100000000000050000 +0.100000000000090000 +0.100000000100000000 +0.100000000500000000 +0.100000000900000000 +0.100000000100010000 +0.100000000500050000 +0.100000000900090000 +0.500000000000000000 +0.500000000000010000 +0.500000000000050000 +0.500000000000090000 +0.500000000100000000 +0.500000000500000000 +0.500000000900000000 +0.500000000100010000 +0.500000000500050000 +0.500000000900090000 +0.900000000000000000 +0.900000000000010000 +0.900000000000050000 +0.900000000000090000 +0.900000000100000000 +0.900000000500000000 +0.900000000900000000 +0.900000000100010000 +0.900000000500050000 +0.900000000900090000 +0.444444444444440000 +0.499999999999990000 +0.555555555555550000 +0.999999999999990000 +0.000000000000000000 +0.000000000000000000 +0.000000000000000000 +0.000000000000000000 +-0.100000000000000000 +-0.200000000000000000 +-0.300000000000000000 +-0.400000000000000000 +-0.500000000000000000 +-0.600000000000000000 +-0.700000000000000000 +-0.800000000000000000 +-0.900000000000000000 +0.000000000000000000 +-0.000000000000000001 +-0.000000000000000005 +-0.000000000000000009 +-0.000000001000000000 +-0.000000005000000000 +-0.000000009000000000 +-0.000000001000000001 +-0.000000005000000005 +-0.000000009000000009 +-0.100000000000000000 +-0.100000000000000001 +-0.100000000000000005 +-0.100000000000000009 +-0.100000000000010000 +-0.100000000000050000 +-0.100000000000090000 +-0.100000000000010001 +-0.100000000000050005 +-0.100000000000090009 +-0.500000000000000000 +-0.500000000000000001 +-0.500000000000000005 +-0.500000000000000009 +-0.500000000000010000 +-0.500000000000050000 +-0.500000000000090000 +-0.500000000000010001 +-0.500000000000050005 +-0.500000000000090009 +-0.900000000000000000 +-0.900000000000000001 +-0.900000000000000005 +-0.900000000000000009 +-0.900000000000010000 +-0.900000000000050000 +-0.900000000000090000 +-0.900000000000010001 +-0.900000000000050005 +-0.900000000000090009 +-0.444444444444444444 +-0.499999999999999999 +-0.555555555555555555 +-0.999999999999999999 +0.000000000000000000 +-0.000000000000010000 +-0.000000000000050000 +-0.000000000000090000 +-0.000010000000000000 +-0.000050000000000000 +-0.000090000000000000 +-0.000010000000010000 +-0.000050000000050000 +-0.000090000000090000 +-0.100000000000000000 +-0.100000000000010000 +-0.100000000000050000 +-0.100000000000090000 +-0.100000000100000000 +-0.100000000500000000 +-0.100000000900000000 +-0.100000000100010000 +-0.100000000500050000 +-0.100000000900090000 +-0.500000000000000000 +-0.500000000000010000 +-0.500000000000050000 +-0.500000000000090000 +-0.500000000100000000 +-0.500000000500000000 +-0.500000000900000000 +-0.500000000100010000 +-0.500000000500050000 +-0.500000000900090000 +-0.900000000000000000 +-0.900000000000010000 +-0.900000000000050000 +-0.900000000000090000 +-0.900000000100000000 +-0.900000000500000000 +-0.900000000900000000 +-0.900000000100010000 +-0.900000000500050000 +-0.900000000900090000 +-0.444444444444440000 +-0.499999999999990000 +-0.555555555555550000 +-0.999999999999990000 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_18_9_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_18_9_get_field.out new file mode 100644 index 00000000000000..72f6d4464cdbc5 --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_18_9_get_field.out @@ -0,0 +1,1340 @@ +0.000000000 +0.000000000 +0.000000000 +0.000000000 +1.000000000 +2.000000000 +3.000000000 +4.000000000 +5.000000000 +6.000000000 +7.000000000 +8.000000000 +9.000000000 +1.000000000 +2.000000000 +3.000000000 +4.000000000 +5.000000000 +6.000000000 +7.000000000 +8.000000000 +9.000000000 +0.000000000 +0.444444444 +0.999999999 +0.000000001 +0.000000005 +0.000000009 +0.000000100 +0.000000500 +0.000000900 +0.000000101 +0.000000505 +0.000000909 +0.100000000 +0.100000001 +0.100000005 +0.100000009 +0.101000000 +0.105000000 +0.109000000 +0.101000001 +0.105000005 +0.109000009 +0.900000000 +0.900000001 +0.900000005 +0.900000009 +0.901000000 +0.905000000 +0.909000000 +0.901000001 +0.905000005 +0.909000009 +1.000000000 +1.000000001 +1.000000005 +1.000000009 +1.001000000 +1.005000000 +1.009000000 +1.001000001 +1.005000005 +1.009000009 +1.100000000 +1.100000001 +1.100000005 +1.100000009 +1.101000000 +1.105000000 +1.109000000 +1.101000001 +1.105000005 +1.109000009 +1.900000000 +1.900000001 +1.900000005 +1.900000009 +1.901000000 +1.905000000 +1.909000000 +1.901000001 +1.905000005 +1.909000009 +9.000000000 +9.000000001 +9.000000005 +9.000000009 +9.001000000 +9.005000000 +9.009000000 +9.001000001 +9.005000005 +9.009000009 +9.100000000 +9.100000001 +9.100000005 +9.100000009 +9.101000000 +9.105000000 +9.109000000 +9.101000001 +9.105000005 +9.109000009 +9.900000000 +9.900000001 +9.900000005 +9.900000009 +9.901000000 +9.905000000 +9.909000000 +9.901000001 +9.905000005 +9.909000009 +100000000.000000000 +100000000.000000001 +100000000.000000005 +100000000.000000009 +100000000.000001000 +100000000.000005000 +100000000.000009000 +100000000.000001001 +100000000.000005005 +100000000.000009009 +100000000.100000000 +100000000.100000001 +100000000.100000005 +100000000.100000009 +100000000.100001000 +100000000.100005000 +100000000.100009000 +100000000.100001001 +100000000.500005005 +100000000.900009009 +100000001.000000000 +100000001.000000001 +100000001.000000005 +100000001.000000009 +100000001.000001000 +100000001.000005000 +100000001.000009000 +100000001.000001001 +100000001.000005005 +100000001.000009009 +100000001.100000000 +100000001.100000001 +100000001.100000005 +100000001.100000009 +100000001.100001000 +100000001.100005000 +100000001.100009000 +100000001.100001001 +100000001.500005005 +100000001.900009009 +100005000.000000000 +100005000.000000001 +100005000.000000005 +100005000.000000009 +100005000.000001000 +100005000.000005000 +100005000.000009000 +100005000.000001001 +100005000.000005005 +100005000.000009009 +100005000.100000000 +100005000.100000001 +100005000.100000005 +100005000.100000009 +100005000.100001000 +100005000.100005000 +100005000.100009000 +100005000.100001001 +100005000.500005005 +100005000.900009009 +100005090.000000000 +100005090.000000001 +100005090.000000005 +100005090.000000009 +100005090.000001000 +100005090.000005000 +100005090.000009000 +100005090.000001001 +100005090.000005005 +100005090.000009009 +100005090.100000000 +100005090.100000001 +100005090.100000005 +100005090.100000009 +100005090.100001000 +100005090.100005000 +100005090.100009000 +100005090.100001001 +100005090.500005005 +100005090.900009009 +500000000.000000000 +500000000.000000001 +500000000.000000005 +500000000.000000009 +500000000.000001000 +500000000.000005000 +500000000.000009000 +500000000.000001001 +500000000.000005005 +500000000.000009009 +500000000.100000000 +500000000.100000001 +500000000.100000005 +500000000.100000009 +500000000.100001000 +500000000.100005000 +500000000.100009000 +500000000.100001001 +500000000.500005005 +500000000.900009009 +900000000.000000000 +900000000.000000001 +900000000.000000005 +900000000.000000009 +900000000.000001000 +900000000.000005000 +900000000.000009000 +900000000.000001001 +900000000.000005005 +900000000.000009009 +900000000.100000000 +900000000.100000001 +900000000.100000005 +900000000.100000009 +900000000.100001000 +900000000.100005000 +900000000.100009000 +900000000.100001001 +900000000.500005005 +900000000.900009009 +444444444.444444444 +499999999.999999999 +555555555.555555555 +999999999.999999999 +0.000000000 +0.444444440 +0.999999990 +0.000000010 +0.000000050 +0.000000090 +0.000001000 +0.000005000 +0.000009000 +0.000001010 +0.000005050 +0.000009090 +0.100000000 +0.100000010 +0.100000050 +0.100000090 +0.101000000 +0.105000000 +0.109000000 +0.101000010 +0.105000050 +0.109000090 +0.900000000 +0.900000010 +0.900000050 +0.900000090 +0.901000000 +0.905000000 +0.909000000 +0.901000010 +0.905000050 +0.909000090 +1.000000000 +1.000000010 +1.000000050 +1.000000090 +1.001000000 +1.005000000 +1.009000000 +1.001000010 +1.005000050 +1.009000090 +1.100000000 +1.100000010 +1.100000050 +1.100000090 +1.101000000 +1.105000000 +1.109000000 +1.101000010 +1.105000050 +1.109000090 +1.900000000 +1.900000010 +1.900000050 +1.900000090 +1.901000000 +1.905000000 +1.909000000 +1.901000010 +1.905000050 +1.909000090 +9.000000000 +9.000000010 +9.000000050 +9.000000090 +9.001000000 +9.005000000 +9.009000000 +9.001000010 +9.005000050 +9.009000090 +9.100000000 +9.100000010 +9.100000050 +9.100000090 +9.101000000 +9.105000000 +9.109000000 +9.101000010 +9.105000050 +9.109000090 +9.900000000 +9.900000010 +9.900000050 +9.900000090 +9.901000000 +9.905000000 +9.909000000 +9.901000010 +9.905000050 +9.909000090 +100000000.000000000 +100000000.000000010 +100000000.000000050 +100000000.000000090 +100000000.000010000 +100000000.000050000 +100000000.000090000 +100000000.000010010 +100000000.000050050 +100000000.000090090 +100000000.100000000 +100000000.100000010 +100000000.100000050 +100000000.100000090 +100000000.100010000 +100000000.100050000 +100000000.100090000 +100000000.100010010 +100000000.500050050 +100000000.900090090 +100000001.000000000 +100000001.000000010 +100000001.000000050 +100000001.000000090 +100000001.000010000 +100000001.000050000 +100000001.000090000 +100000001.000010010 +100000001.000050050 +100000001.000090090 +100000001.100000000 +100000001.100000010 +100000001.100000050 +100000001.100000090 +100000001.100010000 +100000001.100050000 +100000001.100090000 +100000001.100010010 +100000001.500050050 +100000001.900090090 +100005000.000000000 +100005000.000000010 +100005000.000000050 +100005000.000000090 +100005000.000010000 +100005000.000050000 +100005000.000090000 +100005000.000010010 +100005000.000050050 +100005000.000090090 +100005000.100000000 +100005000.100000010 +100005000.100000050 +100005000.100000090 +100005000.100010000 +100005000.100050000 +100005000.100090000 +100005000.100010010 +100005000.500050050 +100005000.900090090 +100005090.000000000 +100005090.000000010 +100005090.000000050 +100005090.000000090 +100005090.000010000 +100005090.000050000 +100005090.000090000 +100005090.000010010 +100005090.000050050 +100005090.000090090 +100005090.100000000 +100005090.100000010 +100005090.100000050 +100005090.100000090 +100005090.100010000 +100005090.100050000 +100005090.100090000 +100005090.100010010 +100005090.500050050 +100005090.900090090 +500000000.000000000 +500000000.000000010 +500000000.000000050 +500000000.000000090 +500000000.000010000 +500000000.000050000 +500000000.000090000 +500000000.000010010 +500000000.000050050 +500000000.000090090 +500000000.100000000 +500000000.100000010 +500000000.100000050 +500000000.100000090 +500000000.100010000 +500000000.100050000 +500000000.100090000 +500000000.100010010 +500000000.500050050 +500000000.900090090 +900000000.000000000 +900000000.000000010 +900000000.000000050 +900000000.000000090 +900000000.000010000 +900000000.000050000 +900000000.000090000 +900000000.000010010 +900000000.000050050 +900000000.000090090 +900000000.100000000 +900000000.100000010 +900000000.100000050 +900000000.100000090 +900000000.100010000 +900000000.100050000 +900000000.100090000 +900000000.100010010 +900000000.500050050 +900000000.900090090 +444444444.444444440 +499999999.999999990 +555555555.555555550 +999999999.999999990 +0.000000000 +0.444444444 +0.999999999 +0.000000001 +0.000000005 +0.000000009 +0.000000100 +0.000000500 +0.000000900 +0.000000101 +0.000000505 +0.000000909 +0.100000000 +0.100000001 +0.100000005 +0.100000009 +0.101000000 +0.105000000 +0.109000000 +0.101000001 +0.105000005 +0.109000009 +0.900000000 +0.900000001 +0.900000005 +0.900000009 +0.901000000 +0.905000000 +0.909000000 +0.901000001 +0.905000005 +0.909000009 +1.000000000 +1.000000001 +1.000000005 +1.000000009 +1.001000000 +1.005000000 +1.009000000 +1.001000001 +1.005000005 +1.009000009 +1.100000000 +1.100000001 +1.100000005 +1.100000009 +1.101000000 +1.105000000 +1.109000000 +1.101000001 +1.105000005 +1.109000009 +1.900000000 +1.900000001 +1.900000005 +1.900000009 +1.901000000 +1.905000000 +1.909000000 +1.901000001 +1.905000005 +1.909000009 +9.000000000 +9.000000001 +9.000000005 +9.000000009 +9.001000000 +9.005000000 +9.009000000 +9.001000001 +9.005000005 +9.009000009 +9.100000000 +9.100000001 +9.100000005 +9.100000009 +9.101000000 +9.105000000 +9.109000000 +9.101000001 +9.105000005 +9.109000009 +9.900000000 +9.900000001 +9.900000005 +9.900000009 +9.901000000 +9.905000000 +9.909000000 +9.901000001 +9.905000005 +9.909000009 +10000000.000000000 +10000000.000000001 +10000000.000000005 +10000000.000000009 +10000000.000001000 +10000000.000005000 +10000000.000009000 +10000000.000001001 +10000000.000005005 +10000000.000009009 +10000000.100000000 +10000000.100000001 +10000000.100000005 +10000000.100000009 +10000000.100001000 +10000000.100005000 +10000000.100009000 +10000000.100001001 +10000000.500005005 +10000000.900009009 +10000001.000000000 +10000001.000000001 +10000001.000000005 +10000001.000000009 +10000001.000001000 +10000001.000005000 +10000001.000009000 +10000001.000001001 +10000001.000005005 +10000001.000009009 +10000001.100000000 +10000001.100000001 +10000001.100000005 +10000001.100000009 +10000001.100001000 +10000001.100005000 +10000001.100009000 +10000001.100001001 +10000001.500005005 +10000001.900009009 +10005000.000000000 +10005000.000000001 +10005000.000000005 +10005000.000000009 +10005000.000001000 +10005000.000005000 +10005000.000009000 +10005000.000001001 +10005000.000005005 +10005000.000009009 +10005000.100000000 +10005000.100000001 +10005000.100000005 +10005000.100000009 +10005000.100001000 +10005000.100005000 +10005000.100009000 +10005000.100001001 +10005000.500005005 +10005000.900009009 +10005090.000000000 +10005090.000000001 +10005090.000000005 +10005090.000000009 +10005090.000001000 +10005090.000005000 +10005090.000009000 +10005090.000001001 +10005090.000005005 +10005090.000009009 +10005090.100000000 +10005090.100000001 +10005090.100000005 +10005090.100000009 +10005090.100001000 +10005090.100005000 +10005090.100009000 +10005090.100001001 +10005090.500005005 +10005090.900009009 +50000000.000000000 +50000000.000000001 +50000000.000000005 +50000000.000000009 +50000000.000001000 +50000000.000005000 +50000000.000009000 +50000000.000001001 +50000000.000005005 +50000000.000009009 +50000000.100000000 +50000000.100000001 +50000000.100000005 +50000000.100000009 +50000000.100001000 +50000000.100005000 +50000000.100009000 +50000000.100001001 +50000000.500005005 +50000000.900009009 +90000000.000000000 +90000000.000000001 +90000000.000000005 +90000000.000000009 +90000000.000001000 +90000000.000005000 +90000000.000009000 +90000000.000001001 +90000000.000005005 +90000000.000009009 +90000000.100000000 +90000000.100000001 +90000000.100000005 +90000000.100000009 +90000000.100001000 +90000000.100005000 +90000000.100009000 +90000000.100001001 +90000000.500005005 +90000000.900009009 +44444444.444444444 +49999999.999999999 +55555555.555555555 +99999999.999999999 +0.000000000 +0.000000000 +0.000000000 +0.000000000 +-1.000000000 +-2.000000000 +-3.000000000 +-4.000000000 +-5.000000000 +-6.000000000 +-7.000000000 +-8.000000000 +-9.000000000 +-1.000000000 +-2.000000000 +-3.000000000 +-4.000000000 +-5.000000000 +-6.000000000 +-7.000000000 +-8.000000000 +-9.000000000 +0.000000000 +-0.444444444 +-0.999999999 +-0.000000001 +-0.000000005 +-0.000000009 +-0.000000100 +-0.000000500 +-0.000000900 +-0.000000101 +-0.000000505 +-0.000000909 +-0.100000000 +-0.100000001 +-0.100000005 +-0.100000009 +-0.101000000 +-0.105000000 +-0.109000000 +-0.101000001 +-0.105000005 +-0.109000009 +-0.900000000 +-0.900000001 +-0.900000005 +-0.900000009 +-0.901000000 +-0.905000000 +-0.909000000 +-0.901000001 +-0.905000005 +-0.909000009 +-1.000000000 +-1.000000001 +-1.000000005 +-1.000000009 +-1.001000000 +-1.005000000 +-1.009000000 +-1.001000001 +-1.005000005 +-1.009000009 +-1.100000000 +-1.100000001 +-1.100000005 +-1.100000009 +-1.101000000 +-1.105000000 +-1.109000000 +-1.101000001 +-1.105000005 +-1.109000009 +-1.900000000 +-1.900000001 +-1.900000005 +-1.900000009 +-1.901000000 +-1.905000000 +-1.909000000 +-1.901000001 +-1.905000005 +-1.909000009 +-9.000000000 +-9.000000001 +-9.000000005 +-9.000000009 +-9.001000000 +-9.005000000 +-9.009000000 +-9.001000001 +-9.005000005 +-9.009000009 +-9.100000000 +-9.100000001 +-9.100000005 +-9.100000009 +-9.101000000 +-9.105000000 +-9.109000000 +-9.101000001 +-9.105000005 +-9.109000009 +-9.900000000 +-9.900000001 +-9.900000005 +-9.900000009 +-9.901000000 +-9.905000000 +-9.909000000 +-9.901000001 +-9.905000005 +-9.909000009 +-100000000.000000000 +-100000000.000000001 +-100000000.000000005 +-100000000.000000009 +-100000000.000001000 +-100000000.000005000 +-100000000.000009000 +-100000000.000001001 +-100000000.000005005 +-100000000.000009009 +-100000000.100000000 +-100000000.100000001 +-100000000.100000005 +-100000000.100000009 +-100000000.100001000 +-100000000.100005000 +-100000000.100009000 +-100000000.100001001 +-100000000.500005005 +-100000000.900009009 +-100000001.000000000 +-100000001.000000001 +-100000001.000000005 +-100000001.000000009 +-100000001.000001000 +-100000001.000005000 +-100000001.000009000 +-100000001.000001001 +-100000001.000005005 +-100000001.000009009 +-100000001.100000000 +-100000001.100000001 +-100000001.100000005 +-100000001.100000009 +-100000001.100001000 +-100000001.100005000 +-100000001.100009000 +-100000001.100001001 +-100000001.500005005 +-100000001.900009009 +-100005000.000000000 +-100005000.000000001 +-100005000.000000005 +-100005000.000000009 +-100005000.000001000 +-100005000.000005000 +-100005000.000009000 +-100005000.000001001 +-100005000.000005005 +-100005000.000009009 +-100005000.100000000 +-100005000.100000001 +-100005000.100000005 +-100005000.100000009 +-100005000.100001000 +-100005000.100005000 +-100005000.100009000 +-100005000.100001001 +-100005000.500005005 +-100005000.900009009 +-100005090.000000000 +-100005090.000000001 +-100005090.000000005 +-100005090.000000009 +-100005090.000001000 +-100005090.000005000 +-100005090.000009000 +-100005090.000001001 +-100005090.000005005 +-100005090.000009009 +-100005090.100000000 +-100005090.100000001 +-100005090.100000005 +-100005090.100000009 +-100005090.100001000 +-100005090.100005000 +-100005090.100009000 +-100005090.100001001 +-100005090.500005005 +-100005090.900009009 +-500000000.000000000 +-500000000.000000001 +-500000000.000000005 +-500000000.000000009 +-500000000.000001000 +-500000000.000005000 +-500000000.000009000 +-500000000.000001001 +-500000000.000005005 +-500000000.000009009 +-500000000.100000000 +-500000000.100000001 +-500000000.100000005 +-500000000.100000009 +-500000000.100001000 +-500000000.100005000 +-500000000.100009000 +-500000000.100001001 +-500000000.500005005 +-500000000.900009009 +-900000000.000000000 +-900000000.000000001 +-900000000.000000005 +-900000000.000000009 +-900000000.000001000 +-900000000.000005000 +-900000000.000009000 +-900000000.000001001 +-900000000.000005005 +-900000000.000009009 +-900000000.100000000 +-900000000.100000001 +-900000000.100000005 +-900000000.100000009 +-900000000.100001000 +-900000000.100005000 +-900000000.100009000 +-900000000.100001001 +-900000000.500005005 +-900000000.900009009 +-444444444.444444444 +-499999999.999999999 +-555555555.555555555 +-999999999.999999999 +0.000000000 +-0.444444440 +-0.999999990 +-0.000000010 +-0.000000050 +-0.000000090 +-0.000001000 +-0.000005000 +-0.000009000 +-0.000001010 +-0.000005050 +-0.000009090 +-0.100000000 +-0.100000010 +-0.100000050 +-0.100000090 +-0.101000000 +-0.105000000 +-0.109000000 +-0.101000010 +-0.105000050 +-0.109000090 +-0.900000000 +-0.900000010 +-0.900000050 +-0.900000090 +-0.901000000 +-0.905000000 +-0.909000000 +-0.901000010 +-0.905000050 +-0.909000090 +-1.000000000 +-1.000000010 +-1.000000050 +-1.000000090 +-1.001000000 +-1.005000000 +-1.009000000 +-1.001000010 +-1.005000050 +-1.009000090 +-1.100000000 +-1.100000010 +-1.100000050 +-1.100000090 +-1.101000000 +-1.105000000 +-1.109000000 +-1.101000010 +-1.105000050 +-1.109000090 +-1.900000000 +-1.900000010 +-1.900000050 +-1.900000090 +-1.901000000 +-1.905000000 +-1.909000000 +-1.901000010 +-1.905000050 +-1.909000090 +-9.000000000 +-9.000000010 +-9.000000050 +-9.000000090 +-9.001000000 +-9.005000000 +-9.009000000 +-9.001000010 +-9.005000050 +-9.009000090 +-9.100000000 +-9.100000010 +-9.100000050 +-9.100000090 +-9.101000000 +-9.105000000 +-9.109000000 +-9.101000010 +-9.105000050 +-9.109000090 +-9.900000000 +-9.900000010 +-9.900000050 +-9.900000090 +-9.901000000 +-9.905000000 +-9.909000000 +-9.901000010 +-9.905000050 +-9.909000090 +-100000000.000000000 +-100000000.000000010 +-100000000.000000050 +-100000000.000000090 +-100000000.000010000 +-100000000.000050000 +-100000000.000090000 +-100000000.000010010 +-100000000.000050050 +-100000000.000090090 +-100000000.100000000 +-100000000.100000010 +-100000000.100000050 +-100000000.100000090 +-100000000.100010000 +-100000000.100050000 +-100000000.100090000 +-100000000.100010010 +-100000000.500050050 +-100000000.900090090 +-100000001.000000000 +-100000001.000000010 +-100000001.000000050 +-100000001.000000090 +-100000001.000010000 +-100000001.000050000 +-100000001.000090000 +-100000001.000010010 +-100000001.000050050 +-100000001.000090090 +-100000001.100000000 +-100000001.100000010 +-100000001.100000050 +-100000001.100000090 +-100000001.100010000 +-100000001.100050000 +-100000001.100090000 +-100000001.100010010 +-100000001.500050050 +-100000001.900090090 +-100005000.000000000 +-100005000.000000010 +-100005000.000000050 +-100005000.000000090 +-100005000.000010000 +-100005000.000050000 +-100005000.000090000 +-100005000.000010010 +-100005000.000050050 +-100005000.000090090 +-100005000.100000000 +-100005000.100000010 +-100005000.100000050 +-100005000.100000090 +-100005000.100010000 +-100005000.100050000 +-100005000.100090000 +-100005000.100010010 +-100005000.500050050 +-100005000.900090090 +-100005090.000000000 +-100005090.000000010 +-100005090.000000050 +-100005090.000000090 +-100005090.000010000 +-100005090.000050000 +-100005090.000090000 +-100005090.000010010 +-100005090.000050050 +-100005090.000090090 +-100005090.100000000 +-100005090.100000010 +-100005090.100000050 +-100005090.100000090 +-100005090.100010000 +-100005090.100050000 +-100005090.100090000 +-100005090.100010010 +-100005090.500050050 +-100005090.900090090 +-500000000.000000000 +-500000000.000000010 +-500000000.000000050 +-500000000.000000090 +-500000000.000010000 +-500000000.000050000 +-500000000.000090000 +-500000000.000010010 +-500000000.000050050 +-500000000.000090090 +-500000000.100000000 +-500000000.100000010 +-500000000.100000050 +-500000000.100000090 +-500000000.100010000 +-500000000.100050000 +-500000000.100090000 +-500000000.100010010 +-500000000.500050050 +-500000000.900090090 +-900000000.000000000 +-900000000.000000010 +-900000000.000000050 +-900000000.000000090 +-900000000.000010000 +-900000000.000050000 +-900000000.000090000 +-900000000.000010010 +-900000000.000050050 +-900000000.000090090 +-900000000.100000000 +-900000000.100000010 +-900000000.100000050 +-900000000.100000090 +-900000000.100010000 +-900000000.100050000 +-900000000.100090000 +-900000000.100010010 +-900000000.500050050 +-900000000.900090090 +-444444444.444444440 +-499999999.999999990 +-555555555.555555550 +-999999999.999999990 +0.000000000 +-0.444444444 +-0.999999999 +-0.000000001 +-0.000000005 +-0.000000009 +-0.000000100 +-0.000000500 +-0.000000900 +-0.000000101 +-0.000000505 +-0.000000909 +-0.100000000 +-0.100000001 +-0.100000005 +-0.100000009 +-0.101000000 +-0.105000000 +-0.109000000 +-0.101000001 +-0.105000005 +-0.109000009 +-0.900000000 +-0.900000001 +-0.900000005 +-0.900000009 +-0.901000000 +-0.905000000 +-0.909000000 +-0.901000001 +-0.905000005 +-0.909000009 +-1.000000000 +-1.000000001 +-1.000000005 +-1.000000009 +-1.001000000 +-1.005000000 +-1.009000000 +-1.001000001 +-1.005000005 +-1.009000009 +-1.100000000 +-1.100000001 +-1.100000005 +-1.100000009 +-1.101000000 +-1.105000000 +-1.109000000 +-1.101000001 +-1.105000005 +-1.109000009 +-1.900000000 +-1.900000001 +-1.900000005 +-1.900000009 +-1.901000000 +-1.905000000 +-1.909000000 +-1.901000001 +-1.905000005 +-1.909000009 +-9.000000000 +-9.000000001 +-9.000000005 +-9.000000009 +-9.001000000 +-9.005000000 +-9.009000000 +-9.001000001 +-9.005000005 +-9.009000009 +-9.100000000 +-9.100000001 +-9.100000005 +-9.100000009 +-9.101000000 +-9.105000000 +-9.109000000 +-9.101000001 +-9.105000005 +-9.109000009 +-9.900000000 +-9.900000001 +-9.900000005 +-9.900000009 +-9.901000000 +-9.905000000 +-9.909000000 +-9.901000001 +-9.905000005 +-9.909000009 +-10000000.000000000 +-10000000.000000001 +-10000000.000000005 +-10000000.000000009 +-10000000.000001000 +-10000000.000005000 +-10000000.000009000 +-10000000.000001001 +-10000000.000005005 +-10000000.000009009 +-10000000.100000000 +-10000000.100000001 +-10000000.100000005 +-10000000.100000009 +-10000000.100001000 +-10000000.100005000 +-10000000.100009000 +-10000000.100001001 +-10000000.500005005 +-10000000.900009009 +-10000001.000000000 +-10000001.000000001 +-10000001.000000005 +-10000001.000000009 +-10000001.000001000 +-10000001.000005000 +-10000001.000009000 +-10000001.000001001 +-10000001.000005005 +-10000001.000009009 +-10000001.100000000 +-10000001.100000001 +-10000001.100000005 +-10000001.100000009 +-10000001.100001000 +-10000001.100005000 +-10000001.100009000 +-10000001.100001001 +-10000001.500005005 +-10000001.900009009 +-10005000.000000000 +-10005000.000000001 +-10005000.000000005 +-10005000.000000009 +-10005000.000001000 +-10005000.000005000 +-10005000.000009000 +-10005000.000001001 +-10005000.000005005 +-10005000.000009009 +-10005000.100000000 +-10005000.100000001 +-10005000.100000005 +-10005000.100000009 +-10005000.100001000 +-10005000.100005000 +-10005000.100009000 +-10005000.100001001 +-10005000.500005005 +-10005000.900009009 +-10005090.000000000 +-10005090.000000001 +-10005090.000000005 +-10005090.000000009 +-10005090.000001000 +-10005090.000005000 +-10005090.000009000 +-10005090.000001001 +-10005090.000005005 +-10005090.000009009 +-10005090.100000000 +-10005090.100000001 +-10005090.100000005 +-10005090.100000009 +-10005090.100001000 +-10005090.100005000 +-10005090.100009000 +-10005090.100001001 +-10005090.500005005 +-10005090.900009009 +-50000000.000000000 +-50000000.000000001 +-50000000.000000005 +-50000000.000000009 +-50000000.000001000 +-50000000.000005000 +-50000000.000009000 +-50000000.000001001 +-50000000.000005005 +-50000000.000009009 +-50000000.100000000 +-50000000.100000001 +-50000000.100000005 +-50000000.100000009 +-50000000.100001000 +-50000000.100005000 +-50000000.100009000 +-50000000.100001001 +-50000000.500005005 +-50000000.900009009 +-90000000.000000000 +-90000000.000000001 +-90000000.000000005 +-90000000.000000009 +-90000000.000001000 +-90000000.000005000 +-90000000.000009000 +-90000000.000001001 +-90000000.000005005 +-90000000.000009009 +-90000000.100000000 +-90000000.100000001 +-90000000.100000005 +-90000000.100000009 +-90000000.100001000 +-90000000.100005000 +-90000000.100009000 +-90000000.100001001 +-90000000.500005005 +-90000000.900009009 +-44444444.444444444 +-49999999.999999999 +-55555555.555555555 +-99999999.999999999 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_1_0_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_1_0_get_field.out new file mode 100644 index 00000000000000..425d603b81f4b5 --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_1_0_get_field.out @@ -0,0 +1,57 @@ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-8 +-9 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-8 +-9 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-8 +-9 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_1_1_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_1_1_get_field.out new file mode 100644 index 00000000000000..a8da8ca8ee4fd2 --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_1_1_get_field.out @@ -0,0 +1,57 @@ +0.0 +0.1 +0.2 +0.3 +0.4 +0.5 +0.6 +0.7 +0.8 +0.9 +-0.1 +-0.2 +-0.3 +-0.4 +-0.5 +-0.6 +-0.7 +-0.8 +-0.9 +0.0 +0.1 +0.2 +0.3 +0.4 +0.5 +0.6 +0.7 +0.8 +0.9 +-0.1 +-0.2 +-0.3 +-0.4 +-0.5 +-0.6 +-0.7 +-0.8 +-0.9 +0.0 +0.1 +0.2 +0.3 +0.4 +0.5 +0.6 +0.7 +0.8 +0.9 +-0.1 +-0.2 +-0.3 +-0.4 +-0.5 +-0.6 +-0.7 +-0.8 +-0.9 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_38_0_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_38_0_get_field.out new file mode 100644 index 00000000000000..4fee37c6f423e8 --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_38_0_get_field.out @@ -0,0 +1,132 @@ +0 +0 +0 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +1 +2 +3 +4 +5 +6 +7 +8 +9 +0 +1 +5 +9 +10000000000000000000 +50000000000000000000 +90000000000000000000 +10000000000000000001 +50000000000000000005 +90000000000000000009 +10000000000000000000000000000000000000 +10000000000000000000000000000000000001 +10000000000000000000000000000000000005 +10000000000000000000000000000000000009 +10000000000000000000000100000000000000 +10000000000000000000000500000000000000 +10000000000000000000000900000000000000 +10000000000000000000000100000000000001 +10000000000000000000000500000000000005 +10000000000000000000000900000000000009 +50000000000000000000000000000000000000 +50000000000000000000000000000000000001 +50000000000000000000000000000000000005 +50000000000000000000000000000000000009 +50000000000000000000000100000000000000 +50000000000000000000000500000000000000 +50000000000000000000000900000000000000 +50000000000000000000000100000000000001 +50000000000000000000000500000000000005 +50000000000000000000000900000000000009 +90000000000000000000000000000000000000 +90000000000000000000000000000000000001 +90000000000000000000000000000000000005 +90000000000000000000000000000000000009 +90000000000000000000000100000000000000 +90000000000000000000000500000000000000 +90000000000000000000000900000000000000 +90000000000000000000000100000000000001 +90000000000000000000000500000000000005 +90000000000000000000000900000000000009 +44444444444444444444444444444444444444 +49999999999999999999999999999999999999 +55555555555555555555555555555555555555 +99999999999999999999999999999999999999 +0 +0 +0 +0 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-8 +-9 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-8 +-9 +0 +-1 +-5 +-9 +-10000000000000000000 +-50000000000000000000 +-90000000000000000000 +-10000000000000000001 +-50000000000000000005 +-90000000000000000009 +-10000000000000000000000000000000000000 +-10000000000000000000000000000000000001 +-10000000000000000000000000000000000005 +-10000000000000000000000000000000000009 +-10000000000000000000000100000000000000 +-10000000000000000000000500000000000000 +-10000000000000000000000900000000000000 +-10000000000000000000000100000000000001 +-10000000000000000000000500000000000005 +-10000000000000000000000900000000000009 +-50000000000000000000000000000000000000 +-50000000000000000000000000000000000001 +-50000000000000000000000000000000000005 +-50000000000000000000000000000000000009 +-50000000000000000000000100000000000000 +-50000000000000000000000500000000000000 +-50000000000000000000000900000000000000 +-50000000000000000000000100000000000001 +-50000000000000000000000500000000000005 +-50000000000000000000000900000000000009 +-90000000000000000000000000000000000000 +-90000000000000000000000000000000000001 +-90000000000000000000000000000000000005 +-90000000000000000000000000000000000009 +-90000000000000000000000100000000000000 +-90000000000000000000000500000000000000 +-90000000000000000000000900000000000000 +-90000000000000000000000100000000000001 +-90000000000000000000000500000000000005 +-90000000000000000000000900000000000009 +-44444444444444444444444444444444444444 +-49999999999999999999999999999999999999 +-55555555555555555555555555555555555555 +-99999999999999999999999999999999999999 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_38_30_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_38_30_get_field.out new file mode 100644 index 00000000000000..800d0c8d930026 --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_38_30_get_field.out @@ -0,0 +1,1383 @@ +12.345678901000000000000000000000 +987.654321000000000000000000000000 +0.123456789000000000000000000000 +1234567.890000000000000000000000000000 +0.987654321000000000000000000000 +56789.123450000000000000000000000000 +123.456789000000000000000000000000 +45678.901230000000000000000000000000 +0.345678900000000000000000000000 +2345.678900000000000000000000000000 +0.100000000000000000000000000000 +1.000000000000000000000000000000 +123.000000000000000000000000000000 +12345678.123456789000000000000000000000 +0.000000000000000000000000000000 +0.000000000000000000000000000000 +12345678.000000000000000000000000000000 +99999999.999999999999999999999999999999 +10000000.100000000000000000000000000000 +0.999999999000000000000000000000 +0.000123456000000000000000000000 +99999999.999999999000000000000000000000 +0.123456000000000000000000000000 +123456.000000001000000000000000000000 +10000000.000000001000000000000000000000 +0.000000123000000000000000000000 +12345678.678990123450000000000000000000 +123.456000000000000000000000000000 +99999999.990000000000000000000000000000 +0.000000000100000000000000000000 +999.999999999000000000000000000000 +0.012345678000000000000000000000 +12345678.123456789000000000000000000000 +12345.123456789000000000000000000000 +98765.987654321000000000000000000000 +1234567.567890123000000000000000000000 +876545.432109876000000000000000000000 +234545.678901234000000000000000000000 +987654.321098765000000000000000000000 +123456.789012345000000000000000000000 +9876543.210987654000000000000000000000 +1234567.890123456000000000000000000000 +5432.109876543000000000000000000000 +0.000000000000000000000000000000 +0.000000000000000000000000000000 +0.000000000000000000000000000000 +0.000000000000000000000000000000 +1.000000000000000000000000000000 +2.000000000000000000000000000000 +3.000000000000000000000000000000 +4.000000000000000000000000000000 +5.000000000000000000000000000000 +6.000000000000000000000000000000 +7.000000000000000000000000000000 +8.000000000000000000000000000000 +9.000000000000000000000000000000 +1.000000000000000000000000000000 +2.000000000000000000000000000000 +3.000000000000000000000000000000 +4.000000000000000000000000000000 +5.000000000000000000000000000000 +6.000000000000000000000000000000 +7.000000000000000000000000000000 +8.000000000000000000000000000000 +9.000000000000000000000000000000 +0.000000000000000000000000000000 +0.444444444444444444444444444444 +0.999999999999999999999999999999 +0.000000000000000000000000000001 +0.000000000000000000000000000005 +0.000000000000000000000000000009 +0.000000000010000000000000000000 +0.000000000050000000000000000000 +0.000000000090000000000000000000 +0.000000000010000000000000000001 +0.000000000050000000000000000005 +0.000000000090000000000000000009 +0.100000000000000000000000000000 +0.100000000000000000000000000001 +0.100000000000000000000000000005 +0.100000000000000000000000000009 +0.100000000010000000000000000000 +0.100000000050000000000000000000 +0.100000000090000000000000000000 +0.100000000010000000000000000001 +0.100000000050000000000000000005 +0.100000000090000000000000000009 +0.900000000000000000000000000000 +0.900000000000000000000000000001 +0.900000000000000000000000000005 +0.900000000000000000000000000009 +0.900000000010000000000000000000 +0.900000000050000000000000000000 +0.900000000090000000000000000000 +0.900000000010000000000000000001 +0.900000000050000000000000000005 +0.900000000090000000000000000009 +1.000000000000000000000000000000 +1.000000000000000000000000000001 +1.000000000000000000000000000005 +1.000000000000000000000000000009 +1.000000000010000000000000000000 +1.000000000050000000000000000000 +1.000000000090000000000000000000 +1.000000000010000000000000000001 +1.000000000050000000000000000005 +1.000000000090000000000000000009 +1.100000000000000000000000000000 +1.100000000000000000000000000001 +1.100000000000000000000000000005 +1.100000000000000000000000000009 +1.100000000010000000000000000000 +1.100000000050000000000000000000 +1.100000000090000000000000000000 +1.100000000010000000000000000001 +1.100000000050000000000000000005 +1.100000000090000000000000000009 +1.900000000000000000000000000000 +1.900000000000000000000000000001 +1.900000000000000000000000000005 +1.900000000000000000000000000009 +1.900000000010000000000000000000 +1.900000000050000000000000000000 +1.900000000090000000000000000000 +1.900000000010000000000000000001 +1.900000000050000000000000000005 +1.900000000090000000000000000009 +9.000000000000000000000000000000 +9.000000000000000000000000000001 +9.000000000000000000000000000005 +9.000000000000000000000000000009 +9.000000000010000000000000000000 +9.000000000050000000000000000000 +9.000000000090000000000000000000 +9.000000000010000000000000000001 +9.000000000050000000000000000005 +9.000000000090000000000000000009 +9.100000000000000000000000000000 +9.100000000000000000000000000001 +9.100000000000000000000000000005 +9.100000000000000000000000000009 +9.100000000010000000000000000000 +9.100000000050000000000000000000 +9.100000000090000000000000000000 +9.100000000010000000000000000001 +9.100000000050000000000000000005 +9.100000000090000000000000000009 +9.900000000000000000000000000000 +9.900000000000000000000000000001 +9.900000000000000000000000000005 +9.900000000000000000000000000009 +9.900000000010000000000000000000 +9.900000000050000000000000000000 +9.900000000090000000000000000000 +9.900000000010000000000000000001 +9.900000000050000000000000000005 +9.900000000090000000000000000009 +10000000.000000000000000000000000000000 +10000000.000000000000000000000000000001 +10000000.000000000000000000000000000005 +10000000.000000000000000000000000000009 +10000000.000000000000000100000000000000 +10000000.000000000000000500000000000000 +10000000.000000000000000900000000000000 +10000000.000000000000000100000000000001 +10000000.000000000000000500000000000005 +10000000.000000000000000900000000000009 +10000000.100000000000000000000000000000 +10000000.100000000000000000000000000001 +10000000.100000000000000000000000000005 +10000000.100000000000000000000000000009 +10000000.100000000000000100000000000000 +10000000.100000000000000500000000000000 +10000000.100000000000000900000000000000 +10000000.100000000000000100000000000001 +10000000.500000000000000500000000000005 +10000000.900000000000000900000000000009 +10000001.000000000000000000000000000000 +10000001.000000000000000000000000000001 +10000001.000000000000000000000000000005 +10000001.000000000000000000000000000009 +10000001.000000000000000100000000000000 +10000001.000000000000000500000000000000 +10000001.000000000000000900000000000000 +10000001.000000000000000100000000000001 +10000001.000000000000000500000000000005 +10000001.000000000000000900000000000009 +10000001.100000000000000000000000000000 +10000001.100000000000000000000000000001 +10000001.100000000000000000000000000005 +10000001.100000000000000000000000000009 +10000001.100000000000000100000000000000 +10000001.100000000000000500000000000000 +10000001.100000000000000900000000000000 +10000001.100000000000000100000000000001 +10000001.500000000000000500000000000005 +10000001.900000000000000900000000000009 +10000500.000000000000000000000000000000 +10000500.000000000000000000000000000001 +10000500.000000000000000000000000000005 +10000500.000000000000000000000000000009 +10000500.000000000000000100000000000000 +10000500.000000000000000500000000000000 +10000500.000000000000000900000000000000 +10000500.000000000000000100000000000001 +10000500.000000000000000500000000000005 +10000500.000000000000000900000000000009 +10000500.100000000000000000000000000000 +10000500.100000000000000000000000000001 +10000500.100000000000000000000000000005 +10000500.100000000000000000000000000009 +10000500.100000000000000100000000000000 +10000500.100000000000000500000000000000 +10000500.100000000000000900000000000000 +10000500.100000000000000100000000000001 +10000500.500000000000000500000000000005 +10000500.900000000000000900000000000009 +10000509.000000000000000000000000000000 +10000509.000000000000000000000000000001 +10000509.000000000000000000000000000005 +10000509.000000000000000000000000000009 +10000509.000000000000000100000000000000 +10000509.000000000000000500000000000000 +10000509.000000000000000900000000000000 +10000509.000000000000000100000000000001 +10000509.000000000000000500000000000005 +10000509.000000000000000900000000000009 +10000509.100000000000000000000000000000 +10000509.100000000000000000000000000001 +10000509.100000000000000000000000000005 +10000509.100000000000000000000000000009 +10000509.100000000000000100000000000000 +10000509.100000000000000500000000000000 +10000509.100000000000000900000000000000 +10000509.100000000000000100000000000001 +10000509.500000000000000500000000000005 +10000509.900000000000000900000000000009 +50000000.000000000000000000000000000000 +50000000.000000000000000000000000000001 +50000000.000000000000000000000000000005 +50000000.000000000000000000000000000009 +50000000.000000000000000100000000000000 +50000000.000000000000000500000000000000 +50000000.000000000000000900000000000000 +50000000.000000000000000100000000000001 +50000000.000000000000000500000000000005 +50000000.000000000000000900000000000009 +50000000.100000000000000000000000000000 +50000000.100000000000000000000000000001 +50000000.100000000000000000000000000005 +50000000.100000000000000000000000000009 +50000000.100000000000000100000000000000 +50000000.100000000000000500000000000000 +50000000.100000000000000900000000000000 +50000000.100000000000000100000000000001 +50000000.500000000000000500000000000005 +50000000.900000000000000900000000000009 +90000000.000000000000000000000000000000 +90000000.000000000000000000000000000001 +90000000.000000000000000000000000000005 +90000000.000000000000000000000000000009 +90000000.000000000000000100000000000000 +90000000.000000000000000500000000000000 +90000000.000000000000000900000000000000 +90000000.000000000000000100000000000001 +90000000.000000000000000500000000000005 +90000000.000000000000000900000000000009 +90000000.100000000000000000000000000000 +90000000.100000000000000000000000000001 +90000000.100000000000000000000000000005 +90000000.100000000000000000000000000009 +90000000.100000000000000100000000000000 +90000000.100000000000000500000000000000 +90000000.100000000000000900000000000000 +90000000.100000000000000100000000000001 +90000000.500000000000000500000000000005 +90000000.900000000000000900000000000009 +44444444.444444444444444444444444444444 +49999999.999999999999999999999999999999 +55555555.555555555555555555555555555555 +99999999.999999999999999999999999999999 +0.000000000000000000000000000000 +0.444444444444444444444444444000 +0.999999999999999999999999999000 +0.000000000000000000000000001000 +0.000000000000000000000000005000 +0.000000000000000000000000009000 +0.000000010000000000000000000000 +0.000000050000000000000000000000 +0.000000090000000000000000000000 +0.000000010000000000000000001000 +0.000000050000000000000000005000 +0.000000090000000000000000009000 +0.100000000000000000000000000000 +0.100000000000000000000000001000 +0.100000000000000000000000005000 +0.100000000000000000000000009000 +0.100000010000000000000000000000 +0.100000050000000000000000000000 +0.100000090000000000000000000000 +0.100000010000000000000000001000 +0.100000050000000000000000005000 +0.100000090000000000000000009000 +0.900000000000000000000000000000 +0.900000000000000000000000001000 +0.900000000000000000000000005000 +0.900000000000000000000000009000 +0.900000010000000000000000000000 +0.900000050000000000000000000000 +0.900000090000000000000000000000 +0.900000010000000000000000001000 +0.900000050000000000000000005000 +0.900000090000000000000000009000 +1.000000000000000000000000000000 +1.000000000000000000000000001000 +1.000000000000000000000000005000 +1.000000000000000000000000009000 +1.000000010000000000000000000000 +1.000000050000000000000000000000 +1.000000090000000000000000000000 +1.000000010000000000000000001000 +1.000000050000000000000000005000 +1.000000090000000000000000009000 +1.100000000000000000000000000000 +1.100000000000000000000000001000 +1.100000000000000000000000005000 +1.100000000000000000000000009000 +1.100000010000000000000000000000 +1.100000050000000000000000000000 +1.100000090000000000000000000000 +1.100000010000000000000000001000 +1.100000050000000000000000005000 +1.100000090000000000000000009000 +1.900000000000000000000000000000 +1.900000000000000000000000001000 +1.900000000000000000000000005000 +1.900000000000000000000000009000 +1.900000010000000000000000000000 +1.900000050000000000000000000000 +1.900000090000000000000000000000 +1.900000010000000000000000001000 +1.900000050000000000000000005000 +1.900000090000000000000000009000 +9.000000000000000000000000000000 +9.000000000000000000000000001000 +9.000000000000000000000000005000 +9.000000000000000000000000009000 +9.000000010000000000000000000000 +9.000000050000000000000000000000 +9.000000090000000000000000000000 +9.000000010000000000000000001000 +9.000000050000000000000000005000 +9.000000090000000000000000009000 +9.100000000000000000000000000000 +9.100000000000000000000000001000 +9.100000000000000000000000005000 +9.100000000000000000000000009000 +9.100000010000000000000000000000 +9.100000050000000000000000000000 +9.100000090000000000000000000000 +9.100000010000000000000000001000 +9.100000050000000000000000005000 +9.100000090000000000000000009000 +9.900000000000000000000000000000 +9.900000000000000000000000001000 +9.900000000000000000000000005000 +9.900000000000000000000000009000 +9.900000010000000000000000000000 +9.900000050000000000000000000000 +9.900000090000000000000000000000 +9.900000010000000000000000001000 +9.900000050000000000000000005000 +9.900000090000000000000000009000 +10000000.000000000000000000000000000000 +10000000.000000000000000000000000001000 +10000000.000000000000000000000000005000 +10000000.000000000000000000000000009000 +10000000.000000000000100000000000000000 +10000000.000000000000500000000000000000 +10000000.000000000000900000000000000000 +10000000.000000000000100000000000001000 +10000000.000000000000500000000000005000 +10000000.000000000000900000000000009000 +10000000.100000000000000000000000000000 +10000000.100000000000000000000000001000 +10000000.100000000000000000000000005000 +10000000.100000000000000000000000009000 +10000000.100000000000100000000000000000 +10000000.100000000000500000000000000000 +10000000.100000000000900000000000000000 +10000000.100000000000100000000000001000 +10000000.500000000000500000000000005000 +10000000.900000000000900000000000009000 +10000001.000000000000000000000000000000 +10000001.000000000000000000000000001000 +10000001.000000000000000000000000005000 +10000001.000000000000000000000000009000 +10000001.000000000000100000000000000000 +10000001.000000000000500000000000000000 +10000001.000000000000900000000000000000 +10000001.000000000000100000000000001000 +10000001.000000000000500000000000005000 +10000001.000000000000900000000000009000 +10000001.100000000000000000000000000000 +10000001.100000000000000000000000001000 +10000001.100000000000000000000000005000 +10000001.100000000000000000000000009000 +10000001.100000000000100000000000000000 +10000001.100000000000500000000000000000 +10000001.100000000000900000000000000000 +10000001.100000000000100000000000001000 +10000001.500000000000500000000000005000 +10000001.900000000000900000000000009000 +10000500.000000000000000000000000000000 +10000500.000000000000000000000000001000 +10000500.000000000000000000000000005000 +10000500.000000000000000000000000009000 +10000500.000000000000100000000000000000 +10000500.000000000000500000000000000000 +10000500.000000000000900000000000000000 +10000500.000000000000100000000000001000 +10000500.000000000000500000000000005000 +10000500.000000000000900000000000009000 +10000500.100000000000000000000000000000 +10000500.100000000000000000000000001000 +10000500.100000000000000000000000005000 +10000500.100000000000000000000000009000 +10000500.100000000000100000000000000000 +10000500.100000000000500000000000000000 +10000500.100000000000900000000000000000 +10000500.100000000000100000000000001000 +10000500.500000000000500000000000005000 +10000500.900000000000900000000000009000 +10000509.000000000000000000000000000000 +10000509.000000000000000000000000001000 +10000509.000000000000000000000000005000 +10000509.000000000000000000000000009000 +10000509.000000000000100000000000000000 +10000509.000000000000500000000000000000 +10000509.000000000000900000000000000000 +10000509.000000000000100000000000001000 +10000509.000000000000500000000000005000 +10000509.000000000000900000000000009000 +10000509.100000000000000000000000000000 +10000509.100000000000000000000000001000 +10000509.100000000000000000000000005000 +10000509.100000000000000000000000009000 +10000509.100000000000100000000000000000 +10000509.100000000000500000000000000000 +10000509.100000000000900000000000000000 +10000509.100000000000100000000000001000 +10000509.500000000000500000000000005000 +10000509.900000000000900000000000009000 +50000000.000000000000000000000000000000 +50000000.000000000000000000000000001000 +50000000.000000000000000000000000005000 +50000000.000000000000000000000000009000 +50000000.000000000000100000000000000000 +50000000.000000000000500000000000000000 +50000000.000000000000900000000000000000 +50000000.000000000000100000000000001000 +50000000.000000000000500000000000005000 +50000000.000000000000900000000000009000 +50000000.100000000000000000000000000000 +50000000.100000000000000000000000001000 +50000000.100000000000000000000000005000 +50000000.100000000000000000000000009000 +50000000.100000000000100000000000000000 +50000000.100000000000500000000000000000 +50000000.100000000000900000000000000000 +50000000.100000000000100000000000001000 +50000000.500000000000500000000000005000 +50000000.900000000000900000000000009000 +90000000.000000000000000000000000000000 +90000000.000000000000000000000000001000 +90000000.000000000000000000000000005000 +90000000.000000000000000000000000009000 +90000000.000000000000100000000000000000 +90000000.000000000000500000000000000000 +90000000.000000000000900000000000000000 +90000000.000000000000100000000000001000 +90000000.000000000000500000000000005000 +90000000.000000000000900000000000009000 +90000000.100000000000000000000000000000 +90000000.100000000000000000000000001000 +90000000.100000000000000000000000005000 +90000000.100000000000000000000000009000 +90000000.100000000000100000000000000000 +90000000.100000000000500000000000000000 +90000000.100000000000900000000000000000 +90000000.100000000000100000000000001000 +90000000.500000000000500000000000005000 +90000000.900000000000900000000000009000 +44444444.444444444444444444444444444000 +49999999.999999999999999999999999999000 +55555555.555555555555555555555555555000 +99999999.999999999999999999999999999000 +0.000000000000000000000000000000 +0.444444444444444444444444444444 +0.999999999999999999999999999999 +0.000000000000000000000000000001 +0.000000000000000000000000000005 +0.000000000000000000000000000009 +0.000000000010000000000000000000 +0.000000000050000000000000000000 +0.000000000090000000000000000000 +0.000000000010000000000000000001 +0.000000000050000000000000000005 +0.000000000090000000000000000009 +0.100000000000000000000000000000 +0.100000000000000000000000000001 +0.100000000000000000000000000005 +0.100000000000000000000000000009 +0.100000000010000000000000000000 +0.100000000050000000000000000000 +0.100000000090000000000000000000 +0.100000000010000000000000000001 +0.100000000050000000000000000005 +0.100000000090000000000000000009 +0.900000000000000000000000000000 +0.900000000000000000000000000001 +0.900000000000000000000000000005 +0.900000000000000000000000000009 +0.900000000010000000000000000000 +0.900000000050000000000000000000 +0.900000000090000000000000000000 +0.900000000010000000000000000001 +0.900000000050000000000000000005 +0.900000000090000000000000000009 +1.000000000000000000000000000000 +1.000000000000000000000000000001 +1.000000000000000000000000000005 +1.000000000000000000000000000009 +1.000000000010000000000000000000 +1.000000000050000000000000000000 +1.000000000090000000000000000000 +1.000000000010000000000000000001 +1.000000000050000000000000000005 +1.000000000090000000000000000009 +1.100000000000000000000000000000 +1.100000000000000000000000000001 +1.100000000000000000000000000005 +1.100000000000000000000000000009 +1.100000000010000000000000000000 +1.100000000050000000000000000000 +1.100000000090000000000000000000 +1.100000000010000000000000000001 +1.100000000050000000000000000005 +1.100000000090000000000000000009 +1.900000000000000000000000000000 +1.900000000000000000000000000001 +1.900000000000000000000000000005 +1.900000000000000000000000000009 +1.900000000010000000000000000000 +1.900000000050000000000000000000 +1.900000000090000000000000000000 +1.900000000010000000000000000001 +1.900000000050000000000000000005 +1.900000000090000000000000000009 +9.000000000000000000000000000000 +9.000000000000000000000000000001 +9.000000000000000000000000000005 +9.000000000000000000000000000009 +9.000000000010000000000000000000 +9.000000000050000000000000000000 +9.000000000090000000000000000000 +9.000000000010000000000000000001 +9.000000000050000000000000000005 +9.000000000090000000000000000009 +9.100000000000000000000000000000 +9.100000000000000000000000000001 +9.100000000000000000000000000005 +9.100000000000000000000000000009 +9.100000000010000000000000000000 +9.100000000050000000000000000000 +9.100000000090000000000000000000 +9.100000000010000000000000000001 +9.100000000050000000000000000005 +9.100000000090000000000000000009 +9.900000000000000000000000000000 +9.900000000000000000000000000001 +9.900000000000000000000000000005 +9.900000000000000000000000000009 +9.900000000010000000000000000000 +9.900000000050000000000000000000 +9.900000000090000000000000000000 +9.900000000010000000000000000001 +9.900000000050000000000000000005 +9.900000000090000000000000000009 +10000.000000000000000000000000000000 +10000.000000000000000000000000000001 +10000.000000000000000000000000000005 +10000.000000000000000000000000000009 +10000.000000000000000100000000000000 +10000.000000000000000500000000000000 +10000.000000000000000900000000000000 +10000.000000000000000100000000000001 +10000.000000000000000500000000000005 +10000.000000000000000900000000000009 +10000.100000000000000000000000000000 +10000.100000000000000000000000000001 +10000.100000000000000000000000000005 +10000.100000000000000000000000000009 +10000.100000000000000100000000000000 +10000.100000000000000500000000000000 +10000.100000000000000900000000000000 +10000.100000000000000100000000000001 +10000.500000000000000500000000000005 +10000.900000000000000900000000000009 +10001.000000000000000000000000000000 +10001.000000000000000000000000000001 +10001.000000000000000000000000000005 +10001.000000000000000000000000000009 +10001.000000000000000100000000000000 +10001.000000000000000500000000000000 +10001.000000000000000900000000000000 +10001.000000000000000100000000000001 +10001.000000000000000500000000000005 +10001.000000000000000900000000000009 +10001.100000000000000000000000000000 +10001.100000000000000000000000000001 +10001.100000000000000000000000000005 +10001.100000000000000000000000000009 +10001.100000000000000100000000000000 +10001.100000000000000500000000000000 +10001.100000000000000900000000000000 +10001.100000000000000100000000000001 +10001.500000000000000500000000000005 +10001.900000000000000900000000000009 +10500.000000000000000000000000000000 +10500.000000000000000000000000000001 +10500.000000000000000000000000000005 +10500.000000000000000000000000000009 +10500.000000000000000100000000000000 +10500.000000000000000500000000000000 +10500.000000000000000900000000000000 +10500.000000000000000100000000000001 +10500.000000000000000500000000000005 +10500.000000000000000900000000000009 +10500.100000000000000000000000000000 +10500.100000000000000000000000000001 +10500.100000000000000000000000000005 +10500.100000000000000000000000000009 +10500.100000000000000100000000000000 +10500.100000000000000500000000000000 +10500.100000000000000900000000000000 +10500.100000000000000100000000000001 +10500.500000000000000500000000000005 +10500.900000000000000900000000000009 +10509.000000000000000000000000000000 +10509.000000000000000000000000000001 +10509.000000000000000000000000000005 +10509.000000000000000000000000000009 +10509.000000000000000100000000000000 +10509.000000000000000500000000000000 +10509.000000000000000900000000000000 +10509.000000000000000100000000000001 +10509.000000000000000500000000000005 +10509.000000000000000900000000000009 +10509.100000000000000000000000000000 +10509.100000000000000000000000000001 +10509.100000000000000000000000000005 +10509.100000000000000000000000000009 +10509.100000000000000100000000000000 +10509.100000000000000500000000000000 +10509.100000000000000900000000000000 +10509.100000000000000100000000000001 +10509.500000000000000500000000000005 +10509.900000000000000900000000000009 +50000.000000000000000000000000000000 +50000.000000000000000000000000000001 +50000.000000000000000000000000000005 +50000.000000000000000000000000000009 +50000.000000000000000100000000000000 +50000.000000000000000500000000000000 +50000.000000000000000900000000000000 +50000.000000000000000100000000000001 +50000.000000000000000500000000000005 +50000.000000000000000900000000000009 +50000.100000000000000000000000000000 +50000.100000000000000000000000000001 +50000.100000000000000000000000000005 +50000.100000000000000000000000000009 +50000.100000000000000100000000000000 +50000.100000000000000500000000000000 +50000.100000000000000900000000000000 +50000.100000000000000100000000000001 +50000.500000000000000500000000000005 +50000.900000000000000900000000000009 +90000.000000000000000000000000000000 +90000.000000000000000000000000000001 +90000.000000000000000000000000000005 +90000.000000000000000000000000000009 +90000.000000000000000100000000000000 +90000.000000000000000500000000000000 +90000.000000000000000900000000000000 +90000.000000000000000100000000000001 +90000.000000000000000500000000000005 +90000.000000000000000900000000000009 +90000.100000000000000000000000000000 +90000.100000000000000000000000000001 +90000.100000000000000000000000000005 +90000.100000000000000000000000000009 +90000.100000000000000100000000000000 +90000.100000000000000500000000000000 +90000.100000000000000900000000000000 +90000.100000000000000100000000000001 +90000.500000000000000500000000000005 +90000.900000000000000900000000000009 +44444.444444444444444444444444444444 +49999.999999999999999999999999999999 +55555.555555555555555555555555555555 +99999.999999999999999999999999999999 +0.000000000000000000000000000000 +0.000000000000000000000000000000 +0.000000000000000000000000000000 +0.000000000000000000000000000000 +-1.000000000000000000000000000000 +-2.000000000000000000000000000000 +-3.000000000000000000000000000000 +-4.000000000000000000000000000000 +-5.000000000000000000000000000000 +-6.000000000000000000000000000000 +-7.000000000000000000000000000000 +-8.000000000000000000000000000000 +-9.000000000000000000000000000000 +-1.000000000000000000000000000000 +-2.000000000000000000000000000000 +-3.000000000000000000000000000000 +-4.000000000000000000000000000000 +-5.000000000000000000000000000000 +-6.000000000000000000000000000000 +-7.000000000000000000000000000000 +-8.000000000000000000000000000000 +-9.000000000000000000000000000000 +0.000000000000000000000000000000 +-0.444444444444444444444444444444 +-0.999999999999999999999999999999 +-0.000000000000000000000000000001 +-0.000000000000000000000000000005 +-0.000000000000000000000000000009 +-0.000000000010000000000000000000 +-0.000000000050000000000000000000 +-0.000000000090000000000000000000 +-0.000000000010000000000000000001 +-0.000000000050000000000000000005 +-0.000000000090000000000000000009 +-0.100000000000000000000000000000 +-0.100000000000000000000000000001 +-0.100000000000000000000000000005 +-0.100000000000000000000000000009 +-0.100000000010000000000000000000 +-0.100000000050000000000000000000 +-0.100000000090000000000000000000 +-0.100000000010000000000000000001 +-0.100000000050000000000000000005 +-0.100000000090000000000000000009 +-0.900000000000000000000000000000 +-0.900000000000000000000000000001 +-0.900000000000000000000000000005 +-0.900000000000000000000000000009 +-0.900000000010000000000000000000 +-0.900000000050000000000000000000 +-0.900000000090000000000000000000 +-0.900000000010000000000000000001 +-0.900000000050000000000000000005 +-0.900000000090000000000000000009 +-1.000000000000000000000000000000 +-1.000000000000000000000000000001 +-1.000000000000000000000000000005 +-1.000000000000000000000000000009 +-1.000000000010000000000000000000 +-1.000000000050000000000000000000 +-1.000000000090000000000000000000 +-1.000000000010000000000000000001 +-1.000000000050000000000000000005 +-1.000000000090000000000000000009 +-1.100000000000000000000000000000 +-1.100000000000000000000000000001 +-1.100000000000000000000000000005 +-1.100000000000000000000000000009 +-1.100000000010000000000000000000 +-1.100000000050000000000000000000 +-1.100000000090000000000000000000 +-1.100000000010000000000000000001 +-1.100000000050000000000000000005 +-1.100000000090000000000000000009 +-1.900000000000000000000000000000 +-1.900000000000000000000000000001 +-1.900000000000000000000000000005 +-1.900000000000000000000000000009 +-1.900000000010000000000000000000 +-1.900000000050000000000000000000 +-1.900000000090000000000000000000 +-1.900000000010000000000000000001 +-1.900000000050000000000000000005 +-1.900000000090000000000000000009 +-9.000000000000000000000000000000 +-9.000000000000000000000000000001 +-9.000000000000000000000000000005 +-9.000000000000000000000000000009 +-9.000000000010000000000000000000 +-9.000000000050000000000000000000 +-9.000000000090000000000000000000 +-9.000000000010000000000000000001 +-9.000000000050000000000000000005 +-9.000000000090000000000000000009 +-9.100000000000000000000000000000 +-9.100000000000000000000000000001 +-9.100000000000000000000000000005 +-9.100000000000000000000000000009 +-9.100000000010000000000000000000 +-9.100000000050000000000000000000 +-9.100000000090000000000000000000 +-9.100000000010000000000000000001 +-9.100000000050000000000000000005 +-9.100000000090000000000000000009 +-9.900000000000000000000000000000 +-9.900000000000000000000000000001 +-9.900000000000000000000000000005 +-9.900000000000000000000000000009 +-9.900000000010000000000000000000 +-9.900000000050000000000000000000 +-9.900000000090000000000000000000 +-9.900000000010000000000000000001 +-9.900000000050000000000000000005 +-9.900000000090000000000000000009 +-10000000.000000000000000000000000000000 +-10000000.000000000000000000000000000001 +-10000000.000000000000000000000000000005 +-10000000.000000000000000000000000000009 +-10000000.000000000000000100000000000000 +-10000000.000000000000000500000000000000 +-10000000.000000000000000900000000000000 +-10000000.000000000000000100000000000001 +-10000000.000000000000000500000000000005 +-10000000.000000000000000900000000000009 +-10000000.100000000000000000000000000000 +-10000000.100000000000000000000000000001 +-10000000.100000000000000000000000000005 +-10000000.100000000000000000000000000009 +-10000000.100000000000000100000000000000 +-10000000.100000000000000500000000000000 +-10000000.100000000000000900000000000000 +-10000000.100000000000000100000000000001 +-10000000.500000000000000500000000000005 +-10000000.900000000000000900000000000009 +-10000001.000000000000000000000000000000 +-10000001.000000000000000000000000000001 +-10000001.000000000000000000000000000005 +-10000001.000000000000000000000000000009 +-10000001.000000000000000100000000000000 +-10000001.000000000000000500000000000000 +-10000001.000000000000000900000000000000 +-10000001.000000000000000100000000000001 +-10000001.000000000000000500000000000005 +-10000001.000000000000000900000000000009 +-10000001.100000000000000000000000000000 +-10000001.100000000000000000000000000001 +-10000001.100000000000000000000000000005 +-10000001.100000000000000000000000000009 +-10000001.100000000000000100000000000000 +-10000001.100000000000000500000000000000 +-10000001.100000000000000900000000000000 +-10000001.100000000000000100000000000001 +-10000001.500000000000000500000000000005 +-10000001.900000000000000900000000000009 +-10000500.000000000000000000000000000000 +-10000500.000000000000000000000000000001 +-10000500.000000000000000000000000000005 +-10000500.000000000000000000000000000009 +-10000500.000000000000000100000000000000 +-10000500.000000000000000500000000000000 +-10000500.000000000000000900000000000000 +-10000500.000000000000000100000000000001 +-10000500.000000000000000500000000000005 +-10000500.000000000000000900000000000009 +-10000500.100000000000000000000000000000 +-10000500.100000000000000000000000000001 +-10000500.100000000000000000000000000005 +-10000500.100000000000000000000000000009 +-10000500.100000000000000100000000000000 +-10000500.100000000000000500000000000000 +-10000500.100000000000000900000000000000 +-10000500.100000000000000100000000000001 +-10000500.500000000000000500000000000005 +-10000500.900000000000000900000000000009 +-10000509.000000000000000000000000000000 +-10000509.000000000000000000000000000001 +-10000509.000000000000000000000000000005 +-10000509.000000000000000000000000000009 +-10000509.000000000000000100000000000000 +-10000509.000000000000000500000000000000 +-10000509.000000000000000900000000000000 +-10000509.000000000000000100000000000001 +-10000509.000000000000000500000000000005 +-10000509.000000000000000900000000000009 +-10000509.100000000000000000000000000000 +-10000509.100000000000000000000000000001 +-10000509.100000000000000000000000000005 +-10000509.100000000000000000000000000009 +-10000509.100000000000000100000000000000 +-10000509.100000000000000500000000000000 +-10000509.100000000000000900000000000000 +-10000509.100000000000000100000000000001 +-10000509.500000000000000500000000000005 +-10000509.900000000000000900000000000009 +-50000000.000000000000000000000000000000 +-50000000.000000000000000000000000000001 +-50000000.000000000000000000000000000005 +-50000000.000000000000000000000000000009 +-50000000.000000000000000100000000000000 +-50000000.000000000000000500000000000000 +-50000000.000000000000000900000000000000 +-50000000.000000000000000100000000000001 +-50000000.000000000000000500000000000005 +-50000000.000000000000000900000000000009 +-50000000.100000000000000000000000000000 +-50000000.100000000000000000000000000001 +-50000000.100000000000000000000000000005 +-50000000.100000000000000000000000000009 +-50000000.100000000000000100000000000000 +-50000000.100000000000000500000000000000 +-50000000.100000000000000900000000000000 +-50000000.100000000000000100000000000001 +-50000000.500000000000000500000000000005 +-50000000.900000000000000900000000000009 +-90000000.000000000000000000000000000000 +-90000000.000000000000000000000000000001 +-90000000.000000000000000000000000000005 +-90000000.000000000000000000000000000009 +-90000000.000000000000000100000000000000 +-90000000.000000000000000500000000000000 +-90000000.000000000000000900000000000000 +-90000000.000000000000000100000000000001 +-90000000.000000000000000500000000000005 +-90000000.000000000000000900000000000009 +-90000000.100000000000000000000000000000 +-90000000.100000000000000000000000000001 +-90000000.100000000000000000000000000005 +-90000000.100000000000000000000000000009 +-90000000.100000000000000100000000000000 +-90000000.100000000000000500000000000000 +-90000000.100000000000000900000000000000 +-90000000.100000000000000100000000000001 +-90000000.500000000000000500000000000005 +-90000000.900000000000000900000000000009 +-44444444.444444444444444444444444444444 +-49999999.999999999999999999999999999999 +-55555555.555555555555555555555555555555 +-99999999.999999999999999999999999999999 +0.000000000000000000000000000000 +-0.444444444444444444444444444000 +-0.999999999999999999999999999000 +-0.000000000000000000000000001000 +-0.000000000000000000000000005000 +-0.000000000000000000000000009000 +-0.000000010000000000000000000000 +-0.000000050000000000000000000000 +-0.000000090000000000000000000000 +-0.000000010000000000000000001000 +-0.000000050000000000000000005000 +-0.000000090000000000000000009000 +-0.100000000000000000000000000000 +-0.100000000000000000000000001000 +-0.100000000000000000000000005000 +-0.100000000000000000000000009000 +-0.100000010000000000000000000000 +-0.100000050000000000000000000000 +-0.100000090000000000000000000000 +-0.100000010000000000000000001000 +-0.100000050000000000000000005000 +-0.100000090000000000000000009000 +-0.900000000000000000000000000000 +-0.900000000000000000000000001000 +-0.900000000000000000000000005000 +-0.900000000000000000000000009000 +-0.900000010000000000000000000000 +-0.900000050000000000000000000000 +-0.900000090000000000000000000000 +-0.900000010000000000000000001000 +-0.900000050000000000000000005000 +-0.900000090000000000000000009000 +-1.000000000000000000000000000000 +-1.000000000000000000000000001000 +-1.000000000000000000000000005000 +-1.000000000000000000000000009000 +-1.000000010000000000000000000000 +-1.000000050000000000000000000000 +-1.000000090000000000000000000000 +-1.000000010000000000000000001000 +-1.000000050000000000000000005000 +-1.000000090000000000000000009000 +-1.100000000000000000000000000000 +-1.100000000000000000000000001000 +-1.100000000000000000000000005000 +-1.100000000000000000000000009000 +-1.100000010000000000000000000000 +-1.100000050000000000000000000000 +-1.100000090000000000000000000000 +-1.100000010000000000000000001000 +-1.100000050000000000000000005000 +-1.100000090000000000000000009000 +-1.900000000000000000000000000000 +-1.900000000000000000000000001000 +-1.900000000000000000000000005000 +-1.900000000000000000000000009000 +-1.900000010000000000000000000000 +-1.900000050000000000000000000000 +-1.900000090000000000000000000000 +-1.900000010000000000000000001000 +-1.900000050000000000000000005000 +-1.900000090000000000000000009000 +-9.000000000000000000000000000000 +-9.000000000000000000000000001000 +-9.000000000000000000000000005000 +-9.000000000000000000000000009000 +-9.000000010000000000000000000000 +-9.000000050000000000000000000000 +-9.000000090000000000000000000000 +-9.000000010000000000000000001000 +-9.000000050000000000000000005000 +-9.000000090000000000000000009000 +-9.100000000000000000000000000000 +-9.100000000000000000000000001000 +-9.100000000000000000000000005000 +-9.100000000000000000000000009000 +-9.100000010000000000000000000000 +-9.100000050000000000000000000000 +-9.100000090000000000000000000000 +-9.100000010000000000000000001000 +-9.100000050000000000000000005000 +-9.100000090000000000000000009000 +-9.900000000000000000000000000000 +-9.900000000000000000000000001000 +-9.900000000000000000000000005000 +-9.900000000000000000000000009000 +-9.900000010000000000000000000000 +-9.900000050000000000000000000000 +-9.900000090000000000000000000000 +-9.900000010000000000000000001000 +-9.900000050000000000000000005000 +-9.900000090000000000000000009000 +-10000000.000000000000000000000000000000 +-10000000.000000000000000000000000001000 +-10000000.000000000000000000000000005000 +-10000000.000000000000000000000000009000 +-10000000.000000000000100000000000000000 +-10000000.000000000000500000000000000000 +-10000000.000000000000900000000000000000 +-10000000.000000000000100000000000001000 +-10000000.000000000000500000000000005000 +-10000000.000000000000900000000000009000 +-10000000.100000000000000000000000000000 +-10000000.100000000000000000000000001000 +-10000000.100000000000000000000000005000 +-10000000.100000000000000000000000009000 +-10000000.100000000000100000000000000000 +-10000000.100000000000500000000000000000 +-10000000.100000000000900000000000000000 +-10000000.100000000000100000000000001000 +-10000000.500000000000500000000000005000 +-10000000.900000000000900000000000009000 +-10000001.000000000000000000000000000000 +-10000001.000000000000000000000000001000 +-10000001.000000000000000000000000005000 +-10000001.000000000000000000000000009000 +-10000001.000000000000100000000000000000 +-10000001.000000000000500000000000000000 +-10000001.000000000000900000000000000000 +-10000001.000000000000100000000000001000 +-10000001.000000000000500000000000005000 +-10000001.000000000000900000000000009000 +-10000001.100000000000000000000000000000 +-10000001.100000000000000000000000001000 +-10000001.100000000000000000000000005000 +-10000001.100000000000000000000000009000 +-10000001.100000000000100000000000000000 +-10000001.100000000000500000000000000000 +-10000001.100000000000900000000000000000 +-10000001.100000000000100000000000001000 +-10000001.500000000000500000000000005000 +-10000001.900000000000900000000000009000 +-10000500.000000000000000000000000000000 +-10000500.000000000000000000000000001000 +-10000500.000000000000000000000000005000 +-10000500.000000000000000000000000009000 +-10000500.000000000000100000000000000000 +-10000500.000000000000500000000000000000 +-10000500.000000000000900000000000000000 +-10000500.000000000000100000000000001000 +-10000500.000000000000500000000000005000 +-10000500.000000000000900000000000009000 +-10000500.100000000000000000000000000000 +-10000500.100000000000000000000000001000 +-10000500.100000000000000000000000005000 +-10000500.100000000000000000000000009000 +-10000500.100000000000100000000000000000 +-10000500.100000000000500000000000000000 +-10000500.100000000000900000000000000000 +-10000500.100000000000100000000000001000 +-10000500.500000000000500000000000005000 +-10000500.900000000000900000000000009000 +-10000509.000000000000000000000000000000 +-10000509.000000000000000000000000001000 +-10000509.000000000000000000000000005000 +-10000509.000000000000000000000000009000 +-10000509.000000000000100000000000000000 +-10000509.000000000000500000000000000000 +-10000509.000000000000900000000000000000 +-10000509.000000000000100000000000001000 +-10000509.000000000000500000000000005000 +-10000509.000000000000900000000000009000 +-10000509.100000000000000000000000000000 +-10000509.100000000000000000000000001000 +-10000509.100000000000000000000000005000 +-10000509.100000000000000000000000009000 +-10000509.100000000000100000000000000000 +-10000509.100000000000500000000000000000 +-10000509.100000000000900000000000000000 +-10000509.100000000000100000000000001000 +-10000509.500000000000500000000000005000 +-10000509.900000000000900000000000009000 +-50000000.000000000000000000000000000000 +-50000000.000000000000000000000000001000 +-50000000.000000000000000000000000005000 +-50000000.000000000000000000000000009000 +-50000000.000000000000100000000000000000 +-50000000.000000000000500000000000000000 +-50000000.000000000000900000000000000000 +-50000000.000000000000100000000000001000 +-50000000.000000000000500000000000005000 +-50000000.000000000000900000000000009000 +-50000000.100000000000000000000000000000 +-50000000.100000000000000000000000001000 +-50000000.100000000000000000000000005000 +-50000000.100000000000000000000000009000 +-50000000.100000000000100000000000000000 +-50000000.100000000000500000000000000000 +-50000000.100000000000900000000000000000 +-50000000.100000000000100000000000001000 +-50000000.500000000000500000000000005000 +-50000000.900000000000900000000000009000 +-90000000.000000000000000000000000000000 +-90000000.000000000000000000000000001000 +-90000000.000000000000000000000000005000 +-90000000.000000000000000000000000009000 +-90000000.000000000000100000000000000000 +-90000000.000000000000500000000000000000 +-90000000.000000000000900000000000000000 +-90000000.000000000000100000000000001000 +-90000000.000000000000500000000000005000 +-90000000.000000000000900000000000009000 +-90000000.100000000000000000000000000000 +-90000000.100000000000000000000000001000 +-90000000.100000000000000000000000005000 +-90000000.100000000000000000000000009000 +-90000000.100000000000100000000000000000 +-90000000.100000000000500000000000000000 +-90000000.100000000000900000000000000000 +-90000000.100000000000100000000000001000 +-90000000.500000000000500000000000005000 +-90000000.900000000000900000000000009000 +-44444444.444444444444444444444444444000 +-49999999.999999999999999999999999999000 +-55555555.555555555555555555555555555000 +-99999999.999999999999999999999999999000 +0.000000000000000000000000000000 +-0.444444444444444444444444444444 +-0.999999999999999999999999999999 +-0.000000000000000000000000000001 +-0.000000000000000000000000000005 +-0.000000000000000000000000000009 +-0.000000000010000000000000000000 +-0.000000000050000000000000000000 +-0.000000000090000000000000000000 +-0.000000000010000000000000000001 +-0.000000000050000000000000000005 +-0.000000000090000000000000000009 +-0.100000000000000000000000000000 +-0.100000000000000000000000000001 +-0.100000000000000000000000000005 +-0.100000000000000000000000000009 +-0.100000000010000000000000000000 +-0.100000000050000000000000000000 +-0.100000000090000000000000000000 +-0.100000000010000000000000000001 +-0.100000000050000000000000000005 +-0.100000000090000000000000000009 +-0.900000000000000000000000000000 +-0.900000000000000000000000000001 +-0.900000000000000000000000000005 +-0.900000000000000000000000000009 +-0.900000000010000000000000000000 +-0.900000000050000000000000000000 +-0.900000000090000000000000000000 +-0.900000000010000000000000000001 +-0.900000000050000000000000000005 +-0.900000000090000000000000000009 +-1.000000000000000000000000000000 +-1.000000000000000000000000000001 +-1.000000000000000000000000000005 +-1.000000000000000000000000000009 +-1.000000000010000000000000000000 +-1.000000000050000000000000000000 +-1.000000000090000000000000000000 +-1.000000000010000000000000000001 +-1.000000000050000000000000000005 +-1.000000000090000000000000000009 +-1.100000000000000000000000000000 +-1.100000000000000000000000000001 +-1.100000000000000000000000000005 +-1.100000000000000000000000000009 +-1.100000000010000000000000000000 +-1.100000000050000000000000000000 +-1.100000000090000000000000000000 +-1.100000000010000000000000000001 +-1.100000000050000000000000000005 +-1.100000000090000000000000000009 +-1.900000000000000000000000000000 +-1.900000000000000000000000000001 +-1.900000000000000000000000000005 +-1.900000000000000000000000000009 +-1.900000000010000000000000000000 +-1.900000000050000000000000000000 +-1.900000000090000000000000000000 +-1.900000000010000000000000000001 +-1.900000000050000000000000000005 +-1.900000000090000000000000000009 +-9.000000000000000000000000000000 +-9.000000000000000000000000000001 +-9.000000000000000000000000000005 +-9.000000000000000000000000000009 +-9.000000000010000000000000000000 +-9.000000000050000000000000000000 +-9.000000000090000000000000000000 +-9.000000000010000000000000000001 +-9.000000000050000000000000000005 +-9.000000000090000000000000000009 +-9.100000000000000000000000000000 +-9.100000000000000000000000000001 +-9.100000000000000000000000000005 +-9.100000000000000000000000000009 +-9.100000000010000000000000000000 +-9.100000000050000000000000000000 +-9.100000000090000000000000000000 +-9.100000000010000000000000000001 +-9.100000000050000000000000000005 +-9.100000000090000000000000000009 +-9.900000000000000000000000000000 +-9.900000000000000000000000000001 +-9.900000000000000000000000000005 +-9.900000000000000000000000000009 +-9.900000000010000000000000000000 +-9.900000000050000000000000000000 +-9.900000000090000000000000000000 +-9.900000000010000000000000000001 +-9.900000000050000000000000000005 +-9.900000000090000000000000000009 +-10000.000000000000000000000000000000 +-10000.000000000000000000000000000001 +-10000.000000000000000000000000000005 +-10000.000000000000000000000000000009 +-10000.000000000000000100000000000000 +-10000.000000000000000500000000000000 +-10000.000000000000000900000000000000 +-10000.000000000000000100000000000001 +-10000.000000000000000500000000000005 +-10000.000000000000000900000000000009 +-10000.100000000000000000000000000000 +-10000.100000000000000000000000000001 +-10000.100000000000000000000000000005 +-10000.100000000000000000000000000009 +-10000.100000000000000100000000000000 +-10000.100000000000000500000000000000 +-10000.100000000000000900000000000000 +-10000.100000000000000100000000000001 +-10000.500000000000000500000000000005 +-10000.900000000000000900000000000009 +-10001.000000000000000000000000000000 +-10001.000000000000000000000000000001 +-10001.000000000000000000000000000005 +-10001.000000000000000000000000000009 +-10001.000000000000000100000000000000 +-10001.000000000000000500000000000000 +-10001.000000000000000900000000000000 +-10001.000000000000000100000000000001 +-10001.000000000000000500000000000005 +-10001.000000000000000900000000000009 +-10001.100000000000000000000000000000 +-10001.100000000000000000000000000001 +-10001.100000000000000000000000000005 +-10001.100000000000000000000000000009 +-10001.100000000000000100000000000000 +-10001.100000000000000500000000000000 +-10001.100000000000000900000000000000 +-10001.100000000000000100000000000001 +-10001.500000000000000500000000000005 +-10001.900000000000000900000000000009 +-10500.000000000000000000000000000000 +-10500.000000000000000000000000000001 +-10500.000000000000000000000000000005 +-10500.000000000000000000000000000009 +-10500.000000000000000100000000000000 +-10500.000000000000000500000000000000 +-10500.000000000000000900000000000000 +-10500.000000000000000100000000000001 +-10500.000000000000000500000000000005 +-10500.000000000000000900000000000009 +-10500.100000000000000000000000000000 +-10500.100000000000000000000000000001 +-10500.100000000000000000000000000005 +-10500.100000000000000000000000000009 +-10500.100000000000000100000000000000 +-10500.100000000000000500000000000000 +-10500.100000000000000900000000000000 +-10500.100000000000000100000000000001 +-10500.500000000000000500000000000005 +-10500.900000000000000900000000000009 +-10509.000000000000000000000000000000 +-10509.000000000000000000000000000001 +-10509.000000000000000000000000000005 +-10509.000000000000000000000000000009 +-10509.000000000000000100000000000000 +-10509.000000000000000500000000000000 +-10509.000000000000000900000000000000 +-10509.000000000000000100000000000001 +-10509.000000000000000500000000000005 +-10509.000000000000000900000000000009 +-10509.100000000000000000000000000000 +-10509.100000000000000000000000000001 +-10509.100000000000000000000000000005 +-10509.100000000000000000000000000009 +-10509.100000000000000100000000000000 +-10509.100000000000000500000000000000 +-10509.100000000000000900000000000000 +-10509.100000000000000100000000000001 +-10509.500000000000000500000000000005 +-10509.900000000000000900000000000009 +-50000.000000000000000000000000000000 +-50000.000000000000000000000000000001 +-50000.000000000000000000000000000005 +-50000.000000000000000000000000000009 +-50000.000000000000000100000000000000 +-50000.000000000000000500000000000000 +-50000.000000000000000900000000000000 +-50000.000000000000000100000000000001 +-50000.000000000000000500000000000005 +-50000.000000000000000900000000000009 +-50000.100000000000000000000000000000 +-50000.100000000000000000000000000001 +-50000.100000000000000000000000000005 +-50000.100000000000000000000000000009 +-50000.100000000000000100000000000000 +-50000.100000000000000500000000000000 +-50000.100000000000000900000000000000 +-50000.100000000000000100000000000001 +-50000.500000000000000500000000000005 +-50000.900000000000000900000000000009 +-90000.000000000000000000000000000000 +-90000.000000000000000000000000000001 +-90000.000000000000000000000000000005 +-90000.000000000000000000000000000009 +-90000.000000000000000100000000000000 +-90000.000000000000000500000000000000 +-90000.000000000000000900000000000000 +-90000.000000000000000100000000000001 +-90000.000000000000000500000000000005 +-90000.000000000000000900000000000009 +-90000.100000000000000000000000000000 +-90000.100000000000000000000000000001 +-90000.100000000000000000000000000005 +-90000.100000000000000000000000000009 +-90000.100000000000000100000000000000 +-90000.100000000000000500000000000000 +-90000.100000000000000900000000000000 +-90000.100000000000000100000000000001 +-90000.500000000000000500000000000005 +-90000.900000000000000900000000000009 +-44444.444444444444444444444444444444 +-49999.999999999999999999999999999999 +-55555.555555555555555555555555555555 +-99999.999999999999999999999999999999 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_38_38_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_38_38_get_field.out new file mode 100644 index 00000000000000..8b4671f36fdeae --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_38_38_get_field.out @@ -0,0 +1,202 @@ +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +0.10000000000000000000000000000000000000 +0.20000000000000000000000000000000000000 +0.30000000000000000000000000000000000000 +0.40000000000000000000000000000000000000 +0.50000000000000000000000000000000000000 +0.60000000000000000000000000000000000000 +0.70000000000000000000000000000000000000 +0.80000000000000000000000000000000000000 +0.90000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000001 +0.00000000000000000000000000000000000005 +0.00000000000000000000000000000000000009 +0.00000000000000000010000000000000000000 +0.00000000000000000050000000000000000000 +0.00000000000000000090000000000000000000 +0.00000000000000000010000000000000000001 +0.00000000000000000050000000000000000005 +0.00000000000000000090000000000000000009 +0.10000000000000000000000000000000000000 +0.10000000000000000000000000000000000001 +0.10000000000000000000000000000000000005 +0.10000000000000000000000000000000000009 +0.10000000000000000000000100000000000000 +0.10000000000000000000000500000000000000 +0.10000000000000000000000900000000000000 +0.10000000000000000000000100000000000001 +0.10000000000000000000000500000000000005 +0.10000000000000000000000900000000000009 +0.50000000000000000000000000000000000000 +0.50000000000000000000000000000000000001 +0.50000000000000000000000000000000000005 +0.50000000000000000000000000000000000009 +0.50000000000000000000000100000000000000 +0.50000000000000000000000500000000000000 +0.50000000000000000000000900000000000000 +0.50000000000000000000000100000000000001 +0.50000000000000000000000500000000000005 +0.50000000000000000000000900000000000009 +0.90000000000000000000000000000000000000 +0.90000000000000000000000000000000000001 +0.90000000000000000000000000000000000005 +0.90000000000000000000000000000000000009 +0.90000000000000000000000100000000000000 +0.90000000000000000000000500000000000000 +0.90000000000000000000000900000000000000 +0.90000000000000000000000100000000000001 +0.90000000000000000000000500000000000005 +0.90000000000000000000000900000000000009 +0.44444444444444444444444444444444444444 +0.49999999999999999999999999999999999999 +0.55555555555555555555555555555555555555 +0.99999999999999999999999999999999999999 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000010000 +0.00000000000000000000000000000000050000 +0.00000000000000000000000000000000090000 +0.00000000000000100000000000000000000000 +0.00000000000000500000000000000000000000 +0.00000000000000900000000000000000000000 +0.00000000000000100000000000000000010000 +0.00000000000000500000000000000000050000 +0.00000000000000900000000000000000090000 +0.10000000000000000000000000000000000000 +0.10000000000000000000000000000000010000 +0.10000000000000000000000000000000050000 +0.10000000000000000000000000000000090000 +0.10000000000000000001000000000000000000 +0.10000000000000000005000000000000000000 +0.10000000000000000009000000000000000000 +0.10000000000000000001000000000000010000 +0.10000000000000000005000000000000050000 +0.10000000000000000009000000000000090000 +0.50000000000000000000000000000000000000 +0.50000000000000000000000000000000010000 +0.50000000000000000000000000000000050000 +0.50000000000000000000000000000000090000 +0.50000000000000000001000000000000000000 +0.50000000000000000005000000000000000000 +0.50000000000000000009000000000000000000 +0.50000000000000000001000000000000010000 +0.50000000000000000005000000000000050000 +0.50000000000000000009000000000000090000 +0.90000000000000000000000000000000000000 +0.90000000000000000000000000000000010000 +0.90000000000000000000000000000000050000 +0.90000000000000000000000000000000090000 +0.90000000000000000001000000000000000000 +0.90000000000000000005000000000000000000 +0.90000000000000000009000000000000000000 +0.90000000000000000001000000000000010000 +0.90000000000000000005000000000000050000 +0.90000000000000000009000000000000090000 +0.44444444444444444444444444444444440000 +0.49999999999999999999999999999999990000 +0.55555555555555555555555555555555550000 +0.99999999999999999999999999999999990000 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +-0.10000000000000000000000000000000000000 +-0.20000000000000000000000000000000000000 +-0.30000000000000000000000000000000000000 +-0.40000000000000000000000000000000000000 +-0.50000000000000000000000000000000000000 +-0.60000000000000000000000000000000000000 +-0.70000000000000000000000000000000000000 +-0.80000000000000000000000000000000000000 +-0.90000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +-0.00000000000000000000000000000000000001 +-0.00000000000000000000000000000000000005 +-0.00000000000000000000000000000000000009 +-0.00000000000000000010000000000000000000 +-0.00000000000000000050000000000000000000 +-0.00000000000000000090000000000000000000 +-0.00000000000000000010000000000000000001 +-0.00000000000000000050000000000000000005 +-0.00000000000000000090000000000000000009 +-0.10000000000000000000000000000000000000 +-0.10000000000000000000000000000000000001 +-0.10000000000000000000000000000000000005 +-0.10000000000000000000000000000000000009 +-0.10000000000000000000000100000000000000 +-0.10000000000000000000000500000000000000 +-0.10000000000000000000000900000000000000 +-0.10000000000000000000000100000000000001 +-0.10000000000000000000000500000000000005 +-0.10000000000000000000000900000000000009 +-0.50000000000000000000000000000000000000 +-0.50000000000000000000000000000000000001 +-0.50000000000000000000000000000000000005 +-0.50000000000000000000000000000000000009 +-0.50000000000000000000000100000000000000 +-0.50000000000000000000000500000000000000 +-0.50000000000000000000000900000000000000 +-0.50000000000000000000000100000000000001 +-0.50000000000000000000000500000000000005 +-0.50000000000000000000000900000000000009 +-0.90000000000000000000000000000000000000 +-0.90000000000000000000000000000000000001 +-0.90000000000000000000000000000000000005 +-0.90000000000000000000000000000000000009 +-0.90000000000000000000000100000000000000 +-0.90000000000000000000000500000000000000 +-0.90000000000000000000000900000000000000 +-0.90000000000000000000000100000000000001 +-0.90000000000000000000000500000000000005 +-0.90000000000000000000000900000000000009 +-0.44444444444444444444444444444444444444 +-0.49999999999999999999999999999999999999 +-0.55555555555555555555555555555555555555 +-0.99999999999999999999999999999999999999 +0.00000000000000000000000000000000000000 +-0.00000000000000000000000000000000010000 +-0.00000000000000000000000000000000050000 +-0.00000000000000000000000000000000090000 +-0.00000000000000100000000000000000000000 +-0.00000000000000500000000000000000000000 +-0.00000000000000900000000000000000000000 +-0.00000000000000100000000000000000010000 +-0.00000000000000500000000000000000050000 +-0.00000000000000900000000000000000090000 +-0.10000000000000000000000000000000000000 +-0.10000000000000000000000000000000010000 +-0.10000000000000000000000000000000050000 +-0.10000000000000000000000000000000090000 +-0.10000000000000000001000000000000000000 +-0.10000000000000000005000000000000000000 +-0.10000000000000000009000000000000000000 +-0.10000000000000000001000000000000010000 +-0.10000000000000000005000000000000050000 +-0.10000000000000000009000000000000090000 +-0.50000000000000000000000000000000000000 +-0.50000000000000000000000000000000010000 +-0.50000000000000000000000000000000050000 +-0.50000000000000000000000000000000090000 +-0.50000000000000000001000000000000000000 +-0.50000000000000000005000000000000000000 +-0.50000000000000000009000000000000000000 +-0.50000000000000000001000000000000010000 +-0.50000000000000000005000000000000050000 +-0.50000000000000000009000000000000090000 +-0.90000000000000000000000000000000000000 +-0.90000000000000000000000000000000010000 +-0.90000000000000000000000000000000050000 +-0.90000000000000000000000000000000090000 +-0.90000000000000000001000000000000000000 +-0.90000000000000000005000000000000000000 +-0.90000000000000000009000000000000000000 +-0.90000000000000000001000000000000010000 +-0.90000000000000000005000000000000050000 +-0.90000000000000000009000000000000090000 +-0.44444444444444444444444444444444440000 +-0.49999999999999999999999999999999990000 +-0.55555555555555555555555555555555550000 +-0.99999999999999999999999999999999990000 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_76_0_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_76_0_get_field.out new file mode 100644 index 00000000000000..6ebfc4264462c5 --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_76_0_get_field.out @@ -0,0 +1,136 @@ +0 +0 +0 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +1 +2 +3 +4 +5 +6 +7 +8 +9 +0 +1 +5 +9 +10000000000000000000000 +50000000000000000000000 +90000000000000000000000 +10000000000000000000001 +50000000000000000000005 +90000000000000000000009 +1000000000000000000000000000000000000000000000000000000000000000000000000000 +5000000000000000000000000000000000000000000000000000000000000000000000000000 +9000000000000000000000000000000000000000000000000000000000000000000000000000 +1000000000000000000000000000000000000000000000000000000000000000000000000001 +5000000000000000000000000000000000000000000000000000000000000000000000000005 +9000000000000000000000000000000000000000000000000000000000000000000000000009 +1000000000000000000000000000000000000000000000000000000000000000000100000001 +5000000000000000000000000000000000000000000000000000000000000000000500000005 +9000000000000000000000000000000000000000000000000000000000000000000900000009 +4444444444444444444444444444444444444444444444444444444444444444444444444444 +4999999999999999999999999999999999999999999999999999999999999999999999999999 +5555555555555555555555555555555555555555555555555555555555555555555555555555 +9999999999999999999999999999999999999999999999999999999999999999999999999999 +0 +1 +5 +9 +10000000000000000000000 +50000000000000000000000 +90000000000000000000000 +10000000000000000000001 +50000000000000000000005 +90000000000000000000009 +1000000000000000000000000000000000000000000000000000000000000000000000000 +5000000000000000000000000000000000000000000000000000000000000000000000000 +9000000000000000000000000000000000000000000000000000000000000000000000000 +1000000000000000000000000000000000000000000000000000000000000000000000001 +5000000000000000000000000000000000000000000000000000000000000000000000005 +9000000000000000000000000000000000000000000000000000000000000000000000009 +1000000000000000000000000000000000000000000000000000000000000000100000001 +5000000000000000000000000000000000000000000000000000000000000000500000005 +9000000000000000000000000000000000000000000000000000000000000000900000009 +4444444444444444444444444444444444444444444444444444444444444444444444444 +4999999999999999999999999999999999999999999999999999999999999999999999999 +5555555555555555555555555555555555555555555555555555555555555555555555555 +9999999999999999999999999999999999999999999999999999999999999999999999999 +0 +0 +0 +0 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-8 +-9 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-8 +-9 +0 +-1 +-5 +-9 +-10000000000000000000000 +-50000000000000000000000 +-90000000000000000000000 +-10000000000000000000001 +-50000000000000000000005 +-90000000000000000000009 +-1000000000000000000000000000000000000000000000000000000000000000000000000000 +-5000000000000000000000000000000000000000000000000000000000000000000000000000 +-9000000000000000000000000000000000000000000000000000000000000000000000000000 +-1000000000000000000000000000000000000000000000000000000000000000000000000001 +-5000000000000000000000000000000000000000000000000000000000000000000000000005 +-9000000000000000000000000000000000000000000000000000000000000000000000000009 +-1000000000000000000000000000000000000000000000000000000000000000000100000001 +-5000000000000000000000000000000000000000000000000000000000000000000500000005 +-9000000000000000000000000000000000000000000000000000000000000000000900000009 +-4444444444444444444444444444444444444444444444444444444444444444444444444444 +-4999999999999999999999999999999999999999999999999999999999999999999999999999 +-5555555555555555555555555555555555555555555555555555555555555555555555555555 +-9999999999999999999999999999999999999999999999999999999999999999999999999999 +0 +-1 +-5 +-9 +-10000000000000000000000 +-50000000000000000000000 +-90000000000000000000000 +-10000000000000000000001 +-50000000000000000000005 +-90000000000000000000009 +-1000000000000000000000000000000000000000000000000000000000000000000000000 +-5000000000000000000000000000000000000000000000000000000000000000000000000 +-9000000000000000000000000000000000000000000000000000000000000000000000000 +-1000000000000000000000000000000000000000000000000000000000000000000000001 +-5000000000000000000000000000000000000000000000000000000000000000000000005 +-9000000000000000000000000000000000000000000000000000000000000000000000009 +-1000000000000000000000000000000000000000000000000000000000000000100000001 +-5000000000000000000000000000000000000000000000000000000000000000500000005 +-9000000000000000000000000000000000000000000000000000000000000000900000009 +-4444444444444444444444444444444444444444444444444444444444444444444444444 +-4999999999999999999999999999999999999999999999999999999999999999999999999 +-5555555555555555555555555555555555555555555555555555555555555555555555555 +-9999999999999999999999999999999999999999999999999999999999999999999999999 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_76_38_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_76_38_get_field.out new file mode 100644 index 00000000000000..835b31cc442c2f --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_76_38_get_field.out @@ -0,0 +1,544 @@ +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +1.00000000000000000000000000000000000000 +2.00000000000000000000000000000000000000 +3.00000000000000000000000000000000000000 +4.00000000000000000000000000000000000000 +5.00000000000000000000000000000000000000 +6.00000000000000000000000000000000000000 +7.00000000000000000000000000000000000000 +8.00000000000000000000000000000000000000 +9.00000000000000000000000000000000000000 +1.00000000000000000000000000000000000000 +2.00000000000000000000000000000000000000 +3.00000000000000000000000000000000000000 +4.00000000000000000000000000000000000000 +5.00000000000000000000000000000000000000 +6.00000000000000000000000000000000000000 +7.00000000000000000000000000000000000000 +8.00000000000000000000000000000000000000 +9.00000000000000000000000000000000000000 +0.10000000000000000000000000000000000000 +0.20000000000000000000000000000000000000 +0.30000000000000000000000000000000000000 +0.40000000000000000000000000000000000000 +0.50000000000000000000000000000000000000 +0.60000000000000000000000000000000000000 +0.70000000000000000000000000000000000000 +0.90000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000001 +0.00000000000000000000000000000000000005 +0.00000000000000000000000000000000000009 +0.00000000000000010000000000000000000000 +0.00000000000000050000000000000000000000 +0.00000000000000090000000000000000000000 +0.00000000000000010000000000000000000001 +0.00000000000000050000000000000000000005 +0.00000000000000090000000000000000000009 +0.10000000000000000000000000000000000000 +0.10000000000000000000000000000000000001 +0.10000000000000010000000000000000000001 +0.50000000000000050000000000000000000005 +0.90000000000000090000000000000000000009 +1.00000000000000000000000000000000000000 +1.00000000000000000000000000000000000001 +1.00000000000000000000000000000000000005 +1.00000000000000000000000000000000000009 +1.00000000000000010000000000000000000000 +1.00000000000000050000000000000000000000 +1.00000000000000090000000000000000000000 +1.00000000000000010000000000000000000001 +1.00000000000000050000000000000000000005 +1.00000000000000090000000000000000000009 +1.10000000000000010000000000000000000001 +1.50000000000000050000000000000000000005 +1.90000000000000090000000000000000000009 +10001.00000000000000000000000000000000000000 +10001.00000000000000000000000000000000000001 +10001.00000000000000000000000000000000000005 +10001.00000000000000000000000000000000000009 +10001.00000000000000010000000000000000000000 +10001.00000000000000050000000000000000000000 +10001.00000000000000090000000000000000000000 +10001.00000000000000010000000000000000000001 +10001.00000000000000050000000000000000000005 +10001.00000000000000090000000000000000000009 +10001.10000000000000010000000000000000000001 +10001.50000000000000050000000000000000000005 +10001.90000000000000090000000000000000000009 +10000000000000000000000000000000000000.00000000000000000000000000000000000000 +50000000000000000000000000000000000000.00000000000000000000000000000000000000 +90000000000000000000000000000000000000.00000000000000000000000000000000000000 +10000000000000000000000000000000000000.00000000000000000000000000000000000001 +50000000000000000000000000000000000000.00000000000000000000000000000000000005 +90000000000000000000000000000000000000.00000000000000000000000000000000000009 +10000000000000000000000000000000000000.00000000000000000000000000000100000001 +50000000000000000000000000000000000000.00000000000000000000000000000500000005 +90000000000000000000000000000000000000.00000000000000000000000000000900000009 +10000000000000000000000000000000000000.10000000000000000000000000000100000001 +50000000000000000000000000000000000000.50000000000000000000000000000500000005 +90000000000000000000000000000000000000.90000000000000000000000000000900000009 +10000000000000000000000000000000000001.00000000000000000000000000000000000000 +50000000000000000000000000000000000001.00000000000000000000000000000000000000 +90000000000000000000000000000000000001.00000000000000000000000000000000000000 +10000000000000000000000000000000000001.00000000000000000000000000000000000001 +50000000000000000000000000000000000001.00000000000000000000000000000000000005 +90000000000000000000000000000000000001.00000000000000000000000000000000000009 +10000000000000000000000000000000000001.00000000000000000000000000000100000001 +50000000000000000000000000000000000001.00000000000000000000000000000500000005 +90000000000000000000000000000000000001.00000000000000000000000000000900000009 +10000000000000000000000000000000000001.10000000000000000000000000000100000001 +50000000000000000000000000000000000001.50000000000000000000000000000500000005 +90000000000000000000000000000000000001.90000000000000000000000000000900000009 +10000000000000000000000000000000010001.00000000000000000000000000000000000000 +50000000000000000000000000000000010001.00000000000000000000000000000000000000 +90000000000000000000000000000000010001.00000000000000000000000000000000000000 +10000000000000000000000000000000010001.00000000000000000000000000000000000001 +50000000000000000000000000000000010001.00000000000000000000000000000000000005 +90000000000000000000000000000000010001.00000000000000000000000000000000000009 +10000000000000000000000000000000010001.00000000000000000000000000000100000001 +50000000000000000000000000000000010001.00000000000000000000000000000500000005 +90000000000000000000000000000000010001.00000000000000000000000000000900000009 +10000000000000000000000000000000010001.10000000000000000000000000000100000001 +50000000000000000000000000000000010001.50000000000000000000000000000500000005 +90000000000000000000000000000000010001.90000000000000000000000000000900000009 +44444444444444444444444444444444444444.44444444444444444444444444444444444444 +49999999999999999999999999999999999999.99999999999999999999999999999999999999 +55555555555555555555555555555555555555.55555555555555555555555555555555555555 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000001000 +0.00000000000000000000000000000000005000 +0.00000000000000000000000000000000009000 +0.00000000000010000000000000000000000000 +0.00000000000050000000000000000000000000 +0.00000000000090000000000000000000000000 +0.00000000000010000000000000000000001000 +0.00000000000050000000000000000000005000 +0.00000000000090000000000000000000009000 +0.10000000000000000000000000000000000000 +0.10000000000000000000000000000000001000 +0.10000000000010000000000000000000001000 +0.50000000000050000000000000000000005000 +0.90000000000090000000000000000000009000 +1.00000000000000000000000000000000000000 +1.00000000000000000000000000000000001000 +1.00000000000000000000000000000000005000 +1.00000000000000000000000000000000009000 +1.00000000000010000000000000000000000000 +1.00000000000050000000000000000000000000 +1.00000000000090000000000000000000000000 +1.00000000000010000000000000000000001000 +1.00000000000050000000000000000000005000 +1.00000000000090000000000000000000009000 +1.10000000000010000000000000000000001000 +1.50000000000050000000000000000000005000 +1.90000000000090000000000000000000009000 +10001.00000000000000000000000000000000000000 +10001.00000000000000000000000000000000001000 +10001.00000000000000000000000000000000005000 +10001.00000000000000000000000000000000009000 +10001.00000000000010000000000000000000000000 +10001.00000000000050000000000000000000000000 +10001.00000000000090000000000000000000000000 +10001.00000000000010000000000000000000001000 +10001.00000000000050000000000000000000005000 +10001.00000000000090000000000000000000009000 +10001.10000000000010000000000000000000001000 +10001.50000000000050000000000000000000005000 +10001.90000000000090000000000000000000009000 +10000000000000000000000000000000000000.00000000000000000000000000000000000000 +50000000000000000000000000000000000000.00000000000000000000000000000000000000 +90000000000000000000000000000000000000.00000000000000000000000000000000000000 +10000000000000000000000000000000000000.00000000000000000000000000000000001000 +50000000000000000000000000000000000000.00000000000000000000000000000000005000 +90000000000000000000000000000000000000.00000000000000000000000000000000009000 +10000000000000000000000000000000000000.00000000000000000000000000100000001000 +50000000000000000000000000000000000000.00000000000000000000000000500000005000 +90000000000000000000000000000000000000.00000000000000000000000000900000009000 +10000000000000000000000000000000000000.10000000000000000000000000100000001000 +50000000000000000000000000000000000000.50000000000000000000000000500000005000 +90000000000000000000000000000000000000.90000000000000000000000000900000009000 +10000000000000000000000000000000000001.00000000000000000000000000000000000000 +50000000000000000000000000000000000001.00000000000000000000000000000000000000 +90000000000000000000000000000000000001.00000000000000000000000000000000000000 +10000000000000000000000000000000000001.00000000000000000000000000000000001000 +50000000000000000000000000000000000001.00000000000000000000000000000000005000 +90000000000000000000000000000000000001.00000000000000000000000000000000009000 +10000000000000000000000000000000000001.00000000000000000000000000100000001000 +50000000000000000000000000000000000001.00000000000000000000000000500000005000 +90000000000000000000000000000000000001.00000000000000000000000000900000009000 +10000000000000000000000000000000000001.10000000000000000000000000100000001000 +50000000000000000000000000000000000001.50000000000000000000000000500000005000 +90000000000000000000000000000000000001.90000000000000000000000000900000009000 +10000000000000000000000000000000010001.00000000000000000000000000000000000000 +50000000000000000000000000000000010001.00000000000000000000000000000000000000 +90000000000000000000000000000000010001.00000000000000000000000000000000000000 +10000000000000000000000000000000010001.00000000000000000000000000000000001000 +50000000000000000000000000000000010001.00000000000000000000000000000000005000 +90000000000000000000000000000000010001.00000000000000000000000000000000009000 +10000000000000000000000000000000010001.00000000000000000000000000100000001000 +50000000000000000000000000000000010001.00000000000000000000000000500000005000 +90000000000000000000000000000000010001.00000000000000000000000000900000009000 +10000000000000000000000000000000010001.10000000000000000000000000100000001000 +50000000000000000000000000000000010001.50000000000000000000000000500000005000 +90000000000000000000000000000000010001.90000000000000000000000000900000009000 +44444444444444444444444444444444444444.44444444444444444444444444444444444000 +49999999999999999999999999999999999999.99999999999999999999999999999999999000 +55555555555555555555555555555555555555.55555555555555555555555555555555555000 +99999999999999999999999999999999999999.99999999999999999999999999999999999000 +99999999999999999999999999999999999999.99999999999999999999999999999999999000 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000001 +0.00000000000000000000000000000000000005 +0.00000000000000000000000000000000000009 +0.00000000000000010000000000000000000000 +0.00000000000000050000000000000000000000 +0.00000000000000090000000000000000000000 +0.00000000000000010000000000000000000001 +0.00000000000000050000000000000000000005 +0.00000000000000090000000000000000000009 +0.10000000000000000000000000000000000000 +0.10000000000000000000000000000000000001 +0.10000000000000010000000000000000000001 +0.50000000000000050000000000000000000005 +0.90000000000000090000000000000000000009 +1.00000000000000000000000000000000000000 +1.00000000000000000000000000000000000001 +1.00000000000000000000000000000000000005 +1.00000000000000000000000000000000000009 +1.00000000000000010000000000000000000000 +1.00000000000000050000000000000000000000 +1.00000000000000090000000000000000000000 +1.00000000000000010000000000000000000001 +1.00000000000000050000000000000000000005 +1.00000000000000090000000000000000000009 +1.10000000000000010000000000000000000001 +1.50000000000000050000000000000000000005 +1.90000000000000090000000000000000000009 +10001.00000000000000000000000000000000000000 +10001.00000000000000000000000000000000000001 +10001.00000000000000000000000000000000000005 +10001.00000000000000000000000000000000000009 +10001.00000000000000010000000000000000000000 +10001.00000000000000050000000000000000000000 +10001.00000000000000090000000000000000000000 +10001.00000000000000010000000000000000000001 +10001.00000000000000050000000000000000000005 +10001.00000000000000090000000000000000000009 +10001.10000000000000010000000000000000000001 +10001.50000000000000050000000000000000000005 +10001.90000000000000090000000000000000000009 +10000000000000000000000000000000000.00000000000000000000000000000000000000 +50000000000000000000000000000000000.00000000000000000000000000000000000000 +90000000000000000000000000000000000.00000000000000000000000000000000000000 +10000000000000000000000000000000000.00000000000000000000000000000000000001 +50000000000000000000000000000000000.00000000000000000000000000000000000005 +90000000000000000000000000000000000.00000000000000000000000000000000000009 +10000000000000000000000000000000000.00000000000000000000000000000100000001 +50000000000000000000000000000000000.00000000000000000000000000000500000005 +90000000000000000000000000000000000.00000000000000000000000000000900000009 +10000000000000000000000000000000000.10000000000000000000000000000100000001 +50000000000000000000000000000000000.50000000000000000000000000000500000005 +90000000000000000000000000000000000.90000000000000000000000000000900000009 +10000000000000000000000000000000001.00000000000000000000000000000000000000 +50000000000000000000000000000000001.00000000000000000000000000000000000000 +90000000000000000000000000000000001.00000000000000000000000000000000000000 +10000000000000000000000000000000001.00000000000000000000000000000000000001 +50000000000000000000000000000000001.00000000000000000000000000000000000005 +90000000000000000000000000000000001.00000000000000000000000000000000000009 +10000000000000000000000000000000001.00000000000000000000000000000100000001 +50000000000000000000000000000000001.00000000000000000000000000000500000005 +90000000000000000000000000000000001.00000000000000000000000000000900000009 +10000000000000000000000000000000001.10000000000000000000000000000100000001 +50000000000000000000000000000000001.50000000000000000000000000000500000005 +90000000000000000000000000000000001.90000000000000000000000000000900000009 +10000000000000000000000000000010001.00000000000000000000000000000000000000 +50000000000000000000000000000010001.00000000000000000000000000000000000000 +90000000000000000000000000000010001.00000000000000000000000000000000000000 +10000000000000000000000000000010001.00000000000000000000000000000000000001 +50000000000000000000000000000010001.00000000000000000000000000000000000005 +90000000000000000000000000000010001.00000000000000000000000000000000000009 +10000000000000000000000000000010001.00000000000000000000000000000100000001 +50000000000000000000000000000010001.00000000000000000000000000000500000005 +90000000000000000000000000000010001.00000000000000000000000000000900000009 +10000000000000000000000000000010001.10000000000000000000000000000100000001 +50000000000000000000000000000010001.50000000000000000000000000000500000005 +90000000000000000000000000000010001.90000000000000000000000000000900000009 +44444444444444444444444444444444444.44444444444444444444444444444444444444 +49999999999999999999999999999999999.99999999999999999999999999999999999999 +55555555555555555555555555555555555.55555555555555555555555555555555555555 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +-1.00000000000000000000000000000000000000 +-2.00000000000000000000000000000000000000 +-3.00000000000000000000000000000000000000 +-4.00000000000000000000000000000000000000 +-5.00000000000000000000000000000000000000 +-6.00000000000000000000000000000000000000 +-7.00000000000000000000000000000000000000 +-8.00000000000000000000000000000000000000 +-9.00000000000000000000000000000000000000 +-1.00000000000000000000000000000000000000 +-2.00000000000000000000000000000000000000 +-3.00000000000000000000000000000000000000 +-4.00000000000000000000000000000000000000 +-5.00000000000000000000000000000000000000 +-6.00000000000000000000000000000000000000 +-7.00000000000000000000000000000000000000 +-8.00000000000000000000000000000000000000 +-9.00000000000000000000000000000000000000 +-0.10000000000000000000000000000000000000 +-0.20000000000000000000000000000000000000 +-0.30000000000000000000000000000000000000 +-0.40000000000000000000000000000000000000 +-0.50000000000000000000000000000000000000 +-0.60000000000000000000000000000000000000 +-0.70000000000000000000000000000000000000 +-0.90000000000000000000000000000000000000 +0.00000000000000000000000000000000000000 +-0.00000000000000000000000000000000000001 +-0.00000000000000000000000000000000000005 +-0.00000000000000000000000000000000000009 +-0.00000000000000010000000000000000000000 +-0.00000000000000050000000000000000000000 +-0.00000000000000090000000000000000000000 +-0.00000000000000010000000000000000000001 +-0.00000000000000050000000000000000000005 +-0.00000000000000090000000000000000000009 +-0.10000000000000000000000000000000000000 +-0.10000000000000000000000000000000000001 +-0.10000000000000010000000000000000000001 +-0.50000000000000050000000000000000000005 +-0.90000000000000090000000000000000000009 +-1.00000000000000000000000000000000000000 +-1.00000000000000000000000000000000000001 +-1.00000000000000000000000000000000000005 +-1.00000000000000000000000000000000000009 +-1.00000000000000010000000000000000000000 +-1.00000000000000050000000000000000000000 +-1.00000000000000090000000000000000000000 +-1.00000000000000010000000000000000000001 +-1.00000000000000050000000000000000000005 +-1.00000000000000090000000000000000000009 +-1.10000000000000010000000000000000000001 +-1.50000000000000050000000000000000000005 +-1.90000000000000090000000000000000000009 +-10001.00000000000000000000000000000000000000 +-10001.00000000000000000000000000000000000001 +-10001.00000000000000000000000000000000000005 +-10001.00000000000000000000000000000000000009 +-10001.00000000000000010000000000000000000000 +-10001.00000000000000050000000000000000000000 +-10001.00000000000000090000000000000000000000 +-10001.00000000000000010000000000000000000001 +-10001.00000000000000050000000000000000000005 +-10001.00000000000000090000000000000000000009 +-10001.10000000000000010000000000000000000001 +-10001.50000000000000050000000000000000000005 +-10001.90000000000000090000000000000000000009 +-10000000000000000000000000000000000000.00000000000000000000000000000000000000 +-50000000000000000000000000000000000000.00000000000000000000000000000000000000 +-90000000000000000000000000000000000000.00000000000000000000000000000000000000 +-10000000000000000000000000000000000000.00000000000000000000000000000000000001 +-50000000000000000000000000000000000000.00000000000000000000000000000000000005 +-90000000000000000000000000000000000000.00000000000000000000000000000000000009 +-10000000000000000000000000000000000000.00000000000000000000000000000100000001 +-50000000000000000000000000000000000000.00000000000000000000000000000500000005 +-90000000000000000000000000000000000000.00000000000000000000000000000900000009 +-10000000000000000000000000000000000000.10000000000000000000000000000100000001 +-50000000000000000000000000000000000000.50000000000000000000000000000500000005 +-90000000000000000000000000000000000000.90000000000000000000000000000900000009 +-10000000000000000000000000000000000001.00000000000000000000000000000000000000 +-50000000000000000000000000000000000001.00000000000000000000000000000000000000 +-90000000000000000000000000000000000001.00000000000000000000000000000000000000 +-10000000000000000000000000000000000001.00000000000000000000000000000000000001 +-50000000000000000000000000000000000001.00000000000000000000000000000000000005 +-90000000000000000000000000000000000001.00000000000000000000000000000000000009 +-10000000000000000000000000000000000001.00000000000000000000000000000100000001 +-50000000000000000000000000000000000001.00000000000000000000000000000500000005 +-90000000000000000000000000000000000001.00000000000000000000000000000900000009 +-10000000000000000000000000000000000001.10000000000000000000000000000100000001 +-50000000000000000000000000000000000001.50000000000000000000000000000500000005 +-90000000000000000000000000000000000001.90000000000000000000000000000900000009 +-10000000000000000000000000000000010001.00000000000000000000000000000000000000 +-50000000000000000000000000000000010001.00000000000000000000000000000000000000 +-90000000000000000000000000000000010001.00000000000000000000000000000000000000 +-10000000000000000000000000000000010001.00000000000000000000000000000000000001 +-50000000000000000000000000000000010001.00000000000000000000000000000000000005 +-90000000000000000000000000000000010001.00000000000000000000000000000000000009 +-10000000000000000000000000000000010001.00000000000000000000000000000100000001 +-50000000000000000000000000000000010001.00000000000000000000000000000500000005 +-90000000000000000000000000000000010001.00000000000000000000000000000900000009 +-10000000000000000000000000000000010001.10000000000000000000000000000100000001 +-50000000000000000000000000000000010001.50000000000000000000000000000500000005 +-90000000000000000000000000000000010001.90000000000000000000000000000900000009 +-44444444444444444444444444444444444444.44444444444444444444444444444444444444 +-49999999999999999999999999999999999999.99999999999999999999999999999999999999 +-55555555555555555555555555555555555555.55555555555555555555555555555555555555 +0.00000000000000000000000000000000000000 +-0.00000000000000000000000000000000001000 +-0.00000000000000000000000000000000005000 +-0.00000000000000000000000000000000009000 +-0.00000000000010000000000000000000000000 +-0.00000000000050000000000000000000000000 +-0.00000000000090000000000000000000000000 +-0.00000000000010000000000000000000001000 +-0.00000000000050000000000000000000005000 +-0.00000000000090000000000000000000009000 +-0.10000000000000000000000000000000000000 +-0.10000000000000000000000000000000001000 +-0.10000000000010000000000000000000001000 +-0.50000000000050000000000000000000005000 +-0.90000000000090000000000000000000009000 +-1.00000000000000000000000000000000000000 +-1.00000000000000000000000000000000001000 +-1.00000000000000000000000000000000005000 +-1.00000000000000000000000000000000009000 +-1.00000000000010000000000000000000000000 +-1.00000000000050000000000000000000000000 +-1.00000000000090000000000000000000000000 +-1.00000000000010000000000000000000001000 +-1.00000000000050000000000000000000005000 +-1.00000000000090000000000000000000009000 +-1.10000000000010000000000000000000001000 +-1.50000000000050000000000000000000005000 +-1.90000000000090000000000000000000009000 +-10001.00000000000000000000000000000000000000 +-10001.00000000000000000000000000000000001000 +-10001.00000000000000000000000000000000005000 +-10001.00000000000000000000000000000000009000 +-10001.00000000000010000000000000000000000000 +-10001.00000000000050000000000000000000000000 +-10001.00000000000090000000000000000000000000 +-10001.00000000000010000000000000000000001000 +-10001.00000000000050000000000000000000005000 +-10001.00000000000090000000000000000000009000 +-10001.10000000000010000000000000000000001000 +-10001.50000000000050000000000000000000005000 +-10001.90000000000090000000000000000000009000 +-10000000000000000000000000000000000000.00000000000000000000000000000000000000 +-50000000000000000000000000000000000000.00000000000000000000000000000000000000 +-90000000000000000000000000000000000000.00000000000000000000000000000000000000 +-10000000000000000000000000000000000000.00000000000000000000000000000000001000 +-50000000000000000000000000000000000000.00000000000000000000000000000000005000 +-90000000000000000000000000000000000000.00000000000000000000000000000000009000 +-10000000000000000000000000000000000000.00000000000000000000000000100000001000 +-50000000000000000000000000000000000000.00000000000000000000000000500000005000 +-90000000000000000000000000000000000000.00000000000000000000000000900000009000 +-10000000000000000000000000000000000000.10000000000000000000000000100000001000 +-50000000000000000000000000000000000000.50000000000000000000000000500000005000 +-90000000000000000000000000000000000000.90000000000000000000000000900000009000 +-10000000000000000000000000000000000001.00000000000000000000000000000000000000 +-50000000000000000000000000000000000001.00000000000000000000000000000000000000 +-90000000000000000000000000000000000001.00000000000000000000000000000000000000 +-10000000000000000000000000000000000001.00000000000000000000000000000000001000 +-50000000000000000000000000000000000001.00000000000000000000000000000000005000 +-90000000000000000000000000000000000001.00000000000000000000000000000000009000 +-10000000000000000000000000000000000001.00000000000000000000000000100000001000 +-50000000000000000000000000000000000001.00000000000000000000000000500000005000 +-90000000000000000000000000000000000001.00000000000000000000000000900000009000 +-10000000000000000000000000000000000001.10000000000000000000000000100000001000 +-50000000000000000000000000000000000001.50000000000000000000000000500000005000 +-90000000000000000000000000000000000001.90000000000000000000000000900000009000 +-10000000000000000000000000000000010001.00000000000000000000000000000000000000 +-50000000000000000000000000000000010001.00000000000000000000000000000000000000 +-90000000000000000000000000000000010001.00000000000000000000000000000000000000 +-10000000000000000000000000000000010001.00000000000000000000000000000000001000 +-50000000000000000000000000000000010001.00000000000000000000000000000000005000 +-90000000000000000000000000000000010001.00000000000000000000000000000000009000 +-10000000000000000000000000000000010001.00000000000000000000000000100000001000 +-50000000000000000000000000000000010001.00000000000000000000000000500000005000 +-90000000000000000000000000000000010001.00000000000000000000000000900000009000 +-10000000000000000000000000000000010001.10000000000000000000000000100000001000 +-50000000000000000000000000000000010001.50000000000000000000000000500000005000 +-90000000000000000000000000000000010001.90000000000000000000000000900000009000 +-44444444444444444444444444444444444444.44444444444444444444444444444444444000 +-49999999999999999999999999999999999999.99999999999999999999999999999999999000 +-55555555555555555555555555555555555555.55555555555555555555555555555555555000 +-99999999999999999999999999999999999999.99999999999999999999999999999999999000 +-99999999999999999999999999999999999999.99999999999999999999999999999999999000 +0.00000000000000000000000000000000000000 +-0.00000000000000000000000000000000000001 +-0.00000000000000000000000000000000000005 +-0.00000000000000000000000000000000000009 +-0.00000000000000010000000000000000000000 +-0.00000000000000050000000000000000000000 +-0.00000000000000090000000000000000000000 +-0.00000000000000010000000000000000000001 +-0.00000000000000050000000000000000000005 +-0.00000000000000090000000000000000000009 +-0.10000000000000000000000000000000000000 +-0.10000000000000000000000000000000000001 +-0.10000000000000010000000000000000000001 +-0.50000000000000050000000000000000000005 +-0.90000000000000090000000000000000000009 +-1.00000000000000000000000000000000000000 +-1.00000000000000000000000000000000000001 +-1.00000000000000000000000000000000000005 +-1.00000000000000000000000000000000000009 +-1.00000000000000010000000000000000000000 +-1.00000000000000050000000000000000000000 +-1.00000000000000090000000000000000000000 +-1.00000000000000010000000000000000000001 +-1.00000000000000050000000000000000000005 +-1.00000000000000090000000000000000000009 +-1.10000000000000010000000000000000000001 +-1.50000000000000050000000000000000000005 +-1.90000000000000090000000000000000000009 +-10001.00000000000000000000000000000000000000 +-10001.00000000000000000000000000000000000001 +-10001.00000000000000000000000000000000000005 +-10001.00000000000000000000000000000000000009 +-10001.00000000000000010000000000000000000000 +-10001.00000000000000050000000000000000000000 +-10001.00000000000000090000000000000000000000 +-10001.00000000000000010000000000000000000001 +-10001.00000000000000050000000000000000000005 +-10001.00000000000000090000000000000000000009 +-10001.10000000000000010000000000000000000001 +-10001.50000000000000050000000000000000000005 +-10001.90000000000000090000000000000000000009 +-10000000000000000000000000000000000.00000000000000000000000000000000000000 +-50000000000000000000000000000000000.00000000000000000000000000000000000000 +-90000000000000000000000000000000000.00000000000000000000000000000000000000 +-10000000000000000000000000000000000.00000000000000000000000000000000000001 +-50000000000000000000000000000000000.00000000000000000000000000000000000005 +-90000000000000000000000000000000000.00000000000000000000000000000000000009 +-10000000000000000000000000000000000.00000000000000000000000000000100000001 +-50000000000000000000000000000000000.00000000000000000000000000000500000005 +-90000000000000000000000000000000000.00000000000000000000000000000900000009 +-10000000000000000000000000000000000.10000000000000000000000000000100000001 +-50000000000000000000000000000000000.50000000000000000000000000000500000005 +-90000000000000000000000000000000000.90000000000000000000000000000900000009 +-10000000000000000000000000000000001.00000000000000000000000000000000000000 +-50000000000000000000000000000000001.00000000000000000000000000000000000000 +-90000000000000000000000000000000001.00000000000000000000000000000000000000 +-10000000000000000000000000000000001.00000000000000000000000000000000000001 +-50000000000000000000000000000000001.00000000000000000000000000000000000005 +-90000000000000000000000000000000001.00000000000000000000000000000000000009 +-10000000000000000000000000000000001.00000000000000000000000000000100000001 +-50000000000000000000000000000000001.00000000000000000000000000000500000005 +-90000000000000000000000000000000001.00000000000000000000000000000900000009 +-10000000000000000000000000000000001.10000000000000000000000000000100000001 +-50000000000000000000000000000000001.50000000000000000000000000000500000005 +-90000000000000000000000000000000001.90000000000000000000000000000900000009 +-10000000000000000000000000000010001.00000000000000000000000000000000000000 +-50000000000000000000000000000010001.00000000000000000000000000000000000000 +-90000000000000000000000000000010001.00000000000000000000000000000000000000 +-10000000000000000000000000000010001.00000000000000000000000000000000000001 +-50000000000000000000000000000010001.00000000000000000000000000000000000005 +-90000000000000000000000000000010001.00000000000000000000000000000000000009 +-10000000000000000000000000000010001.00000000000000000000000000000100000001 +-50000000000000000000000000000010001.00000000000000000000000000000500000005 +-90000000000000000000000000000010001.00000000000000000000000000000900000009 +-10000000000000000000000000000010001.10000000000000000000000000000100000001 +-50000000000000000000000000000010001.50000000000000000000000000000500000005 +-90000000000000000000000000000010001.90000000000000000000000000000900000009 +-44444444444444444444444444444444444.44444444444444444444444444444444444444 +-49999999999999999999999999999999999.99999999999999999999999999999999999999 +-55555555555555555555555555555555555.55555555555555555555555555555555555555 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_76_76_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_76_76_get_field.out new file mode 100644 index 00000000000000..55c92744340e05 --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_76_76_get_field.out @@ -0,0 +1,118 @@ +0.0000000000000000000000000000000000000000000000000000000000000000000000000000 +0.0000000000000000000000000000000000000000000000000000000000000000000000000000 +0.0000000000000000000000000000000000000000000000000000000000000000000000000000 +0.0000000000000000000000000000000000000000000000000000000000000000000000000000 +0.1000000000000000000000000000000000000000000000000000000000000000000000000000 +0.2000000000000000000000000000000000000000000000000000000000000000000000000000 +0.3000000000000000000000000000000000000000000000000000000000000000000000000000 +0.4000000000000000000000000000000000000000000000000000000000000000000000000000 +0.5000000000000000000000000000000000000000000000000000000000000000000000000000 +0.6000000000000000000000000000000000000000000000000000000000000000000000000000 +0.7000000000000000000000000000000000000000000000000000000000000000000000000000 +0.8000000000000000000000000000000000000000000000000000000000000000000000000000 +0.9000000000000000000000000000000000000000000000000000000000000000000000000000 +0.0000000000000000000000000000000000000000000000000000000000000000000000000000 +0.0000000000000000000000000000000000000000000000000000000000000000000000000001 +0.0000000000000000000000000000000000000000000000000000000000000000000000000005 +0.0000000000000000000000000000000000000000000000000000000000000000000000000009 +0.0000000000000000000000000000000000000000000000000000010000000000000000000000 +0.0000000000000000000000000000000000000000000000000000050000000000000000000000 +0.0000000000000000000000000000000000000000000000000000090000000000000000000000 +0.0000000000000000000000000000000000000000000000000000010000000000000000000001 +0.0000000000000000000000000000000000000000000000000000050000000000000000000005 +0.0000000000000000000000000000000000000000000000000000090000000000000000000009 +0.1000000000000000000000000000000000000000000000000000000000000000000000000000 +0.5000000000000000000000000000000000000000000000000000000000000000000000000000 +0.9000000000000000000000000000000000000000000000000000000000000000000000000000 +0.1000000000000000000000000000000000000000000000000000000000000000000000000001 +0.5000000000000000000000000000000000000000000000000000000000000000000000000005 +0.9000000000000000000000000000000000000000000000000000000000000000000000000009 +0.1000000000000000000000000000000000000000000000000000000000000000000100000001 +0.5000000000000000000000000000000000000000000000000000000000000000000500000005 +0.9000000000000000000000000000000000000000000000000000000000000000000900000009 +0.4444444444444444444444444444444444444444444444444444444444444444444444444444 +0.4999999999999999999999999999999999999999999999999999999999999999999999999999 +0.5555555555555555555555555555555555555555555555555555555555555555555555555555 +0.9999999999999999999999999999999999999999999999999999999999999999999999999999 +0.0000000000000000000000000000000000000000000000000000000000000000000000000000 +0.0000000000000000000000000000000000000000000000000000000000000000000000001000 +0.0000000000000000000000000000000000000000000000000000000000000000000000005000 +0.0000000000000000000000000000000000000000000000000000000000000000000000009000 +0.0000000000000000000000000000000000000000000000000010000000000000000000000000 +0.0000000000000000000000000000000000000000000000000050000000000000000000000000 +0.0000000000000000000000000000000000000000000000000090000000000000000000000000 +0.0000000000000000000000000000000000000000000000000010000000000000000000001000 +0.0000000000000000000000000000000000000000000000000050000000000000000000005000 +0.0000000000000000000000000000000000000000000000000090000000000000000000009000 +0.1000000000000000000000000000000000000000000000000000000000000000000000000000 +0.5000000000000000000000000000000000000000000000000000000000000000000000000000 +0.9000000000000000000000000000000000000000000000000000000000000000000000000000 +0.1000000000000000000000000000000000000000000000000000000000000000000000001000 +0.5000000000000000000000000000000000000000000000000000000000000000000000005000 +0.9000000000000000000000000000000000000000000000000000000000000000000000009000 +0.1000000000000000000000000000000000000000000000000000000000000000100000001000 +0.5000000000000000000000000000000000000000000000000000000000000000500000005000 +0.9000000000000000000000000000000000000000000000000000000000000000900000009000 +0.4444444444444444444444444444444444444444444444444444444444444444444444444000 +0.4999999999999999999999999999999999999999999999999999999999999999999999999000 +0.5555555555555555555555555555555555555555555555555555555555555555555555555000 +0.9999999999999999999999999999999999999999999999999999999999999999999999999000 +0.0000000000000000000000000000000000000000000000000000000000000000000000000000 +0.0000000000000000000000000000000000000000000000000000000000000000000000000000 +0.0000000000000000000000000000000000000000000000000000000000000000000000000000 +0.0000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.1000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.2000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.3000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.4000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.5000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.6000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.7000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.8000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.9000000000000000000000000000000000000000000000000000000000000000000000000000 +0.0000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.0000000000000000000000000000000000000000000000000000000000000000000000000001 +-0.0000000000000000000000000000000000000000000000000000000000000000000000000005 +-0.0000000000000000000000000000000000000000000000000000000000000000000000000009 +-0.0000000000000000000000000000000000000000000000000000010000000000000000000000 +-0.0000000000000000000000000000000000000000000000000000050000000000000000000000 +-0.0000000000000000000000000000000000000000000000000000090000000000000000000000 +-0.0000000000000000000000000000000000000000000000000000010000000000000000000001 +-0.0000000000000000000000000000000000000000000000000000050000000000000000000005 +-0.0000000000000000000000000000000000000000000000000000090000000000000000000009 +-0.1000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.5000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.9000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.1000000000000000000000000000000000000000000000000000000000000000000000000001 +-0.5000000000000000000000000000000000000000000000000000000000000000000000000005 +-0.9000000000000000000000000000000000000000000000000000000000000000000000000009 +-0.1000000000000000000000000000000000000000000000000000000000000000000100000001 +-0.5000000000000000000000000000000000000000000000000000000000000000000500000005 +-0.9000000000000000000000000000000000000000000000000000000000000000000900000009 +-0.4444444444444444444444444444444444444444444444444444444444444444444444444444 +-0.4999999999999999999999999999999999999999999999999999999999999999999999999999 +-0.5555555555555555555555555555555555555555555555555555555555555555555555555555 +-0.9999999999999999999999999999999999999999999999999999999999999999999999999999 +0.0000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.0000000000000000000000000000000000000000000000000000000000000000000000001000 +-0.0000000000000000000000000000000000000000000000000000000000000000000000005000 +-0.0000000000000000000000000000000000000000000000000000000000000000000000009000 +-0.0000000000000000000000000000000000000000000000000010000000000000000000000000 +-0.0000000000000000000000000000000000000000000000000050000000000000000000000000 +-0.0000000000000000000000000000000000000000000000000090000000000000000000000000 +-0.0000000000000000000000000000000000000000000000000010000000000000000000001000 +-0.0000000000000000000000000000000000000000000000000050000000000000000000005000 +-0.0000000000000000000000000000000000000000000000000090000000000000000000009000 +-0.1000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.5000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.9000000000000000000000000000000000000000000000000000000000000000000000000000 +-0.1000000000000000000000000000000000000000000000000000000000000000000000001000 +-0.5000000000000000000000000000000000000000000000000000000000000000000000005000 +-0.9000000000000000000000000000000000000000000000000000000000000000000000009000 +-0.1000000000000000000000000000000000000000000000000000000000000000100000001000 +-0.5000000000000000000000000000000000000000000000000000000000000000500000005000 +-0.9000000000000000000000000000000000000000000000000000000000000000900000009000 +-0.4444444444444444444444444444444444444444444444444444444444444444444444444000 +-0.4999999999999999999999999999999999999999999999999999999999999999999999999000 +-0.5555555555555555555555555555555555555555555555555555555555555555555555555000 +-0.9999999999999999999999999999999999999999999999999999999999999999999999999000 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_8_3_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_8_3_get_field.out new file mode 100644 index 00000000000000..69bfd4a9fa140c --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_8_3_get_field.out @@ -0,0 +1,6 @@ +87654.210 +0.001 +99999.999 +-87654.210 +-0.001 +-99999.999 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_9_0_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_9_0_get_field.out new file mode 100644 index 00000000000000..1f66989ed85dfe --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_9_0_get_field.out @@ -0,0 +1,68 @@ +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 +890123456 +999999999 +-890123456 +-999999999 \ No newline at end of file diff --git a/be/test/expected_result/vec/data_types/decimalv3_9_9_get_field.out b/be/test/expected_result/vec/data_types/decimalv3_9_9_get_field.out new file mode 100644 index 00000000000000..4bfb0283ddcefc --- /dev/null +++ b/be/test/expected_result/vec/data_types/decimalv3_9_9_get_field.out @@ -0,0 +1,52 @@ +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 +0.890123456 +0.999999999 +-0.890123456 +-0.999999999 \ No newline at end of file diff --git a/be/test/testutil/test_util.cpp b/be/test/testutil/test_util.cpp index 38c640ea6452ec..99cdbf6a06793b 100644 --- a/be/test/testutil/test_util.cpp +++ b/be/test/testutil/test_util.cpp @@ -199,75 +199,68 @@ void load_data_from_csv(const vectorized::DataTypeSerDeSPtrs serders, std::cout << "loading data done, file: " << file_path << ", row count: " << columns[0]->size() << std::endl; } +// res_columns[i] is the i-th column of the data void check_or_generate_res_file(const std::string& res_file_path, - const std::vector>& res_column, bool is_binary) { - } - -//// this is very helpful function to check data in column against expected results according different function in assert function -//// such as run regress tests -//// if FLAGS_gen_out is true, we will generate a file for check data, otherwise we will read the file to check data -//// so the key point is we should how we write assert callback function to check data, -/// and when check data is generated, we should check result to statisfy the semantic of the function -void check_or_generate_res_file(const std::string& res_file_path, - const std::vector& res_column, bool is_binary) { + const std::vector>& res_columns) { + if (res_columns.empty()) { + return; + } + auto row_count = res_columns[0].size(); if (FLAGS_gen_out) { std::ofstream res_file(res_file_path); - std::cout << "gen check data: " << res_column.size() << " rows with file: " << res_file_path - << std::endl; + LOG(INFO) << "gen check data with file: " << res_file_path; if (!res_file.is_open()) { - throw std::ios_base::failure("Failed to open file."); + throw std::ios_base::failure("Failed to open file: " + res_file_path); } - for (size_t i = 0; i < res_column.size(); ++i) { - auto cell = res_column[i]; - if (is_binary) { - size_t data_size = cell.size(); - res_file.write((char*)&data_size, sizeof(data_size)); - res_file.write(cell.data(), data_size); - } else { - res_file << cell; - if (i < res_column.size() - 1) { - res_file << "\n"; + for (size_t i = 1; i < res_columns.size(); ++i) { + EXPECT_EQ(res_columns[i].size(), row_count); + } + auto column_count = res_columns.size(); + for (size_t i = 0; i < row_count; ++i) { + // output one row + for (size_t j = 0; j < column_count; ++j) { + const auto& column = res_columns[j]; + // output one column + res_file << column[i]; + if (j < column_count - 1) { + res_file << ";"; // Add semicolon between columns } } + if (i < row_count - 1) { + res_file << "\n"; + } } res_file.close(); } else { // we read generate file to check result - std::cout << "check data: " << res_column.size() << " rows with file: " << res_file_path - << std::endl; + LOG(INFO) << "check data with file: " << res_file_path; std::ifstream file(res_file_path); if (!file) { throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "can not open the file: {} ", res_file_path); } - if (is_binary) { - for (const auto& cell : res_column) { - size_t real_size = cell.size(); - size_t expect_row_size = 0; - file.read((char*)&expect_row_size, sizeof(expect_row_size)); - EXPECT_EQ(real_size, expect_row_size); - std::string expected_data; - expected_data.resize(expect_row_size); - file.read((char*)expected_data.data(), expect_row_size); - EXPECT_EQ(cell, expected_data); - } - } else { - size_t file_line_count = 0; - std::string line; - while (getline(file, line)) { - file_line_count++; - } - EXPECT_EQ(file_line_count, res_column.size()); - file.clear(); - file.seekg(0, std::ios::beg); + size_t file_line_count = 0; + std::string line; + while (getline(file, line)) { + file_line_count++; + } + EXPECT_EQ(file_line_count, row_count); + + file.clear(); + file.seekg(0, std::ios::beg); - size_t line_idx = 0; - while (std::getline(file, line)) { - EXPECT_EQ(line, res_column[line_idx]) << "line mismatch: " << line_idx; - line_idx++; + size_t line_idx = 0; + while (std::getline(file, line)) { + std::stringstream line_stream(line); + std::string value; + size_t col_idx = 0; + while (std::getline(line_stream, value, ';')) { + EXPECT_EQ(value, res_columns[col_idx][line_idx]); + col_idx++; } + line_idx++; } } } diff --git a/be/test/testutil/test_util.h b/be/test/testutil/test_util.h index 5eaf79d319851e..6e936e2a829270 100644 --- a/be/test/testutil/test_util.h +++ b/be/test/testutil/test_util.h @@ -87,9 +87,6 @@ void load_data_from_csv(const vectorized::DataTypeSerDeSPtrs serders, vectorized::MutableColumns& columns, const std::string& file_path, const char spliter = ';', const std::set idxes = {0}); void check_or_generate_res_file(const std::string& res_file_path, - const std::vector& res_column, bool is_binary); -void check_or_generate_res_file(const std::string& res_file_path, - const std::vector>& res, - bool is_binary = false); + const std::vector>& res_columns); } // namespace doris diff --git a/be/test/vec/data_types/data_type_decimal_test.cpp b/be/test/vec/data_types/data_type_decimal_test.cpp index 442819d0a522d5..ba8f40db0025fb 100644 --- a/be/test/vec/data_types/data_type_decimal_test.cpp +++ b/be/test/vec/data_types/data_type_decimal_test.cpp @@ -38,10 +38,12 @@ #include "vec/data_types/common_data_type_test.h" #include "vec/data_types/data_type.h" #include "vec/data_types/data_type_factory.hpp" +#include "vec/data_types/data_type_number.h" #include "vec/io/reader_buffer.h" namespace doris::vectorized { static std::string test_data_dir; +static std::string test_result_dir; static DataTypeDecimal dt_decimal32_1(1, 0); static DataTypeDecimal dt_decimal32_2(1, 1); @@ -87,6 +89,7 @@ class DataTypeDecimalTest : public ::testing::Test { static void SetUpTestSuite() { auto root_dir = std::string(getenv("ROOT")); test_data_dir = root_dir + "/be/test/data/vec/columns"; + test_result_dir = root_dir + "/be/test/expected_result/vec/data_types"; column_decimal32_1 = ColumnDecimal32::create(0, 0); column_decimal32_2 = ColumnDecimal32::create(0, 1); @@ -229,6 +232,8 @@ TEST_F(DataTypeDecimalTest, simple_func_test) { EXPECT_EQ(std::string(dt.get_family_name()), std::string("Decimal")); EXPECT_EQ(dt.do_get_name(), "Decimal(" + std::to_string(dt.get_precision()) + ", " + std::to_string(dt.get_scale()) + ")"); + EXPECT_EQ(dt.get_format_scale(), dt.get_scale()); + EXPECT_EQ(dt.get_scale_multiplier(), dt.get_scale_multiplier(dt.get_scale())); }; test_func(dt_decimal32_1); EXPECT_EQ(dt_decimal32_1.max_precision(), 9); @@ -447,4 +452,261 @@ TEST_F(DataTypeDecimalTest, ser_deser) { test_func(dt_decimal256_3, *column_decimal256_3, USE_CONST_SERDE); test_func(dt_decimal256_3, *column_decimal256_3, AGGREGATION_2_1_VERSION); } +TEST_F(DataTypeDecimalTest, to_pb_column_meta) { + auto test_func = [](auto dt, PGenericType_TypeId expected_type) { + auto col_meta = std::make_shared(); + dt.to_pb_column_meta(col_meta.get()); + EXPECT_EQ(col_meta->type(), expected_type); + EXPECT_EQ(col_meta->decimal_param().precision(), dt.get_precision()); + EXPECT_EQ(col_meta->decimal_param().scale(), dt.get_scale()); + }; + test_func(dt_decimal32_1, PGenericType::DECIMAL32); + test_func(dt_decimal64_1, PGenericType::DECIMAL64); + test_func(dt_decimal128v2, PGenericType::DECIMAL128); + test_func(dt_decimal128v3_1, PGenericType::DECIMAL128I); + test_func(dt_decimal256_1, PGenericType::DECIMAL256); +} +TEST_F(DataTypeDecimalTest, get_default) { + auto test_func = [](auto dt) { + using DataType = decltype(dt); + using ColumnType = typename DataType::ColumnType; + auto default_field = dt.get_default(); + auto decimal_field = + default_field.template get>(); + EXPECT_EQ(decimal_field.get_scale(), dt.get_scale()); + EXPECT_EQ(decimal_field.get_value(), typename ColumnType::value_type()); + }; + test_func(dt_decimal32_1); + test_func(dt_decimal64_1); + test_func(dt_decimal128v2); + test_func(dt_decimal128v3_1); + test_func(dt_decimal256_1); +} +TEST_F(DataTypeDecimalTest, get_field) { + TExprNode expr_node; + expr_node.node_type = TExprNodeType::DECIMAL_LITERAL; + expr_node.__isset.decimal_literal = true; + + std::string line; + auto test_func = [&](auto dt, const std::string& input_data_file_name) { + using DataType = decltype(dt); + using ColumnType = typename DataType::ColumnType; + { + expr_node.decimal_literal.value = "abc"; + EXPECT_THROW(dt.get_field(expr_node), Exception); + } + auto input_data_file = test_data_dir + "/" + input_data_file_name; + std::ifstream file(input_data_file); + if (!file) { + throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "can not open the file: {} ", + input_data_file); + } + + std::string res_file_name = + fmt::format("decimalv3_{}_{}_get_field.out", dt.get_precision(), dt.get_scale()); + auto output_file = test_result_dir + "/" + res_file_name; + std::vector res; + while (std::getline(file, line)) { + if (fast_float::fastfloat_strncasecmp(line.data(), "null", + std::min(line.size(), 4UL))) { + continue; + } + expr_node.decimal_literal.value = line; + auto field = dt.get_field(expr_node); + auto decimal_field = + field.template get>(); + EXPECT_EQ(decimal_field.get_scale(), dt.get_scale()); + res.push_back(decimal_field.get_value().to_string(dt.get_scale())); + } + check_or_generate_res_file(output_file, {res}); + }; + test_func(dt_decimal32_1, "DECIMALV3(1,0).csv"); + test_func(dt_decimal32_2, "DECIMALV3(1,1).csv"); + test_func(dt_decimal32_3, "DECIMALV3(8,3).csv"); + test_func(dt_decimal32_4, "DECIMALV3(9,0).csv"); + test_func(dt_decimal32_5, "DECIMALV3(9,9).csv"); + + test_func(dt_decimal64_1, "DECIMALV3(18,0).csv"); + test_func(dt_decimal64_2, "DECIMALV3(18,9).csv"); + test_func(dt_decimal64_3, "DECIMALV3(18,18).csv"); + + // test_func(dt_decimal128v2, "DECIMALV2(27,9).csv"); + + test_func(dt_decimal128v3_1, "DECIMALV3(38,0).csv"); + test_func(dt_decimal128v3_2, "DECIMALV3(38,30).csv"); + test_func(dt_decimal128v3_3, "DECIMALV3(38,38).csv"); + + test_func(dt_decimal256_1, "DECIMALV3(76,0).csv"); + test_func(dt_decimal256_2, "DECIMALV3(76,38).csv"); + test_func(dt_decimal256_3, "DECIMALV3(76,76).csv"); +} +TEST_F(DataTypeDecimalTest, to_string) { + auto test_func = [](auto& dt, const auto& source_column) { + std::cout << "test datatype to string: " << dt.get_family_name() << std::endl; + using DataType = decltype(dt); + using ColumnType = typename std::remove_reference::type::ColumnType; + const auto* col_with_type = assert_cast(&source_column); + + size_t row_count = source_column.size(); + { + ColumnString col_str_to_str; + BufferWritable buffer(col_str_to_str); + + for (size_t i = 0; i != row_count; ++i) { + dt.to_string(source_column, i, buffer); + buffer.commit(); + } + ColumnType col_from_str(0, dt.get_scale()); + for (size_t i = 0; i != row_count; ++i) { + auto item = col_str_to_str.get_data_at(i); + ReadBuffer rb((char*)item.data, item.size); + auto status = dt.from_string(rb, &col_from_str); + EXPECT_TRUE(status.ok()); + EXPECT_EQ(col_from_str.get_element(i), source_column.get_element(i)); + } + } + { + ColumnType col_from_str(0, dt.get_scale()); + for (size_t i = 0; i != row_count; ++i) { + auto str = dt.to_string(source_column, i); + ReadBuffer rb(str.data(), str.size()); + auto status = dt.from_string(rb, &col_from_str); + EXPECT_TRUE(status.ok()); + EXPECT_EQ(col_from_str.get_element(i), source_column.get_element(i)); + } + } + { + ColumnType col_from_str(0, dt.get_scale()); + for (size_t i = 0; i != row_count; ++i) { + auto str = dt.to_string(col_with_type->get_element(i)); + ReadBuffer rb(str.data(), str.size()); + auto status = dt.from_string(rb, &col_from_str); + EXPECT_TRUE(status.ok()); + EXPECT_EQ(col_from_str.get_element(i), source_column.get_element(i)); + } + } + // to string batch + { + ColumnString col_str_to_str; + dt.to_string_batch(source_column, col_str_to_str); + EXPECT_EQ(col_str_to_str.size(), row_count); + + ColumnType col_from_str(0, dt.get_scale()); + for (size_t i = 0; i != row_count; ++i) { + auto item = col_str_to_str.get_data_at(i); + ReadBuffer rb((char*)item.data, item.size); + auto status = dt.from_string(rb, &col_from_str); + EXPECT_TRUE(status.ok()); + EXPECT_EQ(col_from_str.get_element(i), source_column.get_element(i)); + } + } + }; + test_func(dt_decimal32_1, *column_decimal32_1); + test_func(dt_decimal32_2, *column_decimal32_2); + test_func(dt_decimal32_3, *column_decimal32_3); + test_func(dt_decimal32_4, *column_decimal32_4); + test_func(dt_decimal32_5, *column_decimal32_5); + + test_func(dt_decimal64_1, *column_decimal64_1); + test_func(dt_decimal64_2, *column_decimal64_2); + test_func(dt_decimal64_3, *column_decimal64_3); + + // test_func(dt_decimal128v2, *column_decimal128_v2); + test_func(dt_decimal128v3_1, *column_decimal128v3_1); + test_func(dt_decimal128v3_2, *column_decimal128v3_2); + test_func(dt_decimal128v3_3, *column_decimal128v3_3); + + test_func(dt_decimal256_1, *column_decimal256_1); + test_func(dt_decimal256_2, *column_decimal256_2); + test_func(dt_decimal256_3, *column_decimal256_3); +} +TEST_F(DataTypeDecimalTest, scale_factor_for) { + EXPECT_THROW(dt_decimal32_1.scale_factor_for(dt_decimal32_2), Exception); + EXPECT_THROW(dt_decimal32_1.scale_factor_for(dt_decimal64_2), Exception); + EXPECT_THROW(dt_decimal32_1.scale_factor_for(dt_decimal128v3_2), Exception); + EXPECT_THROW(dt_decimal32_1.scale_factor_for(dt_decimal256_2), Exception); + + EXPECT_THROW(dt_decimal256_1.scale_factor_for(dt_decimal32_2), Exception); + EXPECT_THROW(dt_decimal256_1.scale_factor_for(dt_decimal64_2), Exception); + EXPECT_THROW(dt_decimal256_1.scale_factor_for(dt_decimal128v3_2), Exception); + EXPECT_THROW(dt_decimal256_1.scale_factor_for(dt_decimal256_2), Exception); + + EXPECT_THROW(dt_decimal32_3.scale_factor_for(dt_decimal32_5), Exception); + EXPECT_THROW(dt_decimal32_3.scale_factor_for(dt_decimal64_2), Exception); + + EXPECT_THROW(dt_decimal128v3_2.scale_factor_for(dt_decimal256_2), Exception); + + EXPECT_EQ(dt_decimal32_3.scale_factor_for(dt_decimal64_1).value, 1000); + EXPECT_EQ(dt_decimal32_3.scale_factor_for(dt_decimal256_1).value, 1000); + + EXPECT_EQ(dt_decimal64_3.scale_factor_for(dt_decimal64_2).value, + std::pow(10, dt_decimal64_3.get_scale() - dt_decimal64_2.get_scale())); + + EXPECT_EQ(dt_decimal256_3.scale_factor_for(dt_decimal256_2), + DataTypeDecimal::get_scale_multiplier(dt_decimal256_3.get_scale() - + dt_decimal256_2.get_scale())); +} + +TEST_F(DataTypeDecimalTest, decimal_result_type) { + { + DataTypeDecimal tmp_dt_decimal128v2(27, 9); + auto res_type = + decimal_result_type(dt_decimal128v2, tmp_dt_decimal128v2, true, false, false); + const auto* result_acutal_type = check_decimal(*res_type); + EXPECT_EQ(result_acutal_type->get_precision(), 27); + EXPECT_EQ(result_acutal_type->get_scale(), 9); + } + { + { + // multiply + auto res_type = decimal_result_type(dt_decimal32_1, dt_decimal32_1, true, false, false); + const auto* result_acutal_type = check_decimal(*res_type); + EXPECT_EQ(result_acutal_type->get_precision(), dt_decimal32_1.get_precision() * 2); + EXPECT_EQ(result_acutal_type->get_scale(), dt_decimal32_1.get_scale() * 2); + } + { + // divide + auto res_type = decimal_result_type(dt_decimal32_1, dt_decimal32_1, false, true, false); + const auto* result_acutal_type = check_decimal(*res_type); + EXPECT_EQ(result_acutal_type->get_precision(), dt_decimal32_1.get_precision()); + EXPECT_EQ(result_acutal_type->get_scale(), dt_decimal32_1.get_scale()); + } + { + // plus and sub + auto res_type = decimal_result_type(dt_decimal32_1, dt_decimal32_1, false, false, true); + const auto* result_acutal_type = check_decimal(*res_type); + EXPECT_EQ(result_acutal_type->get_precision(), 2); + EXPECT_EQ(result_acutal_type->get_scale(), dt_decimal32_1.get_scale()); + } + } +} +TEST_F(DataTypeDecimalTest, get_decimal_scale) { + auto test_func = [](auto dt) { EXPECT_EQ(get_decimal_scale(dt), dt.get_scale()); }; + test_func(dt_decimal32_1); + test_func(dt_decimal32_2); + test_func(dt_decimal32_3); + test_func(dt_decimal32_4); + test_func(dt_decimal32_5); + test_func(dt_decimal64_1); + test_func(dt_decimal64_2); + test_func(dt_decimal64_3); + test_func(dt_decimal128v2); + test_func(dt_decimal128v3_1); + test_func(dt_decimal128v3_2); + test_func(dt_decimal128v3_3); + test_func(dt_decimal256_1); + test_func(dt_decimal256_2); + test_func(dt_decimal256_3); + + EXPECT_EQ(get_decimal_scale(DataTypeInt32()), 0); + EXPECT_EQ(get_decimal_scale(DataTypeInt64()), 0); + EXPECT_EQ(get_decimal_scale(DataTypeInt128()), 0); + EXPECT_EQ(get_decimal_scale(DataTypeUInt8()), 0); + EXPECT_EQ(get_decimal_scale(DataTypeUInt16()), 0); + EXPECT_EQ(get_decimal_scale(DataTypeUInt32()), 0); + EXPECT_EQ(get_decimal_scale(DataTypeUInt64()), 0); + EXPECT_EQ(get_decimal_scale(DataTypeFloat32()), 0); + EXPECT_EQ(get_decimal_scale(DataTypeFloat64()), 0); +} + } // namespace doris::vectorized \ No newline at end of file diff --git a/be/test/vec/data_types/data_type_string_test.cpp b/be/test/vec/data_types/data_type_string_test.cpp new file mode 100644 index 00000000000000..d815d956e6babe --- /dev/null +++ b/be/test/vec/data_types/data_type_string_test.cpp @@ -0,0 +1,340 @@ +// 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. + +#include "vec/data_types/data_type_string.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "agent/be_exec_version_manager.h" +#include "olap/olap_common.h" +#include "runtime/define_primitive_type.h" +#include "runtime/types.h" +#include "testutil/test_util.h" +#include "vec/columns/column.h" +#include "vec/common/assert_cast.h" +#include "vec/core/field.h" +#include "vec/core/types.h" +#include "vec/data_types/common_data_type_serder_test.h" +#include "vec/data_types/common_data_type_test.h" +#include "vec/data_types/data_type.h" +#include "vec/data_types/data_type_factory.hpp" +#include "vec/data_types/data_type_nullable.h" +#include "vec/io/reader_buffer.h" + +namespace doris::vectorized { +static std::string test_data_dir; +static std::string test_result_dir; + +static ColumnString::MutablePtr column_str32; +static ColumnString64::MutablePtr column_str64; +static DataTypeString dt_str; +class DataTypeStringTest : public ::testing::Test { +protected: + static void SetUpTestSuite() { + auto root_dir = std::string(getenv("ROOT")); + test_data_dir = root_dir + "/be/test/data/vec/columns"; + test_result_dir = root_dir + "/be/test/expected_result/vec/data_types"; + + column_str32 = ColumnString::create(); + column_str64 = ColumnString64::create(); + + load_columns_data(); + } + + static void load_columns_data() { + std::cout << "loading test dataset" << std::endl; + { + MutableColumns columns; + columns.push_back(column_str32->get_ptr()); + DataTypeSerDeSPtrs serde = {dt_str.get_serde()}; + std::string data_file = test_data_dir + "/STRING.csv"; + load_columns_data_from_file(columns, serde, ';', {0}, data_file); + EXPECT_TRUE(!column_str32->empty()); + column_str32->insert_default(); + + column_str64->insert_range_from(*column_str32, 0, column_str32->size()); + } + std::cout << "column str size: " << column_str32->size() << std::endl; + } + void SetUp() override { helper = std::make_unique(); } + std::unique_ptr helper; +}; +TEST_F(DataTypeStringTest, MetaInfoTest) { + TypeDescriptor type_descriptor = {PrimitiveType::TYPE_STRING}; + auto col_meta = std::make_shared(); + col_meta->set_type(PGenericType_TypeId_STRING); + CommonDataTypeTest::DataTypeMetaInfo meta_info_to_assert = { + .type_id = TypeIndex::String, + .type_as_type_descriptor = &type_descriptor, + .family_name = dt_str.get_family_name(), + .has_subtypes = false, + .storage_field_type = doris::FieldType::OLAP_FIELD_TYPE_STRING, + .should_align_right_in_pretty_formats = false, + .text_can_contain_only_valid_utf8 = false, + .have_maximum_size_of_value = false, + .size_of_value_in_memory = 0, + .precision = size_t(-1), + .scale = size_t(-1), + .is_null_literal = false, + .is_value_represented_by_number = false, + .pColumnMeta = col_meta.get(), + .is_value_unambiguously_represented_in_contiguous_memory_region = true, + .default_field = Field(""), + }; + auto tmp_dt = DataTypeFactory::instance().create_data_type(TypeIndex::String); + helper->meta_info_assert(tmp_dt, meta_info_to_assert); +} +TEST_F(DataTypeStringTest, ser_deser) { + auto test_func = [](auto& dt, const auto& column, int be_exec_version) { + std::cout << "test serialize/deserialize datatype " << dt.get_family_name() + << ", be ver: " << be_exec_version << std::endl; + using DataType = std::remove_reference_t; + using ColumnType = typename DataType::ColumnType; + + // const flag | row num | read saved num + int64_t prefix_size = sizeof(bool) + sizeof(size_t) + sizeof(size_t); + int64_t prefix_size2 = sizeof(uint32_t) + sizeof(uint64_t); + + { + auto tmp_col = dt.create_column(); + auto* col_with_type = assert_cast(tmp_col.get()); + auto offsets_size = tmp_col->size() * sizeof(IColumn::Offset); + auto data_size = col_with_type->get_chars().size(); + + auto content_uncompressed_size = + dt.get_uncompressed_serialized_bytes(*tmp_col, be_exec_version); + if (be_exec_version >= USE_CONST_SERDE) { + auto expected_data_size = prefix_size; + expected_data_size += offsets_size; + // chars size + expected_data_size += sizeof(size_t); + expected_data_size += data_size; + EXPECT_EQ(content_uncompressed_size, expected_data_size); + } else { + auto expected_data_size = prefix_size2; + expected_data_size += offsets_size; + expected_data_size += data_size; + EXPECT_EQ(content_uncompressed_size, expected_data_size); + } + std::string column_values; + column_values.resize(content_uncompressed_size); + char* buf = column_values.data(); + buf = dt.serialize(*tmp_col, buf, be_exec_version); + const size_t serialize_bytes = buf - column_values.data() + STREAMVBYTE_PADDING; + column_values.resize(serialize_bytes); + + MutableColumnPtr deser_column = dt.create_column(); + (void)dt.deserialize(column_values.data(), &deser_column, be_exec_version); + EXPECT_EQ(deser_column->size(), 0); + } + + { + size_t count = 1; + auto tmp_col = dt.create_column(); + auto* col_with_type = assert_cast(tmp_col.get()); + col_with_type->insert_many_defaults(count); + auto offsets_size = tmp_col->size() * sizeof(IColumn::Offset); + auto data_size = col_with_type->get_chars().size(); + + auto content_uncompressed_size = + dt.get_uncompressed_serialized_bytes(*tmp_col, be_exec_version); + if (be_exec_version >= USE_CONST_SERDE) { + auto expected_data_size = prefix_size; + expected_data_size += offsets_size; + // chars size + expected_data_size += sizeof(size_t); + expected_data_size += data_size; + EXPECT_EQ(content_uncompressed_size, expected_data_size); + } else { + auto expected_data_size = prefix_size2; + expected_data_size += offsets_size; + expected_data_size += data_size; + EXPECT_EQ(content_uncompressed_size, expected_data_size); + } + std::string column_values; + column_values.resize(content_uncompressed_size); + char* buf = column_values.data(); + buf = dt.serialize(*tmp_col, buf, be_exec_version); + const size_t serialize_bytes = buf - column_values.data() + STREAMVBYTE_PADDING; + column_values.resize(serialize_bytes); + + MutableColumnPtr deser_column = dt.create_column(); + (void)dt.deserialize(column_values.data(), &deser_column, be_exec_version); + EXPECT_EQ(deser_column->size(), count); + for (size_t i = 0; i != count; ++i) { + EXPECT_EQ(deser_column->get_data_at(i), tmp_col->get_data_at(i)); + } + } + + { + size_t count = SERIALIZED_MEM_SIZE_LIMIT + 1; + auto tmp_col = dt.create_column(); + auto* col_with_type = assert_cast(tmp_col.get()); + for (size_t i = 0; i != count; ++i) { + col_with_type->insert_data("a", 1); + } + auto offsets_size = tmp_col->size() * sizeof(IColumn::Offset); + auto data_size = col_with_type->get_chars().size(); + + auto content_uncompressed_size = + dt.get_uncompressed_serialized_bytes(*tmp_col, be_exec_version); + if (be_exec_version >= USE_CONST_SERDE) { + auto expected_data_size = prefix_size; + expected_data_size += + sizeof(size_t) + + std::max(offsets_size, streamvbyte_max_compressedbytes(cast_set( + upper_int32(offsets_size)))); + expected_data_size += sizeof(size_t); + expected_data_size += + sizeof(size_t) + + std::max(data_size, (size_t)LZ4_compressBound(cast_set(data_size))); + EXPECT_EQ(content_uncompressed_size, expected_data_size); + } else { + auto expected_data_size = prefix_size2; + expected_data_size += + sizeof(size_t) + + std::max(offsets_size, streamvbyte_max_compressedbytes(cast_set( + upper_int32(offsets_size)))); + expected_data_size += + sizeof(size_t) + + std::max(data_size, (size_t)LZ4_compressBound(cast_set(data_size))); + EXPECT_EQ(content_uncompressed_size, expected_data_size); + } + std::string column_values; + column_values.resize(content_uncompressed_size); + char* buf = column_values.data(); + buf = dt.serialize(*tmp_col, buf, be_exec_version); + const size_t serialize_bytes = buf - column_values.data() + STREAMVBYTE_PADDING; + column_values.resize(serialize_bytes); + + MutableColumnPtr deser_column = dt.create_column(); + (void)dt.deserialize(column_values.data(), &deser_column, be_exec_version); + EXPECT_EQ(deser_column->size(), count); + for (size_t i = 0; i != count; ++i) { + EXPECT_EQ(deser_column->get_data_at(i), tmp_col->get_data_at(i)); + } + } + + { + auto content_uncompressed_size = + dt.get_uncompressed_serialized_bytes(column, be_exec_version); + std::string column_values; + column_values.resize(content_uncompressed_size); + char* buf = column_values.data(); + buf = dt.serialize(column, buf, be_exec_version); + const size_t serialize_bytes = buf - column_values.data() + STREAMVBYTE_PADDING; + column_values.resize(serialize_bytes); + + MutableColumnPtr deser_column = dt.create_column(); + (void)dt.deserialize(column_values.data(), &deser_column, be_exec_version); + auto count = column.size(); + EXPECT_EQ(deser_column->size(), count); + for (size_t i = 0; i != count; ++i) { + EXPECT_EQ(deser_column->get_data_at(i), column.get_data_at(i)); + } + } + }; + test_func(dt_str, *column_str32, USE_CONST_SERDE); + test_func(dt_str, *column_str32, AGGREGATION_2_1_VERSION); +} +TEST_F(DataTypeStringTest, simple_func_test) { + auto test_func = [](auto& dt) { + EXPECT_FALSE(dt.have_subtypes()); + EXPECT_FALSE(dt.should_align_right_in_pretty_formats()); + EXPECT_TRUE(dt.is_comparable()); + EXPECT_TRUE(dt.is_value_unambiguously_represented_in_contiguous_memory_region()); + EXPECT_FALSE(dt.have_maximum_size_of_value()); + EXPECT_TRUE(dt.can_be_inside_low_cardinality()); + + EXPECT_FALSE(dt.is_null_literal()); + + EXPECT_TRUE(dt.equals(dt)); + + EXPECT_EQ(std::string(dt.get_family_name()), std::string("String")); + + EXPECT_EQ(dt.get_default(), Field(String())); + }; + test_func(dt_str); + EXPECT_EQ(dt_str.get_type_id(), TypeIndex::String); +} +TEST_F(DataTypeStringTest, to_string) { + auto test_func = [](auto& dt, const auto& source_column) { + using DataType = std::remove_reference_t; + using ColumnType = typename DataType::ColumnType; + size_t row_count = source_column.size(); + { + ColumnString col_str_to_str; + BufferWritable buffer(col_str_to_str); + + for (size_t i = 0; i != row_count; ++i) { + dt.to_string(source_column, i, buffer); + buffer.commit(); + } + ColumnType col_from_str; + for (size_t i = 0; i != row_count; ++i) { + auto item = col_str_to_str.get_data_at(i); + ReadBuffer rb((char*)item.data, item.size); + auto status = dt.from_string(rb, &col_from_str); + EXPECT_TRUE(status.ok()); + EXPECT_EQ(col_from_str.get_data_at(i), source_column.get_data_at(i)); + } + } + { + ColumnType col_from_str; + for (size_t i = 0; i != row_count; ++i) { + auto str = dt.to_string(source_column, i); + ReadBuffer rb(str.data(), str.size()); + auto status = dt.from_string(rb, &col_from_str); + EXPECT_TRUE(status.ok()); + EXPECT_EQ(col_from_str.get_data_at(i), source_column.get_data_at(i)); + } + } + // to string batch + { + ColumnString col_str_to_str; + dt.to_string_batch(source_column, col_str_to_str); + EXPECT_EQ(col_str_to_str.size(), row_count); + + ColumnType col_from_str; + for (size_t i = 0; i != row_count; ++i) { + auto item = col_str_to_str.get_data_at(i); + ReadBuffer rb((char*)item.data, item.size); + auto status = dt.from_string(rb, &col_from_str); + EXPECT_TRUE(status.ok()); + EXPECT_EQ(col_from_str.get_data_at(i), source_column.get_data_at(i)); + } + } + }; + test_func(dt_str, *column_str32); +} +TEST_F(DataTypeStringTest, get_field) { + TExprNode expr_node; + expr_node.node_type = TExprNodeType::STRING_LITERAL; + expr_node.__isset.string_literal = true; + expr_node.string_literal.value = "a"; + EXPECT_EQ(dt_str.get_field(expr_node), Field("a")); +} +} // namespace doris::vectorized \ No newline at end of file diff --git a/be/test/vec/data_types/data_type_time_v2_test.cpp b/be/test/vec/data_types/data_type_time_v2_test.cpp new file mode 100644 index 00000000000000..25fd1ed3451c25 --- /dev/null +++ b/be/test/vec/data_types/data_type_time_v2_test.cpp @@ -0,0 +1,371 @@ +// 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. + +#include "vec/data_types/data_type_time_v2.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "agent/be_exec_version_manager.h" +#include "gutil/integral_types.h" +#include "testutil/test_util.h" +#include "vec/columns/column.h" +#include "vec/core/types.h" +#include "vec/data_types/common_data_type_serder_test.h" +#include "vec/data_types/common_data_type_test.h" + +namespace doris::vectorized { +static std::string test_data_dir; + +static DataTypeDateV2 dt_date_v2; +static DataTypeDateTimeV2 dt_datetime_v2_0(0); +static DataTypeDateTimeV2 dt_datetime_v2_5(5); +static DataTypeDateTimeV2 dt_datetime_v2_6(6); + +// static ColumnDateTime::MutablePtr column_datetime; +// static ColumnDate::MutablePtr column_date; +static ColumnDateTimeV2::MutablePtr column_datetime_v2_0; +static ColumnDateTimeV2::MutablePtr column_datetime_v2_5; +static ColumnDateTimeV2::MutablePtr column_datetime_v2_6; +static ColumnDateV2::MutablePtr column_date_v2; +class DataTypeDateTimeV2Test : public ::testing::Test { +public: + static void SetUpTestSuite() { + auto root_dir = std::string(getenv("ROOT")); + test_data_dir = root_dir + "/be/test/data/vec/columns"; + + column_datetime_v2_0 = ColumnDateTimeV2::create(); + column_datetime_v2_5 = ColumnDateTimeV2::create(); + column_datetime_v2_6 = ColumnDateTimeV2::create(); + column_date_v2 = ColumnDateV2::create(); + + load_columns_data(); + } + static void load_columns_data() { + std::cout << "loading test dataset" << std::endl; + auto test_func = [&](const MutableColumnPtr& column, const auto& dt, + const std::string& data_file_name) { + MutableColumns columns; + columns.push_back(column->get_ptr()); + DataTypeSerDeSPtrs serde = {dt.get_serde()}; + load_columns_data_from_file(columns, serde, ';', {0}, + test_data_dir + "/" + data_file_name); + EXPECT_TRUE(!column->empty()); + }; + test_func(column_datetime_v2_0->get_ptr(), dt_datetime_v2_0, "DATETIMEV2(0).csv"); + test_func(column_datetime_v2_5->get_ptr(), dt_datetime_v2_5, "DATETIMEV2(5).csv"); + test_func(column_datetime_v2_6->get_ptr(), dt_datetime_v2_6, "DATETIMEV2(6).csv"); + test_func(column_date_v2->get_ptr(), dt_date_v2, "DATEV2.csv"); + + std::cout << "loading test dataset done" << std::endl; + } + void SetUp() override { helper = std::make_unique(); } + std::unique_ptr helper; +}; +TEST_F(DataTypeDateTimeV2Test, simple_func_test) { + auto test_func = [](auto& dt) { + using DataType = decltype(dt); + using FieldType = typename std::remove_reference::type::FieldType; + EXPECT_FALSE(dt.have_subtypes()); + EXPECT_TRUE(dt.should_align_right_in_pretty_formats()); + EXPECT_TRUE(dt.text_can_contain_only_valid_utf8()); + EXPECT_TRUE(dt.is_comparable()); + EXPECT_TRUE(dt.is_value_represented_by_number()); + EXPECT_TRUE(dt.is_value_unambiguously_represented_in_contiguous_memory_region()); + EXPECT_TRUE(dt.have_maximum_size_of_value()); + EXPECT_EQ(dt.get_size_of_value_in_memory(), sizeof(FieldType)); + EXPECT_TRUE(dt.can_be_inside_low_cardinality()); + + EXPECT_FALSE(dt.is_null_literal()); + dt.set_null_literal(true); + EXPECT_TRUE(dt.is_null_literal()); + dt.set_null_literal(false); + + EXPECT_TRUE(dt.equals(dt)); + }; + test_func(dt_datetime_v2_0); + test_func(dt_datetime_v2_5); + test_func(dt_datetime_v2_6); + test_func(dt_date_v2); + + EXPECT_THROW(DataTypeDateTimeV2(7), Exception); + EXPECT_THROW(create_datetimev2(7), Exception); +} +TEST_F(DataTypeDateTimeV2Test, get_default) { + EXPECT_EQ(dt_datetime_v2_0.get_default(), 0UL); + EXPECT_EQ(dt_datetime_v2_5.get_default(), 0UL); + EXPECT_EQ(dt_datetime_v2_6.get_default(), 0UL); + EXPECT_EQ(dt_date_v2.get_default(), 0UL); +} +TEST_F(DataTypeDateTimeV2Test, get_field) { + { + TExprNode expr_node; + expr_node.date_literal.value = "abc"; + EXPECT_THROW(dt_date_v2.get_field(expr_node), Exception); + } + { + TExprNode expr_node; + expr_node.date_literal.value = "abc"; + EXPECT_THROW(dt_datetime_v2_0.get_field(expr_node), Exception); + } + { + TExprNode expr_node; + expr_node.date_literal.value = "2021-01-01"; + auto field = dt_date_v2.get_field(expr_node); + auto int_value = field.get(); + std::cout << "field: " << int_value << std::endl; + DateV2Value date_value = + binary_cast>(int_value); + + EXPECT_EQ(date_value.year(), 2021); + EXPECT_EQ(date_value.month(), 1); + EXPECT_EQ(date_value.day(), 1); + } + { + TExprNode expr_node; + expr_node.date_literal.value = "2021-12-31 12:23:34"; + auto field = dt_datetime_v2_0.get_field(expr_node); + auto int_value = field.get(); + std::cout << "field: " << int_value << std::endl; + DateV2Value date_value = + binary_cast>(int_value); + + EXPECT_EQ(date_value.year(), 2021); + EXPECT_EQ(date_value.month(), 12); + EXPECT_EQ(date_value.day(), 31); + EXPECT_EQ(date_value.hour(), 12); + EXPECT_EQ(date_value.minute(), 23); + EXPECT_EQ(date_value.second(), 34); + } + { + TExprNode expr_node; + TTypeNode type_node; + type_node.scalar_type.scale = 5; + expr_node.type.types.push_back(type_node); + expr_node.date_literal.value = "2021-12-31 12:23:34.12345"; + auto field = dt_datetime_v2_5.get_field(expr_node); + auto int_value = field.get(); + std::cout << "field: " << int_value << std::endl; + DateV2Value date_value = + binary_cast>(int_value); + + EXPECT_EQ(date_value.year(), 2021); + EXPECT_EQ(date_value.month(), 12); + EXPECT_EQ(date_value.day(), 31); + EXPECT_EQ(date_value.hour(), 12); + EXPECT_EQ(date_value.minute(), 23); + EXPECT_EQ(date_value.second(), 34); + EXPECT_EQ(date_value.microsecond(), 123450); + } +} +TEST_F(DataTypeDateTimeV2Test, ser_deser) { + auto test_func = [](auto& dt, const auto& column, int be_exec_version) { + std::cout << "test serialize/deserialize datatype " << dt.get_family_name() + << ", be ver: " << be_exec_version << std::endl; + using DataType = decltype(dt); + using ColumnType = typename std::remove_reference::type::ColumnType; + auto tmp_col = dt.create_column(); + auto* col_with_type = assert_cast(tmp_col.get()); + + size_t count = 0; + col_with_type->clear(); + col_with_type->insert_many_vals(1, count); + auto expected_data_size = sizeof(typename ColumnType::value_type) * count; + // binary: const flag| row num | real saved num| data + auto content_uncompressed_size = + dt.get_uncompressed_serialized_bytes(*tmp_col, be_exec_version); + if (be_exec_version >= USE_CONST_SERDE) { + EXPECT_EQ(content_uncompressed_size, 17 + expected_data_size); + } else { + EXPECT_EQ(content_uncompressed_size, 4 + expected_data_size); + } + { + std::string column_values; + column_values.resize(content_uncompressed_size); + char* buf = column_values.data(); + buf = dt.serialize(*tmp_col, buf, be_exec_version); + const size_t serialize_bytes = buf - column_values.data() + STREAMVBYTE_PADDING; + column_values.resize(serialize_bytes); + + MutableColumnPtr deser_column = dt.create_column(); + (void)dt.deserialize(column_values.data(), &deser_column, be_exec_version); + EXPECT_EQ(deser_column->size(), 0); + } + + count = 1; + col_with_type->clear(); + col_with_type->insert_many_vals(1, count); + expected_data_size = sizeof(typename ColumnType::value_type) * count; + content_uncompressed_size = dt.get_uncompressed_serialized_bytes(*tmp_col, be_exec_version); + if (be_exec_version >= USE_CONST_SERDE) { + EXPECT_EQ(content_uncompressed_size, 17 + expected_data_size); + } else { + EXPECT_EQ(content_uncompressed_size, 4 + expected_data_size); + } + { + std::string column_values; + column_values.resize(content_uncompressed_size); + char* buf = column_values.data(); + buf = dt.serialize(*tmp_col, buf, be_exec_version); + const size_t serialize_bytes = buf - column_values.data() + STREAMVBYTE_PADDING; + column_values.resize(serialize_bytes); + + MutableColumnPtr deser_column = dt.create_column(); + (void)dt.deserialize(column_values.data(), &deser_column, be_exec_version); + EXPECT_EQ(deser_column->size(), count); + for (size_t i = 0; i != count; ++i) { + EXPECT_EQ(deser_column->get_data_at(i), tmp_col->get_data_at(i)); + } + } + + count = SERIALIZED_MEM_SIZE_LIMIT + 1; + col_with_type->clear(); + col_with_type->insert_many_vals(1, count); + content_uncompressed_size = dt.get_uncompressed_serialized_bytes(*tmp_col, be_exec_version); + expected_data_size = sizeof(typename ColumnType::value_type) * count; + if (be_exec_version >= USE_CONST_SERDE) { + EXPECT_EQ(content_uncompressed_size, + 17 + 8 + + std::max(expected_data_size, + streamvbyte_max_compressedbytes( + cast_set(upper_int32(expected_data_size))))); + } else { + EXPECT_EQ(content_uncompressed_size, + 12 + std::max(expected_data_size, + streamvbyte_max_compressedbytes( + cast_set(upper_int32(expected_data_size))))); + } + { + std::string column_values; + column_values.resize(content_uncompressed_size); + char* buf = column_values.data(); + buf = dt.serialize(*tmp_col, buf, be_exec_version); + const size_t serialize_bytes = buf - column_values.data() + STREAMVBYTE_PADDING; + column_values.resize(serialize_bytes); + + MutableColumnPtr deser_column = dt.create_column(); + (void)dt.deserialize(column_values.data(), &deser_column, be_exec_version); + EXPECT_EQ(deser_column->size(), count); + for (size_t i = 0; i != count; ++i) { + EXPECT_EQ(deser_column->get_data_at(i), tmp_col->get_data_at(i)); + } + } + + { + content_uncompressed_size = + dt.get_uncompressed_serialized_bytes(column, be_exec_version); + std::string column_values; + column_values.resize(content_uncompressed_size); + char* buf = column_values.data(); + buf = dt.serialize(column, buf, be_exec_version); + const size_t serialize_bytes = buf - column_values.data() + STREAMVBYTE_PADDING; + column_values.resize(serialize_bytes); + + MutableColumnPtr deser_column = dt.create_column(); + (void)dt.deserialize(column_values.data(), &deser_column, be_exec_version); + count = column.size(); + EXPECT_EQ(deser_column->size(), count); + for (size_t i = 0; i != count; ++i) { + EXPECT_EQ(deser_column->get_data_at(i), column.get_data_at(i)); + } + } + }; + test_func(dt_date_v2, *column_date_v2, USE_CONST_SERDE); + test_func(dt_date_v2, *column_date_v2, AGGREGATION_2_1_VERSION); + + test_func(dt_datetime_v2_0, *column_datetime_v2_0, USE_CONST_SERDE); + test_func(dt_datetime_v2_0, *column_datetime_v2_0, AGGREGATION_2_1_VERSION); + test_func(dt_datetime_v2_5, *column_datetime_v2_5, USE_CONST_SERDE); + test_func(dt_datetime_v2_5, *column_datetime_v2_5, AGGREGATION_2_1_VERSION); + test_func(dt_datetime_v2_6, *column_datetime_v2_6, USE_CONST_SERDE); + test_func(dt_datetime_v2_6, *column_datetime_v2_6, AGGREGATION_2_1_VERSION); +} +TEST_F(DataTypeDateTimeV2Test, to_string) { + auto test_func = [](auto& dt, const auto& source_column) { + std::cout << "test datatype to string: " << dt.get_family_name() << std::endl; + using DataType = decltype(dt); + using ColumnType = typename std::remove_reference::type::ColumnType; + const auto* col_with_type = assert_cast(&source_column); + + size_t row_count = source_column.size(); + { + ColumnString col_str_to_str; + BufferWritable buffer(col_str_to_str); + + for (size_t i = 0; i != row_count; ++i) { + dt.to_string(source_column, i, buffer); + buffer.commit(); + } + ColumnType col_from_str; + for (size_t i = 0; i != row_count; ++i) { + auto item = col_str_to_str.get_data_at(i); + ReadBuffer rb((char*)item.data, item.size); + auto status = dt.from_string(rb, &col_from_str); + EXPECT_TRUE(status.ok()); + EXPECT_EQ(col_from_str.get_element(i), source_column.get_element(i)); + } + } + { + ColumnType col_from_str; + for (size_t i = 0; i != row_count; ++i) { + auto str = dt.to_string(source_column, i); + ReadBuffer rb(str.data(), str.size()); + auto status = dt.from_string(rb, &col_from_str); + EXPECT_TRUE(status.ok()); + EXPECT_EQ(col_from_str.get_element(i), source_column.get_element(i)); + } + } + { + ColumnType col_from_str; + for (size_t i = 0; i != row_count; ++i) { + auto str = dt.to_string(col_with_type->get_element(i)); + ReadBuffer rb(str.data(), str.size()); + auto status = dt.from_string(rb, &col_from_str); + EXPECT_TRUE(status.ok()); + EXPECT_EQ(col_from_str.get_element(i), source_column.get_element(i)); + } + } + // to string batch + { + ColumnString col_str_to_str; + dt.to_string_batch(source_column, col_str_to_str); + EXPECT_EQ(col_str_to_str.size(), row_count); + + ColumnType col_from_str; + for (size_t i = 0; i != row_count; ++i) { + auto item = col_str_to_str.get_data_at(i); + ReadBuffer rb((char*)item.data, item.size); + auto status = dt.from_string(rb, &col_from_str); + EXPECT_TRUE(status.ok()); + EXPECT_EQ(col_from_str.get_element(i), source_column.get_element(i)); + } + } + }; + test_func(dt_date_v2, *column_date_v2); + test_func(dt_datetime_v2_0, *column_datetime_v2_0); + test_func(dt_datetime_v2_5, *column_datetime_v2_5); + test_func(dt_datetime_v2_6, *column_datetime_v2_6); +} +} // namespace doris::vectorized \ No newline at end of file diff --git a/be/test/vec/data_types/serde/data_type_serde_datetime_v2_test.cpp b/be/test/vec/data_types/serde/data_type_serde_datetime_v2_test.cpp new file mode 100644 index 00000000000000..b95f14faf0e245 --- /dev/null +++ b/be/test/vec/data_types/serde/data_type_serde_datetime_v2_test.cpp @@ -0,0 +1,202 @@ +// 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. + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "testutil/test_util.h" +#include "util/slice.h" +#include "util/string_util.h" +#include "vec/columns/column.h" +#include "vec/columns/columns_number.h" +#include "vec/common/assert_cast.h" +#include "vec/core/types.h" +#include "vec/data_types/common_data_type_serder_test.h" +#include "vec/data_types/common_data_type_test.h" +#include "vec/data_types/data_type.h" +#include "vec/data_types/serde/data_type_datetimev2_serde.h" +#include "vec/data_types/serde/data_type_datev2_serde.h" +namespace doris::vectorized { +static std::string test_data_dir; + +static auto serde_date_v2 = std::make_shared(); +static auto serde_datetime_v2_0 = std::make_shared(0); +static auto serde_datetime_v2_5 = std::make_shared(5); +static auto serde_datetime_v2_6 = std::make_shared(6); + +static ColumnDateTimeV2::MutablePtr column_datetime_v2_0; +static ColumnDateTimeV2::MutablePtr column_datetime_v2_5; +static ColumnDateTimeV2::MutablePtr column_datetime_v2_6; +static ColumnDateV2::MutablePtr column_date_v2; +class DataTypeDateTimeV2SerDeTest : public ::testing::Test { +public: + static void SetUpTestSuite() { + auto root_dir = std::string(getenv("ROOT")); + test_data_dir = root_dir + "/be/test/data/vec/columns"; + + column_datetime_v2_0 = ColumnDateTimeV2::create(); + column_datetime_v2_5 = ColumnDateTimeV2::create(); + column_datetime_v2_6 = ColumnDateTimeV2::create(); + column_date_v2 = ColumnDateV2::create(); + + load_columns_data(); + } + static void load_columns_data() { + std::cout << "loading test dataset" << std::endl; + auto test_func = [&](const MutableColumnPtr& column, const auto& serde, + const std::string& data_file_name) { + MutableColumns columns; + columns.push_back(column->get_ptr()); + DataTypeSerDeSPtrs serdes = {serde}; + load_columns_data_from_file(columns, serdes, ';', {0}, + test_data_dir + "/" + data_file_name); + EXPECT_TRUE(!column->empty()); + }; + test_func(column_datetime_v2_0->get_ptr(), serde_datetime_v2_0, "DATETIMEV2(0).csv"); + test_func(column_datetime_v2_5->get_ptr(), serde_datetime_v2_5, "DATETIMEV2(5).csv"); + test_func(column_datetime_v2_6->get_ptr(), serde_datetime_v2_6, "DATETIMEV2(6).csv"); + test_func(column_date_v2->get_ptr(), serde_date_v2, "DATEV2.csv"); + + std::cout << "loading test dataset done" << std::endl; + } +}; +TEST_F(DataTypeDateTimeV2SerDeTest, serdes) { + auto test_func = [](const auto& serde, const auto& source_column) { + using SerdeType = decltype(serde); + using ColumnType = typename std::remove_reference::type::ColumnType; + + auto row_count = source_column->size(); + auto option = DataTypeSerDe::FormatOptions(); + char field_delim = ';'; + option.field_delim = std::string(1, field_delim); + + { + auto ser_col = ColumnString::create(); + ser_col->reserve(row_count); + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + + VectorBufferWriter buffer_writer(*ser_col.get()); + for (size_t j = 0; j != row_count; ++j) { + auto st = + serde.serialize_one_cell_to_json(*source_column, j, buffer_writer, option); + EXPECT_TRUE(st.ok()) << "Failed to serialize column at row " << j << ": " << st; + + buffer_writer.commit(); + std::string actual_str_value = ser_col->get_data_at(j).to_string(); + Slice slice {actual_str_value.data(), actual_str_value.size()}; + st = serde.deserialize_one_cell_from_json(*deser_column, slice, option); + EXPECT_TRUE(st.ok()) << "Failed to deserialize column at row " << j << ": " << st; + EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j)); + } + } + + // test serialize_column_to_json + { + auto ser_col = ColumnString::create(); + ser_col->reserve(row_count); + + VectorBufferWriter buffer_writer(*ser_col.get()); + auto st = serde.serialize_column_to_json(*source_column, 0, source_column->size(), + buffer_writer, option); + EXPECT_TRUE(st.ok()) << "Failed to serialize column to json: " << st; + buffer_writer.commit(); + + std::string json_data((char*)ser_col->get_chars().data(), ser_col->get_chars().size()); + std::vector strs = doris::split(json_data, std::string(1, field_delim)); + std::vector slices; + for (const auto& s : strs) { + Slice tmp_slice(s.data(), s.size()); + tmp_slice.trim_prefix(); + slices.emplace_back(tmp_slice); + } + + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + uint64_t num_deserialized = 0; + st = serde.deserialize_column_from_json_vector(*deser_column, slices, &num_deserialized, + option); + EXPECT_TRUE(st.ok()) << "Failed to deserialize column from json: " << st; + EXPECT_EQ(num_deserialized, row_count); + for (size_t j = 0; j != row_count; ++j) { + EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j)); + } + } + + { + // test write_column_to_pb/read_column_from_pb + PValues pv = PValues(); + Status st = serde.write_column_to_pb(*source_column, pv, 0, row_count); + EXPECT_TRUE(st.ok()) << "Failed to write column to pb: " << st; + + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + st = serde.read_column_from_pb(*deser_column, pv); + EXPECT_TRUE(st.ok()) << "Failed to read column from pb: " << st; + for (size_t j = 0; j != row_count; ++j) { + EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j)); + } + } + { + // test write_one_cell_to_jsonb/read_one_cell_from_jsonb + JsonbWriterT jsonb_writer; + jsonb_writer.writeStartObject(); + Arena pool; + + for (size_t j = 0; j != row_count; ++j) { + serde.write_one_cell_to_jsonb(*source_column, jsonb_writer, &pool, 0, j); + } + jsonb_writer.writeEndObject(); + + auto ser_col = ColumnString::create(); + ser_col->reserve(row_count); + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + auto* pdoc = JsonbDocument::createDocument(jsonb_writer.getOutput()->getBuffer(), + jsonb_writer.getOutput()->getSize()); + JsonbDocument& doc = *pdoc; + for (auto it = doc->begin(); it != doc->end(); ++it) { + serde.read_one_cell_from_jsonb(*deser_column, it->value()); + } + for (size_t j = 0; j != row_count; ++j) { + EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j)); + } + } + { + // test write_column_to_mysql + MysqlRowBuffer mysql_rb; + for (int row_idx = 0; row_idx < row_count; ++row_idx) { + auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false, + option); + EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st; + } + } + }; + test_func(*serde_datetime_v2_0, column_datetime_v2_0); + test_func(*serde_datetime_v2_5, column_datetime_v2_5); + test_func(*serde_datetime_v2_6, column_datetime_v2_6); + test_func(*serde_date_v2, column_date_v2); +} + +} // namespace doris::vectorized \ No newline at end of file diff --git a/be/test/vec/data_types/serde/data_type_serde_decimal_test.cpp b/be/test/vec/data_types/serde/data_type_serde_decimal_test.cpp new file mode 100644 index 00000000000000..381da890e20658 --- /dev/null +++ b/be/test/vec/data_types/serde/data_type_serde_decimal_test.cpp @@ -0,0 +1,285 @@ +// 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. + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "testutil/test_util.h" +#include "util/slice.h" +#include "util/string_util.h" +#include "vec/columns/column.h" +#include "vec/columns/columns_number.h" +#include "vec/common/assert_cast.h" +#include "vec/core/types.h" +#include "vec/data_types/common_data_type_serder_test.h" +#include "vec/data_types/common_data_type_test.h" +#include "vec/data_types/data_type.h" + +namespace doris::vectorized { +static std::string test_data_dir; + +static auto serde_decimal32_1 = std::make_shared>(1, 0); +static auto serde_decimal32_2 = std::make_shared>(1, 1); +static auto serde_decimal32_3 = std::make_shared>(8, 3); +static auto serde_decimal32_4 = std::make_shared>(9, 0); +static auto serde_decimal32_5 = std::make_shared>(9, 9); + +static auto serde_decimal64_1 = std::make_shared>(18, 0); +static auto serde_decimal64_2 = std::make_shared>(18, 9); +static auto serde_decimal64_3 = std::make_shared>(18, 18); + +static auto serde_decimal128v2 = std::make_shared>(27, 9); + +static auto serde_decimal128v3_1 = std::make_shared>(38, 0); +static auto serde_decimal128v3_2 = std::make_shared>(38, 30); +static auto serde_decimal128v3_3 = std::make_shared>(38, 38); + +static auto serde_decimal256_1 = std::make_shared>(76, 0); +static auto serde_decimal256_2 = std::make_shared>(76, 38); +static auto serde_decimal256_3 = std::make_shared>(76, 76); + +static ColumnDecimal32::MutablePtr column_decimal32_1; // decimal32(1,0) +static ColumnDecimal32::MutablePtr column_decimal32_2; // decimal32(1,1) +static ColumnDecimal32::MutablePtr column_decimal32_3; // decimal32(8,3) +static ColumnDecimal32::MutablePtr column_decimal32_4; // decimal32(9,0) +static ColumnDecimal32::MutablePtr column_decimal32_5; // decimal32(9,9) + +static ColumnDecimal64::MutablePtr column_decimal64_1; // decimal64(18,0) +static ColumnDecimal64::MutablePtr column_decimal64_2; // decimal64(18,9) +static ColumnDecimal64::MutablePtr column_decimal64_3; // decimal64(18,18) + +static ColumnDecimal128V2::MutablePtr column_decimal128_v2; + +static ColumnDecimal128V3::MutablePtr column_decimal128v3_1; // decimal128(38,0) +static ColumnDecimal128V3::MutablePtr column_decimal128v3_2; // decimal128(38,30) +static ColumnDecimal128V3::MutablePtr column_decimal128v3_3; // decimal128(38,38) + +static ColumnDecimal256::MutablePtr column_decimal256_1; // decimal256(76,0) +static ColumnDecimal256::MutablePtr column_decimal256_2; // decimal256(76,38) +static ColumnDecimal256::MutablePtr column_decimal256_3; // decimal256(76,76) +class DataTypeDecimalSerDeTest : public ::testing::Test { +public: + static void SetUpTestSuite() { + auto root_dir = std::string(getenv("ROOT")); + test_data_dir = root_dir + "/be/test/data/vec/columns"; + + column_decimal32_1 = ColumnDecimal32::create(0, 0); + column_decimal32_2 = ColumnDecimal32::create(0, 1); + column_decimal32_3 = ColumnDecimal32::create(0, 3); + column_decimal32_4 = ColumnDecimal32::create(0, 0); + column_decimal32_5 = ColumnDecimal32::create(0, 9); + + column_decimal64_1 = ColumnDecimal64::create(0, 0); + column_decimal64_2 = ColumnDecimal64::create(0, 9); + column_decimal64_3 = ColumnDecimal64::create(0, 18); + + column_decimal128_v2 = ColumnDecimal128V2::create(0, 9); + + column_decimal128v3_1 = ColumnDecimal128V3::create(0, 0); + column_decimal128v3_2 = ColumnDecimal128V3::create(0, 30); + column_decimal128v3_3 = ColumnDecimal128V3::create(0, 38); + + column_decimal256_1 = ColumnDecimal256::create(0, 0); + column_decimal256_2 = ColumnDecimal256::create(0, 38); + column_decimal256_3 = ColumnDecimal256::create(0, 76); + + load_columns_data(); + } + static void load_columns_data() { + std::cout << "loading test dataset" << std::endl; + auto load_data_func = [](auto& serde, auto& column, const std::string& data_file) { + MutableColumns columns; + columns.push_back(column->get_ptr()); + DataTypeSerDeSPtrs serdes = {serde}; + load_columns_data_from_file(columns, serdes, ';', {0}, data_file); + EXPECT_TRUE(!column->empty()); + }; + load_data_func(serde_decimal32_1, column_decimal32_1, + test_data_dir + "/DECIMALV3(1,0).csv"); + load_data_func(serde_decimal32_2, column_decimal32_2, + test_data_dir + "/DECIMALV3(1,1).csv"); + load_data_func(serde_decimal32_3, column_decimal32_3, + test_data_dir + "/DECIMALV3(8,3).csv"); + load_data_func(serde_decimal32_4, column_decimal32_4, + test_data_dir + "/DECIMALV3(9,0).csv"); + load_data_func(serde_decimal32_5, column_decimal32_5, + test_data_dir + "/DECIMALV3(9,9).csv"); + + load_data_func(serde_decimal64_1, column_decimal64_1, + test_data_dir + "/DECIMALV3(18,0).csv"); + load_data_func(serde_decimal64_2, column_decimal64_2, + test_data_dir + "/DECIMALV3(18,9).csv"); + load_data_func(serde_decimal64_3, column_decimal64_3, + test_data_dir + "/DECIMALV3(18,18).csv"); + + load_data_func(serde_decimal128v3_1, column_decimal128v3_1, + test_data_dir + "/DECIMALV3(38,0).csv"); + load_data_func(serde_decimal128v3_2, column_decimal128v3_2, + test_data_dir + "/DECIMALV3(38,30).csv"); + load_data_func(serde_decimal128v3_3, column_decimal128v3_3, + test_data_dir + "/DECIMALV3(38,38).csv"); + + load_data_func(serde_decimal256_1, column_decimal256_1, + test_data_dir + "/DECIMALV3(76,0).csv"); + load_data_func(serde_decimal256_2, column_decimal256_2, + test_data_dir + "/DECIMALV3(76,38).csv"); + load_data_func(serde_decimal256_3, column_decimal256_3, + test_data_dir + "/DECIMALV3(76,76).csv"); + + std::cout << "loading test dataset done" << std::endl; + } + void SetUp() override { helper = std::make_unique(); } + std::unique_ptr helper; +}; +TEST_F(DataTypeDecimalSerDeTest, serdes) { + auto test_func = [](const auto& serde, const auto& source_column) { + using SerdeType = decltype(serde); + using ColumnType = typename std::remove_reference::type::ColumnType; + + auto row_count = source_column->size(); + auto option = DataTypeSerDe::FormatOptions(); + char field_delim = ';'; + option.field_delim = std::string(1, field_delim); + + { + auto ser_col = ColumnString::create(); + ser_col->reserve(row_count); + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + + VectorBufferWriter buffer_writer(*ser_col.get()); + for (size_t j = 0; j != row_count; ++j) { + auto st = + serde.serialize_one_cell_to_json(*source_column, j, buffer_writer, option); + EXPECT_TRUE(st.ok()) << "Failed to serialize column at row " << j << ": " << st; + + buffer_writer.commit(); + std::string actual_str_value = ser_col->get_data_at(j).to_string(); + Slice slice {actual_str_value.data(), actual_str_value.size()}; + st = serde.deserialize_one_cell_from_json(*deser_column, slice, option); + EXPECT_TRUE(st.ok()) << "Failed to deserialize column at row " << j << ": " << st; + EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j)); + } + } + + // test serialize_column_to_json + { + auto ser_col = ColumnString::create(); + ser_col->reserve(row_count); + + VectorBufferWriter buffer_writer(*ser_col.get()); + auto st = serde.serialize_column_to_json(*source_column, 0, source_column->size(), + buffer_writer, option); + EXPECT_TRUE(st.ok()) << "Failed to serialize column to json: " << st; + buffer_writer.commit(); + + std::string json_data((char*)ser_col->get_chars().data(), ser_col->get_chars().size()); + std::vector strs = doris::split(json_data, std::string(1, field_delim)); + std::vector slices; + for (const auto& s : strs) { + Slice tmp_slice(s.data(), s.size()); + tmp_slice.trim_prefix(); + slices.emplace_back(tmp_slice); + } + + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + uint64_t num_deserialized = 0; + st = serde.deserialize_column_from_json_vector(*deser_column, slices, &num_deserialized, + option); + EXPECT_TRUE(st.ok()) << "Failed to deserialize column from json: " << st; + EXPECT_EQ(num_deserialized, row_count); + for (size_t j = 0; j != row_count; ++j) { + EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j)); + } + } + + { + // test write_column_to_pb/read_column_from_pb + PValues pv = PValues(); + Status st = serde.write_column_to_pb(*source_column, pv, 0, row_count); + EXPECT_TRUE(st.ok()) << "Failed to write column to pb: " << st; + + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + st = serde.read_column_from_pb(*deser_column, pv); + EXPECT_TRUE(st.ok()) << "Failed to read column from pb: " << st; + for (size_t j = 0; j != row_count; ++j) { + EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j)); + } + } + { + // test write_one_cell_to_jsonb/read_one_cell_from_jsonb + JsonbWriterT jsonb_writer; + jsonb_writer.writeStartObject(); + Arena pool; + + for (size_t j = 0; j != row_count; ++j) { + serde.write_one_cell_to_jsonb(*source_column, jsonb_writer, &pool, 0, j); + } + jsonb_writer.writeEndObject(); + + auto ser_col = ColumnString::create(); + ser_col->reserve(row_count); + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + auto* pdoc = JsonbDocument::createDocument(jsonb_writer.getOutput()->getBuffer(), + jsonb_writer.getOutput()->getSize()); + JsonbDocument& doc = *pdoc; + for (auto it = doc->begin(); it != doc->end(); ++it) { + serde.read_one_cell_from_jsonb(*deser_column, it->value()); + } + for (size_t j = 0; j != row_count; ++j) { + EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j)); + } + } + { + // test write_column_to_mysql + MysqlRowBuffer mysql_rb; + for (int row_idx = 0; row_idx < row_count; ++row_idx) { + auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false, + option); + EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st; + } + } + }; + test_func(*serde_decimal32_1, column_decimal32_1); + test_func(*serde_decimal32_2, column_decimal32_2); + test_func(*serde_decimal32_3, column_decimal32_3); + test_func(*serde_decimal32_4, column_decimal32_4); + test_func(*serde_decimal32_5, column_decimal32_5); + + test_func(*serde_decimal64_1, column_decimal64_1); + test_func(*serde_decimal64_2, column_decimal64_2); + test_func(*serde_decimal64_3, column_decimal64_3); + + test_func(*serde_decimal128v3_1, column_decimal128v3_1); + test_func(*serde_decimal128v3_2, column_decimal128v3_2); + test_func(*serde_decimal128v3_3, column_decimal128v3_3); + + test_func(*serde_decimal256_1, column_decimal256_1); + test_func(*serde_decimal256_2, column_decimal256_2); + test_func(*serde_decimal256_3, column_decimal256_3); +} +} // namespace doris::vectorized \ No newline at end of file diff --git a/be/test/vec/data_types/serde/data_type_serde_number_test.cpp b/be/test/vec/data_types/serde/data_type_serde_number_test.cpp new file mode 100644 index 00000000000000..b839b1ecc3f94a --- /dev/null +++ b/be/test/vec/data_types/serde/data_type_serde_number_test.cpp @@ -0,0 +1,239 @@ +// 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. + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "testutil/test_util.h" +#include "util/slice.h" +#include "util/string_util.h" +#include "vec/columns/column.h" +#include "vec/columns/columns_number.h" +#include "vec/common/assert_cast.h" +#include "vec/core/types.h" +#include "vec/data_types/common_data_type_serder_test.h" +#include "vec/data_types/common_data_type_test.h" +#include "vec/data_types/data_type.h" + +namespace doris::vectorized { +static std::string test_data_dir; + +static auto serde_float32 = std::make_shared>(); +static auto serde_float64 = std::make_shared>(); +static auto serde_int8 = std::make_shared>(); +static auto serde_int16 = std::make_shared>(); +static auto serde_int32 = std::make_shared>(); +static auto serde_int64 = std::make_shared>(); +static auto serde_int128 = std::make_shared>(); +static auto serde_uint8 = std::make_shared>(); +static auto serde_uint16 = std::make_shared>(); +static auto serde_uint32 = std::make_shared>(); +static auto serde_uint64 = std::make_shared>(); +static auto serde_uint128 = std::make_shared>(); + +static ColumnFloat32::MutablePtr column_float32; +static ColumnFloat64::MutablePtr column_float64; +static ColumnInt8::MutablePtr column_int8; +static ColumnInt16::MutablePtr column_int16; +static ColumnInt32::MutablePtr column_int32; +static ColumnInt64::MutablePtr column_int64; +static ColumnInt128::MutablePtr column_int128; +static ColumnUInt8::MutablePtr column_uint8; +static ColumnUInt16::MutablePtr column_uint16; +static ColumnUInt32::MutablePtr column_uint32; +static ColumnUInt64::MutablePtr column_uint64; + +class DataTypeNumberSerDeTest : public ::testing::Test { +public: + static void SetUpTestSuite() { + auto root_dir = std::string(getenv("ROOT")); + test_data_dir = root_dir + "/be/test/data/vec/columns"; + + column_float32 = ColumnFloat32::create(); + column_float64 = ColumnFloat64::create(); + + column_int8 = ColumnInt8::create(); + column_int16 = ColumnInt16::create(); + column_int32 = ColumnInt32::create(); + column_int64 = ColumnInt64::create(); + column_int128 = ColumnInt128::create(); + + column_uint8 = ColumnUInt8::create(); + column_uint16 = ColumnUInt16::create(); + column_uint32 = ColumnUInt32::create(); + column_uint64 = ColumnUInt64::create(); + + load_columns_data(); + } + static void load_columns_data() { + std::cout << "loading test dataset" << std::endl; + auto test_func = [&](const MutableColumnPtr& column, const auto& serde, + const std::string& data_file_name) { + MutableColumns columns; + columns.push_back(column->get_ptr()); + DataTypeSerDeSPtrs serdes = {serde}; + load_columns_data_from_file(columns, serdes, ';', {0}, + test_data_dir + "/" + data_file_name); + EXPECT_TRUE(!column->empty()); + }; + test_func(column_float32->get_ptr(), serde_float32, "FLOAT.csv"); + test_func(column_float64->get_ptr(), serde_float64, "DOUBLE.csv"); + + test_func(column_int8->get_ptr(), serde_int8, "TINYINT.csv"); + test_func(column_int16->get_ptr(), serde_int16, "SMALLINT.csv"); + test_func(column_int32->get_ptr(), serde_int32, "INT.csv"); + test_func(column_int64->get_ptr(), serde_int64, "BIGINT.csv"); + test_func(column_int128->get_ptr(), serde_int128, "LARGEINT.csv"); + + test_func(column_uint8->get_ptr(), serde_uint8, "TINYINT_UNSIGNED.csv"); + test_func(column_uint16->get_ptr(), serde_uint16, "SMALLINT_UNSIGNED.csv"); + test_func(column_uint32->get_ptr(), serde_uint32, "INT_UNSIGNED.csv"); + test_func(column_uint64->get_ptr(), serde_uint64, "BIGINT_UNSIGNED.csv"); + } +}; +TEST_F(DataTypeNumberSerDeTest, serdes) { + auto test_func = [](const auto& serde, const auto& source_column) { + using SerdeType = decltype(serde); + using ColumnType = typename std::remove_reference::type::ColumnType; + + auto row_count = source_column->size(); + auto option = DataTypeSerDe::FormatOptions(); + char field_delim = ';'; + option.field_delim = std::string(1, field_delim); + + { + auto ser_col = ColumnString::create(); + ser_col->reserve(row_count); + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + + VectorBufferWriter buffer_writer(*ser_col.get()); + for (size_t j = 0; j != row_count; ++j) { + auto st = + serde.serialize_one_cell_to_json(*source_column, j, buffer_writer, option); + EXPECT_TRUE(st.ok()) << "Failed to serialize column at row " << j << ": " << st; + + buffer_writer.commit(); + std::string actual_str_value = ser_col->get_data_at(j).to_string(); + Slice slice {actual_str_value.data(), actual_str_value.size()}; + st = serde.deserialize_one_cell_from_json(*deser_column, slice, option); + EXPECT_TRUE(st.ok()) << "Failed to deserialize column at row " << j << ": " << st; + EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j)); + } + } + + // test serialize_column_to_json + { + auto ser_col = ColumnString::create(); + ser_col->reserve(row_count); + + VectorBufferWriter buffer_writer(*ser_col.get()); + auto st = serde.serialize_column_to_json(*source_column, 0, source_column->size(), + buffer_writer, option); + EXPECT_TRUE(st.ok()) << "Failed to serialize column to json: " << st; + buffer_writer.commit(); + + std::string json_data((char*)ser_col->get_chars().data(), ser_col->get_chars().size()); + std::vector strs = doris::split(json_data, std::string(1, field_delim)); + std::vector slices; + for (const auto& s : strs) { + Slice tmp_slice(s.data(), s.size()); + tmp_slice.trim_prefix(); + slices.emplace_back(tmp_slice); + } + + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + uint64_t num_deserialized = 0; + st = serde.deserialize_column_from_json_vector(*deser_column, slices, &num_deserialized, + option); + EXPECT_TRUE(st.ok()) << "Failed to deserialize column from json: " << st; + EXPECT_EQ(num_deserialized, row_count); + for (size_t j = 0; j != row_count; ++j) { + EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j)); + } + } + + { + // test write_column_to_pb/read_column_from_pb + PValues pv = PValues(); + Status st = serde.write_column_to_pb(*source_column, pv, 0, row_count); + EXPECT_TRUE(st.ok()) << "Failed to write column to pb: " << st; + + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + st = serde.read_column_from_pb(*deser_column, pv); + EXPECT_TRUE(st.ok()) << "Failed to read column from pb: " << st; + for (size_t j = 0; j != row_count; ++j) { + EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j)); + } + } + { + // test write_one_cell_to_jsonb/read_one_cell_from_jsonb + JsonbWriterT jsonb_writer; + jsonb_writer.writeStartObject(); + Arena pool; + + for (size_t j = 0; j != row_count; ++j) { + serde.write_one_cell_to_jsonb(*source_column, jsonb_writer, &pool, 0, j); + } + jsonb_writer.writeEndObject(); + + auto ser_col = ColumnString::create(); + ser_col->reserve(row_count); + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + auto* pdoc = JsonbDocument::createDocument(jsonb_writer.getOutput()->getBuffer(), + jsonb_writer.getOutput()->getSize()); + JsonbDocument& doc = *pdoc; + for (auto it = doc->begin(); it != doc->end(); ++it) { + serde.read_one_cell_from_jsonb(*deser_column, it->value()); + } + for (size_t j = 0; j != row_count; ++j) { + EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j)); + } + } + { + // test write_column_to_mysql + MysqlRowBuffer mysql_rb; + for (int row_idx = 0; row_idx < row_count; ++row_idx) { + auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false, + option); + EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st; + } + } + }; + test_func(*serde_float32, column_float32); + test_func(*serde_float64, column_float64); + test_func(*serde_int8, column_int8); + test_func(*serde_int16, column_int16); + test_func(*serde_int32, column_int32); + test_func(*serde_int64, column_int64); + test_func(*serde_int128, column_int128); + test_func(*serde_uint8, column_uint8); + test_func(*serde_uint16, column_uint16); + test_func(*serde_uint32, column_uint32); + test_func(*serde_uint64, column_uint64); +} +} // namespace doris::vectorized \ No newline at end of file diff --git a/be/test/vec/data_types/serde/data_type_serde_string_test.cpp b/be/test/vec/data_types/serde/data_type_serde_string_test.cpp new file mode 100644 index 00000000000000..5d2bae14b6373d --- /dev/null +++ b/be/test/vec/data_types/serde/data_type_serde_string_test.cpp @@ -0,0 +1,196 @@ +// 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. + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "agent/be_exec_version_manager.h" +#include "olap/olap_common.h" +#include "runtime/define_primitive_type.h" +#include "runtime/types.h" +#include "testutil/test_util.h" +#include "vec/columns/column.h" +#include "vec/common/assert_cast.h" +#include "vec/core/field.h" +#include "vec/core/types.h" +#include "vec/data_types/common_data_type_serder_test.h" +#include "vec/data_types/common_data_type_test.h" +#include "vec/data_types/data_type.h" +#include "vec/data_types/data_type_factory.hpp" +#include "vec/data_types/data_type_nullable.h" +#include "vec/data_types/data_type_string.h" +#include "vec/io/reader_buffer.h" + +namespace doris::vectorized { +static std::string test_data_dir; + +static auto serde_str = std::make_shared(); + +static ColumnString::MutablePtr column_str32; +static ColumnString64::MutablePtr column_str64; +class DataTypeStringSerDeTest : public ::testing::Test { +protected: + static void SetUpTestSuite() { + auto root_dir = std::string(getenv("ROOT")); + test_data_dir = root_dir + "/be/test/data/vec/columns"; + + column_str32 = ColumnString::create(); + column_str64 = ColumnString64::create(); + + load_columns_data(); + } + + static void load_columns_data() { + std::cout << "loading test dataset" << std::endl; + { + MutableColumns columns; + columns.push_back(column_str32->get_ptr()); + DataTypeSerDeSPtrs serde = {serde_str}; + std::string data_file = test_data_dir + "/STRING.csv"; + load_columns_data_from_file(columns, serde, ';', {0}, data_file); + EXPECT_TRUE(!column_str32->empty()); + column_str32->insert_default(); + + column_str64->insert_range_from(*column_str32, 0, column_str32->size()); + } + std::cout << "column str size: " << column_str32->size() << std::endl; + } +}; +TEST_F(DataTypeStringSerDeTest, serdes) { + auto test_func = [](const auto& serde, const auto& source_column) { + using SerdeType = decltype(serde); + using ColumnType = typename std::remove_reference::type::ColumnStrType; + + auto row_count = source_column->size(); + auto option = DataTypeSerDe::FormatOptions(); + char field_delim = ';'; + option.field_delim = std::string(1, field_delim); + + { + auto ser_col = ColumnString::create(); + ser_col->reserve(row_count); + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + + VectorBufferWriter buffer_writer(*ser_col.get()); + for (size_t j = 0; j != row_count; ++j) { + auto st = + serde.serialize_one_cell_to_json(*source_column, j, buffer_writer, option); + EXPECT_TRUE(st.ok()) << "Failed to serialize column at row " << j << ": " << st; + + buffer_writer.commit(); + std::string actual_str_value = ser_col->get_data_at(j).to_string(); + Slice slice {actual_str_value.data(), actual_str_value.size()}; + st = serde.deserialize_one_cell_from_json(*deser_column, slice, option); + EXPECT_TRUE(st.ok()) << "Failed to deserialize column at row " << j << ": " << st; + EXPECT_EQ(deser_col_with_type->get_data_at(j), source_column->get_data_at(j)); + } + } + + // test serialize_column_to_json + { + auto ser_col = ColumnString::create(); + ser_col->reserve(row_count); + + VectorBufferWriter buffer_writer(*ser_col.get()); + auto st = serde.serialize_column_to_json(*source_column, 0, source_column->size(), + buffer_writer, option); + EXPECT_TRUE(st.ok()) << "Failed to serialize column to json: " << st; + buffer_writer.commit(); + + std::string json_data((char*)ser_col->get_chars().data(), ser_col->get_chars().size()); + std::vector strs = doris::split(json_data, std::string(1, field_delim)); + std::vector slices; + for (const auto& s : strs) { + Slice tmp_slice(s.data(), s.size()); + tmp_slice.trim_prefix(); + slices.emplace_back(tmp_slice); + } + + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + uint64_t num_deserialized = 0; + st = serde.deserialize_column_from_json_vector(*deser_column, slices, &num_deserialized, + option); + EXPECT_TRUE(st.ok()) << "Failed to deserialize column from json: " << st; + EXPECT_EQ(num_deserialized, row_count); + for (size_t j = 0; j != row_count; ++j) { + EXPECT_EQ(deser_col_with_type->get_data_at(j), source_column->get_data_at(j)); + } + } + + { + // test write_column_to_pb/read_column_from_pb + PValues pv = PValues(); + Status st = serde.write_column_to_pb(*source_column, pv, 0, row_count); + EXPECT_TRUE(st.ok()) << "Failed to write column to pb: " << st; + + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + st = serde.read_column_from_pb(*deser_column, pv); + EXPECT_TRUE(st.ok()) << "Failed to read column from pb: " << st; + for (size_t j = 0; j != row_count; ++j) { + EXPECT_EQ(deser_col_with_type->get_data_at(j), source_column->get_data_at(j)); + } + } + { + // test write_one_cell_to_jsonb/read_one_cell_from_jsonb + JsonbWriterT jsonb_writer; + jsonb_writer.writeStartObject(); + Arena pool; + + for (size_t j = 0; j != row_count; ++j) { + serde.write_one_cell_to_jsonb(*source_column, jsonb_writer, &pool, 0, j); + } + jsonb_writer.writeEndObject(); + + auto ser_col = ColumnString::create(); + ser_col->reserve(row_count); + MutableColumnPtr deser_column = source_column->clone_empty(); + const auto* deser_col_with_type = assert_cast(deser_column.get()); + auto* pdoc = JsonbDocument::createDocument(jsonb_writer.getOutput()->getBuffer(), + jsonb_writer.getOutput()->getSize()); + JsonbDocument& doc = *pdoc; + for (auto it = doc->begin(); it != doc->end(); ++it) { + serde.read_one_cell_from_jsonb(*deser_column, it->value()); + } + for (size_t j = 0; j != row_count; ++j) { + EXPECT_EQ(deser_col_with_type->get_data_at(j), source_column->get_data_at(j)); + } + } + { + // test write_column_to_mysql + MysqlRowBuffer mysql_rb; + for (int row_idx = 0; row_idx < row_count; ++row_idx) { + auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false, + option); + EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st; + } + } + }; + test_func(*serde_str, column_str32); +} + +} // namespace doris::vectorized \ No newline at end of file