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

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

Issue 1610543003: [sql] Import reference version of SQLite 3.10.2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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/fts5integrity.test
diff --git a/third_party/sqlite/sqlite-src-3100200/ext/fts5/test/fts5integrity.test b/third_party/sqlite/sqlite-src-3100200/ext/fts5/test/fts5integrity.test
new file mode 100644
index 0000000000000000000000000000000000000000..84490e0cb402c0c7fac83042c4e2de4ef16ed39a
--- /dev/null
+++ b/third_party/sqlite/sqlite-src-3100200/ext/fts5/test/fts5integrity.test
@@ -0,0 +1,154 @@
+# 2015 Jan 13
+#
+# 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 contains tests focused on the integrity-check procedure.
+#
+
+source [file join [file dirname [info script]] fts5_common.tcl]
+set testprefix fts5integrity
+
+# If SQLITE_ENABLE_FTS5 is defined, omit this file.
+ifcapable !fts5 {
+ finish_test
+ return
+}
+
+do_execsql_test 1.0 {
+ CREATE VIRTUAL TABLE xx USING fts5(x);
+ INSERT INTO xx VALUES('term');
+}
+do_execsql_test 1.1 {
+ INSERT INTO xx(xx) VALUES('integrity-check');
+}
+
+do_execsql_test 2.0 {
+ CREATE VIRTUAL TABLE yy USING fts5(x, prefix=1);
+ INSERT INTO yy VALUES('term');
+}
+do_execsql_test 2.1 {
+ INSERT INTO yy(yy) VALUES('integrity-check');
+}
+
+#--------------------------------------------------------------------
+#
+do_execsql_test 3.0 {
+ CREATE VIRTUAL TABLE zz USING fts5(z);
+ INSERT INTO zz(zz, rank) VALUES('pgsz', 32);
+ INSERT INTO zz VALUES('b b b b b b b b b b b b b b');
+ INSERT INTO zz SELECT z FROM zz;
+ INSERT INTO zz SELECT z FROM zz;
+ INSERT INTO zz SELECT z FROM zz;
+ INSERT INTO zz SELECT z FROM zz;
+ INSERT INTO zz SELECT z FROM zz;
+ INSERT INTO zz SELECT z FROM zz;
+ INSERT INTO zz(zz) VALUES('optimize');
+}
+
+do_execsql_test 3.1 { INSERT INTO zz(zz) VALUES('integrity-check'); }
+
+#--------------------------------------------------------------------
+# Mess around with a docsize record. And the averages record. Then
+# check that integrity-check picks it up.
+#
+do_execsql_test 4.0 {
+ CREATE VIRTUAL TABLE aa USING fts5(zz);
+ INSERT INTO aa(zz) VALUES('a b c d e');
+ INSERT INTO aa(zz) VALUES('a b c d');
+ INSERT INTO aa(zz) VALUES('a b c');
+ INSERT INTO aa(zz) VALUES('a b');
+ INSERT INTO aa(zz) VALUES('a');
+ SELECT length(sz) FROM aa_docsize;
+} {1 1 1 1 1}
+do_execsql_test 4.1 {
+ INSERT INTO aa(aa) VALUES('integrity-check');
+}
+
+do_catchsql_test 4.2 {
+ BEGIN;
+ UPDATE aa_docsize SET sz = X'44' WHERE rowid = 3;
+ INSERT INTO aa(aa) VALUES('integrity-check');
+} {1 {database disk image is malformed}}
+
+do_catchsql_test 4.3 {
+ ROLLBACK;
+ BEGIN;
+ UPDATE aa_data SET block = X'44' WHERE rowid = 1;
+ INSERT INTO aa(aa) VALUES('integrity-check');
+} {1 {database disk image is malformed}}
+
+do_catchsql_test 4.4 {
+ ROLLBACK;
+ BEGIN;
+ INSERT INTO aa_docsize VALUES(23, X'04');
+ INSERT INTO aa(aa) VALUES('integrity-check');
+} {1 {database disk image is malformed}}
+
+do_catchsql_test 4.5 {
+ ROLLBACK;
+ BEGIN;
+ INSERT INTO aa_docsize VALUES(23, X'00');
+ INSERT INTO aa_content VALUES(23, '');
+ INSERT INTO aa(aa) VALUES('integrity-check');
+} {1 {database disk image is malformed}}
+
+#db eval {SELECT rowid, fts5_decode(rowid, block) aS r FROM zz_data} {puts $r}
+#exit
+
+execsql { ROLLBACK }
+
+
+#-------------------------------------------------------------------------
+# Test that integrity-check works on a reasonably large db with many
+# different terms.
+
+# Document generator command.
+proc rnddoc {n} {
+ set doc [list]
+ for {set i 0} {$i<$n} {incr i} {
+ lappend doc [format %.5d [expr int(rand()*10000)]]
+ }
+ return $doc
+}
+db func rnddoc rnddoc
+
+expr srand(0)
+do_execsql_test 5.0 {
+ CREATE VIRTUAL TABLE gg USING fts5(a, prefix="1,2,3");
+ INSERT INTO gg(gg, rank) VALUES('pgsz', 256);
+ INSERT INTO gg VALUES(rnddoc(20));
+ INSERT INTO gg SELECT rnddoc(20) FROM gg;
+ INSERT INTO gg SELECT rnddoc(20) FROM gg;
+ INSERT INTO gg SELECT rnddoc(20) FROM gg;
+ INSERT INTO gg SELECT rnddoc(20) FROM gg;
+ INSERT INTO gg SELECT rnddoc(20) FROM gg;
+ INSERT INTO gg SELECT rnddoc(20) FROM gg;
+ INSERT INTO gg SELECT rnddoc(20) FROM gg;
+ INSERT INTO gg SELECT rnddoc(20) FROM gg;
+ INSERT INTO gg SELECT rnddoc(20) FROM gg;
+ INSERT INTO gg SELECT rnddoc(20) FROM gg;
+ INSERT INTO gg SELECT rnddoc(20) FROM gg;
+}
+
+do_execsql_test 5.1 {
+ INSERT INTO gg(gg) VALUES('integrity-check');
+}
+
+do_execsql_test 5.2 {
+ INSERT INTO gg(gg) VALUES('optimize');
+}
+
+breakpoint
+do_execsql_test 5.3 {
+ INSERT INTO gg(gg) VALUES('integrity-check');
+}
+
+finish_test
+

Powered by Google App Engine
This is Rietveld 408576698