xref: /sqlite-3.40.0/test/vtabK.test (revision ac894af8)
1# 2020-09-24
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 tests for a strange scenario discovered by
12# dbsqlfuzz (0ad6d441f9bf3dfc32626a9900bc1700495b16f9) in which a
13# virtual table is named "sqlite_stat1".
14#
15
16set testdir [file dirname $argv0]
17source $testdir/tester.tcl
18set testprefix vtabK
19
20ifcapable !vtab||!rtree||!fts5 {
21  finish_test
22  return
23}
24
25do_execsql_test 100 {
26  CREATE TABLE t1(x);
27  INSERT INTO t1 VALUES(123);
28  PRAGMA writable_schema=ON;
29  CREATE VIRTUAL TABLE sqlite_stat1 USING fts5(a);
30  PRAGMA writable_schema=OFF;
31  CREATE VIRTUAL TABLE t3 USING fts5(b);
32  INSERT INTO t3 VALUES('this is a test');
33}
34do_catchsql_test 110 {
35  CREATE VIRTUAL TABLE t2 USING rtree(id,x,y);
36} {1 {no such column: stat}}
37do_execsql_test 120 {
38  SELECT * FROM t1;
39} {123}
40do_execsql_test 130 {
41  INSERT INTO t3(b) VALUES('Four score and seven years ago');
42  SELECT * FROM t3 WHERE t3 MATCH 'this';
43} {{this is a test}}
44do_execsql_test 140 {
45  SELECT * FROM t3 WHERE t3 MATCH 'four seven';
46} {{Four score and seven years ago}}
47do_execsql_test 150 {
48  INSERT INTO sqlite_stat1(a)
49  VALUES('We hold these truths to be self-evident...');
50  SELECT * FROM sqlite_stat1;
51} {{We hold these truths to be self-evident...}}
52do_catchsql_test 160 {
53  ANALYZE;
54} {1 {database disk image is malformed}}
55do_execsql_test 170 {
56  PRAGMA integrity_check;
57} {ok}
58
59# Follow-on dbsqlfuzz bc02a0cde82dee801a8d6f653d2831680f87dca1
60reset_db
61do_execsql_test 200 {
62  CREATE TABLE t1(a);
63  INSERT INTO t1 VALUES('Ebed-malech');
64  CREATE TABLE x(a);
65  PRAGMA writable_schema=ON;
66  CREATE VIRTUAL TABLE sqlite_stat1 USING fts5(a);
67} {}
68do_catchsql_test 210 {
69  CREATE VIRTUAL TABLE t2 USING rtree(id,x,y);
70} {1 {no such column: stat}}
71do_execsql_test 220 {
72  SELECT * FROM t1;
73} {Ebed-malech}
74
75# Follow-on dbsqlfuzz a097eaad43c3c845b236126df92fb49b25449b0c
76reset_db
77do_catchsql_test 300 {
78  CREATE VIRTUAL TABLE t1 USING rtree(a,b,c);
79  CREATE TABLE t2(x);
80  ALTER TABLE t2 ADD d GENERATED ALWAYS AS (c IN (SELECT 1 FROM t1)) VIRTUAL;
81} {1 {error in table t2 after add column: subqueries prohibited in generated columns}}
82
83finish_test
84