From: dan Date: Sat, 27 Sep 2025 18:08:19 +0000 (+0000) Subject: Add tests for ALTER TABLE authorization callbacks and other things. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d47220c190d60f308827a6aaa399d8cb77e257db;p=thirdparty%2Fsqlite.git Add tests for ALTER TABLE authorization callbacks and other things. FossilOrigin-Name: 55cad8d15040bc01300bfe5efcc7225dd9695c2972c0f9b4bbd311ed57188e1f --- diff --git a/manifest b/manifest index 4b8f457a96..b303562f4b 100644 --- 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. diff --git a/manifest.uuid b/manifest.uuid index f37679958e..ffb346d101 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0165e2afa8b640c9d7a31414f06144e089844dc13691f06f363a50d14fec62bc +55cad8d15040bc01300bfe5efcc7225dd9695c2972c0f9b4bbd311ed57188e1f diff --git a/src/parse.y b/src/parse.y index cfd1b5d4cb..dda855cf60 100644 --- a/src/parse.y +++ b/src/parse.y @@ -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)); } diff --git a/test/alterauth2.test b/test/alterauth2.test index 6f9242d364..260b635c37 100644 --- a/test/alterauth2.test +++ b/test/alterauth2.test @@ -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 diff --git a/test/altercons.test b/test/altercons.test index e145d31ad2..1a1c2df8bb 100644 --- a/test/altercons.test +++ b/test/altercons.test @@ -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