From a480eb89efef927a867417d78981d1d384ecec1b Mon Sep 17 00:00:00 2001 From: Maksim Kita Date: Thu, 25 Nov 2021 17:06:35 +0300 Subject: [PATCH 1/3] Function dictGet with type Nullable fix --- src/Functions/FunctionsExternalDictionaries.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Functions/FunctionsExternalDictionaries.h b/src/Functions/FunctionsExternalDictionaries.h index 7dc47b54bea..c9d7452ab06 100644 --- a/src/Functions/FunctionsExternalDictionaries.h +++ b/src/Functions/FunctionsExternalDictionaries.h @@ -671,7 +671,7 @@ private: static bool areTypesEqual(const DataTypePtr & lhs, const DataTypePtr & rhs) { - return removeNullable(recursiveRemoveLowCardinality(lhs))->equals(*removeNullable(recursiveRemoveLowCardinality(rhs))); + return lhs->equals(*rhs); } const FunctionDictGetNoType impl; From 1fa57c96b2aee18194cb49c3503703bfa64e202c Mon Sep 17 00:00:00 2001 From: Maksim Kita Date: Thu, 25 Nov 2021 19:06:37 +0300 Subject: [PATCH 2/3] FunctionsExternalDictionaries removed areTypesEqual --- src/Functions/FunctionsExternalDictionaries.h | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Functions/FunctionsExternalDictionaries.h b/src/Functions/FunctionsExternalDictionaries.h index c9d7452ab06..c52d54f30aa 100644 --- a/src/Functions/FunctionsExternalDictionaries.h +++ b/src/Functions/FunctionsExternalDictionaries.h @@ -662,18 +662,13 @@ private: { auto return_type = impl.getReturnTypeImpl(arguments); - if (!areTypesEqual(return_type, result_type)) + if (!return_type->equals(*result_type)) throw Exception{"Dictionary attribute has different type " + return_type->getName() + " expected " + result_type->getName(), ErrorCodes::TYPE_MISMATCH}; return impl.executeImpl(arguments, return_type, input_rows_count); } - static bool areTypesEqual(const DataTypePtr & lhs, const DataTypePtr & rhs) - { - return lhs->equals(*rhs); - } - const FunctionDictGetNoType impl; }; From 44ff739854ae36485708031c974f0d57156c9514 Mon Sep 17 00:00:00 2001 From: Maksim Kita Date: Wed, 1 Dec 2021 11:32:42 +0300 Subject: [PATCH 3/3] Added test --- ...02125_dict_get_type_nullable_fix.reference | 1 + .../02125_dict_get_type_nullable_fix.sql | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 tests/queries/0_stateless/02125_dict_get_type_nullable_fix.reference create mode 100644 tests/queries/0_stateless/02125_dict_get_type_nullable_fix.sql diff --git a/tests/queries/0_stateless/02125_dict_get_type_nullable_fix.reference b/tests/queries/0_stateless/02125_dict_get_type_nullable_fix.reference new file mode 100644 index 00000000000..af53c9c3c21 --- /dev/null +++ b/tests/queries/0_stateless/02125_dict_get_type_nullable_fix.reference @@ -0,0 +1 @@ +Value diff --git a/tests/queries/0_stateless/02125_dict_get_type_nullable_fix.sql b/tests/queries/0_stateless/02125_dict_get_type_nullable_fix.sql new file mode 100644 index 00000000000..01fea381bf3 --- /dev/null +++ b/tests/queries/0_stateless/02125_dict_get_type_nullable_fix.sql @@ -0,0 +1,22 @@ +DROP TABLE IF EXISTS 02125_test_table; +CREATE TABLE 02125_test_table +( + id UInt64, + value Nullable(String) +) +ENGINE=TinyLog; + +INSERT INTO 02125_test_table VALUES (0, 'Value'); + +DROP DICTIONARY IF EXISTS 02125_test_dictionary; +CREATE DICTIONARY 02125_test_dictionary +( + id UInt64, + value Nullable(String) +) +PRIMARY KEY id +SOURCE(CLICKHOUSE(TABLE '02125_test_table')) +LAYOUT(DIRECT()); + +SELECT dictGet('02125_test_dictionary', 'value', toUInt64(0)); +SELECT dictGetString('02125_test_dictionary', 'value', toUInt64(0)); --{serverError 53}