/ Artifact [17db7d96]

Artifact 17db7d968b3d073788bcba044c498d09e830726b:

# 2014 August 30
# 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.
# This file contains tests for the RBU module. More specifically, it
# contains tests to ensure that RBU works with FTS tables.

if {![info exists testdir]} {
  set testdir [file join [file dirname [info script]] .. .. test]
source $testdir/tester.tcl
set ::testprefix rbufts

ifcapable !fts3 {

proc step_rbu {target rbu} {
  while 1 {
    sqlite3rbu rbu $target $rbu
    set rc [rbu step]
    rbu close
    if {$rc != "SQLITE_OK"} break
  set rc

do_execsql_test 1.0 {
  CREATE VIRTUAL TABLE xx USING fts4(content=t1, a, b);
  INSERT INTO t1(rowid, a, b) VALUES(10, 'a b c', 'c b a');
  INSERT INTO t1(rowid, a, b) VALUES(20, 'a b c', 'd e f');
  INSERT INTO t1(rowid, a, b) VALUES(30, 'd e f', 'a b c');
  INSERT INTO t1(rowid, a, b) VALUES(40, 'd e f', 'd e f');

do_execsql_test 1.1 {
  INSERT INTO xx(xx) VALUES('rebuild');
  INSERT INTO xx(xx) VALUES('integrity-check');

forcedelete rbu.db
do_test 2.0 {
  sqlite3 dbrbu rbu.db
  dbrbu eval {
    CREATE TABLE data_t1(i, a, b, rbu_control);
    INSERT INTO data_t1 VALUES(20, NULL, NULL, 1);        -- delete
    INSERT INTO data_t1 VALUES(30, 'x y z', NULL, '.x.'); -- update
    INSERT INTO data_t1 VALUES(50, '1 2 3', 'x y z', 0);  -- insert

    CREATE VIEW data0_xx AS 
    SELECT i AS rbu_rowid, a, b, 
    CASE WHEN rbu_control IN (0, 1) 
    THEN rbu_control ELSE substr(rbu_control, 2) END AS rbu_control
    FROM data_t1;

  dbrbu close

  step_rbu test.db rbu.db

do_execsql_test 2.1 {
  INSERT INTO xx(xx) VALUES('integrity-check');