Prevent the flattening or where-term push-down optimizations from obscuring
misuses of SQL row values that can lead to crashes or assert() failures. FossilOrigin-Name: 433d16ff3adfede3be53d5b0e0512f37e225591b
This commit is contained in:
@@ -291,6 +291,31 @@ do_execsql_test 14.6 {
|
||||
SELECT 1 FROM t12 WHERE (1,x) BETWEEN (1,1) AND (3,3)
|
||||
} {1 1}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test that errors are not concealed by the SELECT flattening or
|
||||
# WHERE-clause push-down optimizations.
|
||||
do_execsql_test 14.1 {
|
||||
CREATE TABLE x1(a PRIMARY KEY, b);
|
||||
CREATE TABLE x2(a INTEGER PRIMARY KEY, b);
|
||||
}
|
||||
|
||||
foreach {tn n sql} {
|
||||
1 0 "SELECT * FROM (SELECT (1, 1) AS c FROM x1) WHERE c=1"
|
||||
2 2 "SELECT * FROM (SELECT 1 AS x, (SELECT 8,9) AS y) WHERE y<1"
|
||||
3 3 "SELECT * FROM (SELECT 1 AS x, (SELECT 8,9,10) AS y) WHERE y<1"
|
||||
4 0 "SELECT * FROM (SELECT (a, b) AS c FROM x1), x2 WHERE c=a"
|
||||
5 0 "SELECT * FROM (SELECT a AS c, (1, 2, 3) FROM x1), x2 WHERE c=a"
|
||||
6 0 "SELECT * FROM (SELECT 1 AS c, (1, 2, 3) FROM x1) WHERE c=1"
|
||||
} {
|
||||
if {$n==0} {
|
||||
set err "row value misused"
|
||||
} else {
|
||||
set err "sub-select returns $n columns - expected 1"
|
||||
}
|
||||
do_catchsql_test 14.2.$tn $sql [list 1 $err]
|
||||
}
|
||||
|
||||
|
||||
finish_test
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user