# 2014 June 17 # # 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 script is testing the FTS5 module. # source [file join [file dirname [info script]] fts5_common.tcl] set testprefix fts5leftjoin # If SQLITE_ENABLE_FTS5 is not defined, omit this file. ifcapable !fts5 { finish_test return } do_execsql_test 1.0 { CREATE VIRTUAL TABLE vt USING fts5(x); INSERT INTO vt VALUES('abc'); INSERT INTO vt VALUES('xyz'); CREATE TABLE t1(a INTEGER PRIMARY KEY); INSERT INTO t1 VALUES(1), (2); } do_execsql_test 1.1 { SELECT * FROM t1 LEFT JOIN ( SELECT rowid AS rrr, * FROM vt WHERE vt MATCH 'abc' ) ON t1.a = rrr } {1 1 abc 2 {} {}} do_execsql_test 1.2 { SELECT * FROM t1 LEFT JOIN vt ON (vt MATCH 'abc') } {1 abc 2 abc} do_execsql_test 1.3 { DELETE FROM t1; INSERT INTO t1 VALUES(14); } do_execsql_test 1.4 { SELECT * FROM vt LEFT JOIN t1 ON vt.rowid = 1; } { abc 14 xyz {} } #------------------------------------------------------------------------- reset_db do_execsql_test 2.0 { CREATE VIRTUAL TABLE t0 USING fts5(a,b); INSERT INTO t0(a,b)VALUES(1,0); CREATE TABLE t1(x); } do_execsql_test 2.1 { SELECT * FROM t0 LEFT JOIN t1; } {1 0 {}} breakpoint do_catchsql_test 2.2 { SELECT * FROM t0 LEFT JOIN t1 ON t0.b MATCH '1'; } {1 {no query solution}} do_execsql_test 2.3 { SELECT * FROM t0 LEFT JOIN t1 ON +b MATCH '1'; } {1 0 {}} #------------------------------------------------------------------------- reset_db do_execsql_test 3.0 { CREATE VIRTUAL TABLE t0 USING fts5(c0, c1); INSERT INTO t0(c0,c1) VALUES (1,0); } do_catchsql_test 3.1 { SELECT * FROM t0 LEFT JOIN ( SELECT 0 AS col_0 ) ON ((((t0.c1 MATCH '1')AND(CASE WHEN t0.c0 THEN CAST(t0.c1 AS INTEGER) ELSE 1 END)))); } {1 {no query solution}} finish_test