]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add tests for the BETWEEN operator to e_expr.test.
authordan <dan@noemail.net>
Tue, 17 Aug 2010 16:06:08 +0000 (16:06 +0000)
committerdan <dan@noemail.net>
Tue, 17 Aug 2010 16:06:08 +0000 (16:06 +0000)
FossilOrigin-Name: ced6a3480fe4a8e2b93160a8419bdc3ab30935e8

manifest
manifest.uuid
test/e_expr.test

index b20dcccde0aacff94b5ca7ab5a75d90cc74e703a..2c0fd6bff9d6d397647aa926557b2c5129c10604 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Invoke\ssqlite3_log()\swhenever\sone\sor\smore\sframes\sare\srecovered\sfrom\sa\sWAL\sfile.
-D 2010-08-17T14:52:23
+C Add\stests\sfor\sthe\sBETWEEN\soperator\sto\se_expr.test.
+D 2010-08-17T16:06:09
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in ec08dc838fd8110fe24c92e5130bcd91cbb1ff2e
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -340,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 cf59df3421b01df3e6c9a64b75bce17679122de3
+F test/e_expr.test 27827ef76338a181f997592760d9f8f702c150e9
 F test/e_fkey.test 6721a741c6499b3ab7e5385923233343c8f1ad05
 F test/e_fts3.test 75bb0aee26384ef586165e21018a17f7cd843469
 F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea
@@ -843,7 +843,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 07570ce38051a05d6e8a71e39766850f6719ac07
-R 9dc78c7561a603e522c0bb81eb112898
+P e05089aaefe02ec59a1923812349471a78075d29
+R f6617952e848f11c3cd7a85d48d9906b
 U dan
-Z d52d7cfd0d7a3de647988329bc045380
+Z 2833d70ff5cee480c0ad0f9b9cb3be0b
index a265d51e137297860a5589cca8697b24458a4d54..7f9117a9c47bfc1951351a075b33e8f23292a11a 100644 (file)
@@ -1 +1 @@
-e05089aaefe02ec59a1923812349471a78075d29
\ No newline at end of file
+ced6a3480fe4a8e2b93160a8419bdc3ab30935e8
\ No newline at end of file
index 40f97ab483fc9925d88476e1be9c45a772e5ac59..3481df67208e7c9d3edcb38b3b9b35bd11fc5865 100644 (file)
@@ -817,6 +817,70 @@ foreach {tn raiseexpr} {
   " {}
 }
 
+#-------------------------------------------------------------------------
+# Test the statements related to the BETWEEN operator.
+#
+# EVIDENCE-OF: R-40079-54503 The BETWEEN operator is logically
+# equivalent to a pair of comparisons. "x BETWEEN y AND z" is equivalent
+# to "x>=y AND x<=z" except that with BETWEEN, the x expression is
+# only evaluated once.
+#
+db func x x
+proc x {} { incr ::xcount ; return [expr $::x] }
+foreach {tn x expr res nEval} {
+  1  10  "x() >= 5 AND x() <= 15"  1  2
+  2  10  "x() BETWEEN 5 AND 15"    1  1
 
-finish_test
+  3   5  "x() >= 5 AND x() <= 5"   1  2
+  4   5  "x() BETWEEN 5 AND 5"     1  1
+} {
+  do_test e_expr-13.1.$tn {
+    set ::xcount 0
+    set a [execsql "SELECT $expr"]
+    list $::xcount $a
+  } [list $nEval $res]
+}
 
+# EVIDENCE-OF: R-05155-34454 The precedence of the BETWEEN operator is
+# the same as the precedence as operators == and != and LIKE and groups
+# left to right.
+# 
+# Therefore, BETWEEN groups more tightly than operator "AND", but less
+# so than "<".
+#
+do_execsql_test e_expr-13.2.1  { SELECT 1 == 10 BETWEEN 0 AND 2   }  1
+do_execsql_test e_expr-13.2.2  { SELECT (1 == 10) BETWEEN 0 AND 2 }  1
+do_execsql_test e_expr-13.2.3  { SELECT 1 == (10 BETWEEN 0 AND 2) }  0
+do_execsql_test e_expr-13.2.4  { SELECT  6 BETWEEN 4 AND 8 == 1 }    1
+do_execsql_test e_expr-13.2.5  { SELECT (6 BETWEEN 4 AND 8) == 1 }   1
+do_execsql_test e_expr-13.2.6  { SELECT  6 BETWEEN 4 AND (8 == 1) }  0
+
+do_execsql_test e_expr-13.2.7  { SELECT  5 BETWEEN 0 AND 0  != 1 }   1
+do_execsql_test e_expr-13.2.8  { SELECT (5 BETWEEN 0 AND 0) != 1 }   1
+do_execsql_test e_expr-13.2.9  { SELECT  5 BETWEEN 0 AND (0 != 1) }  0
+do_execsql_test e_expr-13.2.10 { SELECT  1 != 0  BETWEEN 0 AND 2  }  1
+do_execsql_test e_expr-13.2.11 { SELECT (1 != 0) BETWEEN 0 AND 2  }  1
+do_execsql_test e_expr-13.2.12 { SELECT  1 != (0 BETWEEN 0 AND 2) }  0
+
+do_execsql_test e_expr-13.2.13  { SELECT 1 LIKE 10 BETWEEN 0 AND 2   }  1
+do_execsql_test e_expr-13.2.14  { SELECT (1 LIKE 10) BETWEEN 0 AND 2 }  1
+do_execsql_test e_expr-13.2.15  { SELECT 1 LIKE (10 BETWEEN 0 AND 2) }  0
+do_execsql_test e_expr-13.2.16  { SELECT  6 BETWEEN 4 AND 8 LIKE 1   }  1
+do_execsql_test e_expr-13.2.17  { SELECT (6 BETWEEN 4 AND 8) LIKE 1  }  1
+do_execsql_test e_expr-13.2.18  { SELECT  6 BETWEEN 4 AND (8 LIKE 1) }  0
+
+do_execsql_test e_expr-13.2.19  { SELECT 0 AND 0 BETWEEN 0 AND 1   } 0
+do_execsql_test e_expr-13.2.20  { SELECT 0 AND (0 BETWEEN 0 AND 1) } 0
+do_execsql_test e_expr-13.2.21  { SELECT (0 AND 0) BETWEEN 0 AND 1 } 1
+do_execsql_test e_expr-13.2.22  { SELECT 0 BETWEEN -1 AND 1 AND 0   } 0
+do_execsql_test e_expr-13.2.23  { SELECT (0 BETWEEN -1 AND 1) AND 0 } 0
+do_execsql_test e_expr-13.2.24  { SELECT 0 BETWEEN -1 AND (1 AND 0) } 1
+
+do_execsql_test e_expr-13.2.25  { SELECT 2 < 3 BETWEEN 0 AND 1   } 1
+do_execsql_test e_expr-13.2.26  { SELECT (2 < 3) BETWEEN 0 AND 1 } 1
+do_execsql_test e_expr-13.2.27  { SELECT 2 < (3 BETWEEN 0 AND 1) } 0
+do_execsql_test e_expr-13.2.28  { SELECT 2 BETWEEN 1 AND 2 < 3    } 0
+do_execsql_test e_expr-13.2.29  { SELECT 2 BETWEEN 1 AND (2 < 3)  } 0
+do_execsql_test e_expr-13.2.30  { SELECT (2 BETWEEN 1 AND 2) < 3  } 1
+
+finish_test