modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/fts5/test/fts5aa.test (about)

     1  # 2014 June 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  # This file implements regression tests for SQLite library.  The
    12  # focus of this script is testing the FTS5 module.
    13  #
    14  
    15  source [file join [file dirname [info script]] fts5_common.tcl]
    16  set testprefix fts5aa
    17  
    18  # If SQLITE_ENABLE_FTS5 is not defined, omit this file.
    19  ifcapable !fts5 {
    20    finish_test
    21    return
    22  }
    23  
    24  foreach_detail_mode $::testprefix {
    25  
    26  do_execsql_test 1.0 {
    27    CREATE VIRTUAL TABLE t1 USING fts5(a, b, c);
    28    SELECT name, sql FROM sqlite_master;
    29  } {
    30    t1 {CREATE VIRTUAL TABLE t1 USING fts5(a, b, c)}
    31    t1_data {CREATE TABLE 't1_data'(id INTEGER PRIMARY KEY, block BLOB)}
    32    t1_idx {CREATE TABLE 't1_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID}
    33    t1_content {CREATE TABLE 't1_content'(id INTEGER PRIMARY KEY, c0, c1, c2)}
    34    t1_docsize {CREATE TABLE 't1_docsize'(id INTEGER PRIMARY KEY, sz BLOB)}
    35    t1_config {CREATE TABLE 't1_config'(k PRIMARY KEY, v) WITHOUT ROWID}
    36  }
    37  
    38  do_execsql_test 1.1 {
    39    DROP TABLE t1;
    40    SELECT name, sql FROM sqlite_master;
    41  } {
    42  }
    43  
    44  #-------------------------------------------------------------------------
    45  #
    46  
    47  do_execsql_test 2.0 {
    48    CREATE VIRTUAL TABLE t1 USING fts5(x, y, detail=%DETAIL%);
    49  }
    50  do_execsql_test 2.1 {
    51    INSERT INTO t1 VALUES('a b c', 'd e f');
    52  }
    53  
    54  do_test 2.2 {
    55    execsql { SELECT fts5_decode(id, block) FROM t1_data WHERE id==10 }
    56  } {/{{structure} {lvl=0 nMerge=0 nSeg=1 {id=[0123456789]* leaves=1..1}}}/}
    57  
    58  foreach w {a b c d e f} {
    59    do_execsql_test 2.3.$w.asc {
    60      SELECT rowid FROM t1 WHERE t1 MATCH $w;
    61    } {1}
    62    do_execsql_test 2.3.$w.desc {
    63      SELECT rowid FROM t1 WHERE t1 MATCH $w ORDER BY rowid DESC;
    64    } {1}
    65  }
    66  
    67  do_execsql_test 2.4 {
    68    INSERT INTO t1(t1) VALUES('integrity-check');
    69  }
    70  
    71  
    72  #-------------------------------------------------------------------------
    73  #
    74  reset_db
    75  do_execsql_test 3.0 {
    76    CREATE VIRTUAL TABLE t1 USING fts5(x,y, detail=%DETAIL%);
    77  }
    78  foreach {i x y} {
    79     1  {g f d b f} {h h e i a}
    80     2  {f i g j e} {i j c f f}
    81     3  {e e i f a} {e h f d f}
    82     4  {h j f j i} {h a c f j}
    83     5  {d b j c g} {f e i b e}
    84     6  {a j a e e} {j d f d e}
    85     7  {g i j c h} {j d h c a}
    86     8  {j j i d d} {e e d f b}
    87     9  {c j j d c} {h j i f g}
    88     10 {b f h i a} {c f b b j}
    89  } {
    90    do_execsql_test 3.$i.1 { INSERT INTO t1 VALUES($x, $y) }
    91    do_execsql_test 3.$i.2 { INSERT INTO t1(t1) VALUES('integrity-check') }
    92    if {[set_test_counter errors]} break
    93  }
    94  
    95  #-------------------------------------------------------------------------
    96  #
    97  reset_db
    98  do_execsql_test 4.0 {
    99    CREATE VIRTUAL TABLE t1 USING fts5(x,y, detail=%DETAIL%);
   100    INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
   101  }
   102  foreach {i x y} {
   103     1  {g f d b f} {h h e i a}
   104     2  {f i g j e} {i j c f f}
   105     3  {e e i f a} {e h f d f}
   106     4  {h j f j i} {h a c f j}
   107     5  {d b j c g} {f e i b e}
   108     6  {a j a e e} {j d f d e}
   109     7  {g i j c h} {j d h c a}
   110     8  {j j i d d} {e e d f b}
   111     9  {c j j d c} {h j i f g}
   112     10 {b f h i a} {c f b b j}
   113  } {
   114    do_execsql_test 4.$i.1 { INSERT INTO t1 VALUES($x, $y) }
   115    do_execsql_test 4.$i.2 { INSERT INTO t1(t1) VALUES('integrity-check') }
   116    if {[set_test_counter errors]} break
   117  }
   118  
   119  #-------------------------------------------------------------------------
   120  #
   121  reset_db
   122  do_execsql_test 5.0 {
   123    CREATE VIRTUAL TABLE t1 USING fts5(x,y, detail=%DETAIL%);
   124    INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
   125  }
   126  foreach {i x y} {
   127     1  {dd abc abc abc abcde} {aaa dd ddd ddd aab}
   128     2  {dd aab d aaa b} {abcde c aaa aaa aaa}
   129     3  {abcde dd b b dd} {abc abc d abc ddddd}
   130     4  {aaa abcde dddd dddd abcde} {abc b b abcde abc}
   131     5  {aab dddd d dddd c} {ddd abcde dddd abcde c}
   132     6  {ddd dd b aab abcde} {d ddddd dddd c abc}
   133     7  {d ddddd ddd c abcde} {c aab d abcde ddd}
   134     8  {abcde aaa aab c c} {ddd c dddd b aaa}
   135     9  {abcde aab ddddd c aab} {dddd dddd b c dd}
   136     10 {ddd abcde dddd dd c} {dddd c c d abcde}
   137  } {
   138    do_execsql_test 5.$i.1 { INSERT INTO t1 VALUES($x, $y) }
   139    do_execsql_test 5.$i.2 { INSERT INTO t1(t1) VALUES('integrity-check') }
   140    if {[set_test_counter errors]} break
   141  }
   142  
   143  #-------------------------------------------------------------------------
   144  #
   145  reset_db
   146  do_execsql_test 6.0 {
   147    CREATE VIRTUAL TABLE t1 USING fts5(x,y, detail=%DETAIL%);
   148    INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
   149  }
   150  
   151  do_execsql_test 6.1 {
   152    INSERT  INTO t1(rowid, x, y) VALUES(22, 'a b c', 'c b a');
   153    REPLACE INTO t1(rowid, x, y) VALUES(22, 'd e f', 'f e d');
   154  }
   155  
   156  do_execsql_test 6.2 {
   157    INSERT INTO t1(t1) VALUES('integrity-check') 
   158  }
   159  
   160  do_execsql_test 6.3 {
   161    REPLACE INTO t1(rowid, x, y) VALUES('22', 'l l l', 'l l l');
   162  }
   163  
   164  do_execsql_test 6.4 {
   165    REPLACE INTO t1(x, y) VALUES('x y z', 'x y z');
   166  }
   167  
   168  do_execsql_test 6.5 {
   169    INSERT INTO t1(t1) VALUES('integrity-check') 
   170  }
   171  
   172  do_execsql_test 6.6 {
   173    SELECT rowid, * FROM t1;
   174  } {
   175    22 {l l l} {l l l}
   176    23 {x y z} {x y z}
   177  }
   178  
   179  #-------------------------------------------------------------------------
   180  #
   181  reset_db
   182  expr srand(0)
   183  do_execsql_test 7.0 {
   184    CREATE VIRTUAL TABLE t1 USING fts5(x,y,z);
   185    INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
   186  }
   187  
   188  proc doc {} {
   189    set v [list aaa aab abc abcde b c d dd ddd dddd ddddd]
   190    set ret [list]
   191    for {set j 0} {$j < 20} {incr j} {
   192      lappend ret [lindex $v [expr int(rand()*[llength $v])]]
   193    }
   194    return $ret
   195  }
   196  
   197  proc dump_structure {} {
   198    db eval {SELECT fts5_decode(id, block) AS t FROM t1_data WHERE id=10} {
   199      foreach lvl [lrange $t 1 end] {
   200        set seg [string repeat . [expr [llength $lvl]-2]]
   201        puts "[lrange $lvl 0 1] $seg"
   202      }
   203    }
   204  }
   205  
   206  for {set i 1} {$i <= 10} {incr i} {
   207    do_test 7.$i {
   208      for {set j 0} {$j < 10} {incr j} {
   209        set x [doc]
   210        set y [doc]
   211        set z [doc]
   212        set rowid [expr int(rand() * 100)]
   213        execsql { REPLACE INTO t1(rowid,x,y,z) VALUES($rowid, $x, $y, $z) }
   214      }
   215      execsql { INSERT INTO t1(t1) VALUES('integrity-check'); }
   216    } {}
   217    if {[set_test_counter errors]} break
   218  }
   219  
   220  #-------------------------------------------------------------------------
   221  #
   222  reset_db
   223  do_execsql_test 8.0 {
   224    CREATE VIRTUAL TABLE t1 USING fts5(x, prefix="1,2,3");
   225    INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
   226  }
   227  
   228  do_execsql_test 8.1 {
   229    INSERT INTO t1 VALUES('the quick brown fox');
   230    INSERT INTO t1(t1) VALUES('integrity-check');
   231  }
   232  
   233  
   234  #-------------------------------------------------------------------------
   235  #
   236  reset_db
   237  
   238  expr srand(0)
   239  
   240  do_execsql_test 9.0 {
   241    CREATE VIRTUAL TABLE t1 USING fts5(x,y,z, prefix="1,2,3");
   242    INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
   243  }
   244  
   245  proc doc {} {
   246    set v [list aaa aab abc abcde b c d dd ddd dddd ddddd]
   247    set ret [list]
   248    for {set j 0} {$j < 20} {incr j} {
   249      lappend ret [lindex $v [expr int(rand()*[llength $v])]]
   250    }
   251    return $ret
   252  }
   253  
   254  proc dump_structure {} {
   255    db eval {SELECT fts5_decode(id, block) AS t FROM t1_data WHERE id=10} {
   256      foreach lvl [lrange $t 1 end] {
   257        set seg [string repeat . [expr [llength $lvl]-2]]
   258        puts "[lrange $lvl 0 1] $seg"
   259      }
   260    }
   261  }
   262  
   263  for {set i 1} {$i <= 10} {incr i} {
   264    do_test 9.$i {
   265      for {set j 0} {$j < 100} {incr j} {
   266        set x [doc]
   267        set y [doc]
   268        set z [doc]
   269        set rowid [expr int(rand() * 100)]
   270        execsql { REPLACE INTO t1(rowid,x,y,z) VALUES($rowid, $x, $y, $z) }
   271      }
   272      execsql { INSERT INTO t1(t1) VALUES('integrity-check'); }
   273    } {}
   274    if {[set_test_counter errors]} break
   275  }
   276  
   277  
   278  #-------------------------------------------------------------------------
   279  #
   280  reset_db
   281  do_execsql_test 10.0 {
   282    CREATE VIRTUAL TABLE t1 USING fts5(x,y, detail=%DETAIL%);
   283  }
   284  set d10 {
   285     1  {g f d b f} {h h e i a}
   286     2  {f i g j e} {i j c f f}
   287     3  {e e i f a} {e h f d f}
   288     4  {h j f j i} {h a c f j}
   289     5  {d b j c g} {f e i b e}
   290     6  {a j a e e} {j d f d e}
   291     7  {g i j c h} {j d h c a}
   292     8  {j j i d d} {e e d f b}
   293     9  {c j j d c} {h j i f g}
   294    10  {b f h i a} {c f b b j}
   295  }
   296  foreach {rowid x y} $d10 {
   297    do_execsql_test 10.1.$rowid.1 { INSERT INTO t1 VALUES($x, $y) }
   298    do_execsql_test 10.1.$rowid.2 { INSERT INTO t1(t1) VALUES('integrity-check') }
   299  }
   300  foreach rowid {5 9 8 1 2 4 10 7 3 5 6} {
   301    do_execsql_test 10.2.$rowid.1 { DELETE FROM t1 WHERE rowid = $rowid }
   302    do_execsql_test 10.2.$rowid.2 { INSERT INTO t1(t1) VALUES('integrity-check') }
   303  }
   304  foreach {rowid x y} $d10 {
   305    do_execsql_test 10.3.$rowid.1 { INSERT INTO t1 VALUES($x, $y) }
   306    do_execsql_test 10.3.$rowid.2 { INSERT INTO t1(t1) VALUES('integrity-check') }
   307  }
   308  
   309  do_execsql_test 10.4.1 { DELETE FROM t1 }
   310  do_execsql_test 10.4.2 { INSERT INTO t1(t1) VALUES('integrity-check') }
   311  
   312  #-------------------------------------------------------------------------
   313  #
   314  do_catchsql_test 11.1 {
   315    CREATE VIRTUAL TABLE t2 USING fts5(a, b, c, rank, detail=%DETAIL%);
   316  } {1 {reserved fts5 column name: rank}}
   317  do_catchsql_test 11.2 {
   318    CREATE VIRTUAL TABLE rank USING fts5(a, b, c, detail=%DETAIL%);
   319  } {1 {reserved fts5 table name: rank}}
   320  do_catchsql_test 11.3 {
   321    CREATE VIRTUAL TABLE t2 USING fts5(a, b, c, rowid, detail=%DETAIL%);
   322  } {1 {reserved fts5 column name: rowid}}
   323  
   324  #-------------------------------------------------------------------------
   325  #
   326  do_execsql_test 12.1 {
   327    CREATE VIRTUAL TABLE t2 USING fts5(x,y, detail=%DETAIL%);
   328  } {}
   329  
   330  do_catchsql_test 12.2 {
   331    SELECT t2 FROM t2 WHERE t2 MATCH '*stuff'
   332  } {1 {unknown special query: stuff}}
   333  
   334  do_test 12.3 {
   335    set res [db eval { SELECT t2 FROM t2 WHERE t2 MATCH '* reads ' }]
   336    string is integer $res
   337  } {1}
   338  
   339  #-------------------------------------------------------------------------
   340  #
   341  reset_db
   342  do_execsql_test 13.1 {
   343    CREATE VIRTUAL TABLE t1 USING fts5(x, detail=%DETAIL%);
   344    INSERT INTO t1(rowid, x) VALUES(1, 'o n e'), (2, 't w o');
   345  } {}
   346  
   347  do_execsql_test 13.2 {
   348    SELECT rowid FROM t1 WHERE t1 MATCH 'o';
   349  } {1 2}
   350  
   351  do_execsql_test 13.4 {
   352    DELETE FROM t1 WHERE rowid=2;
   353  } {}
   354  
   355  do_execsql_test 13.5 {
   356    SELECT rowid FROM t1 WHERE t1 MATCH 'o';
   357  } {1}
   358  
   359  do_execsql_test 13.6 {
   360    SELECT rowid FROM t1 WHERE t1 MATCH '""';
   361  } {}
   362  
   363  #-------------------------------------------------------------------------
   364  #
   365  reset_db
   366  do_execsql_test 14.1 {
   367    CREATE VIRTUAL TABLE t1 USING fts5(x, y, detail=%DETAIL%);
   368    INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
   369    WITH d(x,y) AS (
   370      SELECT NULL, 'xyz xyz xyz xyz xyz xyz'
   371      UNION ALL 
   372      SELECT NULL, 'xyz xyz xyz xyz xyz xyz' FROM d
   373    )
   374    INSERT INTO t1 SELECT * FROM d LIMIT 200;
   375  }
   376  
   377  do_execsql_test 15.x {
   378    INSERT INTO t1(t1) VALUES('integrity-check');
   379  }
   380  
   381  do_test 14.2 {
   382    set nRow 0
   383    db eval { SELECT * FROM t1 WHERE t1 MATCH 'xyz' } {
   384      db eval {
   385        BEGIN;
   386          CREATE TABLE t2(a, b);
   387        ROLLBACK;
   388      }
   389      incr nRow
   390    }
   391    set nRow
   392  } {200}
   393  
   394  do_test 14.3 {
   395    set nRow 0
   396    db eval { BEGIN; }
   397    db eval { SELECT * FROM t1 WHERE t1 MATCH 'xyz' } {
   398      db eval {
   399        SAVEPOINT aaa;
   400          CREATE TABLE t2(a, b);
   401        ROLLBACK TO aaa;
   402        RELEASE aaa;
   403      }
   404      incr nRow
   405    }
   406    set nRow
   407  } {200}
   408  
   409  do_execsql_test 15.0 {
   410    INSERT INTO t1(t1) VALUES('integrity-check');
   411  }
   412  do_execsql_test 15.1 {
   413    UPDATE t1_content SET c1 = 'xyz xyz xyz xyz xyz abc' WHERE rowid = 1;
   414  }
   415  do_catchsql_test 15.2 {
   416    INSERT INTO t1(t1) VALUES('integrity-check');
   417  } {1 {database disk image is malformed}}
   418  
   419  #-------------------------------------------------------------------------
   420  #
   421  do_execsql_test 16.1 {
   422    CREATE VIRTUAL TABLE n1 USING fts5(a);
   423    INSERT INTO n1 VALUES('a b c d');
   424  }
   425  
   426  proc funk {} {
   427    db eval { UPDATE n1_config SET v=50 WHERE k='version' }
   428    set fd [db incrblob main n1_data block 10]
   429    fconfigure $fd -encoding binary -translation binary
   430    puts -nonewline $fd "\x44\x45"
   431    close $fd
   432  }
   433  db func funk funk
   434  
   435  # This test case corrupts the structure record within the first invocation
   436  # of function funk(). Which used to cause the bm25() function to throw an
   437  # exception. But since bm25() can now used the cached structure record,
   438  # it never sees the corruption introduced by funk() and so the following 
   439  # statement no longer fails.
   440  #
   441  do_catchsql_test 16.2 {
   442    SELECT funk(), bm25(n1), funk() FROM n1 WHERE n1 MATCH 'a+b+c+d'
   443  } {0 {{} -1e-06 {}}}
   444  # {1 {SQL logic error}}
   445  
   446  #-------------------------------------------------------------------------
   447  #
   448  reset_db
   449  do_execsql_test 17.1 {
   450    CREATE VIRTUAL TABLE b2 USING fts5(x, detail=%DETAIL%);
   451    INSERT INTO b2 VALUES('a');
   452    INSERT INTO b2 VALUES('b');
   453    INSERT INTO b2 VALUES('c');
   454  }
   455  
   456  do_test 17.2 {
   457    set res [list]
   458    db eval { SELECT * FROM b2 ORDER BY rowid ASC } {
   459      lappend res [execsql { SELECT * FROM b2 ORDER BY rowid ASC }]
   460    }
   461    set res
   462  } {{a b c} {a b c} {a b c}}
   463  
   464  if {[string match n* %DETAIL%]==0} {
   465    reset_db
   466    do_execsql_test 17.3 {
   467      CREATE VIRTUAL TABLE c2 USING fts5(x, y, detail=%DETAIL%);
   468      INSERT INTO c2 VALUES('x x x', 'x x x');
   469      SELECT rowid FROM c2 WHERE c2 MATCH 'y:x';
   470    } {1}
   471  }
   472  
   473  #-------------------------------------------------------------------------
   474  #
   475  reset_db
   476  do_execsql_test 17.1 {
   477    CREATE VIRTUAL TABLE uio USING fts5(ttt, detail=%DETAIL%);
   478    INSERT INTO uio VALUES(NULL);
   479    INSERT INTO uio SELECT NULL FROM uio;
   480    INSERT INTO uio SELECT NULL FROM uio;
   481    INSERT INTO uio SELECT NULL FROM uio;
   482    INSERT INTO uio SELECT NULL FROM uio;
   483    INSERT INTO uio SELECT NULL FROM uio;
   484    INSERT INTO uio SELECT NULL FROM uio;
   485    INSERT INTO uio SELECT NULL FROM uio;
   486    INSERT INTO uio SELECT NULL FROM uio;
   487    SELECT count(*) FROM uio;
   488  } {256}
   489  
   490  do_execsql_test 17.2 {
   491    SELECT count(*) FROM uio WHERE rowid BETWEEN 8 AND 17
   492  } {10}
   493  do_execsql_test 17.3 {
   494    SELECT rowid FROM uio WHERE rowid BETWEEN 8 AND 17
   495  } {8 9 10 11 12 13 14 15 16 17}
   496  do_execsql_test 17.4 {
   497    SELECT rowid FROM uio WHERE rowid BETWEEN 8 AND 17 ORDER BY rowid DESC
   498  } {17 16 15 14 13 12 11 10 9 8}
   499  do_execsql_test 17.5 {
   500    SELECT count(*) FROM uio
   501  } {256}
   502  
   503  do_execsql_test 17.6 {
   504    INSERT INTO uio(rowid) VALUES(9223372036854775807);
   505    INSERT INTO uio(rowid) VALUES(-9223372036854775808);
   506    SELECT count(*) FROM uio;
   507  } {258}
   508  do_execsql_test 17.7 {
   509    SELECT min(rowid), max(rowid) FROM uio;
   510  } {-9223372036854775808 9223372036854775807}
   511  
   512  do_execsql_test 17.8 {
   513    INSERT INTO uio DEFAULT VALUES;
   514    SELECT min(rowid), max(rowid), count(*) FROM uio;
   515  } {-9223372036854775808 9223372036854775807 259}
   516  
   517  do_execsql_test 17.9 {
   518    SELECT min(rowid), max(rowid), count(*) FROM uio WHERE rowid < 10;
   519  } {-9223372036854775808 9 10}
   520  
   521  #--------------------------------------------------------------------
   522  #
   523  do_execsql_test 18.1 {
   524    CREATE VIRTUAL TABLE t1 USING fts5(a, b, detail=%DETAIL%);
   525    CREATE VIRTUAL TABLE t2 USING fts5(c, d, detail=%DETAIL%);
   526    INSERT INTO t1 VALUES('abc*', NULL);
   527    INSERT INTO t2 VALUES(1, 'abcdefg');
   528  }
   529  do_execsql_test 18.2 {
   530    SELECT t1.rowid, t2.rowid FROM t1, t2 WHERE t2 MATCH t1.a AND t1.rowid = t2.c
   531  } {1 1}
   532  do_execsql_test 18.3 {
   533    SELECT t1.rowid, t2.rowid FROM t2, t1 WHERE t2 MATCH t1.a AND t1.rowid = t2.c
   534  } {1 1}
   535  
   536  #--------------------------------------------------------------------
   537  # fts5 table in the temp schema.
   538  #
   539  reset_db
   540  do_execsql_test 19.0 {
   541    CREATE VIRTUAL TABLE temp.t1 USING fts5(x, detail=%DETAIL%);
   542    INSERT INTO t1 VALUES('x y z');
   543    INSERT INTO t1 VALUES('w x 1');
   544    SELECT rowid FROM t1 WHERE t1 MATCH 'x';
   545  } {1 2}
   546  
   547  #--------------------------------------------------------------------
   548  # Test that 6 and 7 byte varints can be read.
   549  #
   550  reset_db
   551  do_execsql_test 20.0 {
   552    CREATE VIRTUAL TABLE temp.tmp USING fts5(x, detail=%DETAIL%);
   553  }
   554  set ::ids [list \
   555    0 [expr 1<<36] [expr 2<<36] [expr 1<<43] [expr 2<<43]
   556  ]
   557  do_test 20.1 {
   558    foreach id $::ids {
   559      execsql { INSERT INTO tmp(rowid, x) VALUES($id, 'x y z') }
   560    }
   561    execsql { SELECT rowid FROM tmp WHERE tmp MATCH 'y' }
   562  } $::ids
   563  
   564  #--------------------------------------------------------------------
   565  # Test that a DROP TABLE may be executed within a transaction that
   566  # writes to an FTS5 table.
   567  #
   568  do_execsql_test 21.0 {
   569    CREATE TEMP TABLE t8(a, b);
   570    CREATE VIRTUAL TABLE ft USING fts5(x, detail=%DETAIL%);
   571  }
   572  
   573  do_execsql_test 21.1 {
   574    BEGIN;
   575      INSERT INTO ft VALUES('a b c');
   576      DROP TABLE t8;
   577    COMMIT;
   578  }
   579  
   580  do_execsql_test 22.0 {
   581    CREATE VIRTUAL TABLE t9 USING fts5(x, detail=%DETAIL%);
   582    INSERT INTO t9(rowid, x) VALUES(2, 'bbb');
   583    BEGIN;
   584      INSERT INTO t9(rowid, x) VALUES(1, 'aaa');
   585      DELETE FROM t9 WHERE rowid = 2;
   586      INSERT INTO t9(rowid, x) VALUES(3, 'bbb');
   587    COMMIT;
   588  }
   589  
   590  do_execsql_test 22.1 {
   591    SELECT rowid FROM t9('a*')
   592  } {1}
   593  
   594  }
   595  
   596  
   597  finish_test