Add tests for some syntax diagrams in lang_select.html.

FossilOrigin-Name: 2254e93bd5f70af5d3b2021983e4b826e601ee8f
This commit is contained in:
dan 2010-09-17 19:04:18 +00:00
parent 9fe5b85d36
commit f41627abbf
3 changed files with 138 additions and 19 deletions

View File

@ -1,8 +1,5 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
C Remove\sadditional\soccurrences\sof\s<ctype.h>\sfrom\sFTS2.
D 2010-09-17T17:10:31
C Add\stests\sfor\ssome\ssyntax\sdiagrams\sin\slang_select.html.
D 2010-09-17T19:04:19
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in c599a15d268b1db2aeadea19df2adc3bf2eb6bee
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@ -353,7 +350,7 @@ F test/distinctagg.test 1a6ef9c87a58669438fc771450d7a72577417376
F test/e_expr.test 164e87c1d7b40ceb47c57c3bffa384c81d009aa7
F test/e_fkey.test 6721a741c6499b3ab7e5385923233343c8f1ad05
F test/e_fts3.test 75bb0aee26384ef586165e21018a17f7cd843469
F test/e_select.test 08868f620e244579913ca11b758eed82f2027dde
F test/e_select.test 66d398699f8a1906e292432190e1df6ed8573b33
F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea
F test/enc2.test 6d91a5286f59add0cfcbb2d0da913b76f2242398
F test/enc3.test 5c550d59ff31dccdba5d1a02ae11c7047d77c041
@ -861,14 +858,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
P a207f74408acb043aafd96b8e03807d8ae5d7f01
R ccfc236a1759bf7ba55baaa23b8f8f40
U drh
Z d8f63449b3dc452dffe72f003604cf9f
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQFMk6EKoxKgR168RlERAoRwAJ0SFQUu2Lw2k2NkntJqlDWofYhGZACfchJt
Kgj0Jv3mGc/+wPqiaWJCipk=
=jFh4
-----END PGP SIGNATURE-----
P ee52589c80a6d37dc8c7a86a0e3b531ec4dd8d45
R 31c4b270de35f676fcc4204cc88bacd6
U dan
Z 0f88d4009af295c3a193758a524f6f37

View File

@ -1 +1 @@
ee52589c80a6d37dc8c7a86a0e3b531ec4dd8d45
2254e93bd5f70af5d3b2021983e4b826e601ee8f

View File

@ -96,6 +96,134 @@ do_catchsql_test e_select-0.1.5 {
SELECT count(*) FROM t1, t2 USING (a) ON (t1.a=t2.a)
} {1 {near "ON": syntax error}}
# EVIDENCE-OF: R-44854-11739 -- syntax diagram select-core
#
# 0: SELECT ...
# 1: SELECT DISTINCT ...
# 2: SELECT ALL ...
#
# 0: No FROM clause
# 1: Has FROM clause
#
# 0: No WHERE clause
# 1: Has WHERE clause
#
# 0: No GROUP BY clause
# 1: Has GROUP BY clause
# 2: Has GROUP BY and HAVING clauses
#
foreach {tn select res} {
0000.1 "SELECT 1, 2, 3 " {1 2 3}
1000.1 "SELECT DISTINCT 1, 2, 3 " {1 2 3}
2000.1 "SELECT ALL 1, 2, 3 " {1 2 3}
0100.1 "SELECT a, b, a||b FROM t1 " {
a one aone b two btwo c three cthree
}
1100.1 "SELECT DISTINCT a, b, a||b FROM t1 " {
a one aone b two btwo c three cthree
}
1200.1 "SELECT ALL a, b, a||b FROM t1 " {
a one aone b two btwo c three cthree
}
0010.1 "SELECT 1, 2, 3 WHERE 1 " {1 2 3}
0010.2 "SELECT 1, 2, 3 WHERE 0 " {}
0010.3 "SELECT 1, 2, 3 WHERE NULL " {}
1010.1 "SELECT DISTINCT 1, 2, 3 WHERE 1 " {1 2 3}
2010.1 "SELECT ALL 1, 2, 3 WHERE 1 " {1 2 3}
0110.1 "SELECT a, b, a||b FROM t1 WHERE a!='x' " {
a one aone b two btwo c three cthree
}
0110.2 "SELECT a, b, a||b FROM t1 WHERE a=='x'" {}
1110.1 "SELECT DISTINCT a, b, a||b FROM t1 WHERE a!='x' " {
a one aone b two btwo c three cthree
}
2110.0 "SELECT ALL a, b, a||b FROM t1 WHERE a=='x'" {}
0001.1 "SELECT 1, 2, 3 GROUP BY 2" {1 2 3}
0002.1 "SELECT 1, 2, 3 GROUP BY 2 HAVING count(*)=1" {1 2 3}
0002.2 "SELECT 1, 2, 3 GROUP BY 2 HAVING count(*)>1" {}
1001.1 "SELECT DISTINCT 1, 2, 3 GROUP BY 2" {1 2 3}
1002.1 "SELECT DISTINCT 1, 2, 3 GROUP BY 2 HAVING count(*)=1" {1 2 3}
1002.2 "SELECT DISTINCT 1, 2, 3 GROUP BY 2 HAVING count(*)>1" {}
2001.1 "SELECT ALL 1, 2, 3 GROUP BY 2" {1 2 3}
2002.1 "SELECT ALL 1, 2, 3 GROUP BY 2 HAVING count(*)=1" {1 2 3}
2002.2 "SELECT ALL 1, 2, 3 GROUP BY 2 HAVING count(*)>1" {}
0101.1 "SELECT count(*), max(a) FROM t1 GROUP BY b" {1 a 1 c 1 b}
0102.1 "SELECT count(*), max(a) FROM t1 GROUP BY b HAVING count(*)=1" {
1 a 1 c 1 b
}
0102.2 "SELECT count(*), max(a) FROM t1 GROUP BY b HAVING count(*)=2" { }
1101.1 "SELECT DISTINCT count(*), max(a) FROM t1 GROUP BY b" {1 a 1 c 1 b}
1102.1 "SELECT DISTINCT count(*), max(a) FROM t1
GROUP BY b HAVING count(*)=1" {
1 a 1 c 1 b
}
1102.2 "SELECT DISTINCT count(*), max(a) FROM t1
GROUP BY b HAVING count(*)=2" {
}
2101.1 "SELECT ALL count(*), max(a) FROM t1 GROUP BY b" {1 a 1 c 1 b}
2102.1 "SELECT ALL count(*), max(a) FROM t1
GROUP BY b HAVING count(*)=1" {
1 a 1 c 1 b
}
2102.2 "SELECT ALL count(*), max(a) FROM t1
GROUP BY b HAVING count(*)=2" {
}
0011.1 "SELECT 1, 2, 3 WHERE 1 GROUP BY 2" {1 2 3}
0012.1 "SELECT 1, 2, 3 WHERE 0 GROUP BY 2 HAVING count(*)=1" {}
0012.2 "SELECT 1, 2, 3 WHERE 0 GROUP BY 2 HAVING count(*)>1" {}
1011.1 "SELECT DISTINCT 1, 2, 3 WHERE 0 GROUP BY 2" {}
1012.1 "SELECT DISTINCT 1, 2, 3 WHERE 1 GROUP BY 2 HAVING count(*)=1"
{1 2 3}
1012.2 "SELECT DISTINCT 1, 2, 3 WHERE NULL GROUP BY 2 HAVING count(*)>1" {}
2011.1 "SELECT ALL 1, 2, 3 WHERE 1 GROUP BY 2" {1 2 3}
2012.1 "SELECT ALL 1, 2, 3 WHERE 0 GROUP BY 2 HAVING count(*)=1" {}
2012.2 "SELECT ALL 1, 2, 3 WHERE 'abc' GROUP BY 2 HAVING count(*)>1" {}
0111.1 "SELECT count(*), max(a) FROM t1 WHERE a='a' GROUP BY b" {1 a}
0112.1 "SELECT count(*), max(a) FROM t1
WHERE a='c' GROUP BY b HAVING count(*)=1" {1 c}
0112.2 "SELECT count(*), max(a) FROM t1
WHERE 0 GROUP BY b HAVING count(*)=2" { }
1111.1 "SELECT DISTINCT count(*), max(a) FROM t1 WHERE a<'c' GROUP BY b"
{1 a 1 b}
1112.1 "SELECT DISTINCT count(*), max(a) FROM t1 WHERE a>'a'
GROUP BY b HAVING count(*)=1" {
1 c 1 b
}
1112.2 "SELECT DISTINCT count(*), max(a) FROM t1 WHERE 0
GROUP BY b HAVING count(*)=2" {
}
2111.1 "SELECT ALL count(*), max(a) FROM t1 WHERE b>'one' GROUP BY b"
{1 c 1 b}
2112.1 "SELECT ALL count(*), max(a) FROM t1 WHERE a!='b'
GROUP BY b HAVING count(*)=1" {
1 a 1 c
}
2112.2 "SELECT ALL count(*), max(a) FROM t1
WHERE 0 GROUP BY b HAVING count(*)=2" { }
} {
do_execsql_test e_select-0.2.$tn $select [list {*}$res]
}
#-------------------------------------------------------------------------
# The following tests focus on FROM clause (join) processing.
#
@ -1231,7 +1359,8 @@ foreach {tn select nCol} {
#
# By other definitions in lang_select.html, a non-aggregate query is
# any simple SELECT that has no GROUP BY clause and no aggregate expressions
# in the result expression list.
# in the result expression list. These tests also verify (in a way) that
# that definition is consistent:
#
do_execsql_test e_select-4.4.1 {
SELECT a, b FROM z1