Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Unified Diff: third_party/sqlite/sqlite-src-3100200/ext/fts5/test/fts5corrupt2.test

Issue 2846743003: [sql] Remove SQLite 3.10.2 reference directory. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/sqlite/sqlite-src-3100200/ext/fts5/test/fts5corrupt2.test
diff --git a/third_party/sqlite/sqlite-src-3100200/ext/fts5/test/fts5corrupt2.test b/third_party/sqlite/sqlite-src-3100200/ext/fts5/test/fts5corrupt2.test
deleted file mode 100644
index 3a4fcfaaedd81ae7bdac59a105a3135dbe2f5c71..0000000000000000000000000000000000000000
--- a/third_party/sqlite/sqlite-src-3100200/ext/fts5/test/fts5corrupt2.test
+++ /dev/null
@@ -1,272 +0,0 @@
-# 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 fts5corrupt2
-
-# If SQLITE_ENABLE_FTS5 is defined, omit this file.
-ifcapable !fts5 {
- finish_test
- return
-}
-sqlite3_fts5_may_be_corrupt 1
-
-# Create a simple FTS5 table containing 100 documents. Each document
-# contains 10 terms, each of which start with the character "x".
-#
-expr srand(0)
-db func rnddoc fts5_rnddoc
-do_execsql_test 1.0 {
- CREATE VIRTUAL TABLE t1 USING fts5(x);
- INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
- WITH ii(i) AS (SELECT 1 UNION SELECT i+1 FROM ii WHERE i<100)
- INSERT INTO t1 SELECT rnddoc(10) FROM ii;
-}
-set mask [expr 31 << 31]
-
-if 1 {
-
-# Test 1:
-#
-# For each page in the t1_data table, open a transaction and DELETE
-# the t1_data entry. Then run:
-#
-# * an integrity-check, and
-# * unless the deleted block was a b-tree node, a query for "t1 MATCH 'x*'"
-#
-# and check that the corruption is detected in both cases. The
-# rollback the transaction.
-#
-# Test 2:
-#
-# Same thing, except instead of deleting a row from t1_data, replace its
-# blob content with integer value 14.
-#
-foreach {tno stmt} {
- 1 { DELETE FROM t1_data WHERE rowid=$rowid }
- 2 { UPDATE t1_data SET block=14 WHERE rowid=$rowid }
-} {
- set tn 0
- foreach rowid [db eval {SELECT rowid FROM t1_data WHERE rowid>10}] {
- incr tn
- #if {$tn!=224} continue
-
- do_test 1.$tno.$tn.1.$rowid {
- execsql { BEGIN }
- execsql $stmt
- catchsql { INSERT INTO t1(t1) VALUES('integrity-check') }
- } {1 {database disk image is malformed}}
-
- if {($rowid & $mask)==0} {
- # Node is a leaf node, not a b-tree node.
- do_catchsql_test 1.$tno.$tn.2.$rowid {
- SELECT rowid FROM t1 WHERE t1 MATCH 'x*'
- } {1 {database disk image is malformed}}
- }
-
- do_execsql_test 1.$tno.$tn.3.$rowid {
- ROLLBACK;
- INSERT INTO t1(t1) VALUES('integrity-check');
- } {}
- }
-}
-
-# Using the same database as the 1.* tests.
-#
-# Run N-1 tests, where N is the number of bytes in the rightmost leaf page
-# of the fts index. For test $i, truncate the rightmost leafpage to $i
-# bytes. Then test both the integrity-check detects the corruption.
-#
-# Also tested is that "MATCH 'x*'" does not crash and sometimes reports
-# corruption. It may not report the db as corrupt because truncating the
-# final leaf to some sizes may create a valid leaf page.
-#
-set lrowid [db one {SELECT max(rowid) FROM t1_data WHERE (rowid & $mask)=0}]
-set nbyte [db one {SELECT length(block) FROM t1_data WHERE rowid=$lrowid}]
-set all [db eval {SELECT rowid FROM t1}]
-for {set i [expr $nbyte-2]} {$i>=0} {incr i -1} {
- do_execsql_test 2.$i.1 {
- BEGIN;
- UPDATE t1_data SET block = substr(block, 1, $i) WHERE rowid=$lrowid;
- }
-
- do_catchsql_test 2.$i.2 {
- INSERT INTO t1(t1) VALUES('integrity-check');
- } {1 {database disk image is malformed}}
-
- do_test 2.$i.3 {
- set res [catchsql {SELECT rowid FROM t1 WHERE t1 MATCH 'x*'}]
- expr {
- $res=="1 {database disk image is malformed}"
- || $res=="0 {$all}"
- }
- } 1
-
- do_execsql_test 2.$i.4 {
- ROLLBACK;
- INSERT INTO t1(t1) VALUES('integrity-check');
- } {}
-}
-
-#-------------------------------------------------------------------------
-# Test that corruption in leaf page headers is detected by queries that use
-# doclist-indexes.
-#
-set doc "A B C D E F G H I J "
-do_execsql_test 3.0 {
- CREATE VIRTUAL TABLE x3 USING fts5(tt);
- INSERT INTO x3(x3, rank) VALUES('pgsz', 32);
- WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<1000)
- INSERT INTO x3
- SELECT ($doc || CASE WHEN (i%50)==0 THEN 'X' ELSE 'Y' END) FROM ii;
-}
-
-foreach {tn hdr} {
- 1 "\x00\x00\x00\x00"
- 2 "\xFF\xFF\xFF\xFF"
- 3 "\x44\x45"
-} {
- set tn2 0
- set nCorrupt 0
- set nCorrupt2 0
- foreach rowid [db eval {SELECT rowid FROM x3_data WHERE rowid>10}] {
- if {$rowid & $mask} continue
- incr tn2
- do_test 3.$tn.$tn2.1 {
- execsql BEGIN
-
- set fd [db incrblob main x3_data block $rowid]
- fconfigure $fd -encoding binary -translation binary
- set existing [read $fd [string length $hdr]]
- seek $fd 0
- puts -nonewline $fd $hdr
- close $fd
-
- set res [catchsql {SELECT rowid FROM x3 WHERE x3 MATCH 'x AND a'}]
- if {$res == "1 {database disk image is malformed}"} {incr nCorrupt}
- set {} 1
- } {1}
-
- if {($tn2 % 10)==0 && $existing != $hdr} {
- do_test 3.$tn.$tn2.2 {
- catchsql { INSERT INTO x3(x3) VALUES('integrity-check') }
- } {1 {database disk image is malformed}}
- }
-
- execsql ROLLBACK
- }
-
- do_test 3.$tn.x { expr $nCorrupt>0 } 1
-}
-
-#--------------------------------------------------------------------
-#
-set doc "A B C D E F G H I J "
-do_execsql_test 4.0 {
- CREATE VIRTUAL TABLE x4 USING fts5(tt);
- INSERT INTO x4(x4, rank) VALUES('pgsz', 32);
- WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<10)
- INSERT INTO x4
- SELECT ($doc || CASE WHEN (i%50)==0 THEN 'X' ELSE 'Y' END) FROM ii;
-}
-
-foreach {tn nCut} {
- 1 1
- 2 10
-} {
- set tn2 0
- set nCorrupt 0
- foreach rowid [db eval {SELECT rowid FROM x4_data WHERE rowid>10}] {
- if {$rowid & $mask} continue
- incr tn2
- do_test 4.$tn.$tn2 {
- execsql {
- BEGIN;
- UPDATE x4_data SET block = substr(block, 1, length(block)-$nCut)
- WHERE id = $rowid;
- }
-
- set res [catchsql {
- SELECT rowid FROM x4 WHERE x4 MATCH 'a' ORDER BY 1 DESC
- }]
- if {$res == "1 {database disk image is malformed}"} {incr nCorrupt}
- set {} 1
- } {1}
-
- execsql ROLLBACK
- }
-
- # do_test 4.$tn.x { expr $nCorrupt>0 } 1
-}
-
-}
-
-set doc [string repeat "A B C " 1000]
-do_execsql_test 5.0 {
- CREATE VIRTUAL TABLE x5 USING fts5(tt);
- INSERT INTO x5(x5, rank) VALUES('pgsz', 32);
- WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<10)
- INSERT INTO x5 SELECT $doc FROM ii;
-}
-
-foreach {tn hdr} {
- 1 "\x00\x01"
-} {
- set tn2 0
- set nCorrupt 0
- foreach rowid [db eval {SELECT rowid FROM x5_data WHERE rowid>10}] {
- if {$rowid & $mask} continue
- incr tn2
- do_test 5.$tn.$tn2 {
- execsql BEGIN
-
- set fd [db incrblob main x5_data block $rowid]
- fconfigure $fd -encoding binary -translation binary
- puts -nonewline $fd $hdr
- close $fd
-
- catchsql { INSERT INTO x5(x5) VALUES('integrity-check') }
- set {} {}
- } {}
-
- execsql ROLLBACK
- }
-}
-
-#--------------------------------------------------------------------
-reset_db
-do_execsql_test 6.1 {
- CREATE VIRTUAL TABLE x5 USING fts5(tt);
- INSERT INTO x5 VALUES('a');
- INSERT INTO x5 VALUES('a a');
- INSERT INTO x5 VALUES('a a a');
- INSERT INTO x5 VALUES('a a a a');
-
- UPDATE x5_docsize SET sz = X'' WHERE id=3;
-}
-proc colsize {cmd i} {
- $cmd xColumnSize $i
-}
-sqlite3_fts5_create_function db colsize colsize
-
-do_catchsql_test 6.2 {
- SELECT colsize(x5, 0) FROM x5 WHERE x5 MATCH 'a'
-} {1 SQLITE_CORRUPT_VTAB}
-
-
-sqlite3_fts5_may_be_corrupt 0
-finish_test
-

Powered by Google App Engine
This is Rietveld 408576698