Michael Smith created IMPALA-13302:
--------------------------------------

             Summary: Some ExprRewriteRule results are not analyzed, leading to 
unmaterialized slots from reAnalyze
                 Key: IMPALA-13302
                 URL: https://issues.apache.org/jira/browse/IMPALA-13302
             Project: IMPALA
          Issue Type: Bug
          Components: Frontend
    Affects Versions: Impala 4.3.0
            Reporter: Michael Smith


IMPALA-12164 skipped registering conjuncts that the analyzer expects to remove 
because an earlier conjunct evaluates to constant False. However some 
ExprRewriteRules don't analyze the predicates they produce, which can lead to 
those conjuncts not actually being removed until a reAnalyze phase.

reAnalyze uses a new Analyzer (with new GlobalState); it restarts counting Expr 
IDs from 0. That can lead to re-using the same Expr ID and marking it as 
assigned. Then when a new Expr gets the same ID, it will skip materializing 
slots, which can cause problems later (like if that Expr is part of a hash 
join).

Some example queries:
{code}
WITH v AS (SELECT 1 FROM functional.alltypestiny t1
  JOIN functional.alltypestiny t2 ON t1.id = t2.id)
SELECT 1
FROM functional.alltypestiny t1
WHERE ((t1.id = 1 and false) or (t1.id = 1 and false))
  AND t1.id = 1 AND t1.id = 1
UNION ALL
SELECT 1
FROM functional.alltypestiny t1
WHERE ((t1.id = 1 and false) or (t1.id = 1 and false))
  AND t1.id = 1 AND t1.id = 1
UNION ALL SELECT 1 FROM v
UNION ALL SELECT 1 FROM v;
{code}
(already fixed via IMPALA-13203) and
{code}
WITH v as (SELECT 1 FROM functional.alltypes t1
  JOIN functional.alltypes t2 ON t1.id = t2.id)
SELECT 1 FROM functional.alltypes t1
  WHERE t1.id = 1 AND t1.id = 1 AND t1.id = 1 AND false
UNION ALL
SELECT 1 FROM functional.alltypes t1
  WHERE t1.id = 1 AND false
UNION ALL SELECT 1 FROM v
UNION ALL SELECT 1 FROM v;
{code}




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to