|
|
# 2025 September 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. |
|
|
# |
|
|
#************************************************************************* |
|
|
# |
|
|
|
|
|
set testdir [file dirname $argv0] |
|
|
source $testdir/tester.tcl |
|
|
set testprefix altercons |
|
|
|
|
|
# If SQLITE_OMIT_ALTERTABLE is defined, omit this file. |
|
|
ifcapable !altertable { |
|
|
finish_test |
|
|
return |
|
|
} |
|
|
|
|
|
foreach {tn before after} { |
|
|
1 { CREATE TABLE t1(a, b CONSTRAINT abc CHECK(t1.a != t1.b)) } |
|
|
{ CREATE TABLE t1(a, b) } |
|
|
|
|
|
2 { CREATE TABLE t1(a, b CONSTRAINT abc CHECK(t1.a != t1.b) NOT NULL) } |
|
|
{ CREATE TABLE t1(a, b NOT NULL) } |
|
|
|
|
|
3 { CREATE TABLE t1(a, b CONSTRAINT abc CHECK(t1.a != t1.b)NOT NULL) } |
|
|
{ CREATE TABLE t1(a, b NOT NULL) } |
|
|
|
|
|
3 { CREATE TABLE t1(a, b NOT NULL CONSTRAINT abc CHECK(t1.a != t1.b)); } |
|
|
{ CREATE TABLE t1(a, b NOT NULL) } |
|
|
|
|
|
4 { CREATE TABLE t1(a, b, CONSTRAINT abc CHECK(t1.a != t1.b)) } |
|
|
{ CREATE TABLE t1(a, b) } |
|
|
|
|
|
5 { CREATE TABLE t1(a, b, CONSTRAINT abc CHECK(t1.a != t1.b), PRIMARY KEY(a))} |
|
|
{ CREATE TABLE t1(a, b, PRIMARY KEY(a)) } |
|
|
|
|
|
6 { CREATE TABLE t1(a, b,CONSTRAINT abc CHECK(t1.a != t1.b),PRIMARY KEY(a))} |
|
|
{ CREATE TABLE t1(a, b,PRIMARY KEY(a)) } |
|
|
|
|
|
7 { CREATE TABLE t1(a, b CONSTRAINT abc CHECK(t1.a != t1.b) CONSTRAINT def UNIQUE) } |
|
|
{ CREATE TABLE t1(a, b CONSTRAINT def UNIQUE) } |
|
|
|
|
|
8 { CREATE TABLE t1(a, b CONSTRAINT abc CHECK(t1.a != t1.b) CHECK (123)) } |
|
|
{ CREATE TABLE t1(a, b CHECK (123)) } |
|
|
|
|
|
9 { CREATE TABLE t1(a, b CONSTRAINT abc CHECK(t1.a != t1.b) DEFAULT NULL) } |
|
|
{ CREATE TABLE t1(a, b DEFAULT NULL) } |
|
|
|
|
|
10 { CREATE TABLE t1(a, b CONSTRAINT abc CHECK(t1.a != t1.b) COLLATE nocase) } |
|
|
{ CREATE TABLE t1(a, b COLLATE nocase) } |
|
|
|
|
|
11 { CREATE TABLE t1(a, b CONSTRAINT abc CHECK(t1.a != t1.b) REFERENCES t2) } |
|
|
{ CREATE TABLE t1(a, b REFERENCES t2) } |
|
|
|
|
|
12 { CREATE TABLE t1(a, b, c, CONSTRAINT one CONSTRAINT abc CHECK(a!=b) CONSTRAINT three) } |
|
|
{ CREATE TABLE t1(a, b, c, CONSTRAINT one CONSTRAINT three) } |
|
|
|
|
|
13 { CREATE TABLE t1(a, b, c, CONSTRAINT abc CONSTRAINT one CHECK(a!=b) CONSTRAINT three) } |
|
|
{ CREATE TABLE t1(a, b, c, CONSTRAINT one CHECK(a!=b) CONSTRAINT three) } |
|
|
|
|
|
14 { CREATE TABLE t1(a, b, c, CONSTRAINT abc) } |
|
|
{ CREATE TABLE t1(a, b, c) } |
|
|
|
|
|
15 { CREATE TABLE t1(a, b, c, |
|
|
CONSTRAINT abc, CHECK( a!=b )) } |
|
|
{ CREATE TABLE t1(a, b, c, CHECK( a!=b )) } |
|
|
|
|
|
16 { CREATE TABLE t1(a, b, c, CONSTRAINT abc CHECK( a!=b )) } |
|
|
{ CREATE TABLE t1(a, b, c) } |
|
|
|
|
|
17 { CREATE TABLE t1(a, b, c, CONSTRAINT abc CHECK( a!=b )) } |
|
|
{ CREATE TABLE t1(a, b, c) } |
|
|
|
|
|
18 { CREATE TABLE t1(a, b, c -- comment |
|
|
CONSTRAINT abc NOT NULL |
|
|
) } |
|
|
{ CREATE TABLE t1(a, b, c) } |
|
|
|
|
|
19 { CREATE TABLE t1(a, b, c, -- comment |
|
|
CONSTRAINT abc CHECK (a>b) CONSTRAINT two |
|
|
) } |
|
|
{ CREATE TABLE t1(a, b, c, CONSTRAINT two |
|
|
) } |
|
|
|
|
|
20 { CREATE TABLE t1(a, b, c, CONSTRAINT one CONSTRAINT abc CHECK (a>b)CONSTRAINT two) } |
|
|
{ CREATE TABLE t1(a, b, c, CONSTRAINT one CONSTRAINT two) } |
|
|
|
|
|
21 { CREATE TABLE t1(a, b, c CONSTRAINT abc AS (b+1)) } |
|
|
{ CREATE TABLE t1(a, b, c AS (b+1)) } |
|
|
|
|
|
22 { CREATE TABLE t1(a, b, c CONSTRAINT abc GENERATED ALWAYS AS (b+1) STORED) } |
|
|
{ CREATE TABLE t1(a, b, c GENERATED ALWAYS AS (b+1) STORED) } |
|
|
} { |
|
|
reset_db |
|
|
|
|
|
do_execsql_test 1.$tn.0 $before |
|
|
|
|
|
do_execsql_test 1.$tn.1 { |
|
|
ALTER TABLE t1 DROP CONSTRAINT abc; |
|
|
} {} |
|
|
|
|
|
do_execsql_test 1.$tn.2 { |
|
|
SELECT sql FROM sqlite_schema WHERE name='t1' |
|
|
} [list [string trim $after]] |
|
|
} |
|
|
|
|
|
#------------------------------------------------------------------------- |
|
|
|
|
|
do_execsql_test 2.0 { |
|
|
CREATE TABLE t2(x, y CONSTRAINT ccc UNIQUE); |
|
|
} |
|
|
do_catchsql_test 2.1 { |
|
|
ALTER TABLE t2 DROP CONSTRAINT ccc |
|
|
} {1 {constraint may not be dropped: ccc}} |
|
|
do_catchsql_test 2.2 { |
|
|
ALTER TABLE t2 DROP CONSTRAINT ddd |
|
|
} {1 {no such constraint: ddd}} |
|
|
|
|
|
#------------------------------------------------------------------------- |
|
|
reset_db |
|
|
foreach {tn col before after} { |
|
|
1 a { CREATE TABLE t1(a NOT NULL, b) } |
|
|
{ CREATE TABLE t1(a, b) } |
|
|
|
|
|
2 a { CREATE TABLE t1(a NOT NULL ON CONFLICT FAIL, b) } |
|
|
{ CREATE TABLE t1(a, b) } |
|
|
|
|
|
3 a { CREATE TABLE t1(a NOT NULL ON CONFLICT FAIL UNIQUE, b) } |
|
|
{ CREATE TABLE t1(a UNIQUE, b) } |
|
|
|
|
|
4 b { CREATE TABLE t1(a NOT NULL ON CONFLICT FAIL UNIQUE, b) } |
|
|
{ CREATE TABLE t1(a NOT NULL ON CONFLICT FAIL UNIQUE, b) } |
|
|
|
|
|
5 a { CREATE TABLE t1(a CHECK(a<b) NOT NULL, b) } |
|
|
{ CREATE TABLE t1(a CHECK(a<b), b) } |
|
|
|
|
|
6 a { CREATE TABLE t1(a CHECK(a<b) CONSTRAINT nn NOT NULL, b) } |
|
|
{ CREATE TABLE t1(a CHECK(a<b), b) } |
|
|
|
|
|
7 b { CREATE TABLE t1(a, b NOT NULL PRIMARY KEY) } |
|
|
{ CREATE TABLE t1(a, b PRIMARY KEY) } |
|
|
|
|
|
8 b { CREATE TABLE t1(a, b CHECK ((b+a) IS NOT NULL) NOT NULL PRIMARY KEY) } |
|
|
{ CREATE TABLE t1(a, b CHECK ((b+a) IS NOT NULL) PRIMARY KEY) } |
|
|
|
|
|
9 b { CREATE TABLE t1(a, b CONSTRAINT nn CHECK (b IS NOT NULL) NOT NULL) } |
|
|
{ CREATE TABLE t1(a, b CONSTRAINT nn CHECK (b IS NOT NULL)) } |
|
|
|
|
|
10 b { CREATE TABLE t1(a, b NOT NULL AS (a+1)) } |
|
|
{ CREATE TABLE t1(a, b AS (a+1)) } |
|
|
|
|
|
11 b { CREATE TABLE t1(a, b NOT NULL GENERATED ALWAYS AS (a+1)) } |
|
|
{ CREATE TABLE t1(a, b GENERATED ALWAYS AS (a+1)) } |
|
|
} { |
|
|
reset_db |
|
|
|
|
|
do_execsql_test 3.$tn.0 $before |
|
|
|
|
|
do_execsql_test 3.$tn.1 " |
|
|
ALTER TABLE t1 ALTER COLUMN $col DROP NOT NULL |
|
|
" |
|
|
|
|
|
do_execsql_test 3.$tn.2 { |
|
|
SELECT sql FROM sqlite_schema WHERE name='t1' |
|
|
} [list [string trim $after]] |
|
|
} |
|
|
|
|
|
#------------------------------------------------------------------------- |
|
|
# |
|
|
reset_db |
|
|
do_execsql_test 4.0 { |
|
|
CREATE TABLE t2(x, y CONSTRAINT ccc UNIQUE); |
|
|
} |
|
|
do_execsql_test 4.1 { |
|
|
ALTER TABLE t2 ALTER x DROP NOT NULL; |
|
|
ALTER TABLE t2 ALTER x DROP NOT NULL; |
|
|
ALTER TABLE t2 ALTER x DROP NOT NULL; |
|
|
} {} |
|
|
|
|
|
#------------------------------------------------------------------------- |
|
|
# |
|
|
reset_db |
|
|
|
|
|
do_execsql_test 5.1 { |
|
|
CREATE TABLE t3(a INTEGER PRIMARY KEY, b); |
|
|
INSERT INTO t3 VALUES(1000, NULL); |
|
|
} |
|
|
|
|
|
do_catchsql_test 5.2.1 { |
|
|
ALTER TABLE t3 ALTER b SET NOT NULL |
|
|
} {1 {constraint failed}} |
|
|
|
|
|
do_test 5.2.2 { |
|
|
sqlite3_errcode db |
|
|
} {SQLITE_CONSTRAINT} |
|
|
|
|
|
foreach {tn before alter after} { |
|
|
1 { CREATE TABLE t1(a, b) } |
|
|
{ ALTER TABLE t1 ALTER a SET NOT NULL } |
|
|
{ CREATE TABLE t1(a NOT NULL, b) } |
|
|
|
|
|
2 { CREATE TABLE t1(a, b) } |
|
|
{ ALTER TABLE t1 ALTER a SET NOT NULL ON CONFLICT FAIL } |
|
|
{ CREATE TABLE t1(a NOT NULL ON CONFLICT FAIL, b) } |
|
|
|
|
|
3 { CREATE TABLE t1(a, b) } |
|
|
{ ALTER TABLE t1 ALTER a SET NOT NULL ON CONFLICT fail; } |
|
|
{ CREATE TABLE t1(a NOT NULL ON CONFLICT fail, b) } |
|
|
|
|
|
4 { CREATE TABLE t1(a, b) } |
|
|
{ ALTER TABLE t1 ALTER b SET NOT NULL ON CONFLICT IGNORE ; } |
|
|
{ CREATE TABLE t1(a, b NOT NULL ON CONFLICT IGNORE) } |
|
|
|
|
|
5 { CREATE TABLE t1(a, 'a b c' VARCHAR(10), UNIQUE(a)) } |
|
|
{ ALTER TABLE t1 ALTER 'a b c' SET NOT NULL } |
|
|
{ CREATE TABLE t1(a, 'a b c' VARCHAR(10) NOT NULL, UNIQUE(a)) } |
|
|
} { |
|
|
reset_db |
|
|
do_execsql_test 5.3.$tn.1 $before |
|
|
do_execsql_test 5.3.$tn.2 $alter |
|
|
do_execsql_test 5.3.$tn.3 { |
|
|
SELECT sql FROM sqlite_schema WHERE name='t1'; |
|
|
} [list [string trim $after]] |
|
|
} |
|
|
|
|
|
do_execsql_test 5.4.1 { |
|
|
CREATE TABLE x1(a, b, c); |
|
|
} |
|
|
do_catchsql_test 5.4.2 { |
|
|
ALTER TABLE x1 ALTER d SET NOT NULL; |
|
|
} {1 {no such column: d}} |
|
|
do_catchsql_test 5.4.3 { |
|
|
ALTER TABLE x2 ALTER c SET NOT NULL; |
|
|
} {1 {no such table: x2}} |
|
|
do_catchsql_test 5.4.4 { |
|
|
ALTER TABLE temp.x1 ALTER c SET NOT NULL; |
|
|
} {1 {no such table: temp.x1}} |
|
|
|
|
|
#------------------------------------------------------------------------- |
|
|
# |
|
|
reset_db |
|
|
|
|
|
do_execsql_test 6.1 { |
|
|
CREATE TABLE t1(a, b, c); |
|
|
INSERT INTO t1 VALUES(1, 2, 3); |
|
|
INSERT INTO t1 VALUES(4, 5, 6); |
|
|
} |
|
|
|
|
|
do_catchsql_test 6.2.1 { |
|
|
ALTER TABLE t1 ADD CONSTRAINT nn CHECK (c!=6); |
|
|
} {1 {constraint failed}} |
|
|
do_execsql_test 6.2.2 { |
|
|
DELETE FROM t1 WHERE c=6; |
|
|
ALTER TABLE t1 ADD CONSTRAINT nn CHECK (c!=6); |
|
|
} {} |
|
|
do_catchsql_test 6.2.3 { |
|
|
INSERT INTO t1 VALUES(4, 5, 6); |
|
|
} {1 {CHECK constraint failed: nn}} |
|
|
|
|
|
foreach {tn before alter after} { |
|
|
1 { CREATE TABLE t1(a, b) } |
|
|
{ ALTER TABLE t1 ADD CONSTRAINT nn CHECK (a>=0) } |
|
|
{ CREATE TABLE t1(a, b, CONSTRAINT nn CHECK (a>=0)) } |
|
|
|
|
|
2 { CREATE TABLE t1(a, b ) } |
|
|
{ ALTER TABLE t1 ADD CONSTRAINT nn CHECK (a>=0) } |
|
|
{ CREATE TABLE t1(a, b , CONSTRAINT nn CHECK (a>=0)) } |
|
|
|
|
|
3 { CREATE TABLE t1(a, b ) } |
|
|
{ ALTER TABLE t1 ADD CHECK (a>=0) } |
|
|
{ CREATE TABLE t1(a, b , CHECK (a>=0)) } |
|
|
} { |
|
|
reset_db |
|
|
do_execsql_test 6.3.$tn.1 $before |
|
|
do_execsql_test 6.3.$tn.2 $alter |
|
|
do_execsql_test 6.3.$tn.3 { |
|
|
SELECT sql FROM sqlite_schema WHERE type='table'; |
|
|
} [list [string trim $after]] |
|
|
} |
|
|
|
|
|
do_execsql_test 6.4.1 { |
|
|
CREATE TABLE b1(a, b, CONSTRAINT abc CHECK (a!=2)); |
|
|
} |
|
|
do_catchsql_test 6.4.2 { |
|
|
ALTER TABLE b1 ADD CONSTRAINT abc CHECK (a!=3); |
|
|
} {1 {constraint abc already exists}} |
|
|
do_execsql_test 6.4.1 { |
|
|
SELECT sql FROM sqlite_schema WHERE tbl_name='b1' |
|
|
} {{CREATE TABLE b1(a, b, CONSTRAINT abc CHECK (a!=2))}} |
|
|
|
|
|
do_execsql_test 6.5 { |
|
|
CREATE TABLE abc(x,y); |
|
|
} |
|
|
|
|
|
do_catchsql_test 6.6 { |
|
|
ALTER TABLE abc ADD CHECK (z>=0); |
|
|
} {1 {no such column: z}} |
|
|
|
|
|
#------------------------------------------------------------------------- |
|
|
# Try attaching a NOT NULL to a generated column. |
|
|
# |
|
|
reset_db |
|
|
do_execsql_test 7.0 { |
|
|
CREATE TABLE x1(a, b AS (a+1)); |
|
|
INSERT INTO x1 VALUES(1), (2), (3), (NULL); |
|
|
} |
|
|
|
|
|
do_catchsql_test 7.1 { |
|
|
ALTER TABLE x1 ALTER b SET NOT NULL; |
|
|
} {1 {constraint failed}} |
|
|
|
|
|
do_catchsql_test 7.2 { |
|
|
DELETE FROM x1 WHERE b IS NULL; |
|
|
ALTER TABLE x1 ALTER b SET NOT NULL; |
|
|
} {0 {}} |
|
|
|
|
|
do_execsql_test 7.3 { |
|
|
SELECT b FROM x1 |
|
|
} {2 3 4} |
|
|
|
|
|
do_catchsql_test 7.4 { |
|
|
ALTER TABLE x1 ALTER rowid SET NOT NULL; |
|
|
} {1 {no such column: rowid}} |
|
|
|
|
|
do_execsql_test 7.5 { |
|
|
CREATE VIEW v1 AS SELECT a, b FROM x1; |
|
|
} |
|
|
do_catchsql_test 7.6 { |
|
|
ALTER TABLE v1 RENAME a TO c; |
|
|
} {1 {cannot rename columns of view "v1"}} |
|
|
do_catchsql_test 7.7 { |
|
|
ALTER TABLE v1 ALTER a SET NOT NULL; |
|
|
} {1 {cannot edit constraints of view "v1"}} |
|
|
do_catchsql_test 7.8 { |
|
|
ALTER TABLE sqlite_schema ALTER sql SET NOT NULL; |
|
|
} {1 {table sqlite_master may not be altered}} |
|
|
do_catchsql_test 7.9 { |
|
|
ALTER TABLE v1 ALTER a DROP NOT NULL |
|
|
} {1 {cannot edit constraints of view "v1"}} |
|
|
|
|
|
#------------------------------------------------------------------------- |
|
|
reset_db |
|
|
do_execsql_test 8.0 { |
|
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b NOT NULL, c CHECK (c!=555), d); |
|
|
INSERT INTO t1 VALUES(1, 1, 1, 1); |
|
|
INSERT INTO t1 VALUES(2, 2, 2, 2); |
|
|
INSERT INTO t1 VALUES(3, 3, 3, 3); |
|
|
} |
|
|
|
|
|
do_execsql_test 8.1.1 { |
|
|
ALTER TABLE t1 ALTER a SET NOT NULL; |
|
|
ALTER TABLE t1 ALTER b SET NOT NULL; |
|
|
ALTER TABLE t1 ALTER c SET NOT NULL; |
|
|
ALTER TABLE t1 ALTER d SET NOT NULL; |
|
|
} |
|
|
|
|
|
do_execsql_test 8.1.2 { |
|
|
SELECT sql FROM sqlite_schema WHERE tbl_name = 't1' |
|
|
} {{CREATE TABLE t1(a INTEGER PRIMARY KEY NOT NULL, b NOT NULL, c CHECK (c!=555) NOT NULL, d NOT NULL)}} |
|
|
|
|
|
do_execsql_test 8.1.3 { |
|
|
SELECT * FROM t1 WHERE a=2; |
|
|
} {2 2 2 2} |
|
|
|
|
|
do_execsql_test 8.2.1 { |
|
|
ALTER TABLE t1 ALTER a DROP NOT NULL; |
|
|
ALTER TABLE t1 ALTER b DROP NOT NULL; |
|
|
ALTER TABLE t1 ALTER c DROP NOT NULL; |
|
|
ALTER TABLE t1 ALTER d DROP NOT NULL; |
|
|
} |
|
|
|
|
|
do_execsql_test 8.2.2 { |
|
|
SELECT sql FROM sqlite_schema WHERE tbl_name = 't1' |
|
|
} {{CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c CHECK (c!=555), d)}} |
|
|
|
|
|
do_execsql_test 8.2.3 { |
|
|
SELECT * FROM t1 WHERE a=3; |
|
|
} {3 3 3 3} |
|
|
|
|
|
#------------------------------------------------------------------------- |
|
|
reset_db |
|
|
forcedelete test.db2 |
|
|
do_execsql_test 9.0 { |
|
|
CREATE TABLE t1(x, y, z); |
|
|
ATTACH 'test.db2' AS aux; |
|
|
CREATE TABLE aux.t1(x, y, z); |
|
|
INSERT INTO aux.t1 VALUES(1, 1, 1); |
|
|
INSERT INTO aux.t1 VALUES(2, 2, 2); |
|
|
INSERT INTO aux.t1 VALUES(3, 3, NULL); |
|
|
|
|
|
CREATE TABLE aux.t2(x, y, z); |
|
|
} |
|
|
|
|
|
do_catchsql_test 9.1.1 { |
|
|
ALTER TABLE aux.t1 ALTER COLUMN z SET NOT NULL |
|
|
} {1 {constraint failed}} |
|
|
do_execsql_test 9.1.2 { |
|
|
UPDATE aux.t1 SET z=x; |
|
|
ALTER TABLE aux.t1 ALTER COLUMN z SET NOT NULL; |
|
|
SELECT sql FROM aux.sqlite_schema WHERE name='t1'; |
|
|
} {{CREATE TABLE t1(x, y, z NOT NULL)}} |
|
|
do_execsql_test 9.1.3 { |
|
|
ALTER TABLE aux.t1 ALTER z DROP NOT NULL; |
|
|
SELECT sql FROM aux.sqlite_schema WHERE name='t1'; |
|
|
} {{CREATE TABLE t1(x, y, z)}} |
|
|
do_execsql_test 9.1.4 { |
|
|
ALTER TABLE t2 ALTER x SET NOT NULL; |
|
|
SELECT sql FROM aux.sqlite_schema WHERE name='t2'; |
|
|
} {{CREATE TABLE t2(x NOT NULL, y, z)}} |
|
|
do_execsql_test 9.1.5 { |
|
|
ALTER TABLE t2 ALTER x DROP NOT NULL; |
|
|
SELECT sql FROM aux.sqlite_schema WHERE name='t2'; |
|
|
} {{CREATE TABLE t2(x, y, z)}} |
|
|
|
|
|
do_catchsql_test 9.2.1 { |
|
|
ALTER TABLE aux.t1 ADD CONSTRAINT bill CHECK (y!=2); |
|
|
} {1 {constraint failed}} |
|
|
do_execsql_test 9.2.2 { |
|
|
UPDATE aux.t1 SET y=4 WHERE y=2; |
|
|
ALTER TABLE aux.t1 ADD CONSTRAINT bill CHECK (y!=2); |
|
|
SELECT sql FROM aux.sqlite_schema WHERE name='t1'; |
|
|
} {{CREATE TABLE t1(x, y, z, CONSTRAINT bill CHECK (y!=2))}} |
|
|
do_execsql_test 9.2.3 { |
|
|
ALTER TABLE aux.t1 DROP CONSTRAINT bill; |
|
|
SELECT sql FROM aux.sqlite_schema WHERE name='t1'; |
|
|
} {{CREATE TABLE t1(x, y, z)}} |
|
|
do_execsql_test 9.2.4 { |
|
|
ALTER TABLE t2 ADD CONSTRAINT william CHECK (z!=''); |
|
|
SELECT sql FROM aux.sqlite_schema WHERE name='t2'; |
|
|
} {{CREATE TABLE t2(x, y, z, CONSTRAINT william CHECK (z!=''))}} |
|
|
do_execsql_test 9.2.5 { |
|
|
ALTER TABLE t2 DROP CONSTRAINT william; |
|
|
SELECT sql FROM aux.sqlite_schema WHERE name='t2'; |
|
|
} {{CREATE TABLE t2(x, y, z)}} |
|
|
|
|
|
finish_test |
|
|
|
|
|
|