xref: /sqlite-3.40.0/test/vtabK.test (revision ac894af8)
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