summaryrefslogtreecommitdiffstats
path: root/test/affinity2.test
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 17:28:19 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 17:28:19 +0000
commit18657a960e125336f704ea058e25c27bd3900dcb (patch)
tree17b438b680ed45a996d7b59951e6aa34023783f2 /test/affinity2.test
parentInitial commit. (diff)
downloadsqlite3-upstream.tar.xz
sqlite3-upstream.zip
Adding upstream version 3.40.1.upstream/3.40.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'test/affinity2.test')
-rw-r--r--test/affinity2.test136
1 files changed, 136 insertions, 0 deletions
diff --git a/test/affinity2.test b/test/affinity2.test
new file mode 100644
index 0000000..6ad257a
--- /dev/null
+++ b/test/affinity2.test
@@ -0,0 +1,136 @@
+# 2015-06-02
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library. The
+# focus of this file is type affinity in comparison operations.
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+set testprefix affinity2
+
+do_execsql_test affinity2-100 {
+ CREATE TABLE t1(
+ xi INTEGER,
+ xr REAL,
+ xb BLOB,
+ xn NUMERIC,
+ xt TEXT
+ );
+ INSERT INTO t1(rowid,xi,xr,xb,xn,xt) VALUES(1,1,1,1,1,1);
+ INSERT INTO t1(rowid,xi,xr,xb,xn,xt) VALUES(2,'2','2','2','2','2');
+ INSERT INTO t1(rowid,xi,xr,xb,xn,xt) VALUES(3,'03','03','03','03','03');
+
+} {}
+do_execsql_test affinity2-110 {
+ SELECT xi, typeof(xi) FROM t1 ORDER BY rowid;
+} {1 integer 2 integer 3 integer}
+do_execsql_test affinity2-120 {
+ SELECT xr, typeof(xr) FROM t1 ORDER BY rowid;
+} {1.0 real 2.0 real 3.0 real}
+do_execsql_test affinity2-130 {
+ SELECT xb, typeof(xb) FROM t1 ORDER BY rowid;
+} {1 integer 2 text 03 text}
+do_execsql_test affinity2-140 {
+ SELECT xn, typeof(xn) FROM t1 ORDER BY rowid;
+} {1 integer 2 integer 3 integer}
+do_execsql_test affinity2-150 {
+ SELECT xt, typeof(xt) FROM t1 ORDER BY rowid;
+} {1 text 2 text 03 text}
+
+do_execsql_test affinity2-200 {
+ SELECT rowid, xi==xt, xi==xb, xi==+xt FROM t1 ORDER BY rowid;
+} {1 1 1 1 2 1 1 1 3 1 1 1}
+do_execsql_test affinity2-210 {
+ SELECT rowid, xr==xt, xr==xb, xr==+xt FROM t1 ORDER BY rowid;
+} {1 1 1 1 2 1 1 1 3 1 1 1}
+do_execsql_test affinity2-220 {
+ SELECT rowid, xn==xt, xn==xb, xn==+xt FROM t1 ORDER BY rowid;
+} {1 1 1 1 2 1 1 1 3 1 1 1}
+
+do_execsql_test affinity2-300 {
+ SELECT rowid, xt==+xi, xt==xi, xt==xb FROM t1 ORDER BY rowid;
+} {1 1 1 0 2 1 1 1 3 0 1 1}
+
+#-------------------------------------------------------------------------
+do_execsql_test 400 {
+ CREATE TABLE ttt(c0, c1);
+ CREATE INDEX ii ON ttt(CAST(c0 AS NUMERIC));
+ INSERT INTO ttt VALUES('abc', '-1');
+}
+do_execsql_test 410 {
+ SELECT * FROM ttt WHERE CAST(c0 AS NUMERIC) > c1 GROUP BY rowid;
+} {abc -1}
+do_execsql_test 420 {
+ SELECT * FROM ttt INDEXED BY ii WHERE CAST(c0 AS NUMERIC) > c1 GROUP BY rowid;
+} {abc -1}
+
+do_execsql_test 430 {
+ CREATE TABLE t3(a, b, c INTEGER);
+ CREATE INDEX t3ac ON t3(a, c-1);
+ INSERT INTO t3 VALUES(1, 1, 1);
+ INSERT INTO t3 VALUES(2, 1, 0);
+ INSERT INTO t3 VALUES(3, 1, 1);
+ INSERT INTO t3 VALUES(4, 1, 0);
+ INSERT INTO t3 VALUES(5, 1, 1);
+}
+do_execsql_test 440 {
+ SELECT * FROM t3 WHERE c='0' ORDER BY a;
+} {2 1 0 4 1 0}
+
+# 2019-08-22 ticket https://sqlite.org/src/info/d99f1ffe836c591ac57f
+# False positive in sqlite3ExprNeedsNoAffinityChange()
+#
+do_execsql_test 500 {
+ DROP TABLE IF EXISTS t0;
+ CREATE TABLE t0(c0 TEXT UNIQUE, c1);
+ INSERT INTO t0(c0) VALUES (-1);
+ SELECT quote(- x'ce'), quote(t0.c0), quote(- x'ce' >= t0.c0) FROM t0;
+} {0 '-1' 1}
+do_execsql_test 501 {
+ SELECT * FROM t0 WHERE - x'ce' >= t0.c0;
+} {-1 {}}
+do_execsql_test 502 {
+ SELECT quote(+-+x'ce'), quote(t0.c0), quote(+-+x'ce' >= t0.c0) FROM t0;
+} {0 '-1' 1}
+do_execsql_test 503 {
+ SELECT * FROM t0 WHERE +-+x'ce' >= t0.c0;
+} {-1 {}}
+do_execsql_test 504 {
+ SELECT quote(- 'ce'), quote(t0.c0), quote(- 'ce' >= t0.c0) FROM t0;
+} {0 '-1' 1}
+do_execsql_test 505 {
+ SELECT * FROM t0 WHERE - 'ce' >= t0.c0;
+} {-1 {}}
+do_execsql_test 506 {
+ SELECT quote(+-+'ce'), quote(t0.c0), quote(+-+'ce' >= t0.c0) FROM t0;
+} {0 '-1' 1}
+do_execsql_test 507 {
+ SELECT * FROM t0 WHERE +-+'ce' >= t0.c0;
+} {-1 {}}
+
+# 2019-08-30 ticket https://www.sqlite.org/src/info/40812aea1fde9594
+#
+# Due to some differences in floating point computations, these tests do not
+# work under valgrind.
+#
+if {![info exists ::G(valgrind)]} {
+ do_execsql_test 600 {
+ DROP TABLE IF EXISTS t0;
+ CREATE TABLE t0(c0 REAL UNIQUE);
+ INSERT INTO t0(c0) VALUES (3175546974276630385);
+ SELECT 3175546974276630385 < c0 FROM t0;
+ } {1}
+ do_execsql_test 601 {
+ SELECT 1 FROM t0 WHERE 3175546974276630385 < c0;
+ } {1}
+}
+
+finish_test