]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add test cases designed to exercise all syntax diagram paths in lang_expr.html
authordan <dan@noemail.net>
Mon, 16 Aug 2010 18:26:30 +0000 (18:26 +0000)
committerdan <dan@noemail.net>
Mon, 16 Aug 2010 18:26:30 +0000 (18:26 +0000)
FossilOrigin-Name: d4a26bb629bc739a4bca16b5a876199aa9ecda43

manifest
manifest.uuid
test/e_expr.test

index e349323f863f22907c1a973f3a720a5f9272fc3c..2fe5e497d47b756b9aacfb544c8240f562255a38 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,8 +1,5 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-C Fix\sa\stypo\sin\sa\scomment\sin\swal.c.\s\sNo\scode\schanges.
-D 2010-08-16T16:31:44
+C Add\stest\scases\sdesigned\sto\sexercise\sall\ssyntax\sdiagram\spaths\sin\slang_expr.html
+D 2010-08-16T18:26:31
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in ec08dc838fd8110fe24c92e5130bcd91cbb1ff2e
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -343,7 +340,7 @@ F test/descidx2.test 9f1a0c83fd57f8667c82310ca21b30a350888b5d
 F test/descidx3.test fe720e8b37d59f4cef808b0bf4e1b391c2e56b6f
 F test/diskfull.test 0cede7ef9d8f415d9d3944005c76be7589bb5ebb
 F test/distinctagg.test 1a6ef9c87a58669438fc771450d7a72577417376
-F test/e_expr.test ba4cccc04184e0bcea0a43175c4978042a07a242
+F test/e_expr.test cf59df3421b01df3e6c9a64b75bce17679122de3
 F test/e_fkey.test 6721a741c6499b3ab7e5385923233343c8f1ad05
 F test/e_fts3.test 75bb0aee26384ef586165e21018a17f7cd843469
 F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea
@@ -846,14 +843,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 24f24c927c77bb3bb4d26a23dd5d94f964db8033
-R d04163fd1f7348336648868a2a4ab08f
-U drh
-Z a03fc86522180e0948d68c0cc84f776d
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.6 (GNU/Linux)
-
-iD8DBQFMaWf1oxKgR168RlERAmiQAJ9VgSroQGOcjT5p2FV9QqaWvXB1+ACfc4XT
-3pX56Rvqq1NdrK3kl/RP/5U=
-=9oof
------END PGP SIGNATURE-----
+P d854a3d41c68f785c909c159cd9ca2154c64001a
+R 6da9ee7cb13dd395d9512044025cccd7
+U dan
+Z 71f38616e78b2b8aca56702050cbc0eb
index c6f371776695a11879867f499a2d527e3a50c7fd..73f8565b780f9321a6de525847700070bfac5fef 100644 (file)
@@ -1 +1 @@
-d854a3d41c68f785c909c159cd9ca2154c64001a
\ No newline at end of file
+d4a26bb629bc739a4bca16b5a876199aa9ecda43
\ No newline at end of file
index 3549e84a62ffe5c38d327d938a68bdbf8f1e9560..40f97ab483fc9925d88476e1be9c45a772e5ac59 100644 (file)
@@ -614,4 +614,209 @@ do_test e_expr-11.7.1 {
 } {NULL NULL NULL NULL}
 do_test e_expr-11.7.1 { sqlite3_finalize $stmt } SQLITE_OK
 
+#-------------------------------------------------------------------------
+# "Test" the syntax diagrams in lang_expr.html.
+#
+# EVIDENCE-OF: R-04177-20688 -- syntax diagram signed-number
+#
+do_execsql_test e_expr-12.1.1 { SELECT 0, +0, -0 } {0 0 0}
+do_execsql_test e_expr-12.1.2 { SELECT 1, +1, -1 } {1 1 -1}
+do_execsql_test e_expr-12.1.3 { SELECT 2, +2, -2 } {2 2 -2}
+do_execsql_test e_expr-12.1.4 { 
+  SELECT 1.4, +1.4, -1.4 
+} {1.4 1.4 -1.4}
+do_execsql_test e_expr-12.1.5 { 
+  SELECT 1.5e+5, +1.5e+5, -1.5e+5 
+} {150000.0 150000.0 -150000.0}
+do_execsql_test e_expr-12.1.6 { 
+  SELECT 0.0001, +0.0001, -0.0001 
+} {0.0001 0.0001 -0.0001}
+
+# EVIDENCE-OF: R-30740-26723 -- syntax diagram literal-value
+#
+set sqlite_current_time 1
+do_execsql_test e_expr-12.2.1 {SELECT 123}               {123}
+do_execsql_test e_expr-12.2.2 {SELECT 123.4e05}          {12340000.0}
+do_execsql_test e_expr-12.2.3 {SELECT 'abcde'}           {abcde}
+do_execsql_test e_expr-12.2.4 {SELECT X'414243'}         {ABC}
+do_execsql_test e_expr-12.2.5 {SELECT NULL}              {{}}
+do_execsql_test e_expr-12.2.6 {SELECT CURRENT_TIME}      {00:00:01}
+do_execsql_test e_expr-12.2.7 {SELECT CURRENT_DATE}      {1970-01-01}
+do_execsql_test e_expr-12.2.8 {SELECT CURRENT_TIMESTAMP} {{1970-01-01 00:00:01}}
+set sqlite_current_time 0
+
+# EVIDENCE-OF: R-57598-59332 -- syntax diagram expr
+#
+file delete -force test.db2
+execsql {
+  ATTACH 'test.db2' AS dbname;
+  CREATE TABLE dbname.tblname(cname);
+}
+
+proc glob {args} {return 1}
+db function glob glob
+db function match glob
+db function regexp glob
+
+foreach {tn expr} {
+  1 123
+  2 123.4e05
+  3 'abcde'
+  4 X'414243'
+  5 NULL
+  6 CURRENT_TIME
+  7 CURRENT_DATE
+  8 CURRENT_TIMESTAMP
+
+  9 ?
+ 10 ?123
+ 11 @hello
+ 12 :world
+ 13 $tcl
+ 14 $tcl(array)
+  
+  15 cname
+  16 tblname.cname
+  17 dbname.tblname.cname
+
+  18 "+ EXPR"
+  19 "- EXPR"
+  20 "NOT EXPR"
+  21 "~ EXPR"
+
+  22 "EXPR1 || EXPR2"
+  23 "EXPR1 * EXPR2"
+  24 "EXPR1 / EXPR2"
+  25 "EXPR1 % EXPR2"
+  26 "EXPR1 + EXPR2"
+  27 "EXPR1 - EXPR2"
+  28 "EXPR1 << EXPR2"
+  29 "EXPR1 >> EXPR2"
+  30 "EXPR1 & EXPR2"
+  31 "EXPR1 | EXPR2"
+  32 "EXPR1 < EXPR2"
+  33 "EXPR1 <= EXPR2"
+  34 "EXPR1 > EXPR2"
+  35 "EXPR1 >= EXPR2"
+  36 "EXPR1 = EXPR2"
+  37 "EXPR1 == EXPR2"
+  38 "EXPR1 != EXPR2"
+  39 "EXPR1 <> EXPR2"
+  40 "EXPR1 IS EXPR2"
+  41 "EXPR1 IS NOT EXPR2"
+  42 "EXPR1 AND EXPR2"
+  43 "EXPR1 OR EXPR2"
+  44 "count(*)"
+  45 "count(DISTINCT EXPR)"
+  46 "substr(EXPR, 10, 20)"
+  47 "changes()"
+  48 "( EXPR )"
+  49 "CAST ( EXPR AS integer )"
+  50 "CAST ( EXPR AS 'abcd' )"
+  51 "CAST ( EXPR AS 'ab$ $cd' )"
+  52 "EXPR COLLATE nocase"
+  53 "EXPR COLLATE binary"
+  54 "EXPR1 LIKE EXPR2"
+  55 "EXPR1 LIKE EXPR2 ESCAPE EXPR"
+  56 "EXPR1 GLOB EXPR2"
+  57 "EXPR1 GLOB EXPR2 ESCAPE EXPR"
+  58 "EXPR1 REGEXP EXPR2"
+  59 "EXPR1 REGEXP EXPR2 ESCAPE EXPR"
+  60 "EXPR1 MATCH EXPR2"
+  61 "EXPR1 MATCH EXPR2 ESCAPE EXPR"
+  62 "EXPR1 NOT LIKE EXPR2"
+  63 "EXPR1 NOT LIKE EXPR2 ESCAPE EXPR"
+  64 "EXPR1 NOT GLOB EXPR2"
+  65 "EXPR1 NOT GLOB EXPR2 ESCAPE EXPR"
+  66 "EXPR1 NOT REGEXP EXPR2"
+  67 "EXPR1 NOT REGEXP EXPR2 ESCAPE EXPR"
+  68 "EXPR1 NOT MATCH EXPR2"
+  69 "EXPR1 NOT MATCH EXPR2 ESCAPE EXPR"
+  70 "EXPR ISNULL"
+  71 "EXPR NOTNULL"
+  72 "EXPR NOT NULL"
+  73 "EXPR1 IS EXPR2"
+  74 "EXPR1 IS NOT EXPR2"
+
+  75 "EXPR NOT BETWEEN EXPR1 AND EXPR2"
+  76 "EXPR BETWEEN EXPR1 AND EXPR2"
+
+  77 "EXPR NOT IN (SELECT cname FROM tblname)"
+  78 "EXPR NOT IN (1)"
+  79 "EXPR NOT IN (1, 2, 3)"
+  80 "EXPR NOT IN tblname"
+  81 "EXPR NOT IN dbname.tblname"
+  82 "EXPR IN (SELECT cname FROM tblname)"
+  83 "EXPR IN (1)"
+  84 "EXPR IN (1, 2, 3)"
+  85 "EXPR IN tblname"
+  86 "EXPR IN dbname.tblname"
+
+  87 "EXISTS (SELECT cname FROM tblname)"
+  88 "NOT EXISTS (SELECT cname FROM tblname)"
+
+  89 "CASE EXPR WHEN EXPR1 THEN EXPR2 ELSE EXPR END"
+  90 "CASE EXPR WHEN EXPR1 THEN EXPR2 END"
+  91 "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"
+  92 "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"
+  93 "CASE WHEN EXPR1 THEN EXPR2 ELSE EXPR END"
+  94 "CASE WHEN EXPR1 THEN EXPR2 END"
+  95 "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"
+  96 "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"
+} {
+
+  # If the expression string being parsed contains "EXPR2", then replace
+  # string "EXPR1" and "EXPR2" with arbitrary SQL expressions. If it 
+  # contains "EXPR", then replace EXPR with an arbitrary SQL expression.
+  # 
+  set elist [list $expr]
+  if {[string match *EXPR2* $expr]} {
+    set elist [list]
+    foreach {e1 e2} { cname "34+22" } {
+      lappend elist [string map [list EXPR1 $e1 EXPR2 $e2] $expr]
+    }
+  } 
+  if {[string match *EXPR* $expr]} {
+    set elist2 [list]
+    foreach el $elist {
+      foreach e { cname "34+22" } {
+        lappend elist2 [string map [list EXPR $e] $el]
+      }
+    }
+    set elist $elist2
+  }
+
+  set x 0
+  foreach e $elist {
+    incr x
+    do_test e_expr-12.3.$tn.$x { 
+      set rc [catch { execsql "SELECT $e FROM tblname" } msg]
+    } {0}
+  }
+}
+
+# EVIDENCE-OF: R-49462-56079 -- syntax diagram raise-function
+#
+foreach {tn raiseexpr} {
+  1 "RAISE(IGNORE)"
+  2 "RAISE(ROLLBACK, 'error message')"
+  3 "RAISE(ABORT, 'error message')"
+  4 "RAISE(FAIL, 'error message')"
+} {
+  do_execsql_test e_expr-12.4.$tn "
+    CREATE TRIGGER dbname.tr$tn BEFORE DELETE ON tblname BEGIN
+      SELECT $raiseexpr ;
+    END;
+  " {}
+}
+
+
 finish_test
+