⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shared.test

📁 sqlite-3.4.1,嵌入式数据库.是一个功能强大的开源数据库,给学习和研发以及小型公司的发展带来了全所未有的好处.
💻 TEST
📖 第 1 页 / 共 2 页
字号:
    } db1  } {}}ifcapable trigger {  do_test shared-$av.5.1.4 {    execsql {      CREATE TRIGGER test1.trig1 AFTER INSERT ON t1 BEGIN        INSERT INTO t1 VALUES(new.a, new.b);      END;    } db1  } {}}do_test shared-$av.5.1.5 {  execsql {    DROP INDEX i1;  } db2} {}ifcapable view {  do_test shared-$av.5.1.6 {    execsql {      DROP VIEW v1;    } db2  } {}}ifcapable trigger {  do_test shared-$av.5.1.7 {    execsql {      DROP TRIGGER trig1;    } db2  } {}}do_test shared-$av.5.1.8 {  execsql {    DROP TABLE t1;  } db2} {}ifcapable compound {  do_test shared-$av.5.1.9 {    execsql {      SELECT * FROM sqlite_master UNION ALL SELECT * FROM test1.sqlite_master    } db1  } {}}#--------------------------------------------------------------------------# Tests shared-6.* test that a query obtains all the read-locks it needs# before starting execution of the query. This means that there is no chance# some rows of data will be returned before a lock fails and SQLITE_LOCK# is returned.#do_test shared-$av.6.1.1 {  execsql {    CREATE TABLE t1(a, b);    CREATE TABLE t2(a, b);    INSERT INTO t1 VALUES(1, 2);    INSERT INTO t2 VALUES(3, 4);  } db1} {}ifcapable compound {  do_test shared-$av.6.1.2 {    execsql {      SELECT * FROM t1 UNION ALL SELECT * FROM t2;    } db2  } {1 2 3 4}}do_test shared-$av.6.1.3 {  # Establish a write lock on table t2 via connection db2. Then make a   # UNION all query using connection db1 that first accesses t1, followed   # by t2. If the locks are grabbed at the start of the statement (as   # they should be), no rows are returned. If (as was previously the case)  # they are grabbed as the tables are accessed, the t1 rows will be   # returned before the query fails.  #  execsql {    BEGIN;    INSERT INTO t2 VALUES(5, 6);  } db2  set ret [list]  catch {    db1 eval {SELECT * FROM t1 UNION ALL SELECT * FROM t2} {      lappend ret $a $b    }  }  set ret} {}do_test shared-$av.6.1.4 {  execsql {    COMMIT;    BEGIN;    INSERT INTO t1 VALUES(7, 8);  } db2  set ret [list]  catch {    db1 eval {      SELECT (CASE WHEN a>4 THEN (SELECT a FROM t1) ELSE 0 END) AS d FROM t2;    } {      lappend ret $d    }  }  set ret} {}catch {db1 close}catch {db2 close}foreach f [list test.db test2.db] {  file delete -force $f ${f}-journal}#--------------------------------------------------------------------------# Tests shared-7.* test auto-vacuum does not invalidate cursors from# other shared-cache users when it reorganizes the database on # COMMIT.#do_test shared-$av.7.1 {  # This test case sets up a test database in auto-vacuum mode consisting   # of two tables, t1 and t2. Both have a single index. Table t1 is   # populated first (so consists of pages toward the start of the db file),   # t2 second (pages toward the end of the file).   sqlite3 db test.db  sqlite3 db2 test.db  execsql {    BEGIN;    CREATE TABLE t1(a PRIMARY KEY, b);    CREATE TABLE t2(a PRIMARY KEY, b);  }  set ::contents {}  for {set i 0} {$i < 100} {incr i} {    set a [string repeat "$i " 20]    set b [string repeat "$i " 20]    db eval {      INSERT INTO t1 VALUES(:a, :b);    }    lappend ::contents [list [expr $i+1] $a $b]  }  execsql {    INSERT INTO t2 SELECT * FROM t1;    COMMIT;  }} {}do_test shared-$av.7.2 {  # This test case deletes the contents of table t1 (the one at the start of  # the file) while many cursors are open on table t2 and it's index. All of  # the non-root pages will be moved from the end to the start of the file  # when the DELETE is committed - this test verifies that moving the pages  # does not disturb the open cursors.  #  proc lockrow {db tbl oids body} {    set ret [list]    db eval "SELECT oid AS i, a, b FROM $tbl ORDER BY a" {      if {$i==[lindex $oids 0]} {        set noids [lrange $oids 1 end]        if {[llength $noids]==0} {          set subret [eval $body]        } else {          set subret [lockrow $db $tbl $noids $body]        }      }      lappend ret [list $i $a $b]    }    return [linsert $subret 0 $ret]  }  proc locktblrows {db tbl body} {    set oids [db eval "SELECT oid FROM $tbl"]    lockrow $db $tbl $oids $body  }  set scans [locktblrows db t2 {    execsql {      DELETE FROM t1;    } db2  }]  set error 0  # Test that each SELECT query returned the expected contents of t2.  foreach s $scans {    if {[lsort -integer -index 0 $s]!=$::contents} {      set error 1    }  }  set error} {0}catch {db close}catch {db2 close}unset -nocomplain contents#--------------------------------------------------------------------------# The following tests try to trick the shared-cache code into assuming# the wrong encoding for a database.#file delete -force test.db test.db-journalifcapable utf16 {  do_test shared-$av.8.1.1 {    sqlite3 db test.db    execsql {      PRAGMA encoding = 'UTF-16';      SELECT * FROM sqlite_master;    }  } {}  do_test shared-$av.8.1.2 {    string range [execsql {PRAGMA encoding;}] 0 end-2  } {UTF-16}  do_test shared-$av.8.1.3 {    sqlite3 db2 test.db    execsql {      PRAGMA encoding = 'UTF-8';      CREATE TABLE abc(a, b, c);    } db2  } {}  do_test shared-$av.8.1.4 {    execsql {      SELECT * FROM sqlite_master;    }  } "table abc abc [expr $AUTOVACUUM?3:2] {CREATE TABLE abc(a, b, c)}"  do_test shared-$av.8.1.5 {    db2 close    execsql {      PRAGMA encoding;    }  } {UTF-8}  file delete -force test2.db test2.db-journal  do_test shared-$av.8.2.1 {    execsql {      ATTACH 'test2.db' AS aux;      SELECT * FROM aux.sqlite_master;    }  } {}  do_test shared-$av.8.2.2 {    sqlite3 db2 test2.db    execsql {      PRAGMA encoding = 'UTF-16';      CREATE TABLE def(d, e, f);    } db2    string range [execsql {PRAGMA encoding;} db2] 0 end-2  } {UTF-16}  do_test shared-$av.8.2.3 {    catchsql {      SELECT * FROM aux.sqlite_master;    }  } {1 {attached databases must use the same text encoding as main database}}}catch {db close}catch {db2 close}file delete -force test.db test2.db#---------------------------------------------------------------------------# The following tests - shared-9.* - test interactions between TEMP triggers# and shared-schemas.#ifcapable trigger&&tempdb {do_test shared-$av.9.1 {  sqlite3 db test.db  sqlite3 db2 test.db  execsql {    CREATE TABLE abc(a, b, c);    CREATE TABLE abc_mirror(a, b, c);    CREATE TEMP TRIGGER BEFORE INSERT ON abc BEGIN       INSERT INTO abc_mirror(a, b, c) VALUES(new.a, new.b, new.c);    END;    INSERT INTO abc VALUES(1, 2, 3);    SELECT * FROM abc_mirror;  }} {1 2 3}do_test shared-$av.9.2 {  execsql {    INSERT INTO abc VALUES(4, 5, 6);    SELECT * FROM abc_mirror;  } db2} {1 2 3}do_test shared-$av.9.3 {  db close  db2 close} {}} ; # End shared-9.*#---------------------------------------------------------------------------# The following tests - shared-10.* - test that the library behaves # correctly when a connection to a shared-cache is closed. #do_test shared-$av.10.1 {  # Create a small sample database with two connections to it (db and db2).  file delete -force test.db  sqlite3 db  test.db  sqlite3 db2 test.db  execsql {    CREATE TABLE ab(a PRIMARY KEY, b);    CREATE TABLE de(d PRIMARY KEY, e);    INSERT INTO ab VALUES('Chiang Mai', 100000);    INSERT INTO ab VALUES('Bangkok', 8000000);    INSERT INTO de VALUES('Ubon', 120000);    INSERT INTO de VALUES('Khon Kaen', 200000);  }} {}do_test shared-$av.10.2 {  # Open a read-transaction with the first connection, a write-transaction  # with the second.  execsql {    BEGIN;    SELECT * FROM ab;  }  execsql {    BEGIN;    INSERT INTO de VALUES('Pataya', 30000);  } db2} {}do_test shared-$av.10.3 {  # An external connection should be able to read the database, but not  # prepare a write operation.  if {$::tcl_platform(platform)=="unix"} {    sqlite3 db3 ./test.db  } else {    sqlite3 db3 TEST.DB  }  execsql {    SELECT * FROM ab;  } db3  catchsql {    BEGIN;    INSERT INTO de VALUES('Pataya', 30000);  } db3} {1 {database is locked}}do_test shared-$av.10.4 {  # Close the connection with the write-transaction open  db2 close} {}do_test shared-$av.10.5 {  # Test that the db2 transaction has been automatically rolled back.  # If it has not the ('Pataya', 30000) entry will still be in the table.  execsql {    SELECT * FROM de;  }} {Ubon 120000 {Khon Kaen} 200000}do_test shared-$av.10.5 {  # Closing db2 should have dropped the shared-cache back to a read-lock.  # So db3 should be able to prepare a write...  catchsql {INSERT INTO de VALUES('Pataya', 30000);} db3} {0 {}}do_test shared-$av.10.6 {  # ... but not commit it.  catchsql {COMMIT} db3} {1 {database is locked}}do_test shared-$av.10.7 {  # Commit the (read-only) db transaction. Check via db3 to make sure the   # contents of table "de" are still as they should be.  execsql {    COMMIT;  }  execsql {    SELECT * FROM de;  } db3} {Ubon 120000 {Khon Kaen} 200000 Pataya 30000}do_test shared-$av.10.9 {  # Commit the external transaction.  catchsql {COMMIT} db3} {0 {}}integrity_check shared-$av.10.10do_test shared-$av.10.11 {  db close  db3 close} {}do_test shared-$av.11.1 {  file delete -force test.db  sqlite3 db  test.db  sqlite3 db2 test.db  execsql {    CREATE TABLE abc(a, b, c);    CREATE TABLE abc2(a, b, c);    BEGIN;    INSERT INTO abc VALUES(1, 2, 3);  }} {}do_test shared-$av.11.2 {  catchsql {BEGIN;} db2  catchsql {SELECT * FROM abc;} db2} {1 {database table is locked: abc}}do_test shared-$av.11.3 {  catchsql {BEGIN} db2} {1 {cannot start a transaction within a transaction}}do_test shared-$av.11.4 {  catchsql {SELECT * FROM abc2;} db2} {0 {}}do_test shared-$av.11.5 {  catchsql {INSERT INTO abc2 VALUES(1, 2, 3);} db2} {1 {database is locked}}do_test shared-$av.11.6 {  catchsql {SELECT * FROM abc2}} {0 {}}do_test shared-$av.11.6 {  execsql {    ROLLBACK;    PRAGMA read_uncommitted = 1;  } db2} {}do_test shared-$av.11.7 {  execsql {    INSERT INTO abc2 VALUES(4, 5, 6);    INSERT INTO abc2 VALUES(7, 8, 9);  }} {}do_test shared-$av.11.8 {  set res [list]  breakpoint  db2 eval {    SELECT abc.a as I, abc2.a as II FROM abc, abc2;  } {    execsql {      DELETE FROM abc WHERE 1;    }    lappend res $I $II  }  set res} {1 4 {} 7}if {[llength [info command sqlite3_shared_cache_report]]==1} {  do_test shared-$av.11.9 {    sqlite3_shared_cache_report   } [list [file normalize test.db] 2]}do_test shared-$av.11.11 {  db close  db2 close} {}}sqlite3_enable_shared_cache $::enable_shared_cachefinish_test

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -