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