| # 2011 March 18 | |
| # | |
| # 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 implements regression tests for SQLite library. | |
| # | |
| # This file implements tests to verify that ticket | |
| # [f7b4edece25c994857dc139207f55a53c8319fae] has been fixed. | |
| # | |
| set testdir [file dirname $argv0] | |
| source $testdir/tester.tcl | |
| # Open two database connections to the same database file in | |
| # shared cache mode. Create update hooks that will fire on | |
| # each connection. | |
| # | |
| db close | |
| set ::enable_shared_cache [sqlite3_enable_shared_cache 1] | |
| sqlite3 db1 test.db | |
| sqlite3 db2 test.db | |
| unset -nocomplain HOOKS | |
| set HOOKS {} | |
| proc update_hook {args} { lappend ::HOOKS $args } | |
| db1 update_hook update_hook | |
| db2 update_hook update_hook | |
| # Create a prepared statement | |
| # | |
| do_test tkt-f7b4edec-1 { | |
| execsql { CREATE TABLE t1(x, y); } db1 | |
| execsql { INSERT INTO t1 VALUES(1, 2) } db1 | |
| set ::HOOKS | |
| } {{INSERT main t1 1}} | |
| # In the second database connection cause the schema to be reparsed | |
| # without changing the schema cookie. | |
| # | |
| set HOOKS {} | |
| do_test tkt-f7b4edec-2 { | |
| execsql { | |
| BEGIN; | |
| DROP TABLE t1; | |
| CREATE TABLE t1(x, y); | |
| ROLLBACK; | |
| } db2 | |
| set ::HOOKS | |
| } {} | |
| # Rerun the prepared statement that was created prior to the | |
| # schema reparse. Verify that the update-hook gives the correct | |
| # output. | |
| # | |
| set HOOKS {} | |
| do_test tkt-f7b4edec-3 { | |
| execsql { INSERT INTO t1 VALUES(1, 2) } db1 | |
| set ::HOOKS | |
| } {{INSERT main t1 2}} | |
| # Be sure to restore the original shared-cache mode setting before | |
| # returning. | |
| # | |
| db1 close | |
| db2 close | |
| sqlite3_enable_shared_cache $::enable_shared_cache | |
| finish_test |