summaryrefslogtreecommitdiffstats
path: root/ext/fts5/test/fts5origintext4.test
blob: c4ae35011764b85c20ed08a012b9b17af8d0137e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# 2023 November 22
#
# 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.
#
#***********************************************************************
#
# Tests focused on phrase queries.
#

source [file join [file dirname [info script]] fts5_common.tcl]
set testprefix fts5origintext4

# If SQLITE_ENABLE_FTS5 is defined, omit this file.
ifcapable !fts5 {
  finish_test
  return
}

# The tests below verify that a doclist-index is used to limit the number
# of pages loaded into the cache. It does this by querying sqlite3_db_status()
# for the amount of memory used by the pager cache.
#
# memsubsys1 effectively limits the page-cache to 24 pages. Which masks
# the effect tested by the tests in this file. And "mmap" prevents the 
# cache from being used, also preventing these tests from working.
#
if {[permutation]=="memsubsys1" || [permutation]=="mmap"} {
  finish_test
  return
}

sqlite3_fts5_register_origintext db
do_execsql_test 1.0 {
  PRAGMA page_size = 4096;
  CREATE VIRTUAL TABLE ft USING fts5(
      x, tokenize="origintext unicode61", tokendata=1
  );
}

do_execsql_test 1.1 {
  BEGIN;
    INSERT INTO ft SELECT 'the first thing';

    WITH s(i) AS (
      SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<90000
    )
    INSERT INTO ft SELECT 'The second thing' FROM s;

    INSERT INTO ft SELECT 'the first thing';
  COMMIT;
  INSERT INTO ft(ft) VALUES('optimize');
}

foreach {tn sql expr} {
  1 { SELECT rowid FROM ft('the') }       {$mem > 250000}
  2 { SELECT rowid FROM ft('first') }     {$mem <  50000}
  3 { SELECT rowid FROM ft('the first') } {$mem <  50000}
} {
  db close
  sqlite3 db test.db
  sqlite3_fts5_register_origintext db

  execsql $sql
  do_test 1.2.$tn {
    set mem [lindex [sqlite3_db_status db CACHE_USED 0] 1]
    expr $expr
  } 1
}

proc b {x} { string map [list "\0" "."] $x }
db func b b
# execsql_pp { SELECT segid, b(term), pgno from ft_idx }

finish_test