Running regression (very powerful set of test BTW), I discovered the
following issue:
Given the following query:
SELECT T1.a FROM t002t1 AS t1
WHERE EXISTS (
SELECT -74 FROM t002t1 where t1.c = 30
UNION all
SELECT -84 FROM t002t2
WHERE NOT (( EXISTS (SELECT 1 FROM t002t2
) ) )
);
The scan node for evaluating SELECT -74 FROM t002t1 where t1.c = 30
Is incorrectly pushing down t1.c=30, as if it was simply c=30.
I was naively thinking that checking if NATable pointer of
getTabledesc()->getNATable and NAColumn->getNATable() would be different
for the case that I am facing, but, no, the same naTable pointer reference
the t002t1 in memory, regardless if it is for the outer scan or inner scan.
So anyone know what I should be checking to make sure I recognize this
situation and avoid pushing down non legitime expression like these?
Thanks in advance for the help,
Eric
|