Do not allow constant folding of explicitly forbidden functions

This commit is contained in:
Azat Khuzhin 2021-02-11 00:25:50 +03:00
parent 53a3e178c7
commit 53ea58810e
3 changed files with 6 additions and 0 deletions

View File

@ -89,6 +89,9 @@ bool allowEarlyConstantFolding(const ActionsDAG & actions, const Settings & sett
{ {
if (node.type == ActionsDAG::ActionType::FUNCTION && node.function_base) if (node.type == ActionsDAG::ActionType::FUNCTION && node.function_base)
{ {
if (!node.function_base->isSuitableForConstantFolding())
return false;
auto name = node.function_base->getName(); auto name = node.function_base->getName();
if (name == "ignore") if (name == "ignore")
return false; return false;

View File

@ -7,3 +7,5 @@ EXPLAIN SYNTAX SELECT (SELECT * FROM system.numbers LIMIT 1 OFFSET 1) AS n, toUI
SELECT SELECT
identity(cast(0, \'UInt64\')) AS n, identity(cast(0, \'UInt64\')) AS n,
toUInt64(10 / n) toUInt64(10 / n)
SELECT * FROM (WITH (SELECT * FROM system.numbers LIMIT 1 OFFSET 1) AS n, toUInt64(10 / n) as q SELECT * FROM system.one WHERE q > 0);
0

View File

@ -2,3 +2,4 @@
SELECT * FROM (SELECT (SELECT * FROM system.numbers LIMIT 1 OFFSET 1) AS n, toUInt64(10 / n)) FORMAT CSV; SELECT * FROM (SELECT (SELECT * FROM system.numbers LIMIT 1 OFFSET 1) AS n, toUInt64(10 / n)) FORMAT CSV;
SELECT (SELECT * FROM system.numbers LIMIT 1 OFFSET 1) AS n, toUInt64(10 / n) FORMAT CSV; SELECT (SELECT * FROM system.numbers LIMIT 1 OFFSET 1) AS n, toUInt64(10 / n) FORMAT CSV;
EXPLAIN SYNTAX SELECT (SELECT * FROM system.numbers LIMIT 1 OFFSET 1) AS n, toUInt64(10 / n); EXPLAIN SYNTAX SELECT (SELECT * FROM system.numbers LIMIT 1 OFFSET 1) AS n, toUInt64(10 / n);
SELECT * FROM (WITH (SELECT * FROM system.numbers LIMIT 1 OFFSET 1) AS n, toUInt64(10 / n) as q SELECT * FROM system.one WHERE q > 0);