xref: /sqlite-3.40.0/test/fts4growth2.test (revision a23bc8a3)
1# 2014 May 12
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# This file implements regression tests for SQLite library.  The
12# focus of this script is testing the FTS4 module.
13#
14#
15
16set testdir [file dirname $argv0]
17source $testdir/tester.tcl
18set testprefix fts4growth2
19
20# If SQLITE_ENABLE_FTS3 is defined, omit this file.
21ifcapable !fts3 {
22  finish_test
23  return
24}
25
26source $testdir/genesis.tcl
27
28do_execsql_test 1.0 { CREATE TABLE t1(docid, words); }
29fts_kjv_genesis
30
31proc structure {} {
32  puts [ db eval {SELECT level, count(*) FROM x1_segdir GROUP BY level} ]
33}
34
35proc tt {val} {
36  execsql {
37    DELETE FROM x1
38      WHERE docid IN (SELECT docid FROM t1 WHERE (rowid-1)%4==$val+0);
39  }
40  execsql {
41    INSERT INTO x1(docid, content)
42      SELECT docid, words FROM t1 WHERE (rowid%4)==$val+0;
43  }
44}
45
46do_execsql_test 1.1 {
47  CREATE VIRTUAL TABLE x1 USING fts4;
48  INSERT INTO x1(x1) VALUES('automerge=2');
49}
50
51do_test 1.2 {
52  for {set i 0} {$i < 40} {incr i} {
53    tt 0 ; tt 1 ; tt 2 ; tt 3
54  }
55  execsql {
56    SELECT max(level) FROM x1_segdir;
57    SELECT count(*) FROM x1_segdir WHERE level=2;
58  }
59} {2 1}
60
61do_test 1.3 {
62  for {set i 0} {$i < 40} {incr i} {
63    tt 0 ; tt 1 ; tt 2 ; tt 3
64  }
65  execsql {
66    SELECT max(level) FROM x1_segdir;
67    SELECT count(*) FROM x1_segdir WHERE level=2;
68  }
69} {2 1}
70
71#-------------------------------------------------------------------------
72#
73do_execsql_test 2.1 {
74  DELETE FROM t1 WHERE rowid>16;
75  DROP TABLE IF EXISTS x1;
76  CREATE VIRTUAL TABLE x1 USING fts4;
77}
78
79db func second second
80proc second {L} {lindex $L 1}
81
82for {set tn 0} {$tn < 40} {incr tn} {
83  do_test 2.2.$tn {
84    for {set i 0} {$i < 100} {incr i} {
85      tt 0 ; tt 1 ; tt 2 ; tt 3
86    }
87    execsql { SELECT max(level) FROM x1_segdir }
88  } {1}
89}
90
91
92finish_test
93