Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Prohibit the user from changing the temporary storage medium (pragma temp_store) while there is a read transaction open on the temporary database. Add tests to shared.test to cover a few more lines in btree.c. (CVS 5362) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
92e0cf9a08a8b337a8f239afb048a0e0 |
User & Date: | danielk1977 2008-07-08 07:35:52.000 |
Context
2008-07-08
| ||
10:19 | Improve coverage of btree.c. (CVS 5363) (check-in: f6d9cb835b user: danielk1977 tags: trunk) | |
07:35 | Prohibit the user from changing the temporary storage medium (pragma temp_store) while there is a read transaction open on the temporary database. Add tests to shared.test to cover a few more lines in btree.c. (CVS 5362) (check-in: 92e0cf9a08 user: danielk1977 tags: trunk) | |
03:04 | change to use sqlite_uint64 for MSVC compile; (CVS 5361) (check-in: 369118ca2e user: shane tags: trunk) | |
Changes
Changes to src/pragma.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* ** 2003 April 6 ** ** 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 code used to implement the PRAGMA command. ** | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* ** 2003 April 6 ** ** 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 code used to implement the PRAGMA command. ** ** $Id: pragma.c,v 1.182 2008/07/08 07:35:52 danielk1977 Exp $ */ #include "sqliteInt.h" #include <ctype.h> /* Ignore this whole file if pragmas are disabled */ #if !defined(SQLITE_OMIT_PRAGMA) && !defined(SQLITE_OMIT_PARSER) |
︙ | ︙ | |||
107 108 109 110 111 112 113 | /* ** Invalidate temp storage, either when the temp storage is changed ** from default, or when 'file' and the temp_store_directory has changed */ static int invalidateTempStorage(Parse *pParse){ sqlite3 *db = pParse->db; if( db->aDb[1].pBt!=0 ){ | | | 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | /* ** Invalidate temp storage, either when the temp storage is changed ** from default, or when 'file' and the temp_store_directory has changed */ static int invalidateTempStorage(Parse *pParse){ sqlite3 *db = pParse->db; if( db->aDb[1].pBt!=0 ){ if( !db->autoCommit || sqlite3BtreeIsInReadTrans(db->aDb[1].pBt) ){ sqlite3ErrorMsg(pParse, "temporary storage cannot be changed " "from within a transaction"); return SQLITE_ERROR; } sqlite3BtreeClose(db->aDb[1].pBt); db->aDb[1].pBt = 0; sqlite3ResetInternalSchema(db, 0); |
︙ | ︙ |
Changes to test/pragma.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for the PRAGMA command. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for the PRAGMA command. # # $Id: pragma.test,v 1.63 2008/07/08 07:35:52 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Test organization: # # pragma-1.*: Test cache_size, default_cache_size and synchronous on main db. |
︙ | ︙ | |||
973 974 975 976 977 978 979 980 981 982 983 984 985 986 | } {1 {temporary storage cannot be changed from within a transaction}} do_test pragma-9.16 { execsql { SELECT * FROM temp_table; COMMIT; } } {{valuable data}} } ;# ifcapable pager_pragmas ifcapable trigger { do_test pragma-10.0 { catchsql { DROP TABLE main.t1; | > > > > > > > > > > > > > > > > > | 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 | } {1 {temporary storage cannot be changed from within a transaction}} do_test pragma-9.16 { execsql { SELECT * FROM temp_table; COMMIT; } } {{valuable data}} do_test pragma-9.17 { execsql { INSERT INTO temp_table VALUES('valuable data II'); SELECT * FROM temp_table; } } {{valuable data} {valuable data II}} do_test pragma-9.18 { set rc [catch { db eval {SELECT t FROM temp_table} { execsql {pragma temp_store = 1} } } msg] list $rc $msg } {1 {temporary storage cannot be changed from within a transaction}} } ;# ifcapable pager_pragmas ifcapable trigger { do_test pragma-10.0 { catchsql { DROP TABLE main.t1; |
︙ | ︙ |
Changes to test/shared.test.
1 2 3 4 5 6 7 8 9 10 11 | # 2005 December 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. # #*********************************************************************** # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 2005 December 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. # #*********************************************************************** # # $Id: shared.test,v 1.33 2008/07/08 07:35:52 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl db close # These tests cannot be run without the ATTACH command. # |
︙ | ︙ | |||
933 934 935 936 937 938 939 940 | do_test shared-$av.12.X { db close foreach h $::db_handles { $h close } } {} | > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 | do_test shared-$av.12.X { db close foreach h $::db_handles { $h close } } {} # Internally, locks are acquired on shared B-Tree structures in the order # that the structures appear in the virtual memory address space. This # test case attempts to cause the order of the structures in memory # to be different from the order in which they are attached to a given # database handle. This covers an extra line or two. # do_test shared-$av.13.1 { file delete -force test2.db test3.db test4.db test5.db sqlite3 db :memory: execsql { ATTACH 'test2.db' AS aux2; ATTACH 'test3.db' AS aux3; ATTACH 'test4.db' AS aux4; ATTACH 'test5.db' AS aux5; DETACH aux2; DETACH aux3; DETACH aux4; ATTACH 'test2.db' AS aux2; ATTACH 'test3.db' AS aux3; ATTACH 'test4.db' AS aux4; } } {} do_test shared-$av.13.2 { execsql { CREATE TABLE t1(a, b, c); CREATE TABLE aux2.t2(a, b, c); CREATE TABLE aux3.t3(a, b, c); CREATE TABLE aux4.t4(a, b, c); CREATE TABLE aux5.t5(a, b, c); SELECT count(*) FROM aux2.sqlite_master, aux3.sqlite_master, aux4.sqlite_master, aux5.sqlite_master } } {1} do_test shared-$av.13.3 { db close } {} # Test that nothing horrible happens if a connection to a shared B-Tree # structure is closed while some other connection has an open cursor. # do_test shared-$av.14.1 { sqlite3 db test.db sqlite3 db2 test.db execsql {SELECT name FROM sqlite_master} } {db1 db2 db3 db4 db5 db6 db7 db8 db9 db10 db11 db12 db13 db14} do_test shared-$av.14.2 { set res [list] db eval {SELECT name FROM sqlite_master} { if {$name eq "db7"} { db2 close } lappend res $name } set res } {db1 db2 db3 db4 db5 db6 db7 db8 db9 db10 db11 db12 db13 db14} do_test shared-$av.14.3 { db close } {} } sqlite3_enable_shared_cache $::enable_shared_cache finish_test |