Fix structure comparison between 2 JSON columns

This commit is contained in:
avogar 2024-08-21 20:47:48 +00:00
parent 696114ff1a
commit ca880ccdee
3 changed files with 27 additions and 2 deletions

View File

@ -127,7 +127,7 @@ std::string ColumnObject::getName() const
{ {
WriteBufferFromOwnString ss; WriteBufferFromOwnString ss;
ss << "Object("; ss << "Object(";
ss << "max_dynamic_paths=" << max_dynamic_paths; ss << "max_dynamic_paths=" << global_max_dynamic_paths;
ss << ", max_dynamic_types=" << max_dynamic_types; ss << ", max_dynamic_types=" << max_dynamic_types;
std::vector<String> sorted_typed_paths; std::vector<String> sorted_typed_paths;
sorted_typed_paths.reserve(typed_paths.size()); sorted_typed_paths.reserve(typed_paths.size());
@ -1047,7 +1047,7 @@ bool ColumnObject::structureEquals(const IColumn & rhs) const
{ {
/// 2 Object columns have equal structure if they have the same typed paths and max_dynamic_paths/max_dynamic_types. /// 2 Object columns have equal structure if they have the same typed paths and max_dynamic_paths/max_dynamic_types.
const auto * rhs_object = typeid_cast<const ColumnObject *>(&rhs); const auto * rhs_object = typeid_cast<const ColumnObject *>(&rhs);
if (!rhs_object || typed_paths.size() != rhs_object->typed_paths.size() || max_dynamic_paths != rhs_object->max_dynamic_paths || max_dynamic_types != rhs_object->max_dynamic_types) if (!rhs_object || typed_paths.size() != rhs_object->typed_paths.size() || global_max_dynamic_paths != rhs_object->global_max_dynamic_paths || max_dynamic_types != rhs_object->max_dynamic_types)
return false; return false;
for (const auto & [path, column] : typed_paths) for (const auto & [path, column] : typed_paths)

View File

@ -0,0 +1,3 @@
{"foo1":"bar"} {"foo1":"bar"}
{"foo2":"bar"} {"foo2":"bar"}
{"foo2":"bar"} {"foo2":"bar"}

View File

@ -0,0 +1,22 @@
SET allow_experimental_json_type=1;
DROP TABLE IF EXISTS test_new_json_type;
CREATE TABLE test_new_json_type(id UInt32, data JSON, version UInt64) ENGINE=ReplacingMergeTree(version) ORDER BY id;
INSERT INTO test_new_json_type format JSONEachRow
{"id":1,"data":{"foo1":"bar"},"version":1}
{"id":2,"data":{"foo2":"bar"},"version":1}
{"id":3,"data":{"foo2":"bar"},"version":1}
;
SELECT
a.data
, b.data
FROM
test_new_json_type a
JOIN test_new_json_type b
ON a.id = b.id;
DROP TABLE test_new_json_type;