Index: third_party/sqlite/src/test/e_expr.test |
diff --git a/third_party/sqlite/src/test/e_expr.test b/third_party/sqlite/src/test/e_expr.test |
index 8c0957f8d382728b266ea20cf80156487b4f5e1c..de7b43c92e184caeaf95b707c1aa5023222d575f 100644 |
--- a/third_party/sqlite/src/test/e_expr.test |
+++ b/third_party/sqlite/src/test/e_expr.test |
@@ -847,6 +847,9 @@ foreach {tn x expr res nEval} { |
3 5 "x() >= 5 AND x() <= 5" 1 2 |
4 5 "x() BETWEEN 5 AND 5" 1 1 |
+ |
+ 5 9 "(x(),8) >= (9,7) AND (x(),8)<=(9,10)" 1 2 |
+ 6 9 "(x(),8) BETWEEN (9,7) AND (9,10)" 1 1 |
} { |
do_test e_expr-13.1.$tn { |
set ::xcount 0 |
@@ -1434,6 +1437,13 @@ do_expr_test e_expr-27.2.2 { CAST(NULL AS text) } null {} |
do_expr_test e_expr-27.2.3 { CAST(NULL AS blob) } null {} |
do_expr_test e_expr-27.2.4 { CAST(NULL AS number) } null {} |
+# EVIDENCE-OF: R-29283-15561 Otherwise, the storage class of the result |
+# is determined by applying the rules for determining column affinity to |
+# the type-name. |
+# |
+# The R-29283-15561 requirement above is demonstrated by all of the |
+# subsequent e_expr-26 tests. |
+# |
# EVIDENCE-OF: R-43522-35548 Casting a value to a type-name with no |
# affinity causes the value to be converted into a BLOB. |
# |
@@ -1783,8 +1793,8 @@ do_test e_expr-35.0 { |
} |
} {} |
-# EVIDENCE-OF: R-00980-39256 A SELECT statement enclosed in parentheses |
-# may appear as a scalar quantity. |
+# EVIDENCE-OF: R-43573-23448 A SELECT statement enclosed in parentheses |
+# is a subquery. |
# |
# EVIDENCE-OF: R-56294-03966 All types of SELECT statement, including |
# aggregate and compound SELECT queries (queries with keywords like |
@@ -1803,13 +1813,14 @@ 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. |
+# EVIDENCE-OF: R-22239-33740 A subquery that returns two or more columns |
+# is a row value subquery and can only be used as the operand of a |
+# comparison operator. |
# |
# The following block tests that errors are returned in a bunch of cases |
# where a subquery returns more than one column. |
# |
-set M {only a single result allowed for a SELECT that is part of an expression} |
+set M {/1 {sub-select returns [23] columns - expected 1}/} |
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) } |
@@ -1818,14 +1829,14 @@ foreach {tn sql} { |
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] |
+ do_catchsql_test e_expr-35.2.$tn $sql $M |
} |
-# EVIDENCE-OF: R-35764-28041 The result of the expression is the value |
-# of the only column in the first row returned by the SELECT statement. |
+# EVIDENCE-OF: R-18318-14995 The value of a subquery expression is the |
+# first row of the result from the enclosed SELECT statement. |
# |
-# EVIDENCE-OF: R-41898-06686 If the SELECT yields more than one result |
-# row, all rows after the first are ignored. |
+# EVIDENCE-OF: R-15900-52156 In other words, an implied "LIMIT 1" is |
+# added to the subquery, overriding an explicitly coded LIMIT. |
# |
do_execsql_test e_expr-36.3.1 { |
CREATE TABLE t4(x, y); |
@@ -1849,8 +1860,8 @@ foreach {tn expr restype resval} { |
do_expr_test e_expr-36.3.$tn $expr $restype $resval |
} |
-# EVIDENCE-OF: R-25492-41572 If the SELECT yields no rows, then the |
-# value of the expression is NULL. |
+# EVIDENCE-OF: R-52325-25449 The value of a subquery expression is NULL |
+# if the enclosed SELECT statement returns no rows. |
# |
foreach {tn expr} { |
1 { ( SELECT x FROM t4 WHERE x>3 ORDER BY x ) } |