?? alter.test
字號:
# are working.proc trigfunc {args} { set ::TRIGGER $args}db func trigfunc trigfuncdo_test alter-3.1.0 { execsql { CREATE TABLE t6(a, b, c); CREATE TRIGGER trig1 AFTER INSERT ON t6 BEGIN SELECT trigfunc('trig1', new.a, new.b, new.c); END; }} {}do_test alter-3.1.1 { execsql { INSERT INTO t6 VALUES(1, 2, 3); } set ::TRIGGER} {trig1 1 2 3}do_test alter-3.1.2 { execsql { ALTER TABLE t6 RENAME TO t7; INSERT INTO t7 VALUES(4, 5, 6); } set ::TRIGGER} {trig1 4 5 6}do_test alter-3.1.3 { execsql { DROP TRIGGER trig1; }} {}do_test alter-3.1.4 { execsql { CREATE TRIGGER trig2 AFTER INSERT ON main.t7 BEGIN SELECT trigfunc('trig2', new.a, new.b, new.c); END; INSERT INTO t7 VALUES(1, 2, 3); } set ::TRIGGER} {trig2 1 2 3}do_test alter-3.1.5 { execsql { ALTER TABLE t7 RENAME TO t8; INSERT INTO t8 VALUES(4, 5, 6); } set ::TRIGGER} {trig2 4 5 6}do_test alter-3.1.6 { execsql { DROP TRIGGER trig2; }} {}do_test alter-3.1.7 { execsql { CREATE TRIGGER trig3 AFTER INSERT ON main.'t8'BEGIN SELECT trigfunc('trig3', new.a, new.b, new.c); END; INSERT INTO t8 VALUES(1, 2, 3); } set ::TRIGGER} {trig3 1 2 3}do_test alter-3.1.8 { execsql { ALTER TABLE t8 RENAME TO t9; INSERT INTO t9 VALUES(4, 5, 6); } set ::TRIGGER} {trig3 4 5 6}# Make sure "ON" cannot be used as a database, table or column name without# quoting. Otherwise the sqlite_alter_trigger() function might not work.file delete -force test3.dbfile delete -force test3.db-journaldo_test alter-3.2.1 { catchsql { ATTACH 'test3.db' AS ON; }} {1 {near "ON": syntax error}}do_test alter-3.2.2 { catchsql { ATTACH 'test3.db' AS 'ON'; }} {0 {}}do_test alter-3.2.3 { catchsql { CREATE TABLE ON.t1(a, b, c); }} {1 {near "ON": syntax error}}do_test alter-3.2.4 { catchsql { CREATE TABLE 'ON'.t1(a, b, c); }} {0 {}}do_test alter-3.2.4 { catchsql { CREATE TABLE 'ON'.ON(a, b, c); }} {1 {near "ON": syntax error}}do_test alter-3.2.5 { catchsql { CREATE TABLE 'ON'.'ON'(a, b, c); }} {0 {}}do_test alter-3.2.6 { catchsql { CREATE TABLE t10(a, ON, c); }} {1 {near "ON": syntax error}}do_test alter-3.2.7 { catchsql { CREATE TABLE t10(a, 'ON', c); }} {0 {}}do_test alter-3.2.8 { catchsql { CREATE TRIGGER trig4 AFTER INSERT ON ON BEGIN SELECT 1; END; }} {1 {near "ON": syntax error}}do_test alter-3.2.9 { catchsql { CREATE TRIGGER 'on'.trig4 AFTER INSERT ON 'ON' BEGIN SELECT 1; END; }} {0 {}}do_test alter-3.2.10 { execsql { DROP TABLE t10; }} {}do_test alter-3.3.1 { execsql [subst { CREATE TABLE tbl1(a, b, c); CREATE $::temp TRIGGER trig1 AFTER INSERT ON tbl1 BEGIN SELECT trigfunc('trig1', new.a, new.b, new.c); END; }]} {}do_test alter-3.3.2 { execsql { INSERT INTO tbl1 VALUES('a', 'b', 'c'); } set ::TRIGGER} {trig1 a b c}do_test alter-3.3.3 { execsql { ALTER TABLE tbl1 RENAME TO tbl2; INSERT INTO tbl2 VALUES('d', 'e', 'f'); } set ::TRIGGER} {trig1 d e f}do_test alter-3.3.4 { execsql [subst { CREATE $::temp TRIGGER trig2 AFTER UPDATE ON tbl2 BEGIN SELECT trigfunc('trig2', new.a, new.b, new.c); END; }] } {}do_test alter-3.3.5 { execsql { ALTER TABLE tbl2 RENAME TO tbl3; INSERT INTO tbl3 VALUES('g', 'h', 'i'); } set ::TRIGGER} {trig1 g h i}do_test alter-3.3.6 { execsql { UPDATE tbl3 SET a = 'G' where a = 'g'; } set ::TRIGGER} {trig2 G h i}do_test alter-3.3.7 { execsql { DROP TABLE tbl3; }} {}ifcapable tempdb { do_test alter-3.3.8 { execsql { SELECT * FROM sqlite_temp_master WHERE type = 'trigger'; } } {}}} ;# ifcapable trigger# If the build does not include AUTOINCREMENT fields, omit alter-4.*.ifcapable autoinc {do_test alter-4.1 { execsql { CREATE TABLE tbl1(a INTEGER PRIMARY KEY AUTOINCREMENT); INSERT INTO tbl1 VALUES(10); }} {}do_test alter-4.2 { execsql { INSERT INTO tbl1 VALUES(NULL); SELECT a FROM tbl1; }} {10 11}do_test alter-4.3 { execsql { ALTER TABLE tbl1 RENAME TO tbl2; DELETE FROM tbl2; INSERT INTO tbl2 VALUES(NULL); SELECT a FROM tbl2; }} {12}do_test alter-4.4 { execsql { DROP TABLE tbl2; }} {}} ;# ifcapable autoinc# Test that it is Ok to execute an ALTER TABLE immediately after# opening a database.do_test alter-5.1 { execsql { CREATE TABLE tbl1(a, b, c); INSERT INTO tbl1 VALUES('x', 'y', 'z'); }} {}do_test alter-5.2 { sqlite3 db2 test.db execsql { ALTER TABLE tbl1 RENAME TO tbl2; SELECT * FROM tbl2; } db2} {x y z}do_test alter-5.3 { db2 close} {}foreach tblname [execsql { SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite%'}] { execsql "DROP TABLE \"$tblname\""}set ::tbl_name "abc\uABCDdef"do_test alter-6.1 { string length $::tbl_name} {7}do_test alter-6.2 { execsql " CREATE TABLE ${tbl_name}(a, b, c); " set ::oid [execsql {SELECT max(oid) FROM sqlite_master}] execsql " SELECT sql FROM sqlite_master WHERE oid = $::oid; "} "{CREATE TABLE ${::tbl_name}(a, b, c)}"execsql " SELECT * FROM ${::tbl_name}"set ::tbl_name2 "abcXdef"do_test alter-6.3 { execsql " ALTER TABLE $::tbl_name RENAME TO $::tbl_name2 " execsql " SELECT sql FROM sqlite_master WHERE oid = $::oid "} "{CREATE TABLE '${::tbl_name2}'(a, b, c)}"do_test alter-6.4 { execsql " ALTER TABLE $::tbl_name2 RENAME TO $::tbl_name " execsql " SELECT sql FROM sqlite_master WHERE oid = $::oid "} "{CREATE TABLE '${::tbl_name}'(a, b, c)}"set ::col_name ghi\1234\jkldo_test alter-6.5 { execsql " ALTER TABLE $::tbl_name ADD COLUMN $::col_name VARCHAR " execsql " SELECT sql FROM sqlite_master WHERE oid = $::oid "} "{CREATE TABLE '${::tbl_name}'(a, b, c, $::col_name VARCHAR)}"set ::col_name2 B\3421\Ado_test alter-6.6 { db close sqlite3 db test.db execsql " ALTER TABLE $::tbl_name ADD COLUMN $::col_name2 " execsql " SELECT sql FROM sqlite_master WHERE oid = $::oid "} "{CREATE TABLE '${::tbl_name}'(a, b, c, $::col_name VARCHAR, $::col_name2)}"do_test alter-6.7 { execsql " INSERT INTO ${::tbl_name} VALUES(1, 2, 3, 4, 5); SELECT $::col_name, $::col_name2 FROM $::tbl_name; "} {4 5}# Ticket #1665: Make sure ALTER TABLE ADD COLUMN works on a table# that includes a COLLATE clause.#do_test alter-7.1 { execsql { CREATE TABLE t1(a TEXT COLLATE BINARY); ALTER TABLE t1 ADD COLUMN b INTEGER COLLATE NOCASE; INSERT INTO t1 VALUES(1,'2'); SELECT typeof(a), a, typeof(b), b FROM t1; }} {text 1 integer 2}finish_test
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -