12a6a72a8Sdrh# 2020-09-24 22a6a72a8Sdrh# 32a6a72a8Sdrh# The author disclaims copyright to this source code. In place of 42a6a72a8Sdrh# a legal notice, here is a blessing: 52a6a72a8Sdrh# 62a6a72a8Sdrh# May you do good and not evil. 72a6a72a8Sdrh# May you find forgiveness for yourself and forgive others. 82a6a72a8Sdrh# May you share freely, never taking more than you give. 92a6a72a8Sdrh# 102a6a72a8Sdrh#*********************************************************************** 112a6a72a8Sdrh# This file implements tests for a strange scenario discovered by 122a6a72a8Sdrh# dbsqlfuzz (0ad6d441f9bf3dfc32626a9900bc1700495b16f9) in which a 132a6a72a8Sdrh# virtual table is named "sqlite_stat1". 142a6a72a8Sdrh# 152a6a72a8Sdrh 162a6a72a8Sdrhset testdir [file dirname $argv0] 172a6a72a8Sdrhsource $testdir/tester.tcl 182a6a72a8Sdrhset testprefix vtabK 192a6a72a8Sdrh 202a6a72a8Sdrhifcapable !vtab||!rtree||!fts5 { 212a6a72a8Sdrh finish_test 222a6a72a8Sdrh return 232a6a72a8Sdrh} 242a6a72a8Sdrh 252a6a72a8Sdrhdo_execsql_test 100 { 262a6a72a8Sdrh CREATE TABLE t1(x); 272a6a72a8Sdrh INSERT INTO t1 VALUES(123); 282a6a72a8Sdrh PRAGMA writable_schema=ON; 292a6a72a8Sdrh CREATE VIRTUAL TABLE sqlite_stat1 USING fts5(a); 302a6a72a8Sdrh PRAGMA writable_schema=OFF; 312a6a72a8Sdrh CREATE VIRTUAL TABLE t3 USING fts5(b); 322a6a72a8Sdrh INSERT INTO t3 VALUES('this is a test'); 332a6a72a8Sdrh} 342a6a72a8Sdrhdo_catchsql_test 110 { 352a6a72a8Sdrh CREATE VIRTUAL TABLE t2 USING rtree(id,x,y); 362a6a72a8Sdrh} {1 {no such column: stat}} 372a6a72a8Sdrhdo_execsql_test 120 { 382a6a72a8Sdrh SELECT * FROM t1; 392a6a72a8Sdrh} {123} 402a6a72a8Sdrhdo_execsql_test 130 { 412a6a72a8Sdrh INSERT INTO t3(b) VALUES('Four score and seven years ago'); 422a6a72a8Sdrh SELECT * FROM t3 WHERE t3 MATCH 'this'; 432a6a72a8Sdrh} {{this is a test}} 442a6a72a8Sdrhdo_execsql_test 140 { 452a6a72a8Sdrh SELECT * FROM t3 WHERE t3 MATCH 'four seven'; 462a6a72a8Sdrh} {{Four score and seven years ago}} 472a6a72a8Sdrhdo_execsql_test 150 { 482a6a72a8Sdrh INSERT INTO sqlite_stat1(a) 492a6a72a8Sdrh VALUES('We hold these truths to be self-evident...'); 502a6a72a8Sdrh SELECT * FROM sqlite_stat1; 512a6a72a8Sdrh} {{We hold these truths to be self-evident...}} 522a6a72a8Sdrhdo_catchsql_test 160 { 532a6a72a8Sdrh ANALYZE; 542a6a72a8Sdrh} {1 {database disk image is malformed}} 552a6a72a8Sdrhdo_execsql_test 170 { 562a6a72a8Sdrh PRAGMA integrity_check; 572a6a72a8Sdrh} {ok} 582a6a72a8Sdrh 59ebd1ff62Sdrh# Follow-on dbsqlfuzz bc02a0cde82dee801a8d6f653d2831680f87dca1 60ebd1ff62Sdrhreset_db 61ebd1ff62Sdrhdo_execsql_test 200 { 62ebd1ff62Sdrh CREATE TABLE t1(a); 63ebd1ff62Sdrh INSERT INTO t1 VALUES('Ebed-malech'); 64ebd1ff62Sdrh CREATE TABLE x(a); 65ebd1ff62Sdrh PRAGMA writable_schema=ON; 66ebd1ff62Sdrh CREATE VIRTUAL TABLE sqlite_stat1 USING fts5(a); 67ebd1ff62Sdrh} {} 68ebd1ff62Sdrhdo_catchsql_test 210 { 69ebd1ff62Sdrh CREATE VIRTUAL TABLE t2 USING rtree(id,x,y); 70ebd1ff62Sdrh} {1 {no such column: stat}} 71ebd1ff62Sdrhdo_execsql_test 220 { 72ebd1ff62Sdrh SELECT * FROM t1; 73ebd1ff62Sdrh} {Ebed-malech} 7484d90319Sdrh 7584d90319Sdrh# Follow-on dbsqlfuzz a097eaad43c3c845b236126df92fb49b25449b0c 7684d90319Sdrhreset_db 7784d90319Sdrhdo_catchsql_test 300 { 7884d90319Sdrh CREATE VIRTUAL TABLE t1 USING rtree(a,b,c); 7984d90319Sdrh CREATE TABLE t2(x); 8084d90319Sdrh ALTER TABLE t2 ADD d GENERATED ALWAYS AS (c IN (SELECT 1 FROM t1)) VIRTUAL; 81*ac894af8Sdrh} {1 {error in table t2 after add column: subqueries prohibited in generated columns}} 82ebd1ff62Sdrh 832a6a72a8Sdrhfinish_test 84