-C Fix\sauthorization\scallbacks\sfor\sthe\snew\scommands\son\sthis\sbranch.
-D 2025-09-27T16:13:56.339
+C Add\stests\sfor\sALTER\sTABLE\sauthorization\scallbacks\sand\sother\sthings.
+D 2025-09-27T18:08:19.486
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F src/os_win.h 4c247cdb6d407c75186c94a1e84d5a22cbae4adcec93fcae8d2bc1f956fd1f19
F src/pager.c 113f9149092ccff6cf90e97c2611200e5a237f13d26c394bc9fd933377852764
F src/pager.h 6137149346e6c8a3ddc1eeb40aee46381e9bc8b0fcc6dda8a1efde993c2275b8
-F src/parse.y 834ba749a6a9f34ef49ad4dd30531252739f6f796f1589d0c4ba548385276535
+F src/parse.y 42642f5090924ad566dc6ae602f5a752209b2fab88a1e7b1c97e4a7bcdc73241
F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484
F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5
F src/pcache1.c 131ca0daf4e66b4608d2945ae76d6ed90de3f60539afbd5ef9ec65667a5f2fcd
F test/alter3.test dcdd5f850f30656a45a0f05e41abfb52b74bbf6ccba165d0f7adf6b0116e4fd6
F test/alter4.test 37cafe164067a6590a0ee4cec780bddbbaa33dc50b11542dcfbe0e65626494fd
F test/alterauth.test 63442ba61ceb0c1eeb63aac1f4f5cebfa509d352276059d27106ae256bafc959
-F test/alterauth2.test 48967abae0494d9a300d1c92473d99fcb66edfcc23579c89322f033f49410adc
+F test/alterauth2.test 4b74fa8f184f4736497317feb587b65759eb87d87acfe3a8ef433d4d18bb002b
F test/altercol.test b43fb5725332f4cf8cff0280605202c1672e808281accea60a066d2ccc5129e5
-F test/altercons.test 33fb8117e669b14536a7cf5df694a6027e5773c2e5d12dd2a240c7b2046c9cc5
+F test/altercons.test b40249578a58d5b5fb8abbb2c557b7f20497474c1afafec515a4b3ef7160de32
F test/altercorrupt.test 2e1d705342cf9d7de884518ddbb053fd52d7e60d2b8869b7b63b2fda68435c12
F test/alterdropcol.test a653a3945f964d26845ec0cd0a8e74189f46de3119a984c5bc45457da392612e
F test/alterdropcol2.test 527fce683b200d620f560f666c44ae33e22728e990a10a48a543280dfd4b4d41
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P d939b25d76fe70a3255cfe38097d4489323028cd05e5512a98dce06b48eee445
-R df87aa2ddd3ec2e579d06904451a2687
+P 0165e2afa8b640c9d7a31414f06144e089844dc13691f06f363a50d14fec62bc
+R 0819fcbc2a55072aad51eafba2f369d4
U dan
-Z afa946c19eec2db0cf6e37984f361e84
+Z bef260ba3e3ba846b8729475ed6f1ef0
# Remove this line to create a well-formed Fossil manifest.
-0165e2afa8b640c9d7a31414f06144e089844dc13691f06f363a50d14fec62bc
+55cad8d15040bc01300bfe5efcc7225dd9695c2972c0f9b4bbd311ed57188e1f
sqlite3AlterRenameTable(pParse,X,&Z);
}
+// The ALTER TABLE ADD COLUMN command. This is broken into two sections so
+// that sqlite3AlterBeginAddColumn() is called before parsing the various
+// constraints and so on (carglist) attached to the new column definition.
cmd ::= alter_add(Y) carglist. {
Y.n = (int)(pParse->sLastToken.z-Y.z) + pParse->sLastToken.n;
sqlite3AlterFinishAddColumn(pParse, &Y);
}
-
alter_add(A) ::= ALTER TABLE fullname(X) ADD kwcolumn_opt nm(Y) typetoken(Z). {
disableLookaside(pParse);
sqlite3AlterBeginAddColumn(pParse, X);
cmd ::= ALTER TABLE fullname(X) ALTER kwcolumn_opt nm(Y) SET NOT(Z) NULL onconf. {
sqlite3AlterSetNotNull(pParse, X, &Y, &Z);
}
-
cmd ::= ALTER TABLE fullname(X) ADD CONSTRAINT(Y) nm(Z) CHECK LP(A) expr RP(B) onconf. {
sqlite3AlterAddConstraint(pParse, X, &Y, &Z, A.z+1, (B.z-A.z-1));
}
{SQLITE_UPDATE sqlite_temp_master sql temp {}}
}
+do_auth_test 1.4 {
+ ALTER TABLE t2 ALTER COLUMN b SET NOT NULL;
+} {
+ {SQLITE_ALTER_TABLE main t2 b {}}
+ {SQLITE_FUNCTION {} sqlite_add_constraint {} {}}
+ {SQLITE_FUNCTION {} sqlite_drop_constraint {} {}}
+ {SQLITE_FUNCTION {} sqlite_fail {} {}}
+ {SQLITE_READ sqlite_master sql main {}}
+ {SQLITE_READ sqlite_master tbl_name main {}}
+ {SQLITE_READ sqlite_master type main {}}
+ {SQLITE_READ t2 b main {}}
+ {SQLITE_SELECT {} {} {} {}}
+ {SQLITE_UPDATE sqlite_master sql main {}}
+}
+do_auth_test 1.5 {
+ ALTER TABLE t2 ALTER COLUMN 'b' DROP NOT NULL;
+} {
+ {SQLITE_ALTER_TABLE main t2 b {}}
+ {SQLITE_FUNCTION {} sqlite_drop_constraint {} {}}
+ {SQLITE_READ sqlite_master sql main {}}
+ {SQLITE_READ sqlite_master tbl_name main {}}
+ {SQLITE_READ sqlite_master type main {}}
+ {SQLITE_UPDATE sqlite_master sql main {}}
+}
+
+do_auth_test 1.6 {
+ ALTER TABLE t2 ADD CONSTRAINT abc CHECK (aaa>b)
+} {
+ {SQLITE_ALTER_TABLE main t2 {} {}}
+ {SQLITE_FUNCTION {} sqlite_add_constraint {} {}}
+ {SQLITE_FUNCTION {} sqlite_fail {} {}}
+ {SQLITE_FUNCTION {} sqlite_find_constraint {} {}}
+ {SQLITE_READ sqlite_master sql main {}}
+ {SQLITE_READ sqlite_master tbl_name main {}}
+ {SQLITE_READ sqlite_master type main {}}
+ {SQLITE_READ t2 aaa main {}}
+ {SQLITE_READ t2 b main {}}
+ {SQLITE_SELECT {} {} {} {}}
+ {SQLITE_UPDATE sqlite_master sql main {}}
+}
+do_auth_test 1.7 {
+ ALTER TABLE t2 DROP CONSTRAINT abc;
+} {
+ {SQLITE_ALTER_TABLE main t2 {} {}}
+ {SQLITE_FUNCTION {} sqlite_drop_constraint {} {}}
+ {SQLITE_READ sqlite_master sql main {}}
+ {SQLITE_READ sqlite_master tbl_name main {}}
+ {SQLITE_READ sqlite_master type main {}}
+ {SQLITE_UPDATE sqlite_master sql main {}}
+}
+
finish_test
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.
#
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}
+
finish_test