This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new ec54b498418 [fix](variant) Fix variant type inference from JSON
(#59861)
ec54b498418 is described below
commit ec54b49841811b9a97e333464c14ca6d576e4f2e
Author: Sun Chenyang <[email protected]>
AuthorDate: Wed Jan 14 18:11:29 2026 +0800
[fix](variant) Fix variant type inference from JSON (#59861)
### What problem does this PR solve?
variant type inference from json: bigint, largeint, string, null,
double, array, jsonb
Problem Summary:
### Release note
None
### Check List (For Author)
- Test <!-- At least one of them must be included. -->
- [x] Regression test
- [x] Unit Test
- [ ] Manual test (add detailed scripts or steps below)
- [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
- [ ] Previous test can cover this change.
- [ ] No code files have been changed.
- [ ] Other reason <!-- Add your reason? -->
- Behavior changed:
- [ ] No.
- [ ] Yes. <!-- Explain the behavior change -->
- Does this need documentation?
- [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
https://github.com/apache/doris-website/pull/1214 -->
### Check List (For Reviewer who merge this PR)
- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
---
be/src/vec/columns/column_variant.cpp | 4 +-
be/src/vec/common/schema_util.cpp | 53 ----
be/src/vec/common/schema_util.h | 5 -
be/src/vec/data_types/get_least_supertype.cpp | 3 +
.../vec/data_types/serde/data_type_jsonb_serde.cpp | 4 +
be/src/vec/json/json_parser.h | 31 +--
be/src/vec/json/parse2column.h | 1 -
be/src/vec/json/simd_json_parser.h | 1 +
.../vec/columns/column_variant_allocated_bytes.out | 4 +-
.../vec/columns/column_variant_byte_size.out | 4 +-
.../column_variant_update_crc_with_value.out | 2 +-
..._variant_update_crc_with_value.out_with_nullmap | 2 +-
.../column_variant_update_crcs_with_value.out | 2 +-
...variant_update_crcs_with_value.out_with_nullmap | 2 +-
.../column_variant_update_hashes_with_value.out | 2 +-
...riant_update_hashes_with_value.out_with_nullmap | 2 +-
.../column_variant_update_xxHash_with_value.out | 2 +-
...riant_update_xxHash_with_value.out_with_nullmap | 2 +-
be/test/vec/columns/column_variant_test.cpp | 44 ++-
be/test/vec/common/schema_util_test.cpp | 25 --
be/test/vec/jsonb/json_parser_test.cpp | 90 ++++++-
regression-test/data/variant_p0/desc.out | 126 ++++-----
regression-test/data/variant_p0/nested.out | 22 +-
.../data/variant_p0/nested/nested_in_top_array.out | 32 +--
regression-test/data/variant_p0/nested2.out | 4 +-
.../predefine/test_prdefine_insert_into_select.out | 4 +-
.../variant_p0/predefine/test_predefine_ddl.out | 6 +-
.../variant_p0/predefine/variant_hirachinal.out | 4 +-
.../data/variant_p0/predefine/variant_with_mow.out | 2 +-
.../data/variant_p0/test_types_in_variant.out | 121 +++++++++
.../data/variant_p0/tpch/sql/q01_trans.out | 8 +-
.../data/variant_p0/tpch/sql/q05_trans.out | 2 +-
.../data/variant_p0/tpch/sql/q06_trans.out | 2 +-
.../data/variant_p0/tpch/sql/q08_trans.out | 4 +-
.../data/variant_p0/tpch/sql/q09_trans.out | 294 ++++++++++-----------
.../data/variant_p0/tpch/sql/q10_trans.out | 10 +-
.../test_variant_bloom_filter.groovy | 2 +-
.../variant_p0/predefine/test_predefine_ddl.groovy | 3 +-
.../variant_p0/predefine/variant_hirachinal.groovy | 5 +-
.../suites/variant_p0/test_types_in_variant.groovy | 103 ++++++++
.../variant_p0/test_variant_is_null_expr.groovy | 12 +-
.../suites/variant_p0/variant_hirachinal.groovy | 4 +-
42 files changed, 630 insertions(+), 425 deletions(-)
diff --git a/be/src/vec/columns/column_variant.cpp
b/be/src/vec/columns/column_variant.cpp
index 135c71bc01c..c7f4df6fe0f 100644
--- a/be/src/vec/columns/column_variant.cpp
+++ b/be/src/vec/columns/column_variant.cpp
@@ -232,9 +232,7 @@ void ColumnVariant::Subcolumn::insert(Field field,
FieldInfo info) {
type_changed = true;
}
} else {
- if (least_common_type_id != from_type_id &&
-
schema_util::is_conversion_required_between_integers(from_type_id,
-
least_common_type_id)) {
+ if (least_common_type_id != from_type_id) {
type_changed = true;
DataTypePtr new_least_common_base_type;
get_least_supertype_jsonb(PrimitiveTypeSet {from_type_id,
least_common_type_id},
diff --git a/be/src/vec/common/schema_util.cpp
b/be/src/vec/common/schema_util.cpp
index e4481511a9c..ad1743267ac 100644
--- a/be/src/vec/common/schema_util.cpp
+++ b/be/src/vec/common/schema_util.cpp
@@ -117,31 +117,6 @@ DataTypePtr get_base_type_of_array(const DataTypePtr&
type) {
return last_array ? last_array->get_nested_type() : type;
}
-size_t get_size_of_interger(PrimitiveType type) {
- switch (type) {
- case PrimitiveType::TYPE_TINYINT:
- return sizeof(int8_t);
- case PrimitiveType::TYPE_SMALLINT:
- return sizeof(int16_t);
- case PrimitiveType::TYPE_INT:
- return sizeof(int32_t);
- case PrimitiveType::TYPE_BIGINT:
- return sizeof(int64_t);
- case PrimitiveType::TYPE_LARGEINT:
- return sizeof(int128_t);
- case PrimitiveType::TYPE_BOOLEAN:
- return sizeof(uint8_t);
- default:
- throw Exception(Status::FatalError("Unknown integer type: {}",
type_to_string(type)));
- return 0;
- }
-}
-
-bool is_conversion_required_between_integers(const PrimitiveType& lhs, const
PrimitiveType& rhs) {
- bool is_native_int = is_int_or_bool(lhs) && is_int_or_bool(rhs);
- return !is_native_int || get_size_of_interger(lhs) >
get_size_of_interger(rhs);
-}
-
Status cast_column(const ColumnWithTypeAndName& arg, const DataTypePtr& type,
ColumnPtr* result) {
ColumnsWithTypeAndName arguments {arg, {nullptr, type, type->get_name()}};
@@ -1201,19 +1176,6 @@ public:
size_t apply(const typename PrimitiveTypeTraits<T>::CppType& x) {
if constexpr (T == TYPE_ARRAY) {
throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "Array type is
not supported");
- } else if constexpr (T == TYPE_BIGINT) {
- if (x <= std::numeric_limits<Int8>::max() && x >=
std::numeric_limits<Int8>::min()) {
- type = PrimitiveType::TYPE_TINYINT;
- } else if (x <= std::numeric_limits<Int16>::max() &&
- x >= std::numeric_limits<Int16>::min()) {
- type = PrimitiveType::TYPE_SMALLINT;
- } else if (x <= std::numeric_limits<Int32>::max() &&
- x >= std::numeric_limits<Int32>::min()) {
- type = PrimitiveType::TYPE_INT;
- } else {
- type = PrimitiveType::TYPE_BIGINT;
- }
- return 1;
} else if constexpr (T == TYPE_NULL) {
have_nulls = true;
return 1;
@@ -1245,25 +1207,10 @@ public:
apply_visitor(*this, x[i]);
}
return 0;
- } else if constexpr (T == TYPE_BIGINT) {
- field_types.insert(PrimitiveType::TYPE_BIGINT);
- if (x <= std::numeric_limits<Int8>::max() && x >=
std::numeric_limits<Int8>::min()) {
- type_indexes.insert(PrimitiveType::TYPE_TINYINT);
- } else if (x <= std::numeric_limits<Int16>::max() &&
- x >= std::numeric_limits<Int16>::min()) {
- type_indexes.insert(PrimitiveType::TYPE_SMALLINT);
- } else if (x <= std::numeric_limits<Int32>::max() &&
- x >= std::numeric_limits<Int32>::min()) {
- type_indexes.insert(PrimitiveType::TYPE_INT);
- } else {
- type_indexes.insert(PrimitiveType::TYPE_BIGINT);
- }
- return 0;
} else if constexpr (T == TYPE_NULL) {
have_nulls = true;
return 0;
} else {
- PrimitiveTypeTraits<PrimitiveType::TYPE_ARRAY>::CppType a;
field_types.insert(T);
type_indexes.insert(T);
return 0;
diff --git a/be/src/vec/common/schema_util.h b/be/src/vec/common/schema_util.h
index ca6890118fa..ef59caaaf5a 100644
--- a/be/src/vec/common/schema_util.h
+++ b/be/src/vec/common/schema_util.h
@@ -77,11 +77,6 @@ DataTypePtr get_base_type_of_array(const DataTypePtr& type);
// Cast column to dst type
Status cast_column(const ColumnWithTypeAndName& arg, const DataTypePtr& type,
ColumnPtr* result);
-/// If both of types are signed/unsigned integers and size of left field type
-/// is less than right type, we don't need to convert field,
-/// because all integer fields are stored in Int64/UInt64.
-bool is_conversion_required_between_integers(const PrimitiveType& lhs, const
PrimitiveType& rhs);
-
struct ExtraInfo {
// -1 indicates it's not a Frontend generated column
int32_t unique_id = -1;
diff --git a/be/src/vec/data_types/get_least_supertype.cpp
b/be/src/vec/data_types/get_least_supertype.cpp
index ea5de2c4c46..6e8e5a02e5e 100644
--- a/be/src/vec/data_types/get_least_supertype.cpp
+++ b/be/src/vec/data_types/get_least_supertype.cpp
@@ -133,6 +133,9 @@ void get_numeric_type(const PrimitiveTypeSet& types,
DataTypePtr* type) {
} else if (min_bit_width_of_integer <= 64) {
*type = std::make_shared<DataTypeInt64>();
return;
+ } else if (min_bit_width_of_integer <= 128) {
+ *type = std::make_shared<DataTypeInt128>();
+ return;
} else {
VLOG_DEBUG << " because some of them are signed integers and
some are unsigned "
"integers, but there is no signed integer type,
that can exactly "
diff --git a/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
b/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
index 9e70f9baabb..5a658425f9d 100644
--- a/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
@@ -329,6 +329,10 @@ void convert_jsonb_to_rapidjson(const JsonbValue& val,
rapidjson::Value& target,
}
break;
}
+ case JsonbType::T_Int128: {
+
target.SetUint64(static_cast<uint64_t>(val.unpack<JsonbInt128Val>()->val()));
+ break;
+ }
default:
CHECK(false) << "unkown type " << static_cast<int>(val.type);
break;
diff --git a/be/src/vec/json/json_parser.h b/be/src/vec/json/json_parser.h
index c6966ddaf35..ae5b937ccee 100644
--- a/be/src/vec/json/json_parser.h
+++ b/be/src/vec/json/json_parser.h
@@ -49,8 +49,9 @@ Field getValueAsField(const Element& element) {
return Field::create_field<TYPE_BIGINT>(element.getInt64());
}
// doris only support signed integers at present
+ // use largeint to store unsigned int64
if (element.isUInt64()) {
- return Field::create_field<TYPE_BIGINT>(element.getInt64());
+ return
Field::create_field<TYPE_LARGEINT>(static_cast<int128_t>(element.getUInt64()));
}
if (element.isDouble()) {
return Field::create_field<TYPE_DOUBLE>(element.getDouble());
@@ -76,8 +77,9 @@ void writeValueAsJsonb(const Element& element, JsonbWriter&
writer) {
return;
}
// doris only support signed integers at present
+ // use largeint to store unsigned int64
if (element.isUInt64()) {
- writer.writeInt64(element.getInt64());
+ writer.writeInt128(static_cast<int128_t>(element.getUInt64()));
return;
}
if (element.isDouble()) {
@@ -97,31 +99,6 @@ void writeValueAsJsonb(const Element& element, JsonbWriter&
writer) {
}
}
-template <typename Element>
-std::string castValueAsString(const Element& element) {
- if (element.isBool()) {
- return element.getBool() ? "1" : "0";
- }
- if (element.isInt64()) {
- return std::to_string(element.getInt64());
- }
- if (element.isUInt64()) {
- return std::to_string(element.getUInt64());
- }
- if (element.isDouble()) {
- return std::to_string(element.getDouble());
- }
- if (element.isNull()) {
- return "";
- }
- return "";
-}
-
-enum class ExtractType {
- ToString = 0,
- // ...
-};
-
struct ParseConfig {
bool enable_flatten_nested = false;
};
diff --git a/be/src/vec/json/parse2column.h b/be/src/vec/json/parse2column.h
index eea8a0ec197..e87d8c8d538 100644
--- a/be/src/vec/json/parse2column.h
+++ b/be/src/vec/json/parse2column.h
@@ -27,7 +27,6 @@
namespace doris::vectorized {
class SimdJSONParser;
-enum class ExtractType;
template <typename ParserImpl>
class JSONDataParser;
template <typename T>
diff --git a/be/src/vec/json/simd_json_parser.h
b/be/src/vec/json/simd_json_parser.h
index 1f4fc4dca42..4292d855026 100644
--- a/be/src/vec/json/simd_json_parser.h
+++ b/be/src/vec/json/simd_json_parser.h
@@ -72,6 +72,7 @@ public:
ALWAYS_INLINE std::string_view getString() const {
return element.get_string().value_unsafe();
}
+ ALWAYS_INLINE UInt64 getUInt64() const { return
element.get_uint64().value_unsafe(); }
ALWAYS_INLINE Array getArray() const;
ALWAYS_INLINE Object getObject() const;
diff --git
a/be/test/expected_result/vec/columns/column_variant_allocated_bytes.out
b/be/test/expected_result/vec/columns/column_variant_allocated_bytes.out
index c92d1d0e76e..7b8d8f36877 100644
--- a/be/test/expected_result/vec/columns/column_variant_allocated_bytes.out
+++ b/be/test/expected_result/vec/columns/column_variant_allocated_bytes.out
@@ -1,2 +1,2 @@
-column: variant with allocate size: 19295936
-19295936
\ No newline at end of file
+column: variant with allocate size: 19443392
+19443392
\ No newline at end of file
diff --git a/be/test/expected_result/vec/columns/column_variant_byte_size.out
b/be/test/expected_result/vec/columns/column_variant_byte_size.out
index 31205bae301..bfd2a235fe4 100644
--- a/be/test/expected_result/vec/columns/column_variant_byte_size.out
+++ b/be/test/expected_result/vec/columns/column_variant_byte_size.out
@@ -1,2 +1,2 @@
-column: variant with byte_size: 11155317
-11155317
\ No newline at end of file
+column: variant with byte_size: 11281852
+11281852
\ No newline at end of file
diff --git
a/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out
b/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out
index 03d5ccbd3fd..34d82fb5631 100644
---
a/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out
+++
b/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out
@@ -1 +1 @@
-column: variant with hashes: 3573485114 with ptr: 1756
\ No newline at end of file
+column: variant with hashes: 401199387 with ptr: 1756
\ No newline at end of file
diff --git
a/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out_with_nullmap
b/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out_with_nullmap
index 03d5ccbd3fd..34d82fb5631 100644
---
a/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out_with_nullmap
+++
b/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out_with_nullmap
@@ -1 +1 @@
-column: variant with hashes: 3573485114 with ptr: 1756
\ No newline at end of file
+column: variant with hashes: 401199387 with ptr: 1756
\ No newline at end of file
diff --git
a/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out
b/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out
index 27853e883d8..13d14b465cd 100644
---
a/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out
+++
b/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out
@@ -1 +1 @@
-column: variant with hashes:
[1023594347,3348501307,7038117,750646757,1023594347,1285578128,750646757,648865016,750646757,1850317735,1660060187,1978118196,7038117,1660060187,1285578128,1978118196,1285578128,1978118196,1660060187,1285578128,3348501307,750646757,80012773,1186024589,1023594347,1186024589,750646757,542292976,1660060187,750646757,1285578128,1023594347,542292976,1978118196,750646757,648865016,1023594347,648865016,3348501307,1023594347,1978118196,7038117,1285578128,80012773,703
[...]
\ No newline at end of file
+column: variant with hashes:
[1023594347,3348501307,7038117,750646757,1023594347,1285578128,750646757,648865016,750646757,1850317735,1660060187,1978118196,7038117,1660060187,1285578128,1978118196,1285578128,1978118196,1660060187,1285578128,3348501307,750646757,80012773,1186024589,1023594347,1186024589,750646757,542292976,1660060187,750646757,1285578128,1023594347,542292976,1978118196,750646757,648865016,1023594347,648865016,3348501307,1023594347,1978118196,7038117,1285578128,80012773,703
[...]
\ No newline at end of file
diff --git
a/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out_with_nullmap
b/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out_with_nullmap
index 27853e883d8..13d14b465cd 100644
---
a/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out_with_nullmap
+++
b/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out_with_nullmap
@@ -1 +1 @@
-column: variant with hashes:
[1023594347,3348501307,7038117,750646757,1023594347,1285578128,750646757,648865016,750646757,1850317735,1660060187,1978118196,7038117,1660060187,1285578128,1978118196,1285578128,1978118196,1660060187,1285578128,3348501307,750646757,80012773,1186024589,1023594347,1186024589,750646757,542292976,1660060187,750646757,1285578128,1023594347,542292976,1978118196,750646757,648865016,1023594347,648865016,3348501307,1023594347,1978118196,7038117,1285578128,80012773,703
[...]
\ No newline at end of file
+column: variant with hashes:
[1023594347,3348501307,7038117,750646757,1023594347,1285578128,750646757,648865016,750646757,1850317735,1660060187,1978118196,7038117,1660060187,1285578128,1978118196,1285578128,1978118196,1660060187,1285578128,3348501307,750646757,80012773,1186024589,1023594347,1186024589,750646757,542292976,1660060187,750646757,1285578128,1023594347,542292976,1978118196,750646757,648865016,1023594347,648865016,3348501307,1023594347,1978118196,7038117,1285578128,80012773,703
[...]
\ No newline at end of file
diff --git
a/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out
b/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out
index 3819c459cb0..866a0145773 100644
---
a/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out
+++
b/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out
@@ -1 +1 @@
-column: variant with hashes:
[3290145166093762980,14179897596576105469,3518677861186945217,2282085295964132384,3290145166093762980,559338346485959129,2282085295964132384,15905536912678961394,2282085295964132384,7021324166002335292,18096701186305226541,102226537653930837,3518677861186945217,18096701186305226541,559338346485959129,102226537653930837,559338346485959129,102226537653930837,18096701186305226541,559338346485959129,14179897596576105469,2282085295964132384,11072762366266850873,63
[...]
\ No newline at end of file
+column: variant with hashes:
[3290145166093762980,14179897596576105469,3518677861186945217,2282085295964132384,3290145166093762980,559338346485959129,2282085295964132384,15905536912678961394,2282085295964132384,7021324166002335292,18096701186305226541,102226537653930837,3518677861186945217,18096701186305226541,559338346485959129,102226537653930837,559338346485959129,102226537653930837,18096701186305226541,559338346485959129,14179897596576105469,2282085295964132384,11072762366266850873,63
[...]
\ No newline at end of file
diff --git
a/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out_with_nullmap
b/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out_with_nullmap
index 3819c459cb0..866a0145773 100644
---
a/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out_with_nullmap
+++
b/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out_with_nullmap
@@ -1 +1 @@
-column: variant with hashes:
[3290145166093762980,14179897596576105469,3518677861186945217,2282085295964132384,3290145166093762980,559338346485959129,2282085295964132384,15905536912678961394,2282085295964132384,7021324166002335292,18096701186305226541,102226537653930837,3518677861186945217,18096701186305226541,559338346485959129,102226537653930837,559338346485959129,102226537653930837,18096701186305226541,559338346485959129,14179897596576105469,2282085295964132384,11072762366266850873,63
[...]
\ No newline at end of file
+column: variant with hashes:
[3290145166093762980,14179897596576105469,3518677861186945217,2282085295964132384,3290145166093762980,559338346485959129,2282085295964132384,15905536912678961394,2282085295964132384,7021324166002335292,18096701186305226541,102226537653930837,3518677861186945217,18096701186305226541,559338346485959129,102226537653930837,559338346485959129,102226537653930837,18096701186305226541,559338346485959129,14179897596576105469,2282085295964132384,11072762366266850873,63
[...]
\ No newline at end of file
diff --git
a/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out
b/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out
index fc26156b1ff..b3c9e39c478 100644
---
a/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out
+++
b/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out
@@ -1 +1 @@
-column: variant with hashes: 17214775904271713257 with ptr: 1756
\ No newline at end of file
+column: variant with hashes: 12516048992315516653 with ptr: 1756
\ No newline at end of file
diff --git
a/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out_with_nullmap
b/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out_with_nullmap
index fc26156b1ff..b3c9e39c478 100644
---
a/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out_with_nullmap
+++
b/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out_with_nullmap
@@ -1 +1 @@
-column: variant with hashes: 17214775904271713257 with ptr: 1756
\ No newline at end of file
+column: variant with hashes: 12516048992315516653 with ptr: 1756
\ No newline at end of file
diff --git a/be/test/vec/columns/column_variant_test.cpp
b/be/test/vec/columns/column_variant_test.cpp
index c0eaecea5b4..2f181695265 100644
--- a/be/test/vec/columns/column_variant_test.cpp
+++ b/be/test/vec/columns/column_variant_test.cpp
@@ -224,7 +224,6 @@ TEST_F(ColumnVariantTest, test_pop_back_multiple_types) {
subcolumn.insert(field_int16);
EXPECT_EQ(subcolumn.size(), 2);
EXPECT_EQ(subcolumn.data_types.size(), 2);
- EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(TINYINT)");
EXPECT_EQ(subcolumn.data_types[1]->get_name(), "Nullable(SMALLINT)");
EXPECT_EQ(subcolumn.get_least_common_type()->get_name(),
"Nullable(SMALLINT)");
@@ -232,15 +231,12 @@ TEST_F(ColumnVariantTest, test_pop_back_multiple_types) {
subcolumn.insert(field_int32);
EXPECT_EQ(subcolumn.size(), 3);
EXPECT_EQ(subcolumn.data_types.size(), 3);
- EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(TINYINT)");
- EXPECT_EQ(subcolumn.data_types[1]->get_name(), "Nullable(SMALLINT)");
EXPECT_EQ(subcolumn.data_types[2]->get_name(), "Nullable(INT)");
EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nullable(INT)");
subcolumn.pop_back(1);
EXPECT_EQ(subcolumn.size(), 2);
EXPECT_EQ(subcolumn.data_types.size(), 2);
- EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(TINYINT)");
EXPECT_EQ(subcolumn.data_types[1]->get_name(), "Nullable(SMALLINT)");
EXPECT_EQ(subcolumn.get_least_common_type()->get_name(),
"Nullable(SMALLINT)");
@@ -2582,7 +2578,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field = Field::create_field<TYPE_BIGINT>(Int64(42));
FieldInfo info;
schema_util::get_field_info(field, &info);
- EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_TINYINT);
+ EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info.have_nulls);
EXPECT_FALSE(info.need_convert);
EXPECT_EQ(info.num_dimensions, 0);
@@ -2593,7 +2589,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field = Field::create_field<TYPE_BIGINT>(UInt64(42));
FieldInfo info;
schema_util::get_field_info(field, &info);
- EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_TINYINT);
+ EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info.have_nulls);
EXPECT_FALSE(info.need_convert);
EXPECT_EQ(info.num_dimensions, 0);
@@ -2605,7 +2601,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field1 =
Field::create_field<TYPE_BIGINT>(Int64(std::numeric_limits<Int8>::max()));
FieldInfo info1;
schema_util::get_field_info(field1, &info1);
- EXPECT_EQ(info1.scalar_type_id, PrimitiveType::TYPE_TINYINT);
+ EXPECT_EQ(info1.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info1.have_nulls);
EXPECT_FALSE(info1.need_convert);
EXPECT_EQ(info1.num_dimensions, 0);
@@ -2614,7 +2610,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field2 =
Field::create_field<TYPE_BIGINT>(Int64(std::numeric_limits<Int16>::max()));
FieldInfo info2;
schema_util::get_field_info(field2, &info2);
- EXPECT_EQ(info2.scalar_type_id, PrimitiveType::TYPE_SMALLINT);
+ EXPECT_EQ(info2.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info2.have_nulls);
EXPECT_FALSE(info2.need_convert);
EXPECT_EQ(info2.num_dimensions, 0);
@@ -2623,7 +2619,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field3 =
Field::create_field<TYPE_BIGINT>(Int64(std::numeric_limits<Int32>::max()));
FieldInfo info3;
schema_util::get_field_info(field3, &info3);
- EXPECT_EQ(info3.scalar_type_id, PrimitiveType::TYPE_INT);
+ EXPECT_EQ(info3.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info3.have_nulls);
EXPECT_FALSE(info3.need_convert);
EXPECT_EQ(info3.num_dimensions, 0);
@@ -2642,7 +2638,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field5 =
Field::create_field<TYPE_BIGINT>(Int64(std::numeric_limits<Int8>::min()));
FieldInfo info5;
schema_util::get_field_info(field5, &info5);
- EXPECT_EQ(info5.scalar_type_id, PrimitiveType::TYPE_TINYINT);
+ EXPECT_EQ(info5.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info5.have_nulls);
EXPECT_FALSE(info5.need_convert);
EXPECT_EQ(info5.num_dimensions, 0);
@@ -2651,7 +2647,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field6 =
Field::create_field<TYPE_BIGINT>(Int64(std::numeric_limits<Int16>::min()));
FieldInfo info6;
schema_util::get_field_info(field6, &info6);
- EXPECT_EQ(info6.scalar_type_id, PrimitiveType::TYPE_SMALLINT);
+ EXPECT_EQ(info6.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info6.have_nulls);
EXPECT_FALSE(info6.need_convert);
EXPECT_EQ(info6.num_dimensions, 0);
@@ -2660,7 +2656,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field7 =
Field::create_field<TYPE_BIGINT>(Int64(std::numeric_limits<Int32>::min()));
FieldInfo info7;
schema_util::get_field_info(field7, &info7);
- EXPECT_EQ(info7.scalar_type_id, PrimitiveType::TYPE_INT);
+ EXPECT_EQ(info7.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info7.have_nulls);
EXPECT_FALSE(info7.need_convert);
EXPECT_EQ(info7.num_dimensions, 0);
@@ -2679,7 +2675,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field1 =
Field::create_field<TYPE_BIGINT>(UInt64(std::numeric_limits<UInt8>::max()));
FieldInfo info1;
schema_util::get_field_info(field1, &info1);
- EXPECT_EQ(info1.scalar_type_id, PrimitiveType::TYPE_SMALLINT);
+ EXPECT_EQ(info1.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info1.have_nulls);
EXPECT_FALSE(info1.need_convert);
EXPECT_EQ(info1.num_dimensions, 0);
@@ -2688,7 +2684,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field2 =
Field::create_field<TYPE_BIGINT>(UInt64(std::numeric_limits<UInt16>::max()));
FieldInfo info2;
schema_util::get_field_info(field2, &info2);
- EXPECT_EQ(info2.scalar_type_id, PrimitiveType::TYPE_INT);
+ EXPECT_EQ(info2.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info2.have_nulls);
EXPECT_FALSE(info2.need_convert);
EXPECT_EQ(info2.num_dimensions, 0);
@@ -2751,7 +2747,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field = Field::create_field<TYPE_ARRAY>(std::move(array));
FieldInfo info;
schema_util::get_field_info(field, &info);
- EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_TINYINT);
+ EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info.have_nulls);
EXPECT_FALSE(info.need_convert);
EXPECT_EQ(info.num_dimensions, 1);
@@ -2770,7 +2766,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field = Field::create_field<TYPE_ARRAY>(std::move(outer_array));
FieldInfo info;
schema_util::get_field_info(field, &info);
- EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_TINYINT);
+ EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info.have_nulls);
EXPECT_FALSE(info.need_convert);
EXPECT_EQ(info.num_dimensions, 2);
@@ -2851,7 +2847,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field = Field::create_field<TYPE_ARRAY>(std::move(array));
FieldInfo info;
schema_util::get_field_info(field, &info);
- EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_TINYINT)
+ EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_BIGINT)
<< "info.scalar_type_id: " << info.scalar_type_id;
EXPECT_FALSE(info.have_nulls);
EXPECT_FALSE(info.need_convert);
@@ -2866,7 +2862,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field = Field::create_field<TYPE_ARRAY>(std::move(array));
FieldInfo info;
schema_util::get_field_info(field, &info);
- EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_TINYINT);
+ EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_TRUE(info.have_nulls);
EXPECT_FALSE(info.need_convert);
EXPECT_EQ(info.num_dimensions, 1);
@@ -2887,7 +2883,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field = Field::create_field<TYPE_ARRAY>(std::move(outer_array));
FieldInfo info;
schema_util::get_field_info(field, &info);
- EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_TINYINT);
+ EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info.have_nulls);
EXPECT_FALSE(info.need_convert);
EXPECT_EQ(info.num_dimensions, 2);
@@ -2908,7 +2904,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field = Field::create_field<TYPE_ARRAY>(std::move(outer_array));
FieldInfo info;
schema_util::get_field_info(field, &info);
- EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_SMALLINT);
+ EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info.have_nulls);
EXPECT_FALSE(info.need_convert);
EXPECT_EQ(info.num_dimensions, 2);
@@ -2929,7 +2925,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) {
Field field = Field::create_field<TYPE_ARRAY>(std::move(outer_array));
FieldInfo info;
schema_util::get_field_info(field, &info);
- EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_INT);
+ EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info.have_nulls);
EXPECT_FALSE(info.need_convert);
EXPECT_EQ(info.num_dimensions, 2);
@@ -2970,7 +2966,7 @@
outer_array.push_back(Field::create_field<TYPE_ARRAY>(Array()));
Field field = Field::create_field<TYPE_ARRAY>(std::move(outer_array));
FieldInfo info;
schema_util::get_field_info(field, &info);
-EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_SMALLINT);
+EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info.have_nulls);
EXPECT_FALSE(info.need_convert);
EXPECT_EQ(info.num_dimensions, 2);
@@ -2991,7 +2987,7 @@ EXPECT_EQ(info.num_dimensions, 2);
Field field = Field::create_field<TYPE_ARRAY>(std::move(outer_array));
FieldInfo info;
schema_util::get_field_info(field, &info);
- EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_INT);
+ EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_FALSE(info.have_nulls);
EXPECT_FALSE(info.need_convert);
EXPECT_EQ(info.num_dimensions, 2);
@@ -3084,7 +3080,7 @@ EXPECT_EQ(info.num_dimensions, 2);
Field field = Field::create_field<TYPE_ARRAY>(std::move(outer_array));
FieldInfo info;
schema_util::get_field_info(field, &info);
- EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_TINYINT);
+ EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_BIGINT);
EXPECT_TRUE(info.have_nulls);
EXPECT_FALSE(info.need_convert);
EXPECT_EQ(info.num_dimensions, 2);
diff --git a/be/test/vec/common/schema_util_test.cpp
b/be/test/vec/common/schema_util_test.cpp
index 630c7347a49..92f052c1d54 100644
--- a/be/test/vec/common/schema_util_test.cpp
+++ b/be/test/vec/common/schema_util_test.cpp
@@ -599,31 +599,6 @@ TEST_F(SchemaUtilTest, TestArrayDimensions) {
EXPECT_EQ(base_type->get_primitive_type(), PrimitiveType::TYPE_INT);
}
-TEST_F(SchemaUtilTest, TestIntegerConversion) {
- // Test conversion between integers
- EXPECT_FALSE(schema_util::is_conversion_required_between_integers(
- PrimitiveType::TYPE_TINYINT, PrimitiveType::TYPE_SMALLINT));
-
EXPECT_FALSE(schema_util::is_conversion_required_between_integers(PrimitiveType::TYPE_TINYINT,
-
PrimitiveType::TYPE_INT));
-
EXPECT_FALSE(schema_util::is_conversion_required_between_integers(PrimitiveType::TYPE_SMALLINT,
-
PrimitiveType::TYPE_INT));
-
-
EXPECT_TRUE(schema_util::is_conversion_required_between_integers(PrimitiveType::TYPE_INT,
-
PrimitiveType::TYPE_SMALLINT));
-
EXPECT_TRUE(schema_util::is_conversion_required_between_integers(PrimitiveType::TYPE_BIGINT,
-
PrimitiveType::TYPE_INT));
-
- EXPECT_FALSE(schema_util::is_conversion_required_between_integers(
- PrimitiveType::TYPE_TINYINT, PrimitiveType::TYPE_SMALLINT));
-
EXPECT_TRUE(schema_util::is_conversion_required_between_integers(PrimitiveType::TYPE_INT,
-
PrimitiveType::TYPE_SMALLINT));
-
- EXPECT_FALSE(schema_util::is_conversion_required_between_integers(
- PrimitiveType::TYPE_BOOLEAN, PrimitiveType::TYPE_SMALLINT));
-
EXPECT_TRUE(schema_util::is_conversion_required_between_integers(PrimitiveType::TYPE_SMALLINT,
-
PrimitiveType::TYPE_BOOLEAN));
-}
-
TEST_F(SchemaUtilTest, TestColumnCasting) {
// Test cast_column
auto src_type = std::make_shared<DataTypeInt32>();
diff --git a/be/test/vec/jsonb/json_parser_test.cpp
b/be/test/vec/jsonb/json_parser_test.cpp
index 12dae95f6fc..1924bd90cb7 100644
--- a/be/test/vec/jsonb/json_parser_test.cpp
+++ b/be/test/vec/jsonb/json_parser_test.cpp
@@ -36,21 +36,45 @@ TEST(JsonParserTest, ParseSimpleTypes) {
ASSERT_TRUE(result.has_value());
EXPECT_EQ(result->values.size(), 1);
+ auto parse_result_int = result.value();
+ EXPECT_EQ(parse_result_int.paths[0].get_path(), "");
+ EXPECT_EQ(parse_result_int.values[0].get_type(),
doris::PrimitiveType::TYPE_BIGINT);
+
// double
result = parser.parse("1.23", 4, config);
ASSERT_TRUE(result.has_value());
+ auto parse_result_double = result.value();
+ EXPECT_EQ(parse_result_double.paths[0].get_path(), "");
+ EXPECT_EQ(parse_result_double.values[0].get_type(),
doris::PrimitiveType::TYPE_DOUBLE);
+
// bool
result = parser.parse("true", 4, config);
ASSERT_TRUE(result.has_value());
+ auto parse_result_bool = result.value();
+ EXPECT_EQ(parse_result_bool.values[0].get_type(),
doris::PrimitiveType::TYPE_BOOLEAN);
+
// null
result = parser.parse("null", 4, config);
ASSERT_TRUE(result.has_value());
+ auto parse_result_null = result.value();
+ EXPECT_EQ(parse_result_null.paths[0].get_path(), "");
+ EXPECT_EQ(parse_result_null.values[0].get_type(),
doris::PrimitiveType::TYPE_NULL);
// string
result = parser.parse("\"abc\"", 5, config);
ASSERT_TRUE(result.has_value());
+ auto parse_result_string = result.value();
+ EXPECT_EQ(parse_result_string.paths[0].get_path(), "");
+ EXPECT_EQ(parse_result_string.values[0].get_type(),
doris::PrimitiveType::TYPE_STRING);
+
+ // largeint
+ result = parser.parse("12345678901234567890", 20, config);
+ ASSERT_TRUE(result.has_value());
+ auto parse_result_bigint = result.value();
+ EXPECT_EQ(parse_result_bigint.paths[0].get_path(), "");
+ EXPECT_EQ(parse_result_bigint.values[0].get_type(),
doris::PrimitiveType::TYPE_LARGEINT);
}
TEST(JsonParserTest, ParseObjectAndArray) {
@@ -60,12 +84,36 @@ TEST(JsonParserTest, ParseObjectAndArray) {
// Object
auto result = parser.parse(R"({"a":1,"b":2})", 13, config);
ASSERT_TRUE(result.has_value());
- EXPECT_EQ(result->values.size(), 2);
+ auto& parse_result_object = result.value();
+ EXPECT_EQ(parse_result_object.values.size(), 2);
+ EXPECT_EQ(parse_result_object.paths.size(), 2);
+ EXPECT_EQ(parse_result_object.values[0].get_type(),
doris::PrimitiveType::TYPE_BIGINT);
+ EXPECT_EQ(parse_result_object.values[1].get_type(),
doris::PrimitiveType::TYPE_BIGINT);
+ EXPECT_EQ(parse_result_object.paths[0].get_path(), "a");
+ EXPECT_EQ(parse_result_object.paths[1].get_path(), "b");
// Array
result = parser.parse("[1,2,3]", 7, config);
ASSERT_TRUE(result.has_value());
- EXPECT_EQ(result->values.size(), 1);
+ auto& parse_result_array = result.value();
+ EXPECT_EQ(parse_result_array.paths[0].get_path(), "");
+ EXPECT_EQ(parse_result_array.values[0].get_type(),
doris::PrimitiveType::TYPE_ARRAY);
+
+ std::string json = R"([1, "string", null, true, 1.23,
12345678901234567890])";
+ result = parser.parse(json.c_str(), json.size(), config);
+ ASSERT_TRUE(result.has_value());
+ auto& parse_result_array_2 = result.value();
+ EXPECT_EQ(parse_result_array_2.paths[0].get_path(), "");
+ EXPECT_EQ(parse_result_array_2.values[0].get_type(),
doris::PrimitiveType::TYPE_ARRAY);
+ auto& array_field =
parse_result_array_2.values[0].get<doris::vectorized::Array>();
+
+ EXPECT_EQ(array_field.size(), 6);
+ EXPECT_EQ(array_field[0].get_type(), doris::PrimitiveType::TYPE_BIGINT);
+ EXPECT_EQ(array_field[1].get_type(), doris::PrimitiveType::TYPE_STRING);
+ EXPECT_EQ(array_field[2].get_type(), doris::PrimitiveType::TYPE_NULL);
+ EXPECT_EQ(array_field[3].get_type(), doris::PrimitiveType::TYPE_BOOLEAN);
+ EXPECT_EQ(array_field[4].get_type(), doris::PrimitiveType::TYPE_DOUBLE);
+ EXPECT_EQ(array_field[5].get_type(), doris::PrimitiveType::TYPE_LARGEINT);
}
TEST(JsonParserTest, ParseMultiLevelNestedArray) {
@@ -343,4 +391,42 @@ TEST(JsonParserTest, TestHandleNewPathElseBranch) {
// Verify nested_sizes_by_key was updated
EXPECT_EQ(ctx.nested_sizes_by_key.at(doris::StringRef("nested_key")).size(), 3);
EXPECT_EQ(ctx.nested_sizes_by_key.at(doris::StringRef("nested_key"))[1],
0);
+}
+
+TEST(JsonParserTest, ParseUInt64) {
+ JSONDataParser<SimdJSONParser> parser;
+ ParseConfig config;
+
+ std::string json = R"({"a": 18446744073709551615})";
+ auto result = parser.parse(json.c_str(), json.size(), config);
+ ASSERT_TRUE(result.has_value());
+ EXPECT_EQ(result->values.size(), 1);
+ EXPECT_EQ(result->paths.size(), 1);
+ EXPECT_EQ(result->paths[0].get_path(), "a");
+ EXPECT_EQ(result->values[0].get_type(),
doris::PrimitiveType::TYPE_LARGEINT);
+ EXPECT_EQ(result->values[0].get<doris::vectorized::Int128>(),
18446744073709551615ULL);
+
+ std::string array_json = R"({"a": [18446744073709551615]})";
+ result = parser.parse(array_json.c_str(), array_json.size(), config);
+ ASSERT_TRUE(result.has_value());
+ EXPECT_EQ(result->values.size(), 1);
+ EXPECT_EQ(result->paths.size(), 1);
+ EXPECT_EQ(result->paths[0].get_path(), "a");
+ EXPECT_EQ(result->values[0].get_type(), doris::PrimitiveType::TYPE_ARRAY);
+ auto& array_field = result->values[0].get<doris::vectorized::Array>();
+ EXPECT_EQ(array_field.size(), 1);
+ EXPECT_EQ(array_field[0].get_type(), doris::PrimitiveType::TYPE_LARGEINT);
+ EXPECT_EQ(array_field[0].get<doris::vectorized::Int128>(),
18446744073709551615ULL);
+
+ std::string nested_json = R"({"a": [{"b": 18446744073709551615}]})";
+ config.enable_flatten_nested = true;
+ result = parser.parse(nested_json.c_str(), nested_json.size(), config);
+ ASSERT_TRUE(result.has_value());
+ EXPECT_EQ(result->values.size(), 1);
+ EXPECT_EQ(result->paths.size(), 1);
+ EXPECT_EQ(result->values[0].get_type(), doris::PrimitiveType::TYPE_ARRAY);
+ auto& array_field_2 = result->values[0].get<doris::vectorized::Array>();
+ EXPECT_EQ(array_field_2.size(), 1);
+ EXPECT_EQ(array_field_2[0].get_type(),
doris::PrimitiveType::TYPE_LARGEINT);
+ EXPECT_EQ(array_field_2[0].get<doris::vectorized::Int128>(),
18446744073709551615ULL);
}
\ No newline at end of file
diff --git a/regression-test/data/variant_p0/desc.out
b/regression-test/data/variant_p0/desc.out
index 9a3be9de833..06ba18e1717 100644
--- a/regression-test/data/variant_p0/desc.out
+++ b/regression-test/data/variant_p0/desc.out
@@ -2,94 +2,94 @@
-- !sql_1 --
k bigint Yes true \N
v variant<PROPERTIES ("variant_max_subcolumns_count" = "2")> Yes
false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.xxxx text Yes false \N NONE
-- !sql_2 --
k bigint Yes true \N
v variant<PROPERTIES ("variant_max_subcolumns_count" = "2")> Yes
false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.ddd.mxmxm array<json> Yes false \N NONE
-- !sql_3 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.b json Yes false \N NONE
-v.c.c smallint Yes false \N NONE
+v.c.c bigint Yes false \N NONE
v.c.e double Yes false \N NONE
v.xxxx text Yes false \N NONE
-- !sql_6_1 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.b json Yes false \N NONE
-v.c.c smallint Yes false \N NONE
+v.c.c bigint Yes false \N NONE
v.c.e double Yes false \N NONE
-v.ddd.aaa tinyint Yes false \N NONE
+v.ddd.aaa bigint Yes false \N NONE
v.ddd.mxmxm array<json> Yes false \N NONE
-v.oooo.xxxx.xxx tinyint Yes false \N NONE
+v.oooo.xxxx.xxx bigint Yes false \N NONE
v.xxxx text Yes false \N NONE
-- !sql_6_2 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.b json Yes false \N NONE
-v.c.c smallint Yes false \N NONE
+v.c.c bigint Yes false \N NONE
v.c.e double Yes false \N NONE
v.xxxx text Yes false \N NONE
-- !sql_6_3 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.b json Yes false \N NONE
-v.c.c smallint Yes false \N NONE
+v.c.c bigint Yes false \N NONE
v.c.e double Yes false \N NONE
-- !sql_6 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.b json Yes false \N NONE
-v.c.c smallint Yes false \N NONE
+v.c.c bigint Yes false \N NONE
v.c.e double Yes false \N NONE
-v.ddd.aaa tinyint Yes false \N NONE
+v.ddd.aaa bigint Yes false \N NONE
v.ddd.mxmxm array<json> Yes false \N NONE
-v.oooo.xxxx.xxx tinyint Yes false \N NONE
+v.oooo.xxxx.xxx bigint Yes false \N NONE
v.xxxx text Yes false \N NONE
-- !sql_7 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.b json Yes false \N NONE
-v.c.c smallint Yes false \N NONE
+v.c.c bigint Yes false \N NONE
v.c.e double Yes false \N NONE
v.xxxx text Yes false \N NONE
-- !sql_7_1 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.xxxx text Yes false \N NONE
-- !sql_7_2 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.b json Yes false \N NONE
-v.c.c smallint Yes false \N NONE
+v.c.c bigint Yes false \N NONE
v.c.e double Yes false \N NONE
-- !sql_7_3 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.b json Yes false \N NONE
-v.c.c smallint Yes false \N NONE
+v.c.c bigint Yes false \N NONE
v.c.e double Yes false \N NONE
v.xxxx text Yes false \N NONE
@@ -98,16 +98,16 @@ k bigint Yes true \N
v1 variant Yes false \N NONE
v2 variant Yes false \N NONE
v3 variant Yes false \N NONE
-v1.a smallint Yes false \N NONE
+v1.a bigint Yes false \N NONE
v1.b json Yes false \N NONE
-v1.c.c smallint Yes false \N NONE
+v1.c.c bigint Yes false \N NONE
v1.c.e double Yes false \N NONE
-v1.oooo.xxxx.xxx tinyint Yes false \N NONE
-v2.a smallint Yes false \N NONE
+v1.oooo.xxxx.xxx bigint Yes false \N NONE
+v2.a bigint Yes false \N NONE
v2.xxxx text Yes false \N NONE
-v3.a smallint Yes false \N NONE
+v3.a bigint Yes false \N NONE
v3.b json Yes false \N NONE
-v3.c.c smallint Yes false \N NONE
+v3.c.c bigint Yes false \N NONE
v3.c.e double Yes false \N NONE
-- !sql_9 --
@@ -117,18 +117,18 @@ v variant Yes false \N NONE
-- !sql_9_1 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.b json Yes false \N NONE
-v.c.c smallint Yes false \N NONE
+v.c.c bigint Yes false \N NONE
v.c.e double Yes false \N NONE
-v.oooo.xxxx.xxx tinyint Yes false \N NONE
+v.oooo.xxxx.xxx bigint Yes false \N NONE
-- !sql_10 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.k1 tinyint Yes false \N NONE
+v.k1 bigint Yes false \N NONE
v.k2 text Yes false \N NONE
-v.k3 array<smallint> Yes false \N NONE
+v.k3 array<bigint> Yes false \N NONE
v.k4 double Yes false \N NONE
v.k5 json Yes false \N NONE
@@ -136,60 +136,60 @@ v.k5 json Yes false \N NONE
k bigint Yes true \N
v variant Yes false \N NONE
v2 variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.b json Yes false \N NONE
-v.c.c smallint Yes false \N NONE
+v.c.c bigint Yes false \N NONE
v.c.e double Yes false \N NONE
-v.k1 tinyint Yes false \N NONE
+v.k1 bigint Yes false \N NONE
v.k2 text Yes false \N NONE
-v.k3 array<smallint> Yes false \N NONE
+v.k3 array<bigint> Yes false \N NONE
v.k4 double Yes false \N NONE
v.k5 json Yes false \N NONE
-v.oooo.xxxx.xxx tinyint Yes false \N NONE
-v2.a smallint Yes false \N NONE
+v.oooo.xxxx.xxx bigint Yes false \N NONE
+v2.a bigint Yes false \N NONE
v2.b json Yes false \N NONE
-v2.c.c smallint Yes false \N NONE
+v2.c.c bigint Yes false \N NONE
v2.c.e double Yes false \N NONE
-v2.oooo.xxxx.xxx tinyint Yes false \N NONE
+v2.oooo.xxxx.xxx bigint Yes false \N NONE
-- !sql_10_2 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.b json Yes false \N NONE
-v.c.c smallint Yes false \N NONE
+v.c.c bigint Yes false \N NONE
v.c.e double Yes false \N NONE
-v.k1 tinyint Yes false \N NONE
+v.k1 bigint Yes false \N NONE
v.k2 text Yes false \N NONE
-v.k3 array<smallint> Yes false \N NONE
+v.k3 array<bigint> Yes false \N NONE
v.k4 double Yes false \N NONE
v.k5 json Yes false \N NONE
-v.oooo.xxxx.xxx tinyint Yes false \N NONE
-v2.a smallint Yes false \N NONE
+v.oooo.xxxx.xxx bigint Yes false \N NONE
+v2.a bigint Yes false \N NONE
v2.b json Yes false \N NONE
-v2.c.c smallint Yes false \N NONE
+v2.c.c bigint Yes false \N NONE
v2.c.e double Yes false \N NONE
-v2.oooo.xxxx.xxx tinyint Yes false \N NONE
+v2.oooo.xxxx.xxx bigint Yes false \N NONE
-- !sql_10_3 --
k bigint Yes true \N
v variant Yes false \N NONE
v3 variant Yes false \N NONE
-v.a smallint Yes false \N NONE
+v.a bigint Yes false \N NONE
v.b json Yes false \N NONE
-v.c.c smallint Yes false \N NONE
+v.c.c bigint Yes false \N NONE
v.c.e double Yes false \N NONE
-v.k1 tinyint Yes false \N NONE
+v.k1 bigint Yes false \N NONE
v.k2 text Yes false \N NONE
-v.k3 array<smallint> Yes false \N NONE
+v.k3 array<bigint> Yes false \N NONE
v.k4 double Yes false \N NONE
v.k5 json Yes false \N NONE
-v.oooo.xxxx.xxx tinyint Yes false \N NONE
-v3.a smallint Yes false \N NONE
+v.oooo.xxxx.xxx bigint Yes false \N NONE
+v3.a bigint Yes false \N NONE
v3.b json Yes false \N NONE
-v3.c.c smallint Yes false \N NONE
+v3.c.c bigint Yes false \N NONE
v3.c.e double Yes false \N NONE
-v3.oooo.xxxx.xxx tinyint Yes false \N NONE
+v3.oooo.xxxx.xxx bigint Yes false \N NONE
-- !sql_11 --
k bigint Yes true \N
@@ -198,7 +198,7 @@ v.!@#^&*() text Yes false \N NONE
v.名字 text Yes false \N NONE
v.画像.丬文 text Yes false \N NONE
v.画像.地址 text Yes false \N NONE
-v.金额 smallint Yes false \N NONE
+v.金额 bigint Yes false \N NONE
-- !sql_12 --
k bigint Yes true \N
@@ -207,8 +207,8 @@ v variant Yes false \N NONE
-- !sql15 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.a tinyint Yes false \N NONE
-v.b tinyint Yes false \N NONE
-v.c tinyint Yes false \N NONE
-v.d tinyint Yes false \N NONE
+v.a bigint Yes false \N NONE
+v.b bigint Yes false \N NONE
+v.c bigint Yes false \N NONE
+v.d bigint Yes false \N NONE
diff --git a/regression-test/data/variant_p0/nested.out
b/regression-test/data/variant_p0/nested.out
index 6c3ff0802bc..a6274256c31 100644
--- a/regression-test/data/variant_p0/nested.out
+++ b/regression-test/data/variant_p0/nested.out
@@ -5,28 +5,28 @@ v variant<PROPERTIES ("variant_max_subcolumns_count" =
"3")> Yes false \N NONE
v.nested.a array<text> Yes false \N NONE
v.nested.aaa array<text> Yes false \N NONE
v.nested.ax1111 array<text> Yes false \N NONE
-v.nested.axxxb array<tinyint> Yes false \N NONE
+v.nested.axxxb array<bigint> Yes false \N NONE
v.nested.ba array<text> Yes false \N NONE
v.nested.baaa array<text> Yes false \N NONE
-v.nested.ddsss array<smallint> Yes false \N NONE
+v.nested.ddsss array<bigint> Yes false \N NONE
v.nested.mmm array<text> Yes false \N NONE
v.nested.nested.a array<text> Yes false \N NONE
v.nested.nested.aaa array<text> Yes false \N NONE
v.nested.nested.ax1111 array<text> Yes false \N NONE
-v.nested.nested.axxxb array<tinyint> Yes false \N NONE
+v.nested.nested.axxxb array<bigint> Yes false \N NONE
v.nested.nested.ba array<text> Yes false \N NONE
-v.nested.nested.ddsss array<smallint> Yes false \N NONE
-v.nested.nested.xx array<tinyint> Yes false \N NONE
-v.nested.nested.xxxy111 array<tinyint> Yes false \N NONE
+v.nested.nested.ddsss array<bigint> Yes false \N NONE
+v.nested.nested.xx array<bigint> Yes false \N NONE
+v.nested.nested.xxxy111 array<bigint> Yes false \N NONE
v.nested.nested.yyyxxxx array<text> Yes false \N NONE
-v.nested.xx array<tinyint> Yes false \N NONE
-v.nested.xxxy111 array<tinyint> Yes false \N NONE
+v.nested.xx array<bigint> Yes false \N NONE
+v.nested.xxxy111 array<bigint> Yes false \N NONE
v.nested.yyy array<text> Yes false \N NONE
v.nested.yyyxxxx array<text> Yes false \N NONE
v.nested.zzz11 array<text> Yes false \N NONE
-v.not nested smallint Yes false \N NONE
-v.not nested2.llll tinyint Yes false \N NONE
-v.xx tinyint Yes false \N NONE
+v.not nested bigint Yes false \N NONE
+v.not nested2.llll bigint Yes false \N NONE
+v.xx bigint Yes false \N NONE
-- !sql --
1 {"xx":10}
diff --git a/regression-test/data/variant_p0/nested/nested_in_top_array.out
b/regression-test/data/variant_p0/nested/nested_in_top_array.out
index 64e6134b797..995bfe36832 100644
--- a/regression-test/data/variant_p0/nested/nested_in_top_array.out
+++ b/regression-test/data/variant_p0/nested/nested_in_top_array.out
@@ -45,7 +45,7 @@
\N \N \N
-- !sql_18 --
-[1] ['1'] [1.1]
+[1] ["1"] [1.1]
-- !sql_19 --
\N \N \N
@@ -111,8 +111,8 @@
\N \N \N
-- !sql_18 --
-[1] ['1'] [1.1]
-['2.5'] [123.1] \N
+["1"] [""1""] [1.1]
+[""2.5""] ["123.1"] \N
-- !sql_19 --
\N \N \N
@@ -194,8 +194,8 @@
\N \N \N
-- !sql_18 --
-[1] ['1'] [1.1]
-['2.5'] [123.1] \N
+[1] [""1""] [1.1]
+["2.5"] ["123.1"] \N
{"b":[2],"c":[1]} \N \N
-- !sql_19 --
@@ -294,10 +294,10 @@
\N \N \N
-- !sql_18 --
-[1] ['1'] [1.1]
-['2.5'] [123.1] \N
+[1] [""1""] [1.1]
+["2.5"] ["123.1"] \N
{"b":[2],"c":[1]} \N \N
-{"c":[1]} ['1'] {"a":[2]}
+{"c":[1]} [""1""] {"a":[2]}
-- !sql_19 --
\N \N \N
@@ -411,11 +411,11 @@
\N \N \N
-- !sql_18 --
-[1] ['1'] [1.1]
-['2.5'] [123.1] \N
+[1] [""1""] [1.1]
+["2.5"] ["123.1"] \N
{"b":[2],"c":[1]} \N \N
-{"c":[1]} ['1'] {"a":[2]}
-[1] [1, 2, 3] \N
+{"c":[1]} [""1""] {"a":[2]}
+[1] ["1", "2", "3"] \N
-- !sql_19 --
\N \N \N
@@ -530,11 +530,11 @@
\N \N \N
-- !sql_18 --
-[1] ["1"] [1.1]
-["2.5"] [123.1] {}
+[1] [""1""] [1.1]
+["2.5"] ["123.1"] {}
{"b":[2],"c":[1]} \N {}
-{"c":[1]} ["1"] {"a":[2]}
-[1] [1, 2, 3] {}
+{"c":[1]} [""1""] {"a":[2]}
+[1] ["1", "2", "3"] {}
-- !sql_19 --
\N \N \N
diff --git a/regression-test/data/variant_p0/nested2.out
b/regression-test/data/variant_p0/nested2.out
index 357f76927e7..85bd5d26516 100644
--- a/regression-test/data/variant_p0/nested2.out
+++ b/regression-test/data/variant_p0/nested2.out
@@ -2,7 +2,7 @@
-- !sql_desc_1 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.nested.a array<tinyint> Yes false \N NONE
+v.nested.a array<bigint> Yes false \N NONE
v.nested.b array<text> Yes false \N NONE
v.nested.c array<double> Yes false \N NONE
@@ -51,7 +51,7 @@ v.nested.c array<double> Yes false \N NONE
-- !sql_desc_2 --
k bigint Yes true \N
v variant Yes false \N NONE
-v.nested.a array<double> Yes false \N NONE
+v.nested.a array<json> Yes false \N NONE
v.nested.b array<json> Yes false \N NONE
v.nested.c array<double> Yes false \N NONE
diff --git
a/regression-test/data/variant_p0/predefine/test_prdefine_insert_into_select.out
b/regression-test/data/variant_p0/predefine/test_prdefine_insert_into_select.out
index 8bc90795e1b..a8327f4fa90 100644
---
a/regression-test/data/variant_p0/predefine/test_prdefine_insert_into_select.out
+++
b/regression-test/data/variant_p0/predefine/test_prdefine_insert_into_select.out
@@ -5,9 +5,9 @@
1
{"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17T09:09:09Z","d":123,"e":"2025-04-19","f":"2025-04-20","g":"2025-04-21","h":"2025-04-22","i":"2025-04-23","j":"2025-04-24","k":"2025-04-25","l":"2025-04-26","m":"2025-04-27","n":"2025-04-28","o":"2025-04-29","p":"2025-04-30"}
-- !sql --
+{"a":"string","b":"double","c":"string","d":"bigint","e":"string","f":"string","g":"string","h":"string","i":"string","j":"string","k":"string","l":"string","m":"string","n":"string","o":"string","p":"string"}
{"a":"string","b":"double","c":"string","d":"string","e":"string","f":"string","g":"string","h":"string","i":"string","j":"string","k":"string","l":"string","m":"string","n":"string","o":"string","p":"string"}
{"a":"string","b":"double","c":"string","d":"string","e":"string","f":"string","g":"string","h":"string","i":"string","j":"string","k":"string","l":"string","m":"string","n":"string","o":"string","p":"string"}
-{"a":"string","b":"double","c":"string","d":"tinyint","e":"string","f":"string","g":"string","h":"string","i":"string","j":"string","k":"string","l":"string","m":"string","n":"string","o":"string","p":"string"}
-- !sql --
1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17
17:09:09","d":"123","e":"2025-04-19","f":"2025-04-20","g":"2025-04-21","h":"2025-04-22","i":"2025-04-23","j":"2025-04-24","k":"2025-04-25","l":"2025-04-26","m":"2025-04-27","n":"2025-04-28","o":"2025-04-29","p":"2025-04-30"}
@@ -15,9 +15,9 @@
1
{"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17T09:09:09Z","d":123,"e":"2025-04-19","f":"2025-04-20","g":"2025-04-21","h":"2025-04-22","i":"2025-04-23","j":"2025-04-24","k":"2025-04-25","l":"2025-04-26","m":"2025-04-27","n":"2025-04-28","o":"2025-04-29","p":"2025-04-30"}
-- !sql --
+{"a":"datev2","b":"decimal128i","c":"string","d":"bigint","e":"string","f":"string","g":"string","h":"string","i":"string","j":"string","k":"string","l":"string","m":"string","n":"string","o":"string","p":"string"}
{"a":"datev2","b":"decimal128i","c":"string","d":"string","e":"string","f":"string","g":"string","h":"string","i":"string","j":"string","k":"string","l":"string","m":"string","n":"string","o":"string","p":"string"}
{"a":"datev2","b":"decimal128i","c":"string","d":"string","e":"string","f":"string","g":"string","h":"string","i":"string","j":"string","k":"string","l":"string","m":"string","n":"string","o":"string","p":"string"}
-{"a":"datev2","b":"decimal128i","c":"string","d":"tinyint","e":"string","f":"string","g":"string","h":"string","i":"string","j":"string","k":"string","l":"string","m":"string","n":"string","o":"string","p":"string"}
-- !sql --
2
diff --git a/regression-test/data/variant_p0/predefine/test_predefine_ddl.out
b/regression-test/data/variant_p0/predefine/test_predefine_ddl.out
index a65c3ec1fb5..c4f22c79ac1 100644
--- a/regression-test/data/variant_p0/predefine/test_predefine_ddl.out
+++ b/regression-test/data/variant_p0/predefine/test_predefine_ddl.out
@@ -1,11 +1,11 @@
-- This file is automatically generated. You should know what you did if you
want to edit this
-- !sql --
id bigint Yes true \N
-var variant<PROPERTIES ("variant_max_subcolumns_count" = "10")> Yes
false \N NONE
+var variant<PROPERTIES ("variant_max_subcolumns_count" =
"10","variant_sparse_hash_shard_count" = "20")> Yes false \N NONE
-- !sql --
id bigint Yes true \N
-var variant<PROPERTIES ("variant_max_subcolumns_count" = "10")> Yes
false \N NONE
-var2 variant<PROPERTIES ("variant_max_subcolumns_count" = "15")> Yes
false \N NONE
+var variant<PROPERTIES ("variant_max_subcolumns_count" =
"10","variant_sparse_hash_shard_count" = "20")> Yes false \N NONE
+var2 variant<PROPERTIES ("variant_max_subcolumns_count" =
"15","variant_sparse_hash_shard_count" = "20")> Yes false \N NONE
var3 variant Yes false \N NONE
diff --git a/regression-test/data/variant_p0/predefine/variant_hirachinal.out
b/regression-test/data/variant_p0/predefine/variant_hirachinal.out
index a3b4f28e286..e5ab29c3d46 100644
--- a/regression-test/data/variant_p0/predefine/variant_hirachinal.out
+++ b/regression-test/data/variant_p0/predefine/variant_hirachinal.out
@@ -21,11 +21,11 @@
-- !sql1 --
12345
-[1, 2, 3]
+[1,2,3]
{"c":456,"d":"null","e":7.111}
-- !sql2 --
12345
-[1, 2, 3]
+[1,2,3]
{"c":456,"d":"null","e":7.111}
diff --git a/regression-test/data/variant_p0/predefine/variant_with_mow.out
b/regression-test/data/variant_p0/predefine/variant_with_mow.out
index fde3e01fb3e..668ff6a8586 100644
--- a/regression-test/data/variant_p0/predefine/variant_with_mow.out
+++ b/regression-test/data/variant_p0/predefine/variant_with_mow.out
@@ -17,5 +17,5 @@
944935237 2 1 1 true 1741682404960657985
1741682404960657985 0
{"a":34,"b":"44","c":54,"d":64,"e":74,"f":84,"g":94,"h":104,"i":114,"j":124}
-- !sql --
-{"a":"int","b":"string","c":"largeint","d":"tinyint","e":"tinyint","f":"tinyint","g":"tinyint","h":"tinyint","i":"smallint","j":"smallint"}
+{"a":"int","b":"string","c":"largeint","d":"bigint","e":"bigint","f":"bigint","g":"bigint","h":"bigint","i":"bigint","j":"bigint"}
diff --git a/regression-test/data/variant_p0/test_types_in_variant.out
b/regression-test/data/variant_p0/test_types_in_variant.out
new file mode 100644
index 00000000000..c215c3eda41
--- /dev/null
+++ b/regression-test/data/variant_p0/test_types_in_variant.out
@@ -0,0 +1,121 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !sql_scalar --
+id int Yes true \N
+var variant Yes false \N NONE
+var.a bigint Yes false \N NONE
+var.b double Yes false \N NONE
+var.c text Yes false \N NONE
+var.d boolean Yes false \N NONE
+var.f largeint Yes false \N NONE
+
+-- !sql --
+1 {"a":1,"b":1.1,"c":"string","d":1,"f":18446744073709551615}
+2 {"g":[1, 2, 3],"h":[1.1, 2.2],"i":["string", "string2"],"j":[1,
0],"l":[18446744073709551615, 18446744073709551605]}
+
+-- !sql_array --
+id int Yes true \N
+var variant Yes false \N NONE
+var.a bigint Yes false \N NONE
+var.b double Yes false \N NONE
+var.c text Yes false \N NONE
+var.d boolean Yes false \N NONE
+var.f largeint Yes false \N NONE
+var.g array<bigint> Yes false \N NONE
+var.h array<double> Yes false \N NONE
+var.i array<text> Yes false \N NONE
+var.j array<boolean> Yes false \N NONE
+var.l array<largeint> Yes false \N NONE
+
+-- !sql --
+1 {"a":1,"b":1.1,"c":"string","d":1,"f":18446744073709551615}
+2 {"g":[1, 2, 3],"h":[1.1, 2.2],"i":["string", "string2"],"j":[1,
0],"l":[18446744073709551615, 18446744073709551605]}
+3 {"m":[1, 18446744073709551605]}
+
+-- !sql_array_largeint --
+id int Yes true \N
+var variant Yes false \N NONE
+var.a bigint Yes false \N NONE
+var.b double Yes false \N NONE
+var.c text Yes false \N NONE
+var.d boolean Yes false \N NONE
+var.f largeint Yes false \N NONE
+var.g array<bigint> Yes false \N NONE
+var.h array<double> Yes false \N NONE
+var.i array<text> Yes false \N NONE
+var.j array<boolean> Yes false \N NONE
+var.l array<largeint> Yes false \N NONE
+var.m array<largeint> Yes false \N NONE
+
+-- !sql --
+1 {"a":1,"b":1.1,"c":"string","d":1,"f":18446744073709551615}
+2 {"g":[1, 2, 3],"h":[1.1, 2.2],"i":["string", "string2"],"j":[1,
0],"l":[18446744073709551615, 18446744073709551605]}
+3 {"m":[1, 18446744073709551605]}
+4 {"n":[2, "string", null, true, 1.1, 18446744073709551615]}
+
+-- !sql_array_json --
+id int Yes true \N
+var variant Yes false \N NONE
+var.a bigint Yes false \N NONE
+var.b double Yes false \N NONE
+var.c text Yes false \N NONE
+var.d boolean Yes false \N NONE
+var.f largeint Yes false \N NONE
+var.g array<bigint> Yes false \N NONE
+var.h array<double> Yes false \N NONE
+var.i array<text> Yes false \N NONE
+var.j array<boolean> Yes false \N NONE
+var.l array<largeint> Yes false \N NONE
+var.m array<largeint> Yes false \N NONE
+var.n array<json> Yes false \N NONE
+
+-- !sql --
+1 {"a":1,"b":1.1,"c":"string","d":1,"f":18446744073709551615}
+2 {"g":[1, 2, 3],"h":[1.1, 2.2],"i":["string", "string2"],"j":[1,
0],"l":[18446744073709551615, 18446744073709551605]}
+3 {"m":[1, 18446744073709551605]}
+4 {"n":[2, "string", null, true, 1.1, 18446744073709551615]}
+5 {"o":[18446744073709551615,["string",null]]}
+
+-- !sql_json --
+id int Yes true \N
+var variant Yes false \N NONE
+var.a bigint Yes false \N NONE
+var.b double Yes false \N NONE
+var.c text Yes false \N NONE
+var.d boolean Yes false \N NONE
+var.f largeint Yes false \N NONE
+var.g array<bigint> Yes false \N NONE
+var.h array<double> Yes false \N NONE
+var.i array<text> Yes false \N NONE
+var.j array<boolean> Yes false \N NONE
+var.l array<largeint> Yes false \N NONE
+var.m array<largeint> Yes false \N NONE
+var.n array<json> Yes false \N NONE
+var.o json Yes false \N NONE
+
+-- !sql --
+1 {"a":[{"b":18446744073709551615}]}
+
+-- !sql_array_largeint --
+id int Yes true \N
+var variant Yes false \N NONE
+var.a.b array<largeint> Yes false \N NONE
+
+-- !sql --
+1 {"a":[{"b":18446744073709551615}]}
+2 {"a":[{"b":1}]}
+
+-- !sql_array_largeint --
+id int Yes true \N
+var variant Yes false \N NONE
+var.a.b array<largeint> Yes false \N NONE
+
+-- !sql --
+1 {"a":[{"b":18446744073709551615}]}
+2 {"a":[{"b":1}]}
+3 {"a":[{"b":1.1}]}
+
+-- !sql_array_json --
+id int Yes true \N
+var variant Yes false \N NONE
+var.a.b array<json> Yes false \N NONE
+
diff --git a/regression-test/data/variant_p0/tpch/sql/q01_trans.out
b/regression-test/data/variant_p0/tpch/sql/q01_trans.out
index c5d260caf13..301aa0df649 100644
--- a/regression-test/data/variant_p0/tpch/sql/q01_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q01_trans.out
@@ -1,7 +1,7 @@
-- This file is automatically generated. You should know what you did if you
want to edit this
-- !q01_trans --
-A F 3774200.0 5.320753880689995E9 5.054096266682795E9
5.256751331449231E9 25.537587116854997 36002.123829014105
0.05014459706338475 147790
-N F 95257.0 1.3373779584000006E8 1.2713237265119994E8
1.3228629122944497E8 25.30066401062417 35521.32691633468
0.04939442231075703 3765
-N O 7459297.0 1.0512270008900036E10 9.986238338384706E9
1.0385578376585476E10 25.545537671232875 36000.92468801382
0.05009595890410998 292000
-R F 3785523.0 5.337950526470003E9 5.071818532942003E9
5.274405503049376E9 25.5259438574251 35994.02921403095
0.04998927856182775 148301
+A F 3774200.0 5.320753880689977E9 5.054096266682804E9
5.256751331449211E9 25.537587116854997 36002.12382901398
0.050144597063415716 147790
+N F 95257.0 1.3373779583999993E8 1.2713237265119982E8
1.3228629122944513E8 25.30066401062417 35521.32691633464
0.049394422310757 3765
+N O 7459297.0 1.051227000889986E10 9.98623833838472E9
1.0385578376585447E10 25.545537671232875 36000.92468801322
0.05009595890416299 292000
+R F 3785523.0 5.337950526470014E9 5.071818532942053E9
5.27440550304943E9 25.5259438574251 35994.02921403101
0.049989278561858454 148301
diff --git a/regression-test/data/variant_p0/tpch/sql/q05_trans.out
b/regression-test/data/variant_p0/tpch/sql/q05_trans.out
index 7eb16fd3e96..53ad07b7e6b 100644
--- a/regression-test/data/variant_p0/tpch/sql/q05_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q05_trans.out
@@ -1,7 +1,7 @@
-- This file is automatically generated. You should know what you did if you
want to edit this
-- !q05_trans --
CHINA 7822103.0
-INDIA 6376121.508500004
+INDIA 6376121.508500003
JAPAN 6000077.218400001
INDONESIA 5580475.402700002
VIETNAM 4497840.546600001
diff --git a/regression-test/data/variant_p0/tpch/sql/q06_trans.out
b/regression-test/data/variant_p0/tpch/sql/q06_trans.out
index 174241a7cd2..0ec07a8e4d1 100644
--- a/regression-test/data/variant_p0/tpch/sql/q06_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q06_trans.out
@@ -1,4 +1,4 @@
-- This file is automatically generated. You should know what you did if you
want to edit this
-- !q06_trans --
-1.1803420253399998E7
+1.1803420253400004E7
diff --git a/regression-test/data/variant_p0/tpch/sql/q08_trans.out
b/regression-test/data/variant_p0/tpch/sql/q08_trans.out
index b248362fce4..bf9abf8d22d 100644
--- a/regression-test/data/variant_p0/tpch/sql/q08_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q08_trans.out
@@ -1,5 +1,5 @@
-- This file is automatically generated. You should know what you did if you
want to edit this
-- !q08_trans --
-1995 0.028648741305617544
-1996 0.01825027910796215
+1995 0.028648741305617537
+1996 0.018250279107962144
diff --git a/regression-test/data/variant_p0/tpch/sql/q09_trans.out
b/regression-test/data/variant_p0/tpch/sql/q09_trans.out
index 807b50ef4e7..f14bf75451a 100644
--- a/regression-test/data/variant_p0/tpch/sql/q09_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q09_trans.out
@@ -1,178 +1,178 @@
-- This file is automatically generated. You should know what you did if you
want to edit this
-- !q09_trans --
-ALGERIA 1998 2321785.3682000004
-ALGERIA 1997 3685016.8589
-ALGERIA 1996 4276597.4252999965
-ALGERIA 1995 4418370.4153999975
-ALGERIA 1994 3864849.952099998
-ALGERIA 1993 3541051.386499998
-ALGERIA 1992 4310013.348199998
-ARGENTINA 1998 2685983.8005
+ALGERIA 1998 2321785.3681999994
+ALGERIA 1997 3685016.8589000003
+ALGERIA 1996 4276597.4253
+ALGERIA 1995 4418370.4154
+ALGERIA 1994 3864849.9521
+ALGERIA 1993 3541051.3865000014
+ALGERIA 1992 4310013.348199999
+ARGENTINA 1998 2685983.8005000004
ARGENTINA 1997 4242147.8124
-ARGENTINA 1996 3907867.0103000016
-ARGENTINA 1995 4605921.501099999
-ARGENTINA 1994 3542096.1564
-ARGENTINA 1993 3949965.9387999987
-ARGENTINA 1992 4521180.4695
+ARGENTINA 1996 3907867.0103000007
+ARGENTINA 1995 4605921.501100001
+ARGENTINA 1994 3542096.1564000007
+ARGENTINA 1993 3949965.9388000006
+ARGENTINA 1992 4521180.469500001
BRAZIL 1998 2778730.393099999
-BRAZIL 1997 4642037.468700003
+BRAZIL 1997 4642037.468700002
BRAZIL 1996 4530304.603400001
-BRAZIL 1995 4502344.865700001
-BRAZIL 1994 4875806.501500003
+BRAZIL 1995 4502344.865699999
+BRAZIL 1994 4875806.5015
BRAZIL 1993 4687478.6531
BRAZIL 1992 5035200.046399999
CANADA 1998 2194509.0465
-CANADA 1997 3482197.9520999985
-CANADA 1996 3712231.281399999
-CANADA 1995 4014814.847599998
+CANADA 1997 3482197.9521000013
+CANADA 1996 3712231.2813999983
+CANADA 1995 4014814.8475999995
CANADA 1994 4145304.485499999
-CANADA 1993 3787069.604499998
-CANADA 1992 4168009.420099999
-CHINA 1998 3398578.0001000008
-CHINA 1997 6358959.3338
-CHINA 1996 6435158.322900003
-CHINA 1995 6174776.211300001
-CHINA 1994 6385751.081199998
-CHINA 1993 5765034.119399997
-CHINA 1992 6324034.237900005
+CANADA 1993 3787069.6044999985
+CANADA 1992 4168009.4200999998
+CHINA 1998 3398578.0001000003
+CHINA 1997 6358959.333799999
+CHINA 1996 6435158.322899999
+CHINA 1995 6174776.2113
+CHINA 1994 6385751.081199999
+CHINA 1993 5765034.119400001
+CHINA 1992 6324034.237899998
EGYPT 1998 2333148.3334000004
-EGYPT 1997 3661244.2730999994
-EGYPT 1996 3765371.2367999996
-EGYPT 1995 4094744.292499998
-EGYPT 1994 3566508.081800001
-EGYPT 1993 3725283.7747000013
-EGYPT 1992 3373762.333499999
-ETHIOPIA 1998 1953927.2682
-ETHIOPIA 1997 3285786.3266000007
-ETHIOPIA 1996 3525028.7952
-ETHIOPIA 1995 3781674.8910999987
-ETHIOPIA 1994 3037409.435999999
+EGYPT 1997 3661244.2731
+EGYPT 1996 3765371.2368000015
+EGYPT 1995 4094744.292499999
+EGYPT 1994 3566508.081799999
+EGYPT 1993 3725283.7747000004
+EGYPT 1992 3373762.3334999983
+ETHIOPIA 1998 1953927.2682000003
+ETHIOPIA 1997 3285786.3266
+ETHIOPIA 1996 3525028.795199999
+ETHIOPIA 1995 3781674.8911000006
+ETHIOPIA 1994 3037409.4360000007
ETHIOPIA 1993 3008978.2677000007
-ETHIOPIA 1992 2721203.235500001
-FRANCE 1998 2604373.8804999986
-FRANCE 1997 3982872.0488000023
-FRANCE 1996 3622479.2412999994
+ETHIOPIA 1992 2721203.2354999995
+FRANCE 1998 2604373.8805000014
+FRANCE 1997 3982872.0488
+FRANCE 1996 3622479.2413000013
FRANCE 1995 4479939.702
-FRANCE 1994 3531013.1981000025
-FRANCE 1993 4086437.3101999997
-FRANCE 1992 3637792.1333
-GERMANY 1998 3291023.2964999974
-GERMANY 1997 5139337.344300003
+FRANCE 1994 3531013.1981
+FRANCE 1993 4086437.310200001
+FRANCE 1992 3637792.1332999994
+GERMANY 1998 3291023.2964999997
+GERMANY 1997 5139337.344299995
GERMANY 1996 4799810.457699999
-GERMANY 1995 5405785.797800004
-GERMANY 1994 4555556.459199997
-GERMANY 1993 4428195.101900002
-GERMANY 1992 4656148.420400001
-INDIA 1998 2591288.187399999
+GERMANY 1995 5405785.797800001
+GERMANY 1994 4555556.4591999985
+GERMANY 1993 4428195.101900001
+GERMANY 1992 4656148.420399998
+INDIA 1998 2591288.1873999997
INDIA 1997 5159562.7033
-INDIA 1996 5307258.304900003
-INDIA 1995 5148208.790199999
-INDIA 1994 5164001.958200001
-INDIA 1993 4321398.438800003
-INDIA 1992 5297703.693499999
-INDONESIA 1998 3094900.159700001
-INDONESIA 1997 5719773.035799999
-INDONESIA 1996 6037238.599300002
-INDONESIA 1995 5266783.489899999
-INDONESIA 1994 5470762.872900001
-INDONESIA 1993 6189826.661299997
-INDONESIA 1992 4414623.154899998
-IRAN 1998 3214864.120900001
-IRAN 1997 3688049.0690999986
-IRAN 1996 3621649.2246999983
-IRAN 1995 4420783.4205
-IRAN 1994 4373984.652300001
-IRAN 1993 3731301.7814000007
+INDIA 1996 5307258.304899999
+INDIA 1995 5148208.7902
+INDIA 1994 5164001.958199998
+INDIA 1993 4321398.438800001
+INDIA 1992 5297703.693500002
+INDONESIA 1998 3094900.1597000016
+INDONESIA 1997 5719773.035800001
+INDONESIA 1996 6037238.599299999
+INDONESIA 1995 5266783.4898999985
+INDONESIA 1994 5470762.872899999
+INDONESIA 1993 6189826.661299998
+INDONESIA 1992 4414623.154899999
+IRAN 1998 3214864.120899999
+IRAN 1997 3688049.0691
+IRAN 1996 3621649.2247
+IRAN 1995 4420783.420500001
+IRAN 1994 4373984.6523
+IRAN 1993 3731301.7813999997
IRAN 1992 4417133.366199998
IRAQ 1998 2338859.4098999994
-IRAQ 1997 3622681.5642999993
-IRAQ 1996 4762291.872199997
-IRAQ 1995 4558092.735900002
-IRAQ 1994 4951604.169899996
-IRAQ 1993 3830077.991100002
-IRAQ 1992 3938636.4873999986
+IRAQ 1997 3622681.5643000007
+IRAQ 1996 4762291.872199998
+IRAQ 1995 4558092.735899999
+IRAQ 1994 4951604.169899999
+IRAQ 1993 3830077.9910999998
+IRAQ 1992 3938636.487400001
JAPAN 1998 1849535.0802000004
-JAPAN 1997 4068688.8536999994
-JAPAN 1996 4044774.7597000017
-JAPAN 1995 4793005.802699999
+JAPAN 1997 4068688.8537000003
+JAPAN 1996 4044774.7597
+JAPAN 1995 4793005.802700002
JAPAN 1994 4114717.056800001
-JAPAN 1993 3614468.7485000007
-JAPAN 1992 4266694.470000001
-JORDAN 1998 1811488.0718999994
+JAPAN 1993 3614468.7485
+JAPAN 1992 4266694.47
+JORDAN 1998 1811488.0719000003
JORDAN 1997 2951297.867800001
JORDAN 1996 3302528.3067000005
-JORDAN 1995 3221813.9990000012
-JORDAN 1994 2417892.092100001
-JORDAN 1993 3107641.7661000015
-JORDAN 1992 3316379.0585000003
-KENYA 1998 2579075.4189999984
-KENYA 1997 2929194.231699999
-KENYA 1996 3569129.5618999996
-KENYA 1995 3542889.108699999
-KENYA 1994 3983095.399400002
-KENYA 1993 3713988.970799999
-KENYA 1992 3304641.8340000007
-MOROCCO 1998 1815334.818000001
-MOROCCO 1997 3693214.8447000002
+JORDAN 1995 3221813.998999999
+JORDAN 1994 2417892.0921
+JORDAN 1993 3107641.7660999987
+JORDAN 1992 3316379.0584999993
+KENYA 1998 2579075.419
+KENYA 1997 2929194.2317
+KENYA 1996 3569129.5619
+KENYA 1995 3542889.108700001
+KENYA 1994 3983095.3993999995
+KENYA 1993 3713988.9708000016
+KENYA 1992 3304641.8340000017
+MOROCCO 1998 1815334.8180000004
+MOROCCO 1997 3693214.8447
MOROCCO 1996 4116175.923
-MOROCCO 1995 3515127.140199998
-MOROCCO 1994 4003072.111999998
-MOROCCO 1993 3599199.6679000016
-MOROCCO 1992 3958335.4223999996
-MOZAMBIQUE 1998 1620428.7346
-MOZAMBIQUE 1997 2802166.647299999
-MOZAMBIQUE 1996 2409955.1754999985
-MOZAMBIQUE 1995 2771602.6274
-MOZAMBIQUE 1994 2548226.215799999
-MOZAMBIQUE 1993 2843748.905299998
-MOZAMBIQUE 1992 2556501.0943000014
-PERU 1998 2036430.3602
-PERU 1997 4064142.409099999
-PERU 1996 4068678.5671000006
-PERU 1995 4657694.841199998
-PERU 1994 4731959.465500002
-PERU 1993 4144006.660999999
-PERU 1992 3754635.007800001
-ROMANIA 1998 1992773.6811
+MOROCCO 1995 3515127.1401999993
+MOROCCO 1994 4003072.111999999
+MOROCCO 1993 3599199.6679000002
+MOROCCO 1992 3958335.4224
+MOZAMBIQUE 1998 1620428.7345999996
+MOZAMBIQUE 1997 2802166.6473000012
+MOZAMBIQUE 1996 2409955.1755
+MOZAMBIQUE 1995 2771602.6274000006
+MOZAMBIQUE 1994 2548226.2158000004
+MOZAMBIQUE 1993 2843748.9052999993
+MOZAMBIQUE 1992 2556501.094299999
+PERU 1998 2036430.360199999
+PERU 1997 4064142.409100001
+PERU 1996 4068678.5671
+PERU 1995 4657694.8412
+PERU 1994 4731959.465499998
+PERU 1993 4144006.661
+PERU 1992 3754635.0078000003
+ROMANIA 1998 1992773.6810999997
ROMANIA 1997 2854639.868
-ROMANIA 1996 3139337.3029000005
-ROMANIA 1995 3222153.3776
-ROMANIA 1994 3222844.319000001
-ROMANIA 1993 3488994.0287999976
-ROMANIA 1992 3029274.4420000007
-RUSSIA 1998 2339865.6635000003
-RUSSIA 1997 4153619.5424000006
+ROMANIA 1996 3139337.3029
+ROMANIA 1995 3222153.3775999993
+ROMANIA 1994 3222844.319
+ROMANIA 1993 3488994.0288
+ROMANIA 1992 3029274.441999999
+RUSSIA 1998 2339865.6635000007
+RUSSIA 1997 4153619.5424
RUSSIA 1996 3772067.4041000023
-RUSSIA 1995 4704988.860700001
+RUSSIA 1995 4704988.8607
RUSSIA 1994 4479082.8694
-RUSSIA 1993 4767719.979100001
+RUSSIA 1993 4767719.9791
RUSSIA 1992 4533465.559
-SAUDI ARABIA 1998 3386948.9564000014
-SAUDI ARABIA 1997 5425980.3373
+SAUDI ARABIA 1998 3386948.956399999
+SAUDI ARABIA 1997 5425980.337299998
SAUDI ARABIA 1996 5227607.167700001
-SAUDI ARABIA 1995 4506731.641100001
-SAUDI ARABIA 1994 4698658.742499998
+SAUDI ARABIA 1995 4506731.6411000015
+SAUDI ARABIA 1994 4698658.742500001
SAUDI ARABIA 1993 5493626.528499995
-SAUDI ARABIA 1992 4573560.014999997
-UNITED KINGDOM 1998 2252021.5136999995
-UNITED KINGDOM 1997 4343926.802599999
-UNITED KINGDOM 1996 4189476.3064999986
-UNITED KINGDOM 1995 4469569.8829
-UNITED KINGDOM 1994 4410094.626399997
-UNITED KINGDOM 1993 4054677.104999997
+SAUDI ARABIA 1992 4573560.014999998
+UNITED KINGDOM 1998 2252021.5137
+UNITED KINGDOM 1997 4343926.8026
+UNITED KINGDOM 1996 4189476.3065
+UNITED KINGDOM 1995 4469569.882899998
+UNITED KINGDOM 1994 4410094.6263999995
+UNITED KINGDOM 1993 4054677.105000002
UNITED KINGDOM 1992 3978688.8831000007
-UNITED STATES 1998 2238771.558099999
-UNITED STATES 1997 4135581.5733999996
-UNITED STATES 1996 3624013.266
-UNITED STATES 1995 3892244.517199999
-UNITED STATES 1994 3289224.113800001
-UNITED STATES 1993 3626170.2027999996
-UNITED STATES 1992 3993973.499699999
+UNITED STATES 1998 2238771.5580999996
+UNITED STATES 1997 4135581.5733999982
+UNITED STATES 1996 3624013.2659999984
+UNITED STATES 1995 3892244.517200001
+UNITED STATES 1994 3289224.1137999995
+UNITED STATES 1993 3626170.202799999
+UNITED STATES 1992 3993973.499700001
VIETNAM 1998 1924313.4862000004
VIETNAM 1997 3436195.370900001
-VIETNAM 1996 4017288.8926999997
-VIETNAM 1995 3644054.137200001
-VIETNAM 1994 4141277.6664999984
-VIETNAM 1993 2556114.1693
-VIETNAM 1992 4090524.4905000003
+VIETNAM 1996 4017288.8927000016
+VIETNAM 1995 3644054.1371999998
+VIETNAM 1994 4141277.6665000003
+VIETNAM 1993 2556114.1693000006
+VIETNAM 1992 4090524.4904999994
diff --git a/regression-test/data/variant_p0/tpch/sql/q10_trans.out
b/regression-test/data/variant_p0/tpch/sql/q10_trans.out
index d99b59521e3..e92c9999959 100644
--- a/regression-test/data/variant_p0/tpch/sql/q10_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q10_trans.out
@@ -1,11 +1,11 @@
-- This file is automatically generated. You should know what you did if you
want to edit this
-- !q10_trans --
-8242 Customer#000008242 622786.7296999999 6322.09 ETHIOPIA
P2n4nJhy,UqSo2s43YfSvYJDZ6lk 15-792-676-1184 slyly regular packages haggle
carefully ironic ideas. courts are furiously. furiously unusual theodolites
cajole. i
+8242 Customer#000008242 622786.7297 6322.09 ETHIOPIA
P2n4nJhy,UqSo2s43YfSvYJDZ6lk 15-792-676-1184 slyly regular packages haggle
carefully ironic ideas. courts are furiously. furiously unusual theodolites
cajole. i
7714 Customer#000007714 557400.3053 9799.98 IRAN SnnIGB,SkmnWpX3
20-922-418-6024 arhorses according to the blithely express re
-11032 Customer#000011032 512500.9641 8496.93 UNITED KINGDOM
WIKHC7K3Cn7156iNOyfVG3cZ7YqkgsR,Ly 33-102-772-3533 posits-- furiously
ironic accounts are again
+11032 Customer#000011032 512500.9640999999 8496.93 UNITED KINGDOM
WIKHC7K3Cn7156iNOyfVG3cZ7YqkgsR,Ly 33-102-772-3533 posits-- furiously
ironic accounts are again
2455 Customer#000002455 481592.40530000004 2070.99 GERMANY
RVn1ZSRtLqPlJLIZxvpmsbgC02 17-946-225-9977 al asymptotes. finally ironic
accounts cajole furiously. permanently unusual theodolites aro
12106 Customer#000012106 479414.21330000006 5342.11 UNITED STATES
wth3twOmu6vy 34-905-346-4472 ly after the blithely regular foxes. accounts
haggle carefully alongside of the blithely even ideas.
-8530 Customer#000008530 457855.9467 9734.95 MOROCCO
GMQyte94oDM7eD7exnkj 4hH9yq3 25-736-932-5850 slyly asymptotes. quickly final
deposits in
+8530 Customer#000008530 457855.94670000003 9734.95 MOROCCO
GMQyte94oDM7eD7exnkj 4hH9yq3 25-736-932-5850 slyly asymptotes. quickly final
deposits in
13984 Customer#000013984 446316.5104000001 3482.28 IRAN
qZXwuapCHvxbX 20-981-264-2952 y unusual courts could wake furiously
1966 Customer#000001966 444059.03819999995 1937.72 ALGERIA jPv1
UHra5JLALR5Isci5u0636RoAu7t vH 10-973-269-8886 the blithely even accounts.
final deposits cajole around the blithely final packages.
11026 Customer#000011026 417913.4142 7738.76 ALGERIA
XorIktoJOAEJkpNNMx 10-184-163-4632 ly even dolphins eat along the blithely
even instructions. express attainments cajole slyly. busy dolphins in
@@ -14,10 +14,10 @@
14398 Customer#000014398 408575.36000000004 -602.24 UNITED STATES
GWRCgIPHajtU21vICVvbJJerFu2cUk 34-814-111-5424 s. blithely even accounts
cajole blithely. even foxes doubt--
1465 Customer#000001465 405055.34569999995 9365.93 INDIA
tDRaTC7UgFbBX7VF6cVXYQA0 18-807-487-1074 s lose blithely ironic, regular
packages. regular, final foxes haggle c
12595 Customer#000012595 401402.23909999995 -6.92 INDIA
LmeaX5cR,w9NqKugl yRm98 18-186-132-3352 o the busy accounts. blithely special
gifts maintain a
-961 Customer#000000961 401198.17370000004 6963.68 JAPAN
5,81YDLFuRR47KKzv8GXdmi3zyP37PlPn 22-989-463-6089 e final requests:
busily final accounts believe a
+961 Customer#000000961 401198.1737 6963.68 JAPAN
5,81YDLFuRR47KKzv8GXdmi3zyP37PlPn 22-989-463-6089 e final requests:
busily final accounts believe a
14299 Customer#000014299 400968.3751 6595.97 RUSSIA
7lFczTya0iM1bhEWT 32-156-618-1224 carefully regular requests. quickly
ironic accounts against the ru
623 Customer#000000623 399883.42569999996 7887.6 INDONESIA
HXiFb9oWlgqZXrJPUCEJ6zZIPxAM4m6 19-113-202-7085 requests. dolphins above the
busily regular dependencies cajole after
9151 Customer#000009151 396562.0295 5691.95 IRAQ
7gIdRdaxB91EVdyx8DyPjShpMD 21-834-147-4906 ajole fluffily. furiously
regular accounts are special, silent account
14819 Customer#000014819 396271.10360000003 7308.39 FRANCE
w8StIbymUXmLCcUag6sx6LUIp8E3pA,Ux 16-769-398-7926 ss, final asymptotes
use furiously slyly ironic dependencies. special, express dugouts according to
the dep
-13478 Customer#000013478 395513.13580000005 -778.11 KENYA
9VIsvIeZrJpC6OOdYheMC2vdtq8Ai0Rt 24-983-202-8240 r theodolites. slyly
unusual pinto beans sleep fluffily against the asymptotes. quickly r
+13478 Customer#000013478 395513.1358 -778.11 KENYA
9VIsvIeZrJpC6OOdYheMC2vdtq8Ai0Rt 24-983-202-8240 r theodolites. slyly
unusual pinto beans sleep fluffily against the asymptotes. quickly r
diff --git
a/regression-test/suites/fault_injection_p0/test_variant_bloom_filter.groovy
b/regression-test/suites/fault_injection_p0/test_variant_bloom_filter.groovy
index 63f1d4e79f2..fa20bbbe072 100644
--- a/regression-test/suites/fault_injection_p0/test_variant_bloom_filter.groovy
+++ b/regression-test/suites/fault_injection_p0/test_variant_bloom_filter.groovy
@@ -121,7 +121,7 @@ suite("test_variant_bloom_filter", "nonConcurrent") {
GetDebugPoint().enableDebugPointForAllBEs("bloom_filter_must_filter_data")
// number
- qt_sql1 """ select cast(v['repo']['id'] as int) from ${index_table}
where cast(v['repo']['id'] as int) = 20291263; """
+ qt_sql1 """ select cast(v['repo']['id'] as bigint) from ${index_table}
where cast(v['repo']['id'] as bigint) = 20291263; """
// string
qt_sql2 """ select cast(v['repo']['name'] as text) from ${index_table}
where cast(v['repo']['name'] as text) = "ridget/dotfiles"; """
diff --git
a/regression-test/suites/variant_p0/predefine/test_predefine_ddl.groovy
b/regression-test/suites/variant_p0/predefine/test_predefine_ddl.groovy
index 99ec6d84088..7f8a00b5dd3 100644
--- a/regression-test/suites/variant_p0/predefine/test_predefine_ddl.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_predefine_ddl.groovy
@@ -157,7 +157,7 @@ suite("test_predefine_ddl", "p0") {
INDEX idx_ab (var) USING INVERTED PROPERTIES("field_pattern"="ab",
"parser"="unicode", "support_phrase" = "true") COMMENT ''
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
BUCKETS 1 PROPERTIES ( "replication_allocation" =
"tag.location.default: 1", "disable_auto_compaction" = "true")"""
- exception("""Duplicate field name ab in variant variant<MATCH_NAME
'ab':int,MATCH_NAME 'ab':text,PROPERTIES ("variant_max_subcolumns_count" =
"10","variant_enable_typed_paths_to_sparse" = "true")>""")
+ exception("""Duplicate field name ab in variant""")
}
test {
@@ -314,6 +314,7 @@ suite("test_predefine_ddl", "p0") {
sql "DROP TABLE IF EXISTS ${tableName}"
sql "set default_variant_max_subcolumns_count = 10"
sql "set default_variant_enable_typed_paths_to_sparse = false"
+ sql "set default_variant_sparse_hash_shard_count = 20"
sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant NULL
diff --git
a/regression-test/suites/variant_p0/predefine/variant_hirachinal.groovy
b/regression-test/suites/variant_p0/predefine/variant_hirachinal.groovy
index f131984d026..8edb50af80c 100644
--- a/regression-test/suites/variant_p0/predefine/variant_hirachinal.groovy
+++ b/regression-test/suites/variant_p0/predefine/variant_hirachinal.groovy
@@ -18,12 +18,11 @@
suite("regression_test_variant_predefine_hirachinal", "variant_type"){
def table_name = "var_rs"
sql "DROP TABLE IF EXISTS ${table_name}"
- int count = new Random().nextInt(10)
sql """
CREATE TABLE IF NOT EXISTS ${table_name} (
k bigint,
- v variant<'a' : largeint, 'c.d' : text,
properties("variant_max_subcolumns_count" = "${count}")>
+ v variant<'a' : largeint, 'c.d' : text,
properties("variant_max_subcolumns_count" = "0")>
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 1
@@ -31,7 +30,7 @@ suite("regression_test_variant_predefine_hirachinal",
"variant_type"){
"""
sql """insert into ${table_name} values (-3, '{"a" : 1, "b" : 1.5, "c" :
[1, 2, 3]}')"""
sql """insert into ${table_name} select * from (select -2, '{"a": 11245,
"b" : [123, {"xx" : 1}], "c" : {"c" : 456, "d" : "null", "e" : 7.111}}' as
json_str
- union all select -1, '{"a": 1123}' as json_str union all select
*, '{"a" : 1234, "xxxx" : "kaana"}' as json_str from numbers("number" =
"4096"))t order by 1 limit 4096 ;"""
+ union all select -1, '{"a": 1123}' as json_str union all select
*, '{"a" : 1234, "xxxx" : "kaana"}' as json_str from numbers("number" =
"4096"))t order by 1 limit 4098 ;"""
qt_sql "select * from ${table_name} order by k limit 10"
qt_sql "select cast(v['c'] as string) from ${table_name} where k = -3 or k
= -2 order by k"
qt_sql "select v['b'] from ${table_name} where k = -3 or k = -2"
diff --git a/regression-test/suites/variant_p0/test_types_in_variant.groovy
b/regression-test/suites/variant_p0/test_types_in_variant.groovy
new file mode 100644
index 00000000000..9b635be6290
--- /dev/null
+++ b/regression-test/suites/variant_p0/test_types_in_variant.groovy
@@ -0,0 +1,103 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("regression_test_variant_types", "var_view") {
+
+ def table_name = "test_variant_types"
+ sql "drop table if exists ${table_name}"
+
+ sql """
+ create table ${table_name} (
+ id int,
+ var variant<properties("variant_max_subcolumns_count" = "0")>
+ ) engine = olap
+ duplicate key (id)
+ distributed by hash(id) buckets 1
+ properties ("replication_num" = "1")
+ """
+
+ sql """
+ insert into ${table_name} (id, var) values (1, '{"a": 1, "b": 1.1,
"c": "string", "d": true, "e": null, "f": 18446744073709551615}');
+ """
+
+ sql """
+ select * from ${table_name};
+ """
+
+ sql """set describe_extend_variant_column = true"""
+
+ qt_sql_scalar "desc ${table_name}"
+
+ sql """ insert into ${table_name} (id, var) values (2, '{"g": [1, 2, 3],
"h": [1.1, 2.2], "i": ["string", "string2"], "j": [true, false], "l":
[18446744073709551615, 18446744073709551605]}'); """
+
+ qt_sql "select * from ${table_name} order by id"
+
+ qt_sql_array "desc ${table_name}"
+
+ sql """ insert into ${table_name} (id, var) values (3, '{"m": [1,
18446744073709551605]}'); """
+
+ qt_sql "select * from ${table_name} order by id"
+
+ qt_sql_array_largeint "desc ${table_name}"
+
+ sql """ insert into ${table_name} (id, var) values (4, '{"n": [2,
"string", null, true, 1.1, 18446744073709551615]}'); """
+
+ qt_sql "select * from ${table_name} order by id"
+
+ qt_sql_array_json "desc ${table_name}"
+
+ sql """ insert into ${table_name} (id, var) values (5, '{"o":
[18446744073709551615, ["string", null]]}'); """
+
+ qt_sql "select * from ${table_name} order by id"
+
+ qt_sql_json "desc ${table_name}"
+
+ sql "drop table if exists ${table_name}"
+
+ sql """ set enable_variant_flatten_nested = true """
+
+ sql """
+ create table ${table_name} (
+ id int,
+ var variant<properties("variant_max_subcolumns_count" = "0")>
+ ) engine = olap
+ duplicate key (id)
+ distributed by hash(id) buckets 1
+ properties ("replication_num" = "1", "variant_enable_flatten_nested" =
"true")
+ """
+
+ sql """ set enable_variant_flatten_nested = false """
+
+ sql """ insert into ${table_name} (id, var) values (1, '{"a": [{"b" :
18446744073709551615}]}'); """
+
+ qt_sql "select * from ${table_name} order by id"
+
+ qt_sql_array_largeint "desc ${table_name}"
+
+ sql """ insert into ${table_name} (id, var) values (2, '{"a": [{"b" :
true}]}'); """
+
+ qt_sql "select * from ${table_name} order by id"
+
+ qt_sql_array_largeint "desc ${table_name}"
+
+ sql """ insert into ${table_name} (id, var) values (3, '{"a": [{"b" :
1.1}]}'); """
+
+
+ qt_sql "select * from ${table_name} order by id"
+
+ qt_sql_array_json "desc ${table_name}"
+}
\ No newline at end of file
diff --git a/regression-test/suites/variant_p0/test_variant_is_null_expr.groovy
b/regression-test/suites/variant_p0/test_variant_is_null_expr.groovy
index 2c7ba11f580..00cfd64922e 100644
--- a/regression-test/suites/variant_p0/test_variant_is_null_expr.groovy
+++ b/regression-test/suites/variant_p0/test_variant_is_null_expr.groovy
@@ -66,15 +66,15 @@ suite("test_variant_is_null_expr", "p0, nonConcurrent") {
queryAndCheck (" select * from ${testTable} where v['int1'] is not null or
v['string2'] is null; ", 1)
queryAndCheck (" select * from ${testTable} where v['int1'] is not null or
v['string2'] = 'bb'; ", 1)
queryAndCheck (" select * from ${testTable} where v['int1'] is null or
v['string2'] = 'bb'; ", 1)
- queryAndCheck (" select * from ${testTable} where v['string2'] is not null
or cast(v['int3'] as tinyint) = 3; ", 1)
+ queryAndCheck (" select * from ${testTable} where v['string2'] is not null
or cast(v['int3'] as bigint) = 3; ", 1)
- queryAndCheck (" select * from ${testTable} where cast(v['int1'] as
tinyint) is not null or cast(v['string2'] as string) = 'bb'; ", 1)
- queryAndCheck (" select * from ${testTable} where cast(v['int1'] as
tinyint) is null or cast(v['string2'] as string) = 'bb'; ", 1)
- queryAndCheck (" select * from ${testTable} where cast(v['string2'] as
string) is not null or cast(v['int3'] as tinyint) = 3; ", 1)
+ queryAndCheck (" select * from ${testTable} where cast(v['int1'] as
bigint) is not null or cast(v['string2'] as string) = 'bb'; ", 1)
+ queryAndCheck (" select * from ${testTable} where cast(v['int1'] as
bigint) is null or cast(v['string2'] as string) = 'bb'; ", 1)
+ queryAndCheck (" select * from ${testTable} where cast(v['string2'] as
string) is not null or cast(v['int3'] as bigint) = 3; ", 1)
queryAndCheck (" select * from ${testTable} where (v['int1'] is not null
and v['string2'] is null) or (v['int1'] is null and v['string2'] = 'bb'); ", 1)
queryAndCheck (" select * from ${testTable} where (v['int1'] is null and
v['string2'] = 'cc') or (v['int3'] is not null and v['string2'] = 'bb'); ", 3)
- queryAndCheck (" select * from ${testTable} where (cast(v['int1'] as
tinyint) is not null and cast(v['string2'] as string) is null) or
(cast(v['int1'] as tinyint) is null and cast(v['string2'] as string) = 'bb');
", 1)
- queryAndCheck (" select * from ${testTable} where (cast(v['int1'] as
tinyint) is null and cast(v['string2'] as string) = 'cc') or (cast(v['int3'] as
tinyint) is not null and cast(v['string2'] as string) = 'bb'); ", 3)
+ queryAndCheck (" select * from ${testTable} where (cast(v['int1'] as
bigint) is not null and cast(v['string2'] as string) is null) or
(cast(v['int1'] as bigint) is null and cast(v['string2'] as string) = 'bb'); ",
1)
+ queryAndCheck (" select * from ${testTable} where (cast(v['int1'] as
bigint) is null and cast(v['string2'] as string) = 'cc') or (cast(v['int3'] as
bigint) is not null and cast(v['string2'] as string) = 'bb'); ", 3)
}
diff --git a/regression-test/suites/variant_p0/variant_hirachinal.groovy
b/regression-test/suites/variant_p0/variant_hirachinal.groovy
index 8ec3fde007c..fc7662a5a88 100644
--- a/regression-test/suites/variant_p0/variant_hirachinal.groovy
+++ b/regression-test/suites/variant_p0/variant_hirachinal.groovy
@@ -33,7 +33,7 @@ suite("regression_test_variant_hirachinal", "variant_type"){
sql """
CREATE TABLE IF NOT EXISTS ${table_name} (
k bigint,
- v variant
+ v variant<properties("variant_max_subcolumns_count" = "0")>
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 1
@@ -41,7 +41,7 @@ suite("regression_test_variant_hirachinal", "variant_type"){
"""
sql """insert into ${table_name} values (-3, '{"a" : 1, "b" : 1.5, "c" :
[1, 2, 3]}')"""
sql """insert into ${table_name} select * from (select -2, '{"a": 11245,
"b" : [123, {"xx" : 1}], "c" : {"c" : 456, "d" : "null", "e" : 7.111}}' as
json_str
- union all select -1, '{"a": 1123}' as json_str union all select
*, '{"a" : 1234, "xxxx" : "kaana"}' as json_str from numbers("number" =
"4096"))t order by 1 limit 4096 ;"""
+ union all select -1, '{"a": 1123}' as json_str union all select
*, '{"a" : 1234, "xxxx" : "kaana"}' as json_str from numbers("number" =
"4096"))t order by 1 limit 4098 ;"""
qt_sql "select * from ${table_name} order by k limit 10"
qt_sql "select cast(v['c'] as string) from ${table_name} where k = -3 or k
= -2 order by k"
qt_sql "select v['b'] from ${table_name} where k = -3 or k = -2"
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]