fts5secure6.test 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. # 2023 Feb 17
  2. #
  3. # The author disclaims copyright to this source code. In place of
  4. # a legal notice, here is a blessing:
  5. #
  6. # May you do good and not evil.
  7. # May you find forgiveness for yourself and forgive others.
  8. # May you share freely, never taking more than you give.
  9. #
  10. #*************************************************************************
  11. #
  12. source [file join [file dirname [info script]] fts5_common.tcl]
  13. ifcapable !fts5 { finish_test ; return }
  14. set ::testprefix fts5secure6
  15. db progress 1 progress_handler
  16. set ::PHC 0
  17. proc progress_handler {args} {
  18. incr ::PHC
  19. # if {($::PHC % 100000)==0} breakpoint
  20. return 0
  21. }
  22. proc setup {} {
  23. db eval {
  24. DROP TABLE IF EXISTS t1;
  25. CREATE VIRTUAL TABLE t1 USING fts5(x);
  26. WITH s(i) AS (
  27. VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000
  28. )
  29. INSERT INTO t1 SELECT 'a b c d e f g h i j k' FROM s;
  30. }
  31. }
  32. foreach {tn sd} {
  33. 1 0
  34. 2 1
  35. } {
  36. setup
  37. do_execsql_test 1.$tn.0 {
  38. INSERT INTO t1(t1, rank) VALUES('secure-delete', $sd)
  39. }
  40. set PHC 0
  41. do_execsql_test 1.$tn.1 { DELETE FROM t1; }
  42. set phc($tn) $PHC
  43. }
  44. do_test 1.3 {
  45. expr $phc(1)*5 < $phc(2)
  46. } {1}
  47. #-------------------------------------------------------------------------
  48. reset_db
  49. do_execsql_test 2.0 {
  50. CREATE VIRTUAL TABLE t1 USING fts5(x);
  51. INSERT INTO t1(t1, rank) VALUES('secure-delete', $sd)
  52. }
  53. do_execsql_test 2.1 {
  54. BEGIN;
  55. INSERT INTO t1(rowid, x) VALUES(-100000, 'abc def ghi');
  56. INSERT INTO t1(rowid, x) VALUES(-99999, 'abc def ghi');
  57. INSERT INTO t1(rowid, x) VALUES(9223372036854775800, 'abc def ghi');
  58. COMMIT;
  59. }
  60. do_execsql_test 2.2 {
  61. SELECT rowid FROM t1('def')
  62. } {-100000 -99999 9223372036854775800}
  63. #-------------------------------------------------------------------------
  64. reset_db
  65. do_execsql_test 3.0 {
  66. CREATE VIRTUAL TABLE t1 USING fts5(x);
  67. INSERT INTO t1(t1, rank) VALUES('secure-delete', $sd)
  68. }
  69. do_execsql_test 3.1 {
  70. BEGIN;
  71. INSERT INTO t1(rowid, x)
  72. VALUES(51869, 'when whenever where weress what turn'),
  73. (51871, 'to were');
  74. COMMIT;
  75. }
  76. do_execsql_test 3.2 {
  77. DELETE FROM t1 WHERE rowid=51871;
  78. INSERT INTO t1(t1) VALUES('integrity-check');
  79. }
  80. #-------------------------------------------------------------------------
  81. reset_db
  82. do_execsql_test 4.0 {
  83. CREATE VIRTUAL TABLE t1 USING fts5(x);
  84. INSERT INTO t1(rowid, x) VALUES(10, 'one two');
  85. }
  86. do_execsql_test 4.1 {
  87. UPDATE t1 SET x = 'one three' WHERE rowid=10;
  88. INSERT INTO t1(t1, rank) VALUES('secure-delete', 1);
  89. }
  90. do_execsql_test 4.2 {
  91. DELETE FROM t1 WHERE rowid=10;
  92. }
  93. do_execsql_test 4.3 {
  94. INSERT INTO t1(t1) VALUES('integrity-check');
  95. }
  96. #-------------------------------------------------------------------------
  97. reset_db
  98. do_execsql_test 5.0 {
  99. CREATE VIRTUAL TABLE t1 USING fts5(content);
  100. INSERT INTO t1(t1,rank) VALUES('secure-delete',1);
  101. INSERT INTO t1 VALUES('active'),('boomer'),('atom'),('atomic'),
  102. ('alpha channel backup abandon test aback boomer atom alpha active');
  103. DELETE FROM t1 WHERE t1 MATCH 'abandon';
  104. }
  105. do_execsql_test 5.1 {
  106. INSERT INTO t1(t1) VALUES('rebuild');
  107. }
  108. do_execsql_test 5.2 {
  109. DELETE FROM t1 WHERE rowid NOTNULL<5;
  110. }
  111. db close
  112. sqlite3 db test.db
  113. do_execsql_test 5.3 {
  114. PRAGMA integrity_check;
  115. } {ok}
  116. finish_test