diff --git a/src/Storages/MergeTree/KeyCondition.cpp b/src/Storages/MergeTree/KeyCondition.cpp index e10c83e0d458..a5af15766cfa 100644 --- a/src/Storages/MergeTree/KeyCondition.cpp +++ b/src/Storages/MergeTree/KeyCondition.cpp @@ -1262,6 +1262,14 @@ bool KeyCondition::tryPrepareSetIndex( if (!future_set) return false; + const auto set_types = future_set->getTypes(); + size_t set_types_size = set_types.size(); + size_t indexes_mapping_size = indexes_mapping.size(); + + /// When doing strict matches, we have to check all elements in set. + if (strict && indexes_mapping_size < set_types_size) + return false; + auto prepared_set = future_set->buildOrderedSetInplace(right_arg.getTreeContext().getQueryContext()); if (!prepared_set) return false; diff --git a/tests/queries/0_stateless/02890_partition_prune_in_extra_columns.reference b/tests/queries/0_stateless/02890_partition_prune_in_extra_columns.reference new file mode 100644 index 000000000000..d00491fd7e5b --- /dev/null +++ b/tests/queries/0_stateless/02890_partition_prune_in_extra_columns.reference @@ -0,0 +1 @@ +1 diff --git a/tests/queries/0_stateless/02890_partition_prune_in_extra_columns.sql b/tests/queries/0_stateless/02890_partition_prune_in_extra_columns.sql new file mode 100644 index 000000000000..29fd313b12de --- /dev/null +++ b/tests/queries/0_stateless/02890_partition_prune_in_extra_columns.sql @@ -0,0 +1,9 @@ +DROP TABLE IF EXISTS e; + +CREATE TABLE e (dt DateTime, t Int32) ENGINE = MergeTree() PARTITION BY (t, toYYYYMM(dt)) ORDER BY tuple(); + +INSERT INTO e SELECT toDateTime('2022-12-12 11:00:00') + number, 86 FROM numbers(10); + +SELECT COUNT(*) FROM e WHERE (t, dt) IN (86, '2022-12-12 11:00:00'); + +DROP TABLE e;