1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-01 06:27:03 +03:00

Fix a problem with resolving ORDER BY clauses that feature COLLATE clauses attached to compound SELECT statements.

FossilOrigin-Name: 427b50fba7362e5b447e79d39050f25ed2ef10af
This commit is contained in:
dan
2015-04-04 16:43:16 +00:00
parent 62ca61ee61
commit b33c50f215
6 changed files with 102 additions and 11 deletions

View File

@ -1375,4 +1375,64 @@ do_execsql_test 4.2.2 {
} {/2 . 3 . 4 . 5 . 6 . 7 ./}
proc strip_rnd {explain} {
regexp -all {sqlite_sq_[0123456789ABCDEF]*} $explain sqlite_sq
}
proc do_same_test {tn q1 args} {
set r2 [strip_rnd [db eval "EXPLAIN $q1"]]
set i 1
foreach q $args {
set tst [subst -nocommands {strip_rnd [db eval "EXPLAIN $q"]}]
uplevel do_test $tn.$i [list $tst] [list $r2]
incr i
}
}
do_execsql_test 5.0 {
CREATE TABLE t8(a, b);
CREATE TABLE t9(c, d);
} {}
do_same_test 5.1 {
SELECT a, b FROM t8 INTERSECT SELECT c, d FROM t9 ORDER BY a;
} {
SELECT a, b FROM t8 INTERSECT SELECT c, d FROM t9 ORDER BY t8.a;
} {
SELECT a, b FROM t8 INTERSECT SELECT c, d FROM t9 ORDER BY 1;
} {
SELECT a, b FROM t8 INTERSECT SELECT c, d FROM t9 ORDER BY c;
} {
SELECT a, b FROM t8 INTERSECT SELECT c, d FROM t9 ORDER BY t9.c;
}
do_same_test 5.2 {
SELECT a, b FROM t8 UNION SELECT c, d FROM t9 ORDER BY a COLLATE NOCASE
} {
SELECT a, b FROM t8 UNION SELECT c, d FROM t9 ORDER BY t8.a COLLATE NOCASE
} {
SELECT a, b FROM t8 UNION SELECT c, d FROM t9 ORDER BY 1 COLLATE NOCASE
} {
SELECT a, b FROM t8 UNION SELECT c, d FROM t9 ORDER BY c COLLATE NOCASE
} {
SELECT a, b FROM t8 UNION SELECT c, d FROM t9 ORDER BY t9.c COLLATE NOCASE
}
do_same_test 5.3 {
SELECT a, b FROM t8 EXCEPT SELECT c, d FROM t9 ORDER BY b, c COLLATE NOCASE
} {
SELECT a, b FROM t8 EXCEPT SELECT c, d FROM t9 ORDER BY 2, 1 COLLATE NOCASE
} {
SELECT a, b FROM t8 EXCEPT SELECT c, d FROM t9 ORDER BY d, a COLLATE NOCASE
} {
SELECT a, b FROM t8 EXCEPT SELECT * FROM t9 ORDER BY t9.d, c COLLATE NOCASE
} {
SELECT * FROM t8 EXCEPT SELECT c, d FROM t9 ORDER BY d, t8.a COLLATE NOCASE
}
do_catchsql_test 5.4 {
SELECT * FROM t8 UNION SELECT * FROM t9 ORDER BY a+b COLLATE NOCASE
} {1 {1st ORDER BY term does not match any column in the result set}}
finish_test