Commit 846cbf3c authored by gkodinov/kgeorge@magare.gmz's avatar gkodinov/kgeorge@magare.gmz
Browse files

Bug #32400: Complex SELECT query returns correct result

 only on some occasions

Referencing an element from the SELECT list in a WHERE 
clause is not permitted. The namespace of the WHERE
clause is the table columns only. This was not enforced
correctly when resolving outer references in sub-queries.

Fixed by not allowing references to aliases in a 
sub-query in WHERE.
parent 7ab844c9
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -434,8 +434,8 @@ execute stmt1 ;
let $1= 3 ;
while ($1)
{
  prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
  prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
  execute stmt1 ;
  deallocate prepare stmt1 ;
  dec $1 ;
+6 −6
Original line number Diff line number Diff line
@@ -783,20 +783,20 @@ a b
2	two
3	three
4	four
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
+6 −6
Original line number Diff line number Diff line
@@ -783,20 +783,20 @@ a b
2	two
3	three
4	four
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
+6 −6
Original line number Diff line number Diff line
@@ -784,20 +784,20 @@ a b
2	two
3	three
4	four
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
+12 −12
Original line number Diff line number Diff line
@@ -826,20 +826,20 @@ a b
2	two
3	three
4	four
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
@@ -3848,20 +3848,20 @@ a b
2	two
3	three
4	four
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
                           (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
                           (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
Loading