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

📄 schema.test

📁 sqlite-3.4.1,嵌入式数据库.是一个功能强大的开源数据库,给学习和研发以及小型公司的发展带来了全所未有的好处.
💻 TEST
字号:
# 2005 Jan 24## 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 tests the various conditions under which an SQLITE_SCHEMA# error should be returned.## $Id: schema.test,v 1.6 2007/05/02 17:54:56 drh Exp $#---------------------------------------------------------------------# When any of the following types of SQL statements or actions are # executed, all pre-compiled statements are invalidated. An attempt# to execute an invalidated statement always returns SQLITE_SCHEMA.## CREATE/DROP TABLE...................................schema-1.*# CREATE/DROP VIEW....................................schema-2.*# CREATE/DROP TRIGGER.................................schema-3.*# CREATE/DROP INDEX...................................schema-4.*# DETACH..............................................schema-5.*# Deleting a user-function............................schema-6.*# Deleting a collation sequence.......................schema-7.*# Setting or changing the authorization function......schema-8.*## Test cases schema-9.* and schema-10.* test some specific bugs# that came up during development.## Test cases schema-11.* test that it is impossible to delete or# change a collation sequence or user-function while SQL statements# are executing. Adding new collations or functions is allowed.#set testdir [file dirname $argv0]source $testdir/tester.tcldo_test schema-1.1 {  set ::STMT [sqlite3_prepare $::DB {SELECT * FROM sqlite_master} -1 TAIL]  execsql {    CREATE TABLE abc(a, b, c);  }  sqlite3_step $::STMT} {SQLITE_ERROR}do_test schema-1.2 {  sqlite3_finalize $::STMT} {SQLITE_SCHEMA}do_test schema-1.3 {  set ::STMT [sqlite3_prepare $::DB {SELECT * FROM sqlite_master} -1 TAIL]  execsql {    DROP TABLE abc;  }  sqlite3_step $::STMT} {SQLITE_ERROR}do_test schema-1.4 {  sqlite3_finalize $::STMT} {SQLITE_SCHEMA}ifcapable view {  do_test schema-2.1 {    set ::STMT [sqlite3_prepare $::DB {SELECT * FROM sqlite_master} -1 TAIL]    execsql {      CREATE VIEW v1 AS SELECT * FROM sqlite_master;    }    sqlite3_step $::STMT  } {SQLITE_ERROR}  do_test schema-2.2 {    sqlite3_finalize $::STMT  } {SQLITE_SCHEMA}  do_test schema-2.3 {    set ::STMT [sqlite3_prepare $::DB {SELECT * FROM sqlite_master} -1 TAIL]    execsql {      DROP VIEW v1;    }    sqlite3_step $::STMT  } {SQLITE_ERROR}  do_test schema-2.4 {    sqlite3_finalize $::STMT  } {SQLITE_SCHEMA}}ifcapable trigger {  do_test schema-3.1 {    execsql {      CREATE TABLE abc(a, b, c);    }    set ::STMT [sqlite3_prepare $::DB {SELECT * FROM sqlite_master} -1 TAIL]    execsql {      CREATE TRIGGER abc_trig AFTER INSERT ON abc BEGIN        SELECT 1, 2, 3;      END;    }    sqlite3_step $::STMT  } {SQLITE_ERROR}  do_test schema-3.2 {    sqlite3_finalize $::STMT  } {SQLITE_SCHEMA}  do_test schema-3.3 {    set ::STMT [sqlite3_prepare $::DB {SELECT * FROM sqlite_master} -1 TAIL]    execsql {      DROP TRIGGER abc_trig;    }    sqlite3_step $::STMT  } {SQLITE_ERROR}  do_test schema-3.4 {    sqlite3_finalize $::STMT  } {SQLITE_SCHEMA}}do_test schema-4.1 {  catchsql {    CREATE TABLE abc(a, b, c);  }  set ::STMT [sqlite3_prepare $::DB {SELECT * FROM sqlite_master} -1 TAIL]  execsql {    CREATE INDEX abc_index ON abc(a);  }  sqlite3_step $::STMT} {SQLITE_ERROR}do_test schema-4.2 {  sqlite3_finalize $::STMT} {SQLITE_SCHEMA}do_test schema-4.3 {  set ::STMT [sqlite3_prepare $::DB {SELECT * FROM sqlite_master} -1 TAIL]  execsql {    DROP INDEX abc_index;  }  sqlite3_step $::STMT} {SQLITE_ERROR}do_test schema-4.4 {  sqlite3_finalize $::STMT} {SQLITE_SCHEMA}#---------------------------------------------------------------------# Tests 5.1 to 5.4 check that prepared statements are invalidated when# a database is DETACHed (but not when one is ATTACHed).#do_test schema-5.1 {  set sql {SELECT * FROM abc;}  set ::STMT [sqlite3_prepare $::DB $sql -1 TAIL]  execsql {    ATTACH 'test2.db' AS aux;  }  sqlite3_step $::STMT} {SQLITE_DONE}do_test schema-5.2 {  sqlite3_reset $::STMT} {SQLITE_OK}do_test schema-5.3 {  execsql {    DETACH aux;  }  sqlite3_step $::STMT} {SQLITE_ERROR}do_test schema-5.4 {  sqlite3_finalize $::STMT} {SQLITE_SCHEMA}#---------------------------------------------------------------------# Tests 6.* check that prepared statements are invalidated when# a user-function is deleted (but not when one is added).do_test schema-6.1 {  set sql {SELECT * FROM abc;}  set ::STMT [sqlite3_prepare $::DB $sql -1 TAIL]  db function hello_function {}  sqlite3_step $::STMT} {SQLITE_DONE}do_test schema-6.2 {  sqlite3_reset $::STMT} {SQLITE_OK}do_test schema-6.3 {  sqlite_delete_function $::DB hello_function  sqlite3_step $::STMT} {SQLITE_ERROR}do_test schema-6.4 {  sqlite3_finalize $::STMT} {SQLITE_SCHEMA}#---------------------------------------------------------------------# Tests 7.* check that prepared statements are invalidated when# a collation sequence is deleted (but not when one is added).#ifcapable utf16 {  do_test schema-7.1 {    set sql {SELECT * FROM abc;}    set ::STMT [sqlite3_prepare $::DB $sql -1 TAIL]    add_test_collate $::DB 1 1 1    sqlite3_step $::STMT  } {SQLITE_DONE}  do_test schema-7.2 {    sqlite3_reset $::STMT  } {SQLITE_OK}  do_test schema-7.3 {    add_test_collate $::DB 0 0 0     sqlite3_step $::STMT  } {SQLITE_ERROR}  do_test schema-7.4 {    sqlite3_finalize $::STMT  } {SQLITE_SCHEMA}}#---------------------------------------------------------------------# Tests 8.1 and 8.2 check that prepared statements are invalidated when# the authorization function is set.#ifcapable auth {  do_test schema-8.1 {    set ::STMT [sqlite3_prepare $::DB {SELECT * FROM sqlite_master} -1 TAIL]    db auth {}    sqlite3_step $::STMT  } {SQLITE_ERROR}  do_test schema-8.3 {    sqlite3_finalize $::STMT  } {SQLITE_SCHEMA}}#---------------------------------------------------------------------# schema-9.1: Test that if a table is dropped by one database connection, #             other database connections are aware of the schema change.# schema-9.2: Test that if a view is dropped by one database connection,#             other database connections are aware of the schema change.#do_test schema-9.1 {  sqlite3 db2 test.db  execsql {    DROP TABLE abc;  } db2  db2 close  catchsql {    SELECT * FROM abc;  }} {1 {no such table: abc}}execsql {  CREATE TABLE abc(a, b, c);}ifcapable view {  do_test schema-9.2 {    execsql {      CREATE VIEW abcview AS SELECT * FROM abc;    }    sqlite3 db2 test.db    execsql {      DROP VIEW abcview;    } db2    db2 close    catchsql {      SELECT * FROM abcview;    }  } {1 {no such table: abcview}}}#---------------------------------------------------------------------# Test that if a CREATE TABLE statement fails because there are other# btree cursors open on the same database file it does not corrupt# the sqlite_master table.## 2007-05-02: These tests have been overcome by events.  Open btree# cursors no longer block CREATE TABLE.  But there is no reason not# to keep the tests in the test suite.#do_test schema-10.1 {  execsql {    INSERT INTO abc VALUES(1, 2, 3);  }  set sql {SELECT * FROM abc}  set ::STMT [sqlite3_prepare $::DB $sql -1 TAIL]  sqlite3_step $::STMT} {SQLITE_ROW}do_test schema-10.2 {  catchsql {    CREATE TABLE t2(a, b, c);  }} {0 {}}do_test schema-10.3 {  sqlite3_finalize $::STMT} {SQLITE_OK}do_test schema-10.4 {  sqlite3 db2 test.db  execsql {    SELECT * FROM abc  } db2} {1 2 3}do_test schema-10.5 {  db2 close} {}#---------------------------------------------------------------------# Attempting to delete or replace a user-function or collation sequence # while there are active statements returns an SQLITE_BUSY error.## schema-11.1 - 11.4: User function.# schema-11.5 - 11.8: Collation sequence.#do_test schema-11.1 {  db function tstfunc {}  set sql {SELECT * FROM abc}  set ::STMT [sqlite3_prepare $::DB $sql -1 TAIL]  sqlite3_step $::STMT} {SQLITE_ROW}do_test schema-11.2 {  sqlite_delete_function $::DB tstfunc} {SQLITE_BUSY}do_test schema-11.3 {  set rc [catch {    db function tstfunc {}  } msg]  list $rc $msg} {1 {Unable to delete/modify user-function due to active statements}}do_test schema-11.4 {  sqlite3_finalize $::STMT} {SQLITE_OK}do_test schema-11.5 {  db collate tstcollate {}  set sql {SELECT * FROM abc}  set ::STMT [sqlite3_prepare $::DB $sql -1 TAIL]  sqlite3_step $::STMT} {SQLITE_ROW}do_test schema-11.6 {  sqlite_delete_collation $::DB tstcollate} {SQLITE_BUSY}do_test schema-11.7 {  set rc [catch {    db collate tstcollate {}  } msg]  list $rc $msg} {1 {Unable to delete/modify collation sequence due to active statements}}do_test schema-11.8 {  sqlite3_finalize $::STMT} {SQLITE_OK}finish_test

⌨️ 快捷键说明

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