]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add tests for ALTER TABLE authorization callbacks and other things.
authordan <Dan Kennedy>
Sat, 27 Sep 2025 18:08:19 +0000 (18:08 +0000)
committerdan <Dan Kennedy>
Sat, 27 Sep 2025 18:08:19 +0000 (18:08 +0000)
FossilOrigin-Name: 55cad8d15040bc01300bfe5efcc7225dd9695c2972c0f9b4bbd311ed57188e1f

manifest
manifest.uuid
src/parse.y
test/alterauth2.test
test/altercons.test

index 4b8f457a965a2f23f97f6e9b58ad8b82b0a72609..b303562f4b389fcd53e3752dfeca949ff187c560 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-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
@@ -726,7 +726,7 @@ F src/os_win.c f81a7cffdfe8c593a840895b3f64290714f0186b06302d2c397012252d830374
 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
@@ -837,9 +837,9 @@ F test/alter2.test 7e3d26ab409df52df887b366a63902c3429b935c41cb962fd58ffc25784f2
 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
@@ -2170,8 +2170,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 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.
index f37679958e4bf42861009fa7154bf70b3732268f..ffb346d101fafe73186317940fe6391cf89677c3 100644 (file)
@@ -1 +1 @@
-0165e2afa8b640c9d7a31414f06144e089844dc13691f06f363a50d14fec62bc
+55cad8d15040bc01300bfe5efcc7225dd9695c2972c0f9b4bbd311ed57188e1f
index cfd1b5d4cb08534570e9e0f0f456a62ef58584b9..dda855cf603997097276e053a816ecccfa090587 100644 (file)
@@ -1832,11 +1832,13 @@ cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
   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);
@@ -1859,7 +1861,6 @@ cmd ::= ALTER TABLE fullname(X) ALTER kwcolumn_opt nm(Y) DROP NOT NULL. {
 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));
 }
index 6f9242d364ea249c156862d0ef873c94e2d53d92..260b635c3784e121f596127e07cfe326ccea9f19 100644 (file)
@@ -116,4 +116,55 @@ do_auth_test 1.3 {
   {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
index e145d31ad2df226aa1f0f92975883e11768bd637..1a1c2df8bb1145f9468fdc11a73bb683632407e6 100644 (file)
@@ -228,6 +228,14 @@ 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.
 #
@@ -270,4 +278,43 @@ 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}
+
 finish_test