-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
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
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
}
}
+#-------------------------------------------------------------------------
+# 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