]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add tests to test file e_expr.test.
authordan <dan@noemail.net>
Fri, 13 Aug 2010 18:41:09 +0000 (18:41 +0000)
committerdan <dan@noemail.net>
Fri, 13 Aug 2010 18:41:09 +0000 (18:41 +0000)
FossilOrigin-Name: 3fd1059e25a8d0cccbb30fc55b03d172bd9eb9b7

manifest
manifest.uuid
test/e_expr.test

index f9364ac70add335e806746ef74082caf59bfaeda..7d2a0c06a165364db86edc28eb94af9c7ca82063 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Do\snot\sapply\sthe\sflattening\soptimization\sif\sthe\ssub-query\sis\sDISTINCT.\sFix\sfor\s[e4b8a2ba6e].
-D 2010-08-13T16:38:49
+C Add\stests\sto\stest\sfile\se_expr.test.
+D 2010-08-13T18:41: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 141e53fea525bce4f5403fcb0067b88e64fec5eb
+F test/e_expr.test f9ff41e5419bb861807072bf195abb85d4670021
 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 02def8f92588b8a45dff3976d1e7f9e3f0359b3b
-R 74ad88fe4f30f12e9ec66365eae8f2a6
+P 497aafd8ed6a636a8bd5fa2cad265a20593ee34f
+R f6d0c1ed7d5a218762ae4f3a6bffc24d
 U dan
-Z 55affff7311e423c3bc737f8b0377763
+Z 2fd985318d5073be48e0a663ee3f56cf
index ab242a3c7ce216606e02d500f3314af12165f1b1..a4fd9be706634bb57e92d529502ccee3854bdace 100644 (file)
@@ -1 +1 @@
-497aafd8ed6a636a8bd5fa2cad265a20593ee34f
\ No newline at end of file
+3fd1059e25a8d0cccbb30fc55b03d172bd9eb9b7
\ No newline at end of file
index 2ca5ac7498c68c83a40767a3bc91a82368a8adcf..6f21e7b9ffa628ad7ae9a084ca43c8283a0a54f1 100644 (file)
@@ -329,4 +329,124 @@ foreach {n1 rhs} $literals {
   }
 }
 
+#-------------------------------------------------------------------------
+# Run some tests on the COLLATE "unary postfix operator".
+#
+# This collation sequence reverses both arguments before using 
+# [string compare] to compare them. For example, when comparing the
+# strings 'one' and 'four', return the result of:
+#   
+#   string compare eno ruof
+#
+proc reverse_str {zStr} {
+  set out ""
+  foreach c [split $zStr {}] { set out "${c}${out}" }
+  set out
+}
+proc reverse_collate {zLeft zRight} {
+  string compare [reverse_str $zLeft] [reverse_str $zRight]
+}
+db collate reverse reverse_collate
+
+# EVIDENCE-OF: R-59577-33471 The COLLATE operator is a unary postfix
+# operator that assigns a collating sequence to an expression.
+#
+# EVIDENCE-OF: R-23441-22541 The COLLATE operator has a higher
+# precedence (binds more tightly) than any prefix unary operator or any
+# binary operator.
+#
+do_execsql_test e_expr-9.1 { SELECT  'abcd' < 'bbbb'    COLLATE reverse } 0
+do_execsql_test e_expr-9.2 { SELECT ('abcd' < 'bbbb')   COLLATE reverse } 1
+do_execsql_test e_expr-9.3 { SELECT  'abcd' <= 'bbbb'   COLLATE reverse } 0
+do_execsql_test e_expr-9.4 { SELECT ('abcd' <= 'bbbb')  COLLATE reverse } 1
+
+do_execsql_test e_expr-9.5 { SELECT  'abcd' > 'bbbb'    COLLATE reverse } 1
+do_execsql_test e_expr-9.6 { SELECT ('abcd' > 'bbbb')   COLLATE reverse } 0
+do_execsql_test e_expr-9.7 { SELECT  'abcd' >= 'bbbb'   COLLATE reverse } 1
+do_execsql_test e_expr-9.8 { SELECT ('abcd' >= 'bbbb')  COLLATE reverse } 0
+
+do_execsql_test e_expr-9.10 { SELECT  'abcd' =  'ABCD'  COLLATE nocase } 1
+do_execsql_test e_expr-9.11 { SELECT ('abcd' =  'ABCD') COLLATE nocase } 0
+do_execsql_test e_expr-9.12 { SELECT  'abcd' == 'ABCD'  COLLATE nocase } 1
+do_execsql_test e_expr-9.13 { SELECT ('abcd' == 'ABCD') COLLATE nocase } 0
+do_execsql_test e_expr-9.14 { SELECT  'abcd' IS 'ABCD'  COLLATE nocase } 1
+do_execsql_test e_expr-9.15 { SELECT ('abcd' IS 'ABCD') COLLATE nocase } 0
+
+do_execsql_test e_expr-9.16 { SELECT  'abcd' != 'ABCD'      COLLATE nocase } 0
+do_execsql_test e_expr-9.17 { SELECT ('abcd' != 'ABCD')     COLLATE nocase } 1
+do_execsql_test e_expr-9.18 { SELECT  'abcd' <> 'ABCD'      COLLATE nocase } 0
+do_execsql_test e_expr-9.19 { SELECT ('abcd' <> 'ABCD')     COLLATE nocase } 1
+do_execsql_test e_expr-9.20 { SELECT  'abcd' IS NOT 'ABCD'  COLLATE nocase } 0
+do_execsql_test e_expr-9.21 { SELECT ('abcd' IS NOT 'ABCD') COLLATE nocase } 1
+
+do_execsql_test e_expr-9.22 { 
+  SELECT 'bbb' BETWEEN 'AAA' AND 'CCC' COLLATE nocase 
+} 1
+do_execsql_test e_expr-9.23 { 
+  SELECT ('bbb' BETWEEN 'AAA' AND 'CCC') COLLATE nocase 
+} 0
+
+# EVIDENCE-OF: R-58731-25439 The collating sequence set by the COLLATE
+# operator overrides the collating sequence determined by the COLLATE
+# clause in a table column definition.
+#
+do_execsql_test e_expr-9.24 { 
+  CREATE TABLE t24(a COLLATE NOCASE, b);
+  INSERT INTO t24 VALUES('aaa', 1);
+  INSERT INTO t24 VALUES('bbb', 2);
+  INSERT INTO t24 VALUES('ccc', 3);
+} {}
+do_execsql_test e_expr-9.25 { SELECT 'BBB' = a FROM t24 } {0 1 0}
+do_execsql_test e_expr-9.25 { SELECT a = 'BBB' FROM t24 } {0 1 0}
+do_execsql_test e_expr-9.25 { SELECT 'BBB' = a COLLATE binary FROM t24 } {0 0 0}
+do_execsql_test e_expr-9.25 { SELECT a COLLATE binary = 'BBB' FROM t24 } {0 0 0}
+
+#-------------------------------------------------------------------------
+# Test statements related to literal values.
+#
+# EVIDENCE-OF: R-31536-32008 Literal values may be integers, floating
+# point numbers, strings, BLOBs, or NULLs.
+#
+do_execsql_test e_expr-10.1.1 { SELECT typeof(5)       } {integer}
+do_execsql_test e_expr-10.1.2 { SELECT typeof(5.1)     } {real}
+do_execsql_test e_expr-10.1.3 { SELECT typeof('5.1')   } {text}
+do_execsql_test e_expr-10.1.4 { SELECT typeof(X'ABCD') } {blob}
+do_execsql_test e_expr-10.1.5 { SELECT typeof(NULL)    } {null}
+
+# EVIDENCE-OF: R-26921-59298 Scientific notation is supported for
+# floating point literal values.
+#
+do_execsql_test e_expr-10.2.1 { SELECT typeof(3.4e-02)    } {real}
+do_execsql_test e_expr-10.2.2 { SELECT typeof(3e+5)       } {real}
+do_execsql_test e_expr-10.2.3 { SELECT 3.4e-02            } {0.034}
+do_execsql_test e_expr-10.2.4 { SELECT 3e+4               } {30000.0}
+
+# EVIDENCE-OF: R-35229-17830 A string constant is formed by enclosing
+# the string in single quotes (').
+#
+# EVIDENCE-OF: R-07100-06606 A single quote within the string can be
+# encoded by putting two single quotes in a row - as in Pascal.
+#
+do_execsql_test e_expr-10.3.1 { SELECT 'is not' }         {{is not}}
+do_execsql_test e_expr-10.3.2 { SELECT typeof('is not') } {text}
+do_execsql_test e_expr-10.3.3 { SELECT 'isn''t' }         {isn't}
+do_execsql_test e_expr-10.3.4 { SELECT typeof('isn''t') } {text}
+
+# EVIDENCE-OF: R-09593-03321 BLOB literals are string literals
+# containing hexadecimal data and preceded by a single "x" or "X"
+# character.
+#
+# EVIDENCE-OF: R-39344-59787 For example: X'53514C697465'
+#
+do_execsql_test e_expr-10.4.1 { SELECT typeof(X'0123456789ABCDEF') } blob
+do_execsql_test e_expr-10.4.2 { SELECT typeof(x'0123456789ABCDEF') } blob
+do_execsql_test e_expr-10.4.3 { SELECT typeof(X'0123456789abcdef') } blob
+do_execsql_test e_expr-10.4.4 { SELECT typeof(x'0123456789abcdef') } blob
+do_execsql_test e_expr-10.4.5 { SELECT typeof(X'53514C697465')     } blob
+
+# EVIDENCE-OF: R-23914-51476 A literal value can also be the token
+# "NULL".
+do_execsql_test e_expr-10.5.1 { SELECT NULL         } {{}}
+do_execsql_test e_expr-10.5.2 { SELECT typeof(NULL) } {null}
+
 finish_test