xref: /sqlite-3.40.0/test/rowvalue3.test (revision ba00e30a)
1# 2016 June 17
2#
3# The author disclaims copyright to this source code.  In place of
4# a legal notice, here is a blessing:
5#
6#    May you do good and not evil.
7#    May you find forgiveness for yourself and forgive others.
8#    May you share freely, never taking more than you give.
9#
10#***********************************************************************
11# This file implements regression tests for SQLite library.  The
12# focus of this file is testing "(...) IN (SELECT ...)" expressions
13# where the SELECT statement returns more than one column.
14#
15
16set testdir [file dirname $argv0]
17source $testdir/tester.tcl
18set ::testprefix rowvalue3
19
20
21do_execsql_test 1.0 {
22  CREATE TABLE t1(a, b, c);
23  CREATE INDEX i1 ON t1(a, b);
24  INSERT INTO t1 VALUES(1, 2, 3);
25  INSERT INTO t1 VALUES(4, 5, 6);
26  INSERT INTO t1 VALUES(7, 8, 9);
27}
28
29foreach {tn sql res} {
30  1  "SELECT 1 WHERE (4, 5) IN (SELECT a, b FROM t1)"  1
31  2  "SELECT 1 WHERE (5, 5) IN (SELECT a, b FROM t1)"  {}
32  3  "SELECT 1 WHERE (5, 4) IN (SELECT a, b FROM t1)"  {}
33  4  "SELECT 1 WHERE (5, 4) IN (SELECT b, a FROM t1)"  1
34  5  "SELECT 1 WHERE (SELECT a, b FROM t1 WHERE c=6) IN (SELECT a, b FROM t1)" 1
35  6  "SELECT (5, 4) IN (SELECT a, b FROM t1)" 0
36  7  "SELECT 1 WHERE (5, 4) IN (SELECT +b, +a FROM t1)"  1
37  8  "SELECT (5, 4) IN (SELECT +b, +a FROM t1)"  1
38  9  "SELECT (1, 2) IN (SELECT rowid, b FROM t1)"  1
39  10 "SELECT 1 WHERE (1, 2) IN (SELECT rowid, b FROM t1)"  1
40  11 "SELECT 1 WHERE (1, NULL) IN (SELECT rowid, b FROM t1)"  {}
41} {
42  do_execsql_test 1.$tn $sql $res
43}
44
45#explain_i { SELECT (4, NULL) IN (SELECT a, b FROM t1) }
46#do_execsql_test 2 { SELECT (4, NULL) IN (SELECT a, b FROM t1) } {}
47
48
49
50
51finish_test
52
53