| # 2020-09-24 |
| # |
| # The author disclaims copyright to this source code. In place of |
| # a legal notice, here is a blessing: |
| # |
| # May you do good and not evil. |
| # May you find forgiveness for yourself and forgive others. |
| # May you share freely, never taking more than you give. |
| # |
| #*********************************************************************** |
| # This file implements tests for a strange scenario discovered by |
| # dbsqlfuzz (0ad6d441f9bf3dfc32626a9900bc1700495b16f9) in which a |
| # virtual table is named "sqlite_stat1". |
| # |
| |
| set testdir [file dirname $argv0] |
| source $testdir/tester.tcl |
| set testprefix vtabK |
| |
| ifcapable !vtab||!rtree||!fts5 { |
| finish_test |
| return |
| } |
| |
| do_execsql_test 100 { |
| CREATE TABLE t1(x); |
| INSERT INTO t1 VALUES(123); |
| PRAGMA writable_schema=ON; |
| CREATE VIRTUAL TABLE sqlite_stat1 USING fts5(a); |
| PRAGMA writable_schema=OFF; |
| CREATE VIRTUAL TABLE t3 USING fts5(b); |
| INSERT INTO t3 VALUES('this is a test'); |
| } |
| do_catchsql_test 110 { |
| CREATE VIRTUAL TABLE t2 USING rtree(id,x,y); |
| } {1 {no such column: stat}} |
| do_execsql_test 120 { |
| SELECT * FROM t1; |
| } {123} |
| do_execsql_test 130 { |
| INSERT INTO t3(b) VALUES('Four score and seven years ago'); |
| SELECT * FROM t3 WHERE t3 MATCH 'this'; |
| } {{this is a test}} |
| do_execsql_test 140 { |
| SELECT * FROM t3 WHERE t3 MATCH 'four seven'; |
| } {{Four score and seven years ago}} |
| do_execsql_test 150 { |
| INSERT INTO sqlite_stat1(a) |
| VALUES('We hold these truths to be self-evident...'); |
| SELECT * FROM sqlite_stat1; |
| } {{We hold these truths to be self-evident...}} |
| do_catchsql_test 160 { |
| ANALYZE; |
| } {1 {database disk image is malformed}} |
| do_execsql_test 170 { |
| PRAGMA integrity_check; |
| } {ok} |
| |
| # Follow-on dbsqlfuzz bc02a0cde82dee801a8d6f653d2831680f87dca1 |
| reset_db |
| do_execsql_test 200 { |
| CREATE TABLE t1(a); |
| INSERT INTO t1 VALUES('Ebed-malech'); |
| CREATE TABLE x(a); |
| PRAGMA writable_schema=ON; |
| CREATE VIRTUAL TABLE sqlite_stat1 USING fts5(a); |
| } {} |
| do_catchsql_test 210 { |
| CREATE VIRTUAL TABLE t2 USING rtree(id,x,y); |
| } {1 {no such column: stat}} |
| do_execsql_test 220 { |
| SELECT * FROM t1; |
| } {Ebed-malech} |
| |
| # Follow-on dbsqlfuzz a097eaad43c3c845b236126df92fb49b25449b0c |
| reset_db |
| do_catchsql_test 300 { |
| CREATE VIRTUAL TABLE t1 USING rtree(a,b,c); |
| CREATE TABLE t2(x); |
| ALTER TABLE t2 ADD d GENERATED ALWAYS AS (c IN (SELECT 1 FROM t1)) VIRTUAL; |
| } {1 {error in table t2 after add column: subqueries prohibited in generated columns}} |
| |
| finish_test |