summaryrefslogtreecommitdiffstats
path: root/ext/rbu/rbu13.test
diff options
context:
space:
mode:
Diffstat (limited to 'ext/rbu/rbu13.test')
-rw-r--r--ext/rbu/rbu13.test64
1 files changed, 64 insertions, 0 deletions
diff --git a/ext/rbu/rbu13.test b/ext/rbu/rbu13.test
new file mode 100644
index 0000000..624c587
--- /dev/null
+++ b/ext/rbu/rbu13.test
@@ -0,0 +1,64 @@
+# 2015 February 16
+#
+# 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.
+#
+#***********************************************************************
+#
+# Test an RBU update that features lots of different rbu_control strings
+# for UPDATE statements. This tests RBU's internal UPDATE statement cache.
+#
+
+if {![info exists testdir]} {
+ set testdir [file join [file dirname [info script]] .. .. test]
+}
+source $testdir/tester.tcl
+source $testdir/lock_common.tcl
+set ::testprefix rbu13
+
+do_execsql_test 1.0 {
+ CREATE TABLE t1(a PRIMARY KEY, b, c, d, e, f, g, h);
+ WITH ii(i) AS (SELECT 0 UNION ALL SELECT i+1 FROM ii WHERE i<127)
+ INSERT INTO t1 SELECT i, 0, 0, 0, 0, 0, 0, 0 FROM ii;
+}
+
+forcedelete rbu.db
+do_execsql_test 1.1 {
+ ATTACH 'rbu.db' AS rbu;
+ CREATE TABLE rbu.data_t1(a, b, c, d, e, f, g, h, rbu_control);
+}
+
+do_test 1.2 {
+ for {set i 0} {$i<128} {incr i} {
+ set control "."
+ for {set bit 6} {$bit>=0} {incr bit -1} {
+ if { $i & (1<<$bit) } {
+ append control "x"
+ } else {
+ append control "."
+ }
+ }
+ execsql { INSERT INTO data_t1 VALUES($i, 1, 1, 1, 1, 1, 1, 1, $control) }
+ }
+} {}
+
+do_test 1.3 {
+ sqlite3rbu rbu test.db rbu.db
+ while 1 {
+ set rc [rbu step]
+ if {$rc!="SQLITE_OK"} break
+ }
+ rbu close
+} {SQLITE_DONE}
+
+do_execsql_test 1.4 {
+ SELECT count(*) FROM t1 WHERE
+ a == ( (b<<6) + (c<<5) + (d<<4) + (e<<3) + (f<<2) + (g<<1) + (h<<0) )
+} {128}
+
+
+finish_test