blob: c2f2211bcec3e874b2793ea70d67aaba35ba3df4 [file] [log] [blame]
# 2014 October 21
#
# 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.
#
if {![info exists testdir]} {
set testdir [file join [file dirname [info script]] .. .. test]
}
source $testdir/tester.tcl
set ::testprefix rbu7
# Test index:
#
# 1.*: That affinities are correctly applied to values within the
# RBU database.
#
# 2.*: Tests for multi-column primary keys.
#
do_test 1.0 {
execsql {
CREATE TABLE t1(a INT PRIMARY KEY, b) WITHOUT ROWID;
INSERT INTO t1 VALUES(1, 'abc');
INSERT INTO t1 VALUES(2, 'def');
}
forcedelete rbu.db
sqlite3 rbu rbu.db
rbu eval {
CREATE TABLE data_t1(a, b, rbu_control);
INSERT INTO data_t1 VALUES('1', NULL, 1);
}
rbu close
} {}
do_test 1.1 {
sqlite3rbu rbu test.db rbu.db
while { [rbu step]=="SQLITE_OK" } {}
rbu close
} {SQLITE_DONE}
sqlite3 db test.db
do_execsql_test 1.2 {
SELECT * FROM t1
} {2 def}
#-------------------------------------------------------------------------
#
foreach {tn tbl} {
1 { CREATE TABLE t1(a, b, c, PRIMARY KEY(a, b)) WITHOUT ROWID }
2 { CREATE TABLE t1(a, b, c, PRIMARY KEY(a, b)) }
} {
reset_db
execsql $tbl
do_execsql_test 2.$tn.1 {
CREATE INDEX t1c ON t1(c);
INSERT INTO t1 VALUES(1, 1, 'a');
INSERT INTO t1 VALUES(1, 2, 'b');
INSERT INTO t1 VALUES(2, 1, 'c');
INSERT INTO t1 VALUES(2, 2, 'd');
}
do_test 2.$tn.2 {
forcedelete rbu.db
sqlite3 rbu rbu.db
execsql {
CREATE TABLE data_t1(a, b, c, rbu_control);
INSERT INTO data_t1 VALUES(3, 1, 'e', 0);
INSERT INTO data_t1 VALUES(3, 2, 'f', 0);
INSERT INTO data_t1 VALUES(1, 2, NULL, 1);
INSERT INTO data_t1 VALUES(2, 1, 'X', '..x');
} rbu
rbu close
} {}
do_test 2.$tn.3 {
set rc "SQLITE_OK"
while {$rc == "SQLITE_OK"} {
sqlite3rbu rbu test.db rbu.db
rbu step
set rc [rbu close]
}
set rc
} {SQLITE_DONE}
do_execsql_test 2.$tn.1 {
SELECT * FROM t1 ORDER BY a, b
} {
1 1 a
2 1 X
2 2 d
3 1 e
3 2 f
}
}
finish_test