mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Move the test for an (illegal) scalar sub-query that returns more than one column to earlier in SELECT processing in order to avoid an assert() that can happen later on.
FossilOrigin-Name: a55842cfb56b659c88832dce9ce7bafb50258211
This commit is contained in:
@ -1729,11 +1729,56 @@ foreach {tn e1 e2} {
|
||||
do_expr_test e_expr-34.5.${tn}b $e2 integer $res
|
||||
}
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test statements related to the IN and NOT IN operators.
|
||||
# Test statements related to scalar sub-queries.
|
||||
#
|
||||
|
||||
catch { db close }
|
||||
file delete -force test.db
|
||||
sqlite3 db test.db
|
||||
do_test e_expr-35.0 {
|
||||
execsql {
|
||||
CREATE TABLE t2(a, b);
|
||||
INSERT INTO t2 VALUES('one', 'two');
|
||||
INSERT INTO t2 VALUES('three', NULL);
|
||||
INSERT INTO t2 VALUES(4, 5.0);
|
||||
}
|
||||
} {}
|
||||
|
||||
# EVIDENCE-OF: R-00980-39256 A SELECT statement enclosed in parentheses
|
||||
# may appear as a scalar quantity.
|
||||
#
|
||||
# EVIDENCE-OF: R-56294-03966 All types of SELECT statement, including
|
||||
# aggregate and compound SELECT queries (queries with keywords like
|
||||
# UNION or EXCEPT) are allowed as scalar subqueries.
|
||||
#
|
||||
do_expr_test e_expr-35.1.1 { (SELECT 35) } integer 35
|
||||
do_expr_test e_expr-35.1.2 { (SELECT NULL) } null {}
|
||||
|
||||
do_expr_test e_expr-35.1.3 { (SELECT count(*) FROM t2) } integer 3
|
||||
do_expr_test e_expr-35.1.4 { (SELECT 4 FROM t2) } integer 4
|
||||
|
||||
do_expr_test e_expr-35.1.5 {
|
||||
(SELECT b FROM t2 UNION SELECT a+1 FROM t2)
|
||||
} null {}
|
||||
do_expr_test e_expr-35.1.6 {
|
||||
(SELECT a FROM t2 UNION SELECT COALESCE(b, 55) FROM t2 ORDER BY 1)
|
||||
} integer 4
|
||||
|
||||
# EVIDENCE-OF: R-46899-53765 A SELECT used as a scalar quantity must
|
||||
# return a result set with a single column.
|
||||
#
|
||||
set M {only a single result allowed for a SELECT that is part of an expression}
|
||||
foreach {tn sql} {
|
||||
1 { SELECT (SELECT * FROM t2 UNION SELECT a+1, b+1 FROM t2) }
|
||||
2 { SELECT (SELECT * FROM t2 UNION SELECT a+1, b+1 FROM t2 ORDER BY 1) }
|
||||
3 { SELECT (SELECT 1, 2) }
|
||||
4 { SELECT (SELECT NULL, NULL, NULL) }
|
||||
5 { SELECT (SELECT * FROM t2) }
|
||||
6 { SELECT (SELECT * FROM (SELECT 1, 2, 3)) }
|
||||
} {
|
||||
do_catchsql_test e_expr-35.2.$tn $sql [list 1 $M]
|
||||
}
|
||||
|
||||
finish_test
|
||||
|
||||
|
Reference in New Issue
Block a user