c2909bf8ac
function. FossilOrigin-Name: 9bad745d373f4686a2726c3f77a2ccad60e7181645d7ed483a2e43075a4ef30c
969 lines
46 KiB
Plaintext
969 lines
46 KiB
Plaintext
# 2015 Apr 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 tests that FTS5 handles corrupt databases (i.e. internal
|
|
# inconsistencies in the backing tables) correctly. In this case
|
|
# "correctly" means without crashing.
|
|
#
|
|
|
|
source [file join [file dirname [info script]] fts5_common.tcl]
|
|
set testprefix fts5corrupt3
|
|
|
|
# If SQLITE_ENABLE_FTS5 is defined, omit this file.
|
|
ifcapable !fts5 {
|
|
finish_test
|
|
return
|
|
}
|
|
sqlite3_fts5_may_be_corrupt 1
|
|
|
|
proc create_t1 {} {
|
|
expr srand(0)
|
|
db func rnddoc fts5_rnddoc
|
|
db eval {
|
|
CREATE VIRTUAL TABLE t1 USING fts5(x);
|
|
INSERT INTO t1(t1, rank) VALUES('pgsz', 64);
|
|
WITH ii(i) AS (SELECT 1 UNION SELECT i+1 FROM ii WHERE i<100)
|
|
INSERT INTO t1 SELECT rnddoc(10) FROM ii;
|
|
}
|
|
}
|
|
|
|
if 1 {
|
|
|
|
# Create a simple FTS5 table containing 100 documents. Each document
|
|
# contains 10 terms, each of which start with the character "x".
|
|
#
|
|
do_test 1.0 { create_t1 } {}
|
|
|
|
do_test 1.1 {
|
|
# Pick out the rowid of the right-most b-tree leaf in the new segment.
|
|
set rowid [db one {
|
|
SELECT max(rowid) FROM t1_data WHERE ((rowid>>31) & 0x0F)==1
|
|
}]
|
|
set L [db one {SELECT length(block) FROM t1_data WHERE rowid = $rowid}]
|
|
set {} {}
|
|
} {}
|
|
|
|
sqlite3_db_config db DEFENSIVE 0
|
|
for {set i 0} {$i < $L} {incr i} {
|
|
do_test 1.2.$i {
|
|
catchsql {
|
|
BEGIN;
|
|
UPDATE t1_data SET block = substr(block, 1, $i) WHERE id = $rowid;
|
|
INSERT INTO t1(t1) VALUES('integrity-check');
|
|
}
|
|
} {1 {database disk image is malformed}}
|
|
catchsql ROLLBACK
|
|
}
|
|
|
|
#-------------------------------------------------------------------------
|
|
# Test that trailing bytes appended to the averages record are ignored.
|
|
#
|
|
do_execsql_test 2.1 {
|
|
CREATE VIRTUAL TABLE t2 USING fts5(x);
|
|
INSERT INTO t2 VALUES(rnddoc(10));
|
|
INSERT INTO t2 VALUES(rnddoc(10));
|
|
SELECT length(block) FROM t2_data WHERE id=1;
|
|
} {2}
|
|
do_execsql_test 2.2 {
|
|
UPDATE t2_data SET block = block || 'abcd' WHERE id=1;
|
|
SELECT length(block) FROM t2_data WHERE id=1;
|
|
} {6}
|
|
do_execsql_test 2.2 {
|
|
INSERT INTO t2 VALUES(rnddoc(10));
|
|
SELECT length(block) FROM t2_data WHERE id=1;
|
|
} {2}
|
|
|
|
|
|
#-------------------------------------------------------------------------
|
|
# Test that missing leaf pages are recognized as corruption.
|
|
#
|
|
reset_db
|
|
do_test 3.0 { create_t1 } {}
|
|
sqlite3_db_config db DEFENSIVE 0
|
|
|
|
do_execsql_test 3.1 {
|
|
SELECT count(*) FROM t1_data;
|
|
} {105}
|
|
|
|
proc do_3_test {tn} {
|
|
set i 0
|
|
foreach ::rowid [db eval "SELECT rowid FROM t1_data WHERE rowid>100"] {
|
|
incr i
|
|
do_test $tn.$i {
|
|
db eval BEGIN
|
|
db eval {DELETE FROM t1_data WHERE rowid = $::rowid}
|
|
list [
|
|
catch { db eval {SELECT rowid FROM t1 WHERE t1 MATCH 'x*'} } msg
|
|
] $msg
|
|
} {1 {database disk image is malformed}}
|
|
catch { db eval ROLLBACK }
|
|
}
|
|
}
|
|
|
|
do_3_test 3.2
|
|
|
|
do_execsql_test 3.3 {
|
|
INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
|
|
INSERT INTO t1 SELECT x FROM t1;
|
|
INSERT INTO t1(t1) VALUES('optimize');
|
|
} {}
|
|
|
|
do_3_test 3.4
|
|
|
|
do_test 3.5 {
|
|
execsql {
|
|
DELETE FROM t1;
|
|
INSERT INTO t1(t1, rank) VALUES('pgsz', 40);
|
|
}
|
|
for {set i 0} {$i < 1000} {incr i} {
|
|
set rnd [expr int(rand() * 1000)]
|
|
set doc [string repeat "x$rnd " [expr int(rand() * 3) + 1]]
|
|
execsql { INSERT INTO t1(rowid, x) VALUES($i, $doc) }
|
|
}
|
|
} {}
|
|
|
|
do_3_test 3.6
|
|
|
|
do_test 3.7 {
|
|
execsql {
|
|
INSERT INTO t1(t1, rank) VALUES('pgsz', 40);
|
|
INSERT INTO t1 SELECT x FROM t1;
|
|
INSERT INTO t1(t1) VALUES('optimize');
|
|
}
|
|
} {}
|
|
|
|
do_3_test 3.8
|
|
|
|
do_test 3.9 {
|
|
execsql {
|
|
DELETE FROM t1;
|
|
INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
|
|
}
|
|
for {set i 0} {$i < 100} {incr i} {
|
|
set rnd [expr int(rand() * 100)]
|
|
set doc "x[string repeat $rnd 20]"
|
|
execsql { INSERT INTO t1(rowid, x) VALUES($i, $doc) }
|
|
}
|
|
} {}
|
|
|
|
do_3_test 3.10
|
|
|
|
#-------------------------------------------------------------------------
|
|
# Test that segments that end unexpectedly are identified as corruption.
|
|
#
|
|
reset_db
|
|
sqlite3_db_config db DEFENSIVE 0
|
|
do_test 4.0 {
|
|
execsql {
|
|
CREATE VIRTUAL TABLE t1 USING fts5(x);
|
|
INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
|
|
}
|
|
for {set i 0} {$i < 100} {incr i} {
|
|
set rnd [expr int(rand() * 100)]
|
|
set doc "x[string repeat $rnd 20]"
|
|
execsql { INSERT INTO t1(rowid, x) VALUES($i, $doc) }
|
|
}
|
|
execsql { INSERT INTO t1(t1) VALUES('optimize') }
|
|
} {}
|
|
|
|
set nErr 0
|
|
for {set i 1} {1} {incr i} {
|
|
set struct [db one {SELECT block FROM t1_data WHERE id=10}]
|
|
binary scan $struct c* var
|
|
set end [lindex $var end]
|
|
if {$end<=$i} break
|
|
lset var end [expr $end - $i]
|
|
set struct [binary format c* $var]
|
|
|
|
db close
|
|
sqlite3 db test.db
|
|
sqlite3_db_config db DEFENSIVE 0
|
|
|
|
db eval {
|
|
BEGIN;
|
|
UPDATE t1_data SET block = $struct WHERE id=10;
|
|
}
|
|
do_test 4.1.$i {
|
|
incr nErr [catch { db eval { SELECT rowid FROM t1 WHERE t1 MATCH 'x*' } }]
|
|
set {} {}
|
|
} {}
|
|
catch { db eval ROLLBACK }
|
|
}
|
|
do_test 4.1.x { expr $nErr>45 } 1
|
|
|
|
#-------------------------------------------------------------------------
|
|
#
|
|
|
|
# The first argument passed to this command must be a binary blob
|
|
# containing an FTS5 leaf page. This command returns a copy of this
|
|
# blob, with the pgidx of the leaf page replaced by a single varint
|
|
# containing value $iVal.
|
|
#
|
|
proc rewrite_pgidx {blob iVal} {
|
|
binary scan $blob SS off1 szLeaf
|
|
if {$iVal<0 || $iVal>=128} {
|
|
error "$iVal out of range!"
|
|
} else {
|
|
set pgidx [binary format c $iVal]
|
|
}
|
|
|
|
binary format a${szLeaf}a* $blob $pgidx
|
|
}
|
|
|
|
reset_db
|
|
do_execsql_test 5.1 {
|
|
CREATE VIRTUAL TABLE x1 USING fts5(x);
|
|
INSERT INTO x1(x1, rank) VALUES('pgsz', 40);
|
|
BEGIN;
|
|
INSERT INTO x1 VALUES('xaaa xabb xccc xcdd xeee xeff xggg xghh xiii xijj');
|
|
INSERT INTO x1 SELECT x FROM x1;
|
|
INSERT INTO x1 SELECT x FROM x1;
|
|
INSERT INTO x1 SELECT x FROM x1;
|
|
INSERT INTO x1 SELECT x FROM x1;
|
|
INSERT INTO x1(x1) VALUES('optimize');
|
|
COMMIT;
|
|
}
|
|
|
|
#db eval { SELECT fts5_decode(id, block) b from x1_data } { puts $b }
|
|
#
|
|
db func rewrite_pgidx rewrite_pgidx
|
|
set i 0
|
|
foreach rowid [db eval {SELECT rowid FROM x1_data WHERE rowid>100}] {
|
|
foreach val {2 100} {
|
|
do_test 5.2.$val.[incr i] {
|
|
catchsql {
|
|
BEGIN;
|
|
UPDATE x1_data SET block=rewrite_pgidx(block, $val) WHERE id=$rowid;
|
|
SELECT rowid FROM x1 WHERE x1 MATCH 'xa*';
|
|
SELECT rowid FROM x1 WHERE x1 MATCH 'xb*';
|
|
SELECT rowid FROM x1 WHERE x1 MATCH 'xc*';
|
|
SELECT rowid FROM x1 WHERE x1 MATCH 'xd*';
|
|
SELECT rowid FROM x1 WHERE x1 MATCH 'xe*';
|
|
SELECT rowid FROM x1 WHERE x1 MATCH 'xf*';
|
|
SELECT rowid FROM x1 WHERE x1 MATCH 'xg*';
|
|
SELECT rowid FROM x1 WHERE x1 MATCH 'xh*';
|
|
SELECT rowid FROM x1 WHERE x1 MATCH 'xi*';
|
|
}
|
|
set {} {}
|
|
} {}
|
|
catch { db eval ROLLBACK }
|
|
}
|
|
}
|
|
|
|
#------------------------------------------------------------------------
|
|
#
|
|
reset_db
|
|
sqlite3_db_config db DEFENSIVE 0
|
|
do_execsql_test 6.1.0 {
|
|
CREATE VIRTUAL TABLE t1 USING fts5(a);
|
|
INSERT INTO t1 VALUES('bbbbb ccccc');
|
|
SELECT quote(block) FROM t1_data WHERE rowid>100;
|
|
} {X'000000180630626262626201020201056363636363010203040A'}
|
|
do_execsql_test 6.1.1 {
|
|
UPDATE t1_data SET block =
|
|
X'000000180630626262626201020201056161616161010203040A'
|
|
WHERE rowid>100;
|
|
}
|
|
do_catchsql_test 6.1.2 {
|
|
INSERT INTO t1(t1) VALUES('integrity-check');
|
|
} {1 {database disk image is malformed}}
|
|
|
|
#-------
|
|
reset_db
|
|
sqlite3_db_config db DEFENSIVE 0
|
|
do_execsql_test 6.2.0 {
|
|
CREATE VIRTUAL TABLE t1 USING fts5(a);
|
|
INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
|
|
INSERT INTO t1 VALUES('aa bb cc dd ee');
|
|
SELECT pgno, quote(term) FROM t1_idx;
|
|
} {2 X'' 4 X'3064'}
|
|
do_execsql_test 6.2.1 {
|
|
UPDATE t1_idx SET term = X'3065' WHERE pgno=4;
|
|
}
|
|
do_catchsql_test 6.2.2 {
|
|
INSERT INTO t1(t1) VALUES('integrity-check');
|
|
} {1 {database disk image is malformed}}
|
|
|
|
#-------
|
|
reset_db
|
|
sqlite3_db_config db DEFENSIVE 0
|
|
do_execsql_test 6.3.0 {
|
|
CREATE VIRTUAL TABLE t1 USING fts5(a);
|
|
INSERT INTO t1 VALUES('abc abcdef abcdefghi');
|
|
SELECT quote(block) FROM t1_data WHERE id>100;
|
|
} {X'0000001C043061626301020204036465660102030703676869010204040808'}
|
|
do_execsql_test 6.3.1 {
|
|
BEGIN;
|
|
UPDATE t1_data SET block =
|
|
X'0000001C043061626301020204036465660102035003676869010204040808'
|
|
------------------------------------------^^---------------------
|
|
WHERE id>100;
|
|
}
|
|
do_catchsql_test 6.3.2 {
|
|
INSERT INTO t1(t1) VALUES('integrity-check');
|
|
} {1 {database disk image is malformed}}
|
|
do_execsql_test 6.3.3 {
|
|
ROLLBACK;
|
|
BEGIN;
|
|
UPDATE t1_data SET block =
|
|
X'0000001C043061626301020204036465660102030750676869010204040808'
|
|
--------------------------------------------^^-------------------
|
|
WHERE id>100;
|
|
}
|
|
do_catchsql_test 6.3.3 {
|
|
INSERT INTO t1(t1) VALUES('integrity-check');
|
|
} {1 {database disk image is malformed}}
|
|
do_execsql_test 6.3.4 {
|
|
ROLLBACK;
|
|
BEGIN;
|
|
UPDATE t1_data SET block =
|
|
X'0000001C043061626301020204036465660102030707676869010204040850'
|
|
--------------------------------------------------------------^^-
|
|
WHERE id>100;
|
|
}
|
|
do_catchsql_test 6.3.5 {
|
|
INSERT INTO t1(t1) VALUES('integrity-check');
|
|
} {1 {database disk image is malformed}}
|
|
do_execsql_test 6.3.6 {
|
|
ROLLBACK;
|
|
BEGIN;
|
|
UPDATE t1_data SET block =
|
|
X'0000001C503061626301020204036465660102030707676869010204040808'
|
|
----------^^-----------------------------------------------------
|
|
WHERE id>100;
|
|
}
|
|
do_catchsql_test 6.3.5 {
|
|
INSERT INTO t1(t1) VALUES('integrity-check');
|
|
} {1 {database disk image is malformed}}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
#
|
|
reset_db
|
|
proc rnddoc {n} {
|
|
set map [list a b c d]
|
|
set doc [list]
|
|
for {set i 0} {$i < $n} {incr i} {
|
|
lappend doc "x[lindex $map [expr int(rand()*4)]]"
|
|
}
|
|
set doc
|
|
}
|
|
|
|
db func rnddoc rnddoc
|
|
do_test 7.0 {
|
|
execsql {
|
|
CREATE VIRTUAL TABLE t5 USING fts5(x);
|
|
INSERT INTO t5 VALUES( rnddoc(10000) );
|
|
INSERT INTO t5 VALUES( rnddoc(10000) );
|
|
INSERT INTO t5 VALUES( rnddoc(10000) );
|
|
INSERT INTO t5 VALUES( rnddoc(10000) );
|
|
INSERT INTO t5(t5) VALUES('optimize');
|
|
}
|
|
} {}
|
|
|
|
sqlite3_db_config db DEFENSIVE 0
|
|
do_test 7.1 {
|
|
foreach i [db eval { SELECT rowid FROM t5_data WHERE rowid>100 }] {
|
|
db eval BEGIN
|
|
db eval {DELETE FROM t5_data WHERE rowid = $i}
|
|
set r [catchsql { INSERT INTO t5(t5) VALUES('integrity-check')} ]
|
|
if {$r != "1 {database disk image is malformed}"} { error $r }
|
|
db eval ROLLBACK
|
|
}
|
|
} {}
|
|
|
|
}
|
|
|
|
#------------------------------------------------------------------------
|
|
# Corruption within the structure record.
|
|
#
|
|
reset_db
|
|
do_execsql_test 8.1 {
|
|
CREATE VIRTUAL TABLE t1 USING fts5(x, y);
|
|
INSERT INTO t1 VALUES('one', 'two');
|
|
}
|
|
|
|
sqlite3_db_config db DEFENSIVE 0
|
|
do_test 9.1.1 {
|
|
set blob "12345678" ;# cookie
|
|
append blob "0105" ;# 1 level, total of 5 segments
|
|
append blob "06" ;# write counter
|
|
append blob "0002" ;# first level has 0 segments merging, 2 other.
|
|
append blob "450108" ;# first segment
|
|
execsql "REPLACE INTO t1_data VALUES(10, X'$blob')"
|
|
} {}
|
|
do_catchsql_test 9.1.2 {
|
|
SELECT * FROM t1('one AND two');
|
|
} {1 {database disk image is malformed}}
|
|
|
|
do_test 9.2.1 {
|
|
set blob "12345678" ;# cookie
|
|
append blob "0205" ;# 2 levels, total of 5 segments
|
|
append blob "06" ;# write counter
|
|
append blob "0001" ;# first level has 0 segments merging, 1 other.
|
|
append blob "450108" ;# first segment
|
|
execsql "REPLACE INTO t1_data VALUES(10, X'$blob')"
|
|
} {}
|
|
do_catchsql_test 9.2.2 {
|
|
SELECT * FROM t1('one AND two');
|
|
} {1 {database disk image is malformed}}
|
|
|
|
#-------------------------------------------------------------------------
|
|
reset_db
|
|
do_test 10.0 {
|
|
sqlite3 db {}
|
|
db deserialize [decode_hexdb {
|
|
| size 32768 pagesize 4096 filename c9.db
|
|
| page 1 offset 0
|
|
| 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3.
|
|
| 16: 10 00 01 01 00 40 20 20 00 00 00 00 00 00 00 07 .....@ ........
|
|
| 32: 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 04 ................
|
|
| 48: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 ................
|
|
| 96: 00 00 00 00 0d 00 00 00 07 0d d2 00 0f c4 0f 6d ...............m
|
|
| 112: 0f 02 0e ab 0e 4e 0d f6 0d d2 00 00 00 00 00 00 .....N..........
|
|
| 3536: 00 00 22 07 06 17 11 11 01 31 74 61 62 6c 65 74 .........1tablet
|
|
| 3552: 32 74 32 07 43 52 45 41 54 45 20 54 41 42 4c 45 2t2.CREATE TABLE
|
|
| 3568: 20 74 32 28 78 29 56 06 06 17 1f 1f 01 7d 74 61 t2(x)V.......ta
|
|
| 3584: 62 6c 65 74 31 5f 63 6f 6e 66 69 67 74 31 5f 63 blet1_configt1_c
|
|
| 3600: 6f 6e 66 69 67 06 43 52 45 41 54 45 20 54 41 42 onfig.CREATE TAB
|
|
| 3616: 4c 45 20 27 74 31 5f 63 6f 6e 66 69 67 27 28 6b LE 't1_config'(k
|
|
| 3632: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 76 29 PRIMARY KEY, v)
|
|
| 3648: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5b 05 WITHOUT ROWID[.
|
|
| 3664: 07 17 21 21 01 81 01 74 61 62 6c 65 74 31 5f 64 ..!!...tablet1_d
|
|
| 3680: 6f 63 73 69 7a 65 74 31 5f 64 6f 63 73 69 7a 65 ocsizet1_docsize
|
|
| 3696: 05 43 52 45 41 54 45 20 54 41 42 4c 45 20 27 74 .CREATE TABLE 't
|
|
| 3712: 31 5f 64 6f 63 73 69 7a 65 27 28 69 64 20 49 4e 1_docsize'(id IN
|
|
| 3728: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
|
|
| 3744: 59 2c 20 73 7a 20 42 4c 4f 42 29 55 04 06 17 21 Y, sz BLOB)U...!
|
|
| 3760: 21 01 77 74 61 62 6c 65 74 31 5f 63 6f 6e 74 65 !.wtablet1_conte
|
|
| 3776: 6e 74 74 31 5f 63 6f 6e 74 65 6e 74 04 43 52 45 ntt1_content.CRE
|
|
| 3792: 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 63 6f ATE TABLE 't1_co
|
|
| 3808: 6e 74 65 6e 74 27 28 69 64 20 49 4e 54 45 47 45 ntent'(id INTEGE
|
|
| 3824: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 R PRIMARY KEY, c
|
|
| 3840: 30 29 69 03 07 17 19 19 01 81 2d 74 61 62 6c 65 0)i.......-table
|
|
| 3856: 74 31 5f 69 64 78 74 31 5f 69 64 78 03 43 52 45 t1_idxt1_idx.CRE
|
|
| 3872: 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 69 64 ATE TABLE 't1_id
|
|
| 3888: 78 27 28 73 65 67 69 64 2c 20 74 65 72 6d 2c 20 x'(segid, term,
|
|
| 3904: 70 67 6e 6f 2c 20 50 52 49 4d 41 52 59 20 4b 45 pgno, PRIMARY KE
|
|
| 3920: 59 28 73 65 67 69 64 2c 20 74 65 72 6d 29 29 20 Y(segid, term))
|
|
| 3936: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 55 02 07 WITHOUT ROWIDU..
|
|
| 3952: 17 1b 1b 01 81 01 74 61 62 6c 65 74 31 5f 64 61 ......tablet1_da
|
|
| 3968: 74 61 74 31 5f 64 61 74 61 02 43 52 45 41 54 45 tat1_data.CREATE
|
|
| 3984: 20 54 41 42 4c 45 20 27 74 31 5f 64 61 74 61 27 TABLE 't1_data'
|
|
| 4000: 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d (id INTEGER PRIM
|
|
| 4016: 41 52 59 20 4b 45 59 2c 20 62 6c 6f 63 6b 20 42 ARY KEY, block B
|
|
| 4032: 4c 4f 42 29 3a 01 06 17 11 11 08 63 74 61 62 6c LOB):......ctabl
|
|
| 4048: 65 74 31 74 31 43 52 45 41 54 45 20 56 49 52 54 et1t1CREATE VIRT
|
|
| 4064: 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49 UAL TABLE t1 USI
|
|
| 4080: 4e 47 20 66 74 73 35 28 63 6f 6e 74 65 6e 74 29 NG fts5(content)
|
|
| page 2 offset 4096
|
|
| 0: 0d 00 00 00 03 0f bd 00 0f e8 0f ef 0f bd 00 00 ................
|
|
| 4016: 00 00 00 00 00 00 00 00 00 00 00 00 00 24 84 80 .............$..
|
|
| 4032: 80 80 80 01 03 00 4e 00 00 00 1e 06 30 61 62 61 ......N.....0aba
|
|
| 4048: 63 6b 01 02 02 04 02 66 74 02 06 36 b0 a0 10 21 ck.....ft..6...!
|
|
| 4064: d6 f7 07 46 96 d6 97 a6 05 01 03 00 10 03 03 0f ...F............
|
|
| 4080: 0a 03 00 24 00 00 00 00 01 01 01 00 01 01 01 01 ...$............
|
|
| page 3 offset 8192
|
|
| 0: 0a 00 00 00 01 0f fa 00 0f fa 00 00 00 00 00 00 ................
|
|
| 4080: 00 00 00 00 00 00 00 00 00 00 05 04 09 0c 01 02 ................
|
|
| page 4 offset 12288
|
|
| 0: 0d 00 00 00 03 0f e0 00 0f f6 0f ec 0f e0 00 00 ................
|
|
| 4064: 0a 03 03 00 1b 61 62 61 6e 64 6f 6e 08 02 03 00 .....abandon....
|
|
| 4080: 17 61 62 61 66 74 08 01 03 00 17 61 62 61 63 6b .abaft.....aback
|
|
| page 5 offset 16384
|
|
| 0: 0d 00 00 00 03 0f ee 00 0f fa 0f f4 0f ee 00 00 ................
|
|
| 4064: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 03 ................
|
|
| 4080: 03 00 0e 01 04 02 03 00 0e 01 04 01 03 00 0e 01 ................
|
|
| page 6 offset 20480
|
|
| 0: 0a 00 00 00 01 0f f4 00 0f f4 00 00 00 00 00 00 ................
|
|
| 4080: 00 00 00 00 0b 03 1b 01 76 65 72 73 69 6f 6e 04 ........version.
|
|
| page 7 offset 24576
|
|
| 0: 0d 00 00 00 03 0f d6 00 0f f4 0f e1 0f d6 00 00 ................
|
|
| 4048: 00 00 00 00 00 00 09 03 02 1b 72 65 62 75 69 6c ..........rebuil
|
|
| 4064: 64 11 02 02 2b 69 6e 74 65 67 72 69 74 79 2d 63 d...+integrity-c
|
|
| 4080: 68 65 62 6c 65 74 31 74 31 43 52 45 41 54 45 20 heblet1t1CREATE
|
|
| page 8 offset 28672
|
|
| 0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31 VIRTUAL TABLE t1
|
|
| 16: 20 55 53 49 4e 47 20 66 74 73 35 28 63 6f 6e 74 USING fts5(cont
|
|
| 32: 65 6e 74 29 0d 00 00 00 03 0f bd 00 0f e8 0f ef ent)............
|
|
| 48: 0f bd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
| end c9.db
|
|
}]
|
|
} {}
|
|
do_catchsql_test 10.1 {
|
|
SELECT * FROM t1 WHERE t1 MATCH 'abandon';
|
|
} {1 {database disk image is malformed}}
|
|
|
|
#-------------------------------------------------------------------------
|
|
#
|
|
reset_db
|
|
do_test 11.0 {
|
|
sqlite3 db {}
|
|
db deserialize [decode_hexdb {
|
|
| size 28672 pagesize 4096 filename c10b.db
|
|
| page 1 offset 0
|
|
| 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3.
|
|
| 16: 10 00 01 01 00 40 20 20 00 00 00 01 00 00 00 07 .....@ ........
|
|
| 32: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 ................
|
|
| 48: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 ................
|
|
| 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ................
|
|
| 96: 00 2e 30 38 0d 00 00 00 07 0d d2 00 0f c4 0f 6d ..08...........m
|
|
| 112: 0f 02 0e ab 0e 4e 0d f6 0d d2 00 00 00 00 00 00 .....N..........
|
|
| 3536: 00 00 22 07 06 17 11 11 01 31 74 61 62 6c 65 74 .........1tablet
|
|
| 3552: 32 74 32 07 43 52 45 41 54 45 20 54 41 42 4c 45 2t2.CREATE TABLE
|
|
| 3568: 20 74 32 28 78 29 56 06 06 17 1f 1f 01 7d 74 61 t2(x)V.......ta
|
|
| 3584: 62 6c 65 74 31 5f 63 6f 6e 66 69 67 74 31 5f 63 blet1_configt1_c
|
|
| 3600: 6f 6e 66 69 67 06 43 52 45 41 54 45 20 54 41 42 onfig.CREATE TAB
|
|
| 3616: 4c 45 20 27 74 31 5f 63 6f 6e 66 69 67 27 28 6b LE 't1_config'(k
|
|
| 3632: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 76 29 PRIMARY KEY, v)
|
|
| 3648: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5b 05 WITHOUT ROWID[.
|
|
| 3664: 07 17 21 21 01 81 01 74 61 62 6c 65 74 31 5f 64 ..!!...tablet1_d
|
|
| 3680: 6f 63 73 69 7a 65 74 31 5f 64 6f 63 73 69 7a 65 ocsizet1_docsize
|
|
| 3696: 05 43 52 45 41 54 45 20 54 41 42 4c 45 20 27 74 .CREATE TABLE 't
|
|
| 3712: 31 5f 64 6f 63 73 69 7a 65 27 28 69 64 20 49 4e 1_docsize'(id IN
|
|
| 3728: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
|
|
| 3744: 59 2c 20 73 7a 20 42 4c 4f 42 29 55 04 06 17 21 Y, sz BLOB)U...!
|
|
| 3760: 21 01 77 74 61 62 6c 65 74 31 5f 63 6f 6e 74 65 !.wtablet1_conte
|
|
| 3776: 6e 74 74 31 5f 63 6f 6e 74 65 6e 74 04 43 52 45 ntt1_content.CRE
|
|
| 3792: 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 63 6f ATE TABLE 't1_co
|
|
| 3808: 6e 74 65 6e 74 27 28 69 64 20 49 4e 54 45 47 45 ntent'(id INTEGE
|
|
| 3824: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 R PRIMARY KEY, c
|
|
| 3840: 30 29 69 03 07 17 19 19 01 81 2d 74 61 62 6c 65 0)i.......-table
|
|
| 3856: 74 31 5f 69 64 78 74 31 5f 69 64 78 03 43 52 45 t1_idxt1_idx.CRE
|
|
| 3872: 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 69 64 ATE TABLE 't1_id
|
|
| 3888: 78 27 28 73 65 67 69 64 2c 20 74 65 72 6d 2c 20 x'(segid, term,
|
|
| 3904: 70 67 6e 6f 2c 20 50 52 49 4d 41 52 59 20 4b 45 pgno, PRIMARY KE
|
|
| 3920: 59 28 73 65 67 69 64 2c 20 74 65 72 6d 29 29 20 Y(segid, term))
|
|
| 3936: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 55 02 07 WITHOUT ROWIDU..
|
|
| 3952: 17 1b 1b 01 81 01 74 61 62 6c 65 74 31 5f 64 61 ......tablet1_da
|
|
| 3968: 74 61 74 31 5f 64 61 74 61 02 43 52 45 41 54 45 tat1_data.CREATE
|
|
| 3984: 20 54 41 42 4c 45 20 27 74 31 5f 64 61 74 61 27 TABLE 't1_data'
|
|
| 4000: 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 44 d9 (id INTEGER PRD.
|
|
| 4016: 41 52 59 20 4b 45 59 2c 20 62 6c 6f 63 6b 20 42 ARY KEY, block B
|
|
| 4032: 4c 4f 42 29 3a 01 06 17 11 11 08 63 74 61 62 6c LOB):......ctabl
|
|
| 4048: 65 74 31 74 31 43 52 45 41 54 45 20 56 49 52 54 et1t1CREATE VIRT
|
|
| 4064: 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49 UAL TABLE t1 USI
|
|
| 4080: 4e 47 20 66 74 73 35 28 63 6f 6e 74 65 6e 74 29 NG fts5(content)
|
|
| page 2 offset 4096
|
|
| 0: 0d 00 00 00 06 0f 59 00 0f e8 0f ef 0f bd 0f b0 ......Y.........
|
|
| 16: 0f 73 0f 59 00 00 00 00 00 00 00 00 00 00 00 00 .s.Y............
|
|
| 3920: 00 00 00 00 00 00 00 00 00 13 84 80 80 80 80 04 ................
|
|
| 3936: 03 01 2a 0a 00 00 00 00 01 02 02 00 02 01 01 01 ..*.............
|
|
| 3952: 02 01 01 36 84 80 80 80 80 03 03 05 66 00 40 00 ...6........f.@.
|
|
| 3968: 00 00 01 00 00 00 29 07 30 61 63 74 69 76 65 04 ......).0active.
|
|
| 3984: 02 02 02 03 74 6f 6d 06 02 02 05 02 69 63 07 02 ....tom.....ic..
|
|
| 4000: 02 01 06 62 6f 6f 6d 65 72 05 02 02 04 0b 08 07 ...boomer.......
|
|
| 4016: 06 84 80 80 80 80 02 03 01 10 01 07 07 24 84 80 .............$..
|
|
| 4032: 80 80 80 01 03 00 4e 00 00 00 1e 06 30 61 62 61 ......N.....0aba
|
|
| 4048: 63 6b 01 02 02 04 02 66 74 02 02 02 04 04 6e 64 ck.....ft.....nd
|
|
| 4064: 6f 6e 03 02 02 04 0a 07 05 01 03 00 10 03 03 0f on..............
|
|
| 4080: 0a 03 00 24 00 00 00 00 01 01 01 00 01 01 01 01 ...$............
|
|
| page 3 offset 8192
|
|
| 0: 0a 00 00 00 02 0f f3 00 0f fa 0f f3 00 00 00 00 ................
|
|
| 4080: 00 00 00 06 04 01 0c 01 02 02 05 04 09 0c 01 02 ................
|
|
| page 4 offset 12288
|
|
| 0: 0d 00 00 00 07 0f b6 00 0f f6 0f ec 0f e0 0f d5 ................
|
|
| 16: 0f ca 0f c1 0f b6 00 00 00 00 00 00 00 00 00 00 ................
|
|
| 4016: 00 00 00 00 00 00 09 07 03 00 19 61 74 6f 6d 69 ...........atomi
|
|
| 4032: 63 07 06 03 00 15 61 74 6f 6d 09 05 03 00 19 62 c.....atom.....b
|
|
| 4048: 6f 6f 6d 65 72 09 04 03 00 19 61 63 74 69 76 65 oomer.....active
|
|
| 4064: 0a 03 03 00 1b 61 62 61 6e 64 6f 6e 08 02 03 00 .....abandon....
|
|
| 4080: 17 61 62 61 66 74 08 01 03 00 17 61 62 61 63 6b .abaft.....aback
|
|
| page 5 offset 16384
|
|
| 0: 0d 00 00 00 07 0f d6 00 0f fa 0f f4 0f ee 0f e8 ................
|
|
| 16: 0f e2 0f dc 0f d6 00 00 00 00 00 00 00 00 00 00 ................
|
|
| 4048: 00 00 00 00 00 00 04 07 03 00 0e 01 04 06 03 00 ................
|
|
| 4064: 0e 01 04 05 03 00 0e 01 04 04 03 00 0e 01 04 03 ................
|
|
| 4080: 03 00 0e 01 04 02 03 00 0e 01 04 01 03 00 0e 01 ................
|
|
| page 6 offset 20480
|
|
| 0: 0a 00 00 00 01 0f f4 00 0f f4 00 00 00 00 00 00 ................
|
|
| 4080: 00 00 00 00 0b 03 1b 01 76 65 72 73 69 6f 6e 04 ........version.
|
|
| page 7 offset 24576
|
|
| 0: 0d 00 00 00 03 0f d6 00 0f f4 0f e1 0f d6 00 00 ................
|
|
| 4048: 00 00 00 00 00 00 09 03 02 1b 72 65 62 75 69 6c ..........rebuil
|
|
| 4064: 64 11 02 02 2b 69 6e 74 65 67 72 69 74 79 2d 63 d...+integrity-c
|
|
| 4080: 68 65 63 6b 0a 01 02 1d 6f 70 74 69 6d 69 7a 65 heck....optimize
|
|
| end c10b.db
|
|
}]} {}
|
|
|
|
# This returns SQLITE_CONSTRAINT instead of SQLITE_CORRUPT. The problem is
|
|
# that the corrupted structure-record leads fts5 to try to use a segment-id
|
|
# that is already in use. This is caught by the PRIMARY KEY constraint on
|
|
# the %_idx table.
|
|
#
|
|
do_catchsql_test 11.1 {
|
|
UPDATE t1 SET content='abc' WHERE content='boomer';
|
|
} {1 {constraint failed}}
|
|
|
|
#-------------------------------------------------------------------------
|
|
#
|
|
reset_db
|
|
do_test 12.0 {
|
|
sqlite3 db {}
|
|
db deserialize [decode_hexdb {
|
|
| size 28672 pagesize 4096 filename c2.db
|
|
| page 1 offset 0
|
|
| 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3.
|
|
| 16: 10 00 01 01 00 40 20 20 00 00 00 00 00 00 00 07 .....@ ........
|
|
| 32: 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 ................
|
|
| 48: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 ................
|
|
| 96: 00 00 00 00 0d 00 00 00 07 0d d2 00 0f c4 0f 6d ...............m
|
|
| 112: 0f 02 0e ab 0e 4e 0d f6 0d d2 00 00 00 00 00 00 .....N..........
|
|
| 3536: 00 00 22 07 06 17 11 11 01 31 74 61 62 6c 65 74 .........1tablet
|
|
| 3552: 32 74 32 07 43 52 45 41 54 45 20 54 41 42 4c 45 2t2.CREATE TABLE
|
|
| 3568: 20 74 32 28 78 29 56 06 06 17 1f 1f 01 7d 74 61 t2(x)V.......ta
|
|
| 3584: 62 6c 65 74 31 5f 63 6f 6e 66 69 67 74 31 5f 63 blet1_configt1_c
|
|
| 3600: 6f 6e 66 69 67 06 43 52 45 41 54 45 20 54 41 42 onfig.CREATE TAB
|
|
| 3616: 4c 45 20 27 74 31 5f 63 6f 6e 66 69 67 27 28 6b LE 't1_config'(k
|
|
| 3632: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 76 29 PRIMARY KEY, v)
|
|
| 3648: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5b 05 WITHOUT ROWID[.
|
|
| 3664: 07 17 21 21 01 81 01 74 61 62 6c 65 74 31 5f 64 ..!!...tablet1_d
|
|
| 3680: 6f 63 73 69 7a 65 74 31 5f 64 6f 63 73 69 7a 65 ocsizet1_docsize
|
|
| 3696: 05 43 52 45 41 54 45 20 54 41 42 4c 45 20 27 74 .CREATE TABLE 't
|
|
| 3712: 31 5f 64 6f 63 73 69 7a 65 27 28 69 64 20 49 4e 1_docsize'(id IN
|
|
| 3728: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
|
|
| 3744: 59 2c 20 73 7a 20 42 4c 4f 42 29 55 04 06 17 21 Y, sz BLOB)U...!
|
|
| 3760: 21 01 77 74 61 62 6c 65 74 31 5f 63 6f 6e 74 65 !.wtablet1_conte
|
|
| 3776: 6e 74 74 31 5f 63 6f 6e 74 65 6e 74 04 43 52 45 ntt1_content.CRE
|
|
| 3792: 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 63 6f ATE TABLE 't1_co
|
|
| 3808: 6e 74 65 6e 74 27 28 69 64 20 49 4e 54 45 47 45 ntent'(id INTEGE
|
|
| 3824: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 R PRIMARY KEY, c
|
|
| 3840: 30 29 69 03 07 17 19 19 01 81 2d 74 61 62 6c 65 0)i.......-table
|
|
| 3856: 74 31 5f 69 64 78 74 31 5f 69 64 78 03 43 52 45 t1_idxt1_idx.CRE
|
|
| 3872: 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 69 64 ATE TABLE 't1_id
|
|
| 3888: 78 27 28 73 65 67 69 64 2c 20 74 65 72 6d 2c 20 x'(segid, term,
|
|
| 3904: 70 67 6e 6f 2c 20 50 52 49 4d 41 52 59 20 4b 45 pgno, PRIMARY KE
|
|
| 3920: 59 28 73 65 67 69 64 2c 20 74 65 72 6d 29 29 20 Y(segid, term))
|
|
| 3936: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 55 02 07 WITHOUT ROWIDU..
|
|
| 3952: 17 1b 1b 01 81 01 74 61 62 6c 65 74 31 5f 64 61 ......tablet1_da
|
|
| 3968: 74 61 74 31 5f 64 61 74 61 02 43 52 45 41 54 45 tat1_data.CREATE
|
|
| 3984: 20 54 41 42 4c 45 20 27 74 31 5f 64 61 74 61 27 TABLE 't1_data'
|
|
| 4000: 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d (id INTEGER PRIM
|
|
| 4016: 41 52 59 20 4b 45 59 2c 20 62 6c 6f 63 6b 20 42 ARY KEY, block B
|
|
| 4032: 4c 4f 42 29 3a 01 06 17 11 11 08 63 74 61 62 6c LOB):......ctabl
|
|
| 4048: 65 74 31 74 31 43 52 45 41 54 45 20 56 49 52 54 et1t1CREATE VIRT
|
|
| 4064: 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49 UAL TABLE t1 USI
|
|
| 4080: 4e 47 20 66 74 73 35 28 63 6f 6e 74 65 6e 74 29 NG fts5(content)
|
|
| page 2 offset 4096
|
|
| 0: 0d 00 00 00 03 0f bd 00 0f d8 0f ef 0f bd 00 00 ................
|
|
| 4016: 00 00 00 00 00 00 00 00 00 00 00 00 00 24 84 80 .............$..
|
|
| 4032: 80 80 80 01 03 00 4e 00 00 00 1e 06 30 61 62 61 ......N.....0aba
|
|
| 4048: 63 6b 01 02 02 04 02 66 74 02 02 02 04 04 6e 64 ck.....ft.....nd
|
|
| 4064: 6f 6e 03 02 02 04 0a 07 05 01 03 00 10 03 03 0f on..............
|
|
| 4080: 0a 03 00 24 00 00 00 00 01 01 01 20 01 01 01 01 ...$....... ....
|
|
| page 3 offset 8192
|
|
| 0: 0a 00 00 00 01 0f fa 00 0f fa 00 00 00 00 00 00 ................
|
|
| 4080: 00 00 00 00 00 00 00 00 00 00 05 04 09 0c 01 02 ................
|
|
| page 4 offset 12288
|
|
| 0: 0d 00 00 00 03 0f e0 00 0f f6 0f ec 0f e0 3f e0 ..............?.
|
|
| 16: a0 30 30 01 b6 16 26 16 e6 46 f6 e0 80 20 30 01 .00...&..F... 0.
|
|
| 32: 76 16 26 16 67 40 80 10 30 01 76 16 26 16 36 b0 v.&.g@..0.v.&.6.
|
|
| 48: d0 00 00 00 30 fe e0 00 ff a0 ff 40 fe 00 00 00 ....0......@....
|
|
| page 5 offset 16384
|
|
| 4064: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 03 ................
|
|
| 4080: 03 00 0e 01 04 02 03 00 0e 01 04 01 03 00 0e 01 ................
|
|
| page 6 offset 20480
|
|
| 0: 0a 00 00 00 01 0f f4 00 0f f4 00 00 00 00 00 00 ................
|
|
| 4080: 00 00 00 00 0b 03 1b 01 76 65 72 73 69 6f 6e 04 ........version.
|
|
| page 7 offset 24576
|
|
| 0: 0d 00 00 00 03 0f d6 00 0f f4 0f e1 0f d6 00 00 ................
|
|
| 4048: 00 00 00 00 00 00 09 03 02 1b 72 65 62 75 69 6c ..........rebuil
|
|
| 4064: 64 11 02 02 2b 69 6e 74 65 67 72 69 74 79 2d 63 d...+integrity-c
|
|
| 4080: 68 65 63 6b 0a 01 02 1d 6f 70 74 69 6d 69 7a 65 heck....optimize
|
|
| end c2.db
|
|
}]} {}
|
|
|
|
do_catchsql_test 11.1 {
|
|
SELECT * FROM t1 WHERE t1 MATCH 'abandon';
|
|
} {1 {vtable constructor failed: t1}}
|
|
|
|
do_catchsql_test 11.2 {
|
|
INSERT INTO t1(t1, rank) VALUES('merge', 500);
|
|
} {1 {vtable constructor failed: t1}}
|
|
|
|
#-------------------------------------------------------------------------
|
|
#
|
|
reset_db
|
|
do_test 13.0 {
|
|
sqlite3 db {}
|
|
db deserialize [decode_hexdb {
|
|
| size 28672 pagesize 4096 filename c13.db
|
|
| page 1 offset 0
|
|
| 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3.
|
|
| 16: 10 00 01 01 00 40 20 20 00 00 00 00 00 00 00 07 .....@ ........
|
|
| 32: 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 04 ................
|
|
| 48: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 ................
|
|
| 96: 00 00 00 00 0d 00 00 00 07 0d d2 00 0f c4 0f 6d ...............m
|
|
| 112: 0f 02 0e ab 0e 4e 0d f6 0d d2 00 00 00 00 00 00 .....N..........
|
|
| 3536: 00 00 22 07 06 17 11 11 01 31 74 61 62 6c 65 74 .........1tablet
|
|
| 3552: 32 74 32 07 43 52 45 41 54 45 20 54 41 42 4c 45 2t2.CREATE TABLE
|
|
| 3568: 20 74 32 28 78 29 56 06 06 17 1f 1f 01 7d 74 61 t2(x)V.......ta
|
|
| 3584: 62 6c 65 74 31 5f 63 6f 6e 66 69 67 74 31 5f 63 blet1_configt1_c
|
|
| 3600: 6f 6e 66 69 67 06 43 52 45 41 54 45 20 54 41 42 onfig.CREATE TAB
|
|
| 3616: 4c 45 20 27 74 31 5f 63 6f 6e 66 69 67 27 28 6b LE 't1_config'(k
|
|
| 3632: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 76 29 PRIMARY KEY, v)
|
|
| 3648: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5b 05 WITHOUT ROWID[.
|
|
| 3664: 07 17 21 21 01 81 01 74 61 62 6c 65 74 31 5f 64 ..!!...tablet1_d
|
|
| 3680: 6f 63 73 69 7a 65 74 31 5f 64 6f 63 73 69 7a 65 ocsizet1_docsize
|
|
| 3696: 05 43 52 45 41 54 45 20 54 41 42 4c 45 20 27 74 .CREATE TABLE 't
|
|
| 3712: 31 5f 64 6f 63 73 69 7a 65 27 28 69 64 20 49 4e 1_docsize'(id IN
|
|
| 3728: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
|
|
| 3744: 59 2c 20 73 7a 20 42 4c 4f 42 29 55 04 06 17 21 Y, sz BLOB)U...!
|
|
| 3760: 21 01 77 74 61 62 6c 65 74 31 5f 63 6f 6e 74 65 !.wtablet1_conte
|
|
| 3776: 6e 74 74 31 5f 63 6f 6e 74 65 6e 74 04 43 52 45 ntt1_content.CRE
|
|
| 3792: 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 63 6f ATE TABLE 't1_co
|
|
| 3808: 6e 74 65 6e 74 27 28 69 64 20 49 4e 54 45 47 45 ntent'(id INTEGE
|
|
| 3824: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 R PRIMARY KEY, c
|
|
| 3840: 30 29 69 03 07 17 19 19 01 81 2d 74 61 62 6c 65 0)i.......-table
|
|
| 3856: 74 31 5f 69 64 78 74 31 5f 69 64 78 03 43 52 45 t1_idxt1_idx.CRE
|
|
| 3872: 41 54 45 20 54 41 42 4c 45 20 27 74 31 4f 69 64 ATE TABLE 't1Oid
|
|
| 3888: 78 27 28 73 65 67 69 64 2c 20 74 65 72 6d 2c 20 x'(segid, term,
|
|
| 3904: 70 67 6e 6f 2c 20 50 52 49 4d 41 52 59 20 4b 45 pgno, PRIMARY KE
|
|
| 3920: 59 28 73 65 67 69 64 2c 20 74 65 72 6d 29 29 20 Y(segid, term))
|
|
| 3936: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 55 02 07 WITHOUT ROWIDU..
|
|
| 3952: 17 1b 1b 01 81 01 74 61 62 6c 65 74 31 5f 64 61 ......tablet1_da
|
|
| 3968: 74 61 74 31 5f 64 61 74 61 02 43 52 45 41 54 45 tat1_data.CREATE
|
|
| 3984: 20 54 41 42 4c 45 20 27 74 31 5f 64 61 74 61 27 TABLE 't1_data'
|
|
| 4000: 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d (id INTEGER PRIM
|
|
| 4016: 41 52 59 20 4b 45 59 2c 20 62 6c 6f 63 6b 20 42 ARY KEY, block B
|
|
| 4032: 4c 4f 42 29 3a 01 06 17 11 11 08 63 74 61 62 6c LOB):......ctabl
|
|
| 4048: 65 74 31 74 31 43 52 45 41 54 45 20 56 49 52 54 et1t1CREATE VIRT
|
|
| 4064: 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49 UAL TABLE t1 USI
|
|
| 4080: 4e 47 20 66 74 73 35 28 63 6f 6e 74 65 6e 74 29 NG fts5(content)
|
|
| page 2 offset 4096
|
|
| 0: 0d 00 00 00 03 0f bd 00 0f e8 0f ef 0f bd 00 00 ................
|
|
| 4016: 00 00 00 00 00 00 00 00 00 00 00 00 00 24 84 80 .............$..
|
|
| 4032: 80 80 80 01 03 00 4e 00 00 00 1e 06 30 61 62 61 ......N.....0aba
|
|
| 4048: 63 6b 01 02 02 04 02 66 74 02 02 02 04 04 6e 64 ck.....ft.....nd
|
|
| 4064: 6f 6e 03 02 02 04 0a 07 05 01 03 00 10 03 03 0f on..............
|
|
| 4080: 0a 03 00 24 00 eb 00 00 00 01 01 01 00 01 01 01 ...$............
|
|
| page 3 offset 8192
|
|
| 0: 01 0a 00 00 00 01 0f fa 00 0f fa 00 00 00 00 00 ................
|
|
| 4080: 00 00 00 00 00 00 00 00 00 00 05 04 09 0c 01 02 ................
|
|
| page 4 offset 12288
|
|
| 0: 0d 00 00 00 03 0f e0 00 0f f6 0f ec 0f e0 00 00 ................
|
|
| 4064: 0a 03 03 00 1b 61 62 61 6e 64 6f 6e 08 02 03 00 .....abandon....
|
|
| 4080: 17 61 62 61 66 74 08 01 03 00 17 61 62 61 63 6b .abaft.....aback
|
|
| page 5 offset 16384
|
|
| 0: 0d 00 00 00 03 0f ee 00 0f fa 0f f2 0f ee 00 00 ................
|
|
| 4064: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 03 ................
|
|
| 4080: 03 00 0e 01 04 02 03 00 0e 01 04 01 03 00 0e 01 ................
|
|
| page 6 offset 20480
|
|
| 0: 0a 00 00 00 01 0f f4 00 0f f4 00 00 00 00 00 00 ................
|
|
| 4080: 00 00 00 00 0b 03 1b 01 76 65 72 73 69 6f 6e 04 ........version.
|
|
| page 7 offset 24576
|
|
| 0: 0d 00 00 00 03 0f d6 00 0f f4 0f e1 0f d6 00 00 ................
|
|
| 4048: 00 00 00 00 00 00 09 03 02 1b 72 65 62 75 69 6c ..........rebuil
|
|
| 4064: 64 11 02 02 2b 69 6e 74 65 67 72 69 74 79 2d 63 d...+integrity-c
|
|
| 4080: 68 65 63 6b 0a 01 02 1d 6f 70 74 69 6d 69 7a 65 heck....optimize
|
|
| end c13.db
|
|
SELECT * FROM t1 WHERE t1 MATCH 'abandon';
|
|
}]} {}
|
|
|
|
do_catchsql_test 13.1 {
|
|
SELECT * FROM t1 WHERE t1 MATCH 'abandon';
|
|
} {1 {vtable constructor failed: t1}}
|
|
|
|
#-------------------------------------------------------------------------
|
|
reset_db
|
|
do_test 14.0 {
|
|
sqlite3 db {}
|
|
db deserialize [decode_hexdb {
|
|
| size 28672 pagesize 4096 filename c14b.db
|
|
| page 1 offset 0
|
|
| 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3.
|
|
| 16: 10 00 01 01 00 40 20 20 00 00 00 01 00 00 00 07 .....@ ........
|
|
| 32: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 ................
|
|
| 48: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 ................
|
|
| 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ................
|
|
| 96: 00 2e 30 38 0d 00 00 00 07 0d d2 00 0f c4 0f 6d ..08...........m
|
|
| 112: 0f 02 0e ab 0e 4e 0d f6 0d d2 00 00 00 00 00 00 .....N..........
|
|
| 3536: 00 00 22 07 06 17 11 11 01 31 74 61 62 6c 65 74 .........1tablet
|
|
| 3552: 32 74 32 07 43 52 45 41 54 45 20 54 41 42 4c 45 2t2.CREATE TABLE
|
|
| 3568: 20 74 32 28 78 29 56 06 06 17 1f 1f 01 7d 74 61 t2(x)V.......ta
|
|
| 3584: 62 6c 65 74 31 5f 63 6f 6e 66 69 67 74 31 5f 63 blet1_configt1_c
|
|
| 3600: 6f 6e 66 69 67 06 43 52 45 41 54 45 20 54 41 42 onfig.CREATE TAB
|
|
| 3616: 4c 45 20 27 74 31 5f 63 6f 6e 66 69 67 27 28 6b LE 't1_config'(k
|
|
| 3632: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 76 29 PRIMARY KEY, v)
|
|
| 3648: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5b 05 WITHOUT ROWID[.
|
|
| 3664: 07 17 21 21 01 81 01 74 61 62 6c 65 74 31 5f 64 ..!!...tablet1_d
|
|
| 3680: 6f 63 73 69 7a 65 74 31 5f 64 6f 63 73 69 7a 65 ocsizet1_docsize
|
|
| 3696: 05 43 52 45 41 54 45 20 54 41 42 4c 45 20 27 74 .CREATE TABLE 't
|
|
| 3712: 31 5f 64 6f 63 73 69 7a 65 27 28 69 64 20 49 4e 1_docsize'(id IN
|
|
| 3728: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
|
|
| 3744: 59 2c 20 73 7a 20 42 4c 4f 42 29 55 04 06 17 21 Y, sz BLOB)U...!
|
|
| 3760: 21 01 77 74 61 62 6c 65 74 31 5f 63 6f 6e 74 65 !.wtablet1_conte
|
|
| 3776: 6e 74 74 31 5f 63 6f 6e 74 65 6e 74 04 43 52 45 ntt1_content.CRE
|
|
| 3792: 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 63 6f ATE TABLE 't1_co
|
|
| 3808: 6e 74 65 6e 74 27 28 69 64 20 49 4e 54 45 47 45 ntent'(id INTEGE
|
|
| 3824: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 R PRIMARY KEY, c
|
|
| 3840: 30 29 69 03 07 17 19 19 01 81 2d 74 61 62 6c 65 0)i.......-table
|
|
| 3856: 74 31 5f 69 64 78 74 31 5f 69 64 78 03 43 52 45 t1_idxt1_idx.CRE
|
|
| 3872: 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 69 64 ATE TABLE 't1_id
|
|
| 3888: 78 27 28 73 65 67 69 64 2c 20 74 65 72 6d 2c 20 x'(segid, term,
|
|
| 3904: 70 67 6e 6f 2c 20 50 52 49 4d 41 52 59 20 4b 45 pgno, PRIMARY KE
|
|
| 3920: 59 28 73 65 67 69 64 2c 20 74 65 72 6d 29 29 20 Y(segid, term))
|
|
| 3936: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 55 02 07 WITHOUT ROWIDU..
|
|
| 3952: 17 1b 1b 01 81 01 74 61 62 6c 65 74 31 5f 64 61 ......tablet1_da
|
|
| 3968: 74 61 74 31 5f 64 61 74 61 02 43 52 45 41 54 45 tat1_data.CREATE
|
|
| 3984: 20 54 41 42 4c 45 20 27 74 31 5f 64 61 74 61 27 TABLE 't1_data'
|
|
| 4000: 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d (id INTEGER PRIM
|
|
| 4016: 41 52 59 20 4b 45 59 2c 20 62 6c 6f 63 6b 20 42 ARY KEY, block B
|
|
| 4032: 4c 4f 42 29 3a 01 06 17 11 11 08 63 74 61 62 6c LOB):......ctabl
|
|
| 4048: 65 74 31 74 31 43 52 45 41 54 45 20 56 49 52 54 et1t1CREATE VIRT
|
|
| 4064: 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49 UAL TABLE t1 USI
|
|
| 4080: 4e 47 20 66 74 73 35 28 63 6f 6e 74 65 6e 74 29 NG fts5(content)
|
|
| page 2 offset 4096
|
|
| 0: 0d 0f ef 00 04 0f 18 00 0f e8 0f 18 0f bd 0f 2c ...............,
|
|
| 3856: 00 00 00 00 00 00 00 00 12 0a 03 00 2a 00 00 00 ............*...
|
|
| 3872: 00 01 02 02 00 02 01 01 01 02 01 01 81 09 88 80 ................
|
|
| 3888: 80 80 80 01 04 00 82 16 00 00 00 79 06 30 61 62 ...........y.0ab
|
|
| 3904: 61 63 6b 08 02 07 04 04 6e 64 6f 6e 08 02 05 02 ack.....ndon....
|
|
| 3920: 05 63 74 69 76 65 04 02 02 04 02 0b 02 04 6c 70 .ctive........lp
|
|
| 3936: 68 61 08 04 02 0a 02 03 74 6b 6d 06 02 02 03 02 ha......tkm.....
|
|
| 3952: 6f 6d 08 02 09 05 02 69 63 07 02 02 01 06 62 61 om.....ic.....ba
|
|
| 3968: 63 6b 75 70 08 02 04 02 05 6f 6f 6d 65 72 05 02 ckup.....oomer..
|
|
| 3984: 02 01 0c 63 68 61 6e 6e 65 62 6f 6f 6d 65 72 08 ...channeboomer.
|
|
| 4000: 02 08 07 01 6c 08 02 03 01 04 74 65 73 74 08 02 ....l.....test..
|
|
| 4016: 06 04 0a 09 0d 0a 08 07 07 0b 0a 11 06 24 84 80 .............$..
|
|
| 4032: 80 80 80 01 03 00 4e 00 00 00 1e 06 30 61 62 61 ......N.....0aba
|
|
| 4048: 63 6b 01 02 02 04 02 66 74 02 02 02 04 04 6e 64 ck.....ft.....nd
|
|
| 4064: 6f 6e 03 02 02 03 9a 07 05 01 03 00 10 08 11 00 on..............
|
|
| 4080: 00 00 11 24 00 00 00 00 01 01 01 00 01 01 01 01 ...$............
|
|
| page 3 offset 8192
|
|
| 0: 0a 00 00 00 02 0f f3 00 0f fa 0f f3 00 00 00 00 ................
|
|
| 4080: 00 00 00 06 04 01 0c 01 02 02 05 04 09 0c 01 02 ................
|
|
| page 4 offset 12288
|
|
| 0: 0d 00 00 00 08 0f 6a 00 0f f6 0f ec 0f e0 0f d5 ......j.........
|
|
| 16: 0f ca 0f c1 0f b6 0f 6a 00 00 00 00 00 00 00 00 .......j........
|
|
| 3936: 00 00 00 00 00 00 00 00 00 00 4a 08 04 00 81 19 ..........J.....
|
|
| 3952: 61 6c 70 68 61 20 63 68 61 6e 6e 65 6c 20 62 61 alpha channel ba
|
|
| 3968: 63 6b 75 70 20 61 62 61 6e 64 6f 6e 20 74 65 73 ckup abandon tes
|
|
| 3984: 74 20 61 62 61 63 6b 20 63 68 61 6e 6e 65 62 6f t aback channebo
|
|
| 4000: 6f 6d 65 72 20 61 74 6f 6d 20 61 6c 70 68 61 20 omer atom alpha
|
|
| 4016: 61 63 74 69 76 65 09 07 03 00 19 61 74 6f 6d 69 active.....atomi
|
|
| 4032: 63 07 06 03 00 15 61 74 6b 6d 09 05 03 00 19 62 c.....atkm.....b
|
|
| 4048: 6f 6f 6d 65 72 09 04 03 00 19 61 63 74 69 76 65 oomer.....active
|
|
| 4064: 0a 03 03 00 1b 61 62 61 6e 64 6f 6e 08 02 03 00 .....abandon....
|
|
| 4080: 17 61 62 61 66 74 08 01 03 00 17 61 62 61 63 6b .abaft.....aback
|
|
| page 5 offset 16384
|
|
| 0: 0d 00 00 00 08 0f d0 00 0f fa 0f f4 0f ee 0f e8 ................
|
|
| 16: 0f e2 0f dc 0f d6 0f d0 00 00 00 00 00 00 00 00 ................
|
|
| 4048: 04 08 03 00 0e 0a 04 07 03 00 0e 01 04 06 03 00 ................
|
|
| 4064: 0e 01 04 05 03 00 0e 01 04 04 03 00 0e 01 04 03 ................
|
|
| 4080: 03 00 0e 01 04 02 03 00 0e 01 04 01 03 00 0e 01 ................
|
|
| page 6 offset 20480
|
|
| 0: 0a 00 00 00 01 0f f4 00 0f f4 00 00 00 00 00 00 ................
|
|
| 4080: 00 00 00 00 0b 03 1b 01 76 65 72 73 69 6f 6e 04 ........version.
|
|
| page 7 offset 24576
|
|
| 0: 0d 00 00 00 03 0f d6 00 0f f4 0f e1 0f d6 00 00 ................
|
|
| 4048: 00 00 00 00 00 00 09 03 02 1b 72 65 62 75 69 6c ..........rebuil
|
|
| 4064: 64 11 02 02 2b 69 6e 74 65 67 72 69 74 79 2d 63 d...+integrity-c
|
|
| 4080: 68 65 63 6b 0a 01 02 1d 6f 70 74 69 6d 69 7a 65 heck....optimize
|
|
| end c14b.db
|
|
}]} {}
|
|
|
|
do_catchsql_test 14.1 {
|
|
INSERT INTO t1(t1) VALUES('optimize');
|
|
} {1 {database disk image is malformed}}
|
|
|
|
#---------------------------------------------------------------------------
|
|
#
|
|
reset_db
|
|
do_test 15.0 {
|
|
sqlite3 db {}
|
|
db deserialize [decode_hexdb {
|
|
| size 32768 pagesize 4096 filename c16.db
|
|
| page 1 offset 0
|
|
| 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3.
|
|
| 16: 10 00 01 01 00 40 20 20 00 00 00 00 00 00 00 07 .....@ ........
|
|
| 32: 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 ................
|
|
| 48: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 ................
|
|
| 96: 00 00 00 00 0d 00 00 00 07 0d d2 00 0f c4 0f 6d ...............m
|
|
| 112: 0f 02 0e ab 0e 4e 0d f6 0d d2 00 00 00 00 00 00 .....N..........
|
|
| 3536: 00 00 22 07 06 17 11 11 01 31 74 61 62 6c 65 74 .........1tablet
|
|
| 3552: 32 74 32 07 43 52 45 41 54 45 20 54 41 42 4c 45 2t2.CREATE TABLE
|
|
| 3568: 20 74 32 28 78 29 56 06 06 17 1f 1f 01 7d 74 61 t2(x)V.......ta
|
|
| 3584: 62 6c 65 74 31 5f 63 6f 6e 66 69 67 74 31 5f 63 blet1_configt1_c
|
|
| 3600: 6f 6e 66 69 67 06 43 52 45 41 54 45 20 54 41 42 onfig.CREATE TAB
|
|
| 3616: 4c 45 20 27 74 31 5f 63 6f 6e 66 69 67 27 28 6b LE 't1_config'(k
|
|
| 3632: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 76 29 PRIMARY KEY, v)
|
|
| 3648: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5b 05 WITHOUT ROWID[.
|
|
| 3664: 07 17 21 21 01 81 01 74 61 62 6c 00 0f f6 0f ec ..!!...tabl.....
|
|
| 3680: 0f e0 73 69 7a 65 74 31 5f 64 6f 63 73 69 7a 65 ..sizet1_docsize
|
|
| 3696: 05 43 52 45 41 54 45 20 54 41 42 4c 45 20 27 74 .CREATE TABLE 't
|
|
| 3712: 31 5f 64 6f 63 73 69 7a 65 27 28 69 64 20 49 4e 1_docsize'(id IN
|
|
| 3728: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
|
|
| 3744: 59 2c 20 73 7a 20 42 4c 4f 42 29 55 04 06 17 21 Y, sz BLOB)U...!
|
|
| 3760: 21 01 77 74 61 62 6c 65 74 31 5f 63 6f 6e 74 65 !.wtablet1_conte
|
|
| 3776: 6e 74 74 31 5f 63 6f 6e 74 65 6e 74 04 43 52 45 ntt1_content.CRE
|
|
| 3792: 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 63 6f ATE TABLE 't1_co
|
|
| 3808: 6e 74 65 6e 74 27 28 69 64 20 49 4e 54 45 47 45 ntent'(id INTEGE
|
|
| 3824: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 R PRIMARY KEY, c
|
|
| 3840: 30 29 69 03 07 17 19 19 01 81 2d 74 61 62 6c 65 0)i.......-table
|
|
| 3856: 74 31 5f 69 64 78 74 31 5f 69 64 78 03 43 52 45 t1_idxt1_idx.CRE
|
|
| 3872: 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 69 64 ATE TABLE 't1_id
|
|
| 3888: 78 27 28 73 65 67 69 64 2c 20 74 65 72 6d 2c 20 x'(segid, term,
|
|
| 3904: 70 67 6e 6f 2c 20 50 52 49 4d 41 52 59 20 4b 45 pgno, PRIMARY KE
|
|
| 3920: 59 28 73 65 67 69 64 2c 20 74 65 72 6d 29 29 20 Y(segid, term))
|
|
| 3936: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 55 02 07 WITHOUT ROWIDU..
|
|
| 3952: 17 1b 1b 01 81 01 74 61 62 6c 65 74 31 5f 64 61 ......tablet1_da
|
|
| 3968: 74 61 74 31 5f 64 61 74 61 02 43 52 45 41 54 45 tat1_data.CREATE
|
|
| 3984: 20 54 41 42 4c 45 20 27 74 31 5f 64 61 74 61 27 TABLE 't1_data'
|
|
| 4000: 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d (id INTEGER PRIM
|
|
| 4016: 41 52 59 20 4b 45 59 2c 20 62 6c 6f 63 6b 20 42 ARY KEY, block B
|
|
| 4032: 4c 4f 42 29 3a 01 06 17 11 11 08 63 74 61 62 6c LOB):......ctabl
|
|
| 4048: 65 74 31 74 31 43 52 45 41 54 45 20 56 49 52 54 et1t1CREATE VIRT
|
|
| 4064: 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49 UAL TABLE t1 USI
|
|
| 4080: 4e 47 20 66 74 73 35 28 63 6f 6e 74 65 6e 74 29 NG fts5(content)
|
|
| page 2 offset 4096
|
|
| 0: 0d 00 00 00 03 0f bd 00 0f e8 0f ef 0f bd 00 00 ................
|
|
| 4016: 00 00 00 00 00 00 00 00 00 00 00 00 00 24 84 80 .............$..
|
|
| 4032: 80 80 80 01 03 00 4e 00 00 00 1e 06 30 61 62 61 ......N.....0aba
|
|
| 4048: 63 6b 01 02 02 04 02 66 74 00 02 22 04 04 6e 64 ck.....ft.....nd
|
|
| 4064: 6f 6e 04 67 90 38 2a 07 05 01 03 00 10 03 03 0f on.g.8*.........
|
|
| 4080: 0a 03 00 24 00 00 00 00 01 01 01 00 01 01 01 01 ...$............
|
|
| page 3 offset 8192
|
|
| 0: 0a 00 00 00 01 0f fa 00 0f fa 00 00 00 00 00 00 ................
|
|
| 4080: 00 00 00 00 00 00 00 00 00 00 05 04 09 0c 01 02 ................
|
|
| page 4 offset 12288
|
|
| 0: 0d 00 00 00 03 0f e0 00 0f f6 0f ec 0f e0 00 00 ................
|
|
| 4064: 0a 03 03 00 1b 61 62 61 6e 64 6f 6e 08 02 03 00 .....abandon....
|
|
| 4080: 17 61 62 61 66 74 08 01 03 00 17 61 62 61 63 6b .abaft.....aback
|
|
| page 5 offset 16384
|
|
| 0: 0d 00 00 00 03 0f ee 00 0f fa 0f f4 0f ee 00 00 ................
|
|
| 4064: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 03 ................
|
|
| 4080: 03 00 0e 01 04 02 03 00 0e 01 04 01 03 00 0e 01 ................
|
|
| page 6 offset 20480
|
|
| 0: 0a 00 00 00 01 0f f4 00 0f f4 00 00 00 00 00 00 ................
|
|
| 4080: 00 00 00 00 0b 03 1b 01 76 65 72 73 69 6f 6e 04 ........version.
|
|
| page 7 offset 24576
|
|
| 0: 0d 00 00 00 03 0f d6 00 0f f4 0f e1 0f d6 00 00 ................
|
|
| 4048: 00 00 00 00 00 00 09 03 02 1b 72 65 62 75 69 6c ..........rebuil
|
|
| 4064: 64 11 02 02 2b 69 6e 74 65 67 72 69 74 79 2d 63 d...+integrity-c
|
|
| 4080: 68 65 63 6b 0a 01 02 1d 6f 70 74 69 6d 69 7a 65 heck....optimize
|
|
| page 8 offset 28672
|
|
| 0: 03 07 17 19 19 01 81 2d 74 61 62 6c 65 74 31 5f .......-tablet1_
|
|
| 16: 69 64 78 74 31 5f 69 64 78 03 43 52 45 41 54 45 idxt1_idx.CREATE
|
|
| 32: 20 54 41 42 4c 45 20 27 74 31 5f 66 17 42 03 30 TABLE 't1_f.B.0
|
|
| 48: 01 00 00 10 10 04 02 02 00 00 00 00 00 00 00 00 ................
|
|
| 64: 70 00 00 00 00 00 00 00 00 00 00 00 70 00 00 00 p...........p...
|
|
| end c16.db
|
|
}]} {}
|
|
|
|
do_catchsql_test 15.1 {
|
|
INSERT INTO t1(t1) VALUES('integrity-check');
|
|
} {1 {database disk image is malformed}}
|
|
|
|
sqlite3_fts5_may_be_corrupt 0
|
|
finish_test
|
|
|