1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-29 08:01:23 +03:00

Avoid factoring out constant expressions on the LHS of an IN(...) operator, as the IN(...) operation may affect the affinity of these values.

FossilOrigin-Name: 98d56b4a34fddcbaecd953a045ae0270b4d78c1edf34cc73522fb4e12743af80
This commit is contained in:
dan
2020-04-03 19:37:14 +00:00
parent a96a69b7db
commit c59b4acf5d
4 changed files with 57 additions and 10 deletions

View File

@ -18,6 +18,7 @@
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix cse
do_test cse-1.1 {
execsql {
@ -157,4 +158,43 @@ for {set i 1} {$i<100} {incr i} {
} $answer
}
#-------------------------------------------------------------------------
# Ticket fd1bda016d1a
#
reset_db
do_execsql_test 3.0 {
CREATE TABLE t1(a TEXT, b);
INSERT INTO t1 VALUES('hello', 0);
INSERT INTO t1 VALUES('world', 0);
CREATE TABLE t2(x TEXT);
INSERT INTO t2 VALUES('hello');
INSERT INTO t2 VALUES('world');
CREATE TABLE t3(y);
INSERT INTO t3 VALUES(1000);
} {}
do_execsql_test 3.1 {
SELECT 1000 = y FROM t3
} {1}
do_execsql_test 3.2 {
SELECT 1000 IN (SELECT x FROM t2), 1000 = y FROM t3
} {0 1}
do_execsql_test 3.3 {
SELECT 0 IN (SELECT a), (SELECT a LIMIT 0) FROM t1
} {0 {} 0 {}}
do_execsql_test 3.4 {
SELECT 0 IN (SELECT a) FROM t1 WHERE a = 'hello' OR (SELECT a LIMIT 0);
} {0}
do_execsql_test 3.5 {
CREATE TABLE v0(v1 VARCHAR0);
INSERT INTO v0 VALUES(2), (3);
SELECT 0 IN(SELECT v1) FROM v0 WHERE v1 = 2 OR(SELECT v1 LIMIT 0);
} {0}
finish_test