summaryrefslogtreecommitdiffstats
path: root/ext/fts5/test/fts5secure6.test
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 14:07:11 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 14:07:11 +0000
commit63847496f14c813a5d80efd5b7de0f1294ffe1e3 (patch)
tree01c7571c7c762ceee70638549a99834fdd7c411b /ext/fts5/test/fts5secure6.test
parentInitial commit. (diff)
downloadsqlite3-63847496f14c813a5d80efd5b7de0f1294ffe1e3.tar.xz
sqlite3-63847496f14c813a5d80efd5b7de0f1294ffe1e3.zip
Adding upstream version 3.45.1.upstream/3.45.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ext/fts5/test/fts5secure6.test')
-rw-r--r--ext/fts5/test/fts5secure6.test141
1 files changed, 141 insertions, 0 deletions
diff --git a/ext/fts5/test/fts5secure6.test b/ext/fts5/test/fts5secure6.test
new file mode 100644
index 0000000..e2f4cea
--- /dev/null
+++ b/ext/fts5/test/fts5secure6.test
@@ -0,0 +1,141 @@
+# 2023 Feb 17
+#
+# 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.
+#
+#*************************************************************************
+#
+
+source [file join [file dirname [info script]] fts5_common.tcl]
+ifcapable !fts5 { finish_test ; return }
+set ::testprefix fts5secure6
+
+db progress 1 progress_handler
+set ::PHC 0
+proc progress_handler {args} {
+ incr ::PHC
+ # if {($::PHC % 100000)==0} breakpoint
+ return 0
+}
+
+proc setup {} {
+ db eval {
+ DROP TABLE IF EXISTS t1;
+ CREATE VIRTUAL TABLE t1 USING fts5(x);
+ WITH s(i) AS (
+ VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000
+ )
+ INSERT INTO t1 SELECT 'a b c d e f g h i j k' FROM s;
+ }
+}
+
+foreach {tn sd} {
+ 1 0
+ 2 1
+} {
+ setup
+ do_execsql_test 1.$tn.0 {
+ INSERT INTO t1(t1, rank) VALUES('secure-delete', $sd)
+ }
+ set PHC 0
+ do_execsql_test 1.$tn.1 { DELETE FROM t1; }
+ set phc($tn) $PHC
+}
+
+do_test 1.3 {
+ expr $phc(1)*5 < $phc(2)
+} {1}
+
+#-------------------------------------------------------------------------
+reset_db
+
+do_execsql_test 2.0 {
+ CREATE VIRTUAL TABLE t1 USING fts5(x);
+ INSERT INTO t1(t1, rank) VALUES('secure-delete', $sd)
+}
+
+do_execsql_test 2.1 {
+ BEGIN;
+ INSERT INTO t1(rowid, x) VALUES(-100000, 'abc def ghi');
+ INSERT INTO t1(rowid, x) VALUES(-99999, 'abc def ghi');
+ INSERT INTO t1(rowid, x) VALUES(9223372036854775800, 'abc def ghi');
+ COMMIT;
+}
+
+do_execsql_test 2.2 {
+ SELECT rowid FROM t1('def')
+} {-100000 -99999 9223372036854775800}
+
+#-------------------------------------------------------------------------
+reset_db
+
+do_execsql_test 3.0 {
+ CREATE VIRTUAL TABLE t1 USING fts5(x);
+ INSERT INTO t1(t1, rank) VALUES('secure-delete', $sd)
+}
+
+do_execsql_test 3.1 {
+ BEGIN;
+ INSERT INTO t1(rowid, x)
+ VALUES(51869, 'when whenever where weress what turn'),
+ (51871, 'to were');
+ COMMIT;
+}
+
+do_execsql_test 3.2 {
+ DELETE FROM t1 WHERE rowid=51871;
+ INSERT INTO t1(t1) VALUES('integrity-check');
+}
+
+#-------------------------------------------------------------------------
+reset_db
+
+do_execsql_test 4.0 {
+ CREATE VIRTUAL TABLE t1 USING fts5(x);
+ INSERT INTO t1(rowid, x) VALUES(10, 'one two');
+}
+do_execsql_test 4.1 {
+ UPDATE t1 SET x = 'one three' WHERE rowid=10;
+ INSERT INTO t1(t1, rank) VALUES('secure-delete', 1);
+}
+do_execsql_test 4.2 {
+ DELETE FROM t1 WHERE rowid=10;
+}
+do_execsql_test 4.3 {
+ INSERT INTO t1(t1) VALUES('integrity-check');
+}
+
+#-------------------------------------------------------------------------
+reset_db
+
+do_execsql_test 5.0 {
+ CREATE VIRTUAL TABLE t1 USING fts5(content);
+
+ INSERT INTO t1(t1,rank) VALUES('secure-delete',1);
+ INSERT INTO t1 VALUES('active'),('boomer'),('atom'),('atomic'),
+ ('alpha channel backup abandon test aback boomer atom alpha active');
+ DELETE FROM t1 WHERE t1 MATCH 'abandon';
+}
+
+do_execsql_test 5.1 {
+ INSERT INTO t1(t1) VALUES('rebuild');
+}
+
+do_execsql_test 5.2 {
+ DELETE FROM t1 WHERE rowid NOTNULL<5;
+}
+
+db close
+sqlite3 db test.db
+
+do_execsql_test 5.3 {
+ PRAGMA integrity_check;
+} {ok}
+
+
+finish_test
+