From 7fb4a90d0bea11e78ab5b9f2e3903474211b6fc9 Mon Sep 17 00:00:00 2001 From: vdimir Date: Wed, 22 Nov 2023 16:34:31 +0000 Subject: [PATCH] Analyzer: Fix logical error in LogicalExpressionOptimizerVisitor --- src/Analyzer/Passes/LogicalExpressionOptimizerPass.cpp | 2 +- .../02668_logical_optimizer_removing_redundant_checks.reference | 1 + .../02668_logical_optimizer_removing_redundant_checks.sql | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Analyzer/Passes/LogicalExpressionOptimizerPass.cpp b/src/Analyzer/Passes/LogicalExpressionOptimizerPass.cpp index 081a27eb8fa..6fa6c8b0e78 100644 --- a/src/Analyzer/Passes/LogicalExpressionOptimizerPass.cpp +++ b/src/Analyzer/Passes/LogicalExpressionOptimizerPass.cpp @@ -439,7 +439,7 @@ private: } /// otherwise add a stub 0 to make OR correct - or_operands.push_back(std::make_shared(static_cast(0))); + or_operands.push_back(std::make_shared(static_cast(0), function_node.getResultType())); } auto or_function_resolver = FunctionFactory::instance().get("or", getContext()); diff --git a/tests/queries/0_stateless/02668_logical_optimizer_removing_redundant_checks.reference b/tests/queries/0_stateless/02668_logical_optimizer_removing_redundant_checks.reference index d083e178586..60ff2d76995 100644 --- a/tests/queries/0_stateless/02668_logical_optimizer_removing_redundant_checks.reference +++ b/tests/queries/0_stateless/02668_logical_optimizer_removing_redundant_checks.reference @@ -87,3 +87,4 @@ QUERY id: 0 LIST id: 6, nodes: 2 COLUMN id: 7, column_name: a, result_type: Int32, source_id: 3 CONSTANT id: 8, constant_value: UInt64_2, constant_value_type: UInt8 +1 diff --git a/tests/queries/0_stateless/02668_logical_optimizer_removing_redundant_checks.sql b/tests/queries/0_stateless/02668_logical_optimizer_removing_redundant_checks.sql index f20ef412215..eebea322dbf 100644 --- a/tests/queries/0_stateless/02668_logical_optimizer_removing_redundant_checks.sql +++ b/tests/queries/0_stateless/02668_logical_optimizer_removing_redundant_checks.sql @@ -24,3 +24,5 @@ EXPLAIN QUERY TREE SELECT * FROM 02668_logical_optimizer WHERE a = 3 AND b = 'an SELECT * FROM 02668_logical_optimizer WHERE a = 2 AND 2 = a; EXPLAIN QUERY TREE SELECT * FROM 02668_logical_optimizer WHERE a = 2 AND 2 = a; + +SELECT (k = 3) OR ( (k = 1) OR (k = 2) OR ( (NULL OR 1) = k ) ) FROM ( SELECT materialize(1) AS k );