Fix a parsing issue associated with a corrupt sqlite_master table.
[sqlite.git] / ext / fts5 / test / fts5colset.test
blob74f23004ac8f8d3bf4468f7a7cc61f24e0485838
1 # 2016 August 10
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #*************************************************************************
11 # This file implements regression tests for SQLite library.  The
12 # focus of this script is testing the FTS5 module.
15 source [file join [file dirname [info script]] fts5_common.tcl]
16 set testprefix fts5colset
18 # If SQLITE_ENABLE_FTS5 is not defined, omit this file.
19 ifcapable !fts5 {
20   finish_test
21   return
24 foreach_detail_mode $::testprefix {
25   if {[detail_is_none]} continue
27   do_execsql_test 1.0 {
28     CREATE VIRTUAL TABLE t1 USING fts5(a, b, c, d, detail=%DETAIL%);
29     INSERT INTO t1 VALUES('a', 'b', 'c', 'd');  -- 1
30     INSERT INTO t1 VALUES('d', 'a', 'b', 'c');  -- 2
31     INSERT INTO t1 VALUES('c', 'd', 'a', 'b');  -- 3
32     INSERT INTO t1 VALUES('b', 'c', 'd', 'a');  -- 4
33   }
35   foreach {tn q res} {
36     1 "a"          {1 2 3 4}
37     2 "{a}   : a"  {1}
38     3 "-{a}   : a" {2 3 4}
39     4 "- {a c} : a" {2 4}
40     5 " - {d d c} : a" {1 2}
41     6 "- {d c b a} : a" {}
42     7 "-{\"a\"} : b" {1 2 3}
43     8 "- c : a" {1 2 4}
44     9 "-c : a"  {1 2 4}
45     10 "-\"c\" : a"  {1 2 4}
46   } {
47     do_execsql_test 1.$tn {
48       SELECT rowid FROM t1($q)
49     } $res
50   }
52   foreach {tn q res} {
53     0 {{a} : (a AND ":")}     {}
54     1 "{a b c} : (a AND d)"   {2 3}
55     2 "{a b c} : (a AND b:d)" {3}
56     3 "{a b c} : (a AND d:d)" {}
57     4 "{b} : ( {b a} : ( {c b a} : ( {d b c a} : ( d OR c ) ) ) )" {3 4}
58     5 "{a} : ( {b a} : ( {c b a} : ( {d b c a} : ( d OR c ) ) ) )" {2 3}
59     6 "{a} : ( {b a} : ( {c b} : ( {d b c a} : ( d OR c ) ) ) )" {}
60     7 "{a b c} : (b:a AND c:b)" {2}
61   } {
62     do_execsql_test 2.$tn {
63       SELECT rowid FROM t1($q)
64     } $res
65   }
67   foreach {tn w res} {
68     0 "a MATCH 'a'" {1}
69     1 "b MATCH 'a'" {2}
70     2 "b MATCH '{a b c} : a'" {2}
71     3 "b MATCH 'a OR b'"      {1 2}
72     4 "b MATCH 'a OR a:b'"    {2}
73     5 "b MATCH 'a OR b:b'"    {1 2}
74   } {
75     do_execsql_test 3.$tn "
76       SELECT rowid FROM t1 WHERE $w
77     " $res
78   }
80   do_catchsql_test 4.1 {
81     SELECT * FROM t1 WHERE rowid MATCH 'a'
82   } {1 {unable to use function MATCH in the requested context}}
86 finish_test