| # 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. |
| # |
| |
| source [file join [file dirname [info script]] rbu_common.tcl] |
| if_no_rbu_support { finish_test ; return } |
| 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 |