From: drh <> Date: Wed, 3 Nov 2021 15:59:17 +0000 (+0000) Subject: Improved the error message that results when a schema parse fails after X-Git-Tag: version-3.37.0~66 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ac894af85e8d53490662e87e06aea5b6c8c7d801;p=thirdparty%2Fsqlite.git Improved the error message that results when a schema parse fails after ALTER TABLE ADD COLUMN. FossilOrigin-Name: b007a39dd3a46d13fe06f2a1eeb4e3fd4cad1a77892be6d175b31db1edd6f6a8 --- diff --git a/manifest b/manifest index 22964ef734..bc95cb2945 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sINSERT\sinto\sSTRICT\stable\swith\sSTATIC\sgenerated\scolumns. -D 2021-11-03T14:02:48.852 +C Improved\sthe\serror\smessage\sthat\sresults\swhen\sa\sschema\sparse\sfails\safter\nALTER\sTABLE\sADD\sCOLUMN. +D 2021-11-03T15:59:17.767 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -483,7 +483,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a -F src/alter.c d8dac98aa3b63b36660ab581c854660e511e1cef02702473d6c29d8655f4c013 +F src/alter.c 92994fddf134fed3daf7d91d9626b45bedc46fe07891ebbd9b5baa01addf6a68 F src/analyze.c 7518b99e07c5494111fe3bd867f28f804b6c5c1ad0703ec3d116de9bab3fa516 F src/attach.c e3f9d9a2a4a844750f3f348f37afb244535f21382cbfcd840152cb21cb41cfaf F src/auth.c f4fa91b6a90bbc8e0d0f738aa284551739c9543a367071f55574681e0f24f8cf @@ -544,7 +544,7 @@ F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 F src/pcache1.c 54881292a9a5db202b2c0ac541c5e3ef9a5e8c4f1c1383adb2601d5499a60e65 F src/pragma.c c5fc9c849baa32e716c5ed1ae55237913461fffd886dba4380e31132ca960ed6 F src/pragma.h 87330ed2fbfa2a1274de93ca0ab850fba336189228cb256089202c3b52766fad -F src/prepare.c 8f07616db04337057b8498b72d051ee90f73c54615c2e908c05404cef1e060b7 +F src/prepare.c 7520a371f1de8a53e3023eba75bc0d3473196833c6363d285cad8d002eabef0b F src/printf.c 5901672228f305f7d493cbc4e7d76a61a5caecdbc1cd06b1f9ec42ea4265cf8d F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c F src/resolve.c ae65c88f5d0d4bc0052b203773d407efa2387c2bd6b202f87178006c7bb8632c @@ -554,7 +554,7 @@ F src/shell.c.in f8854bcb0d14707d661732698d5210d7f01694000c46e8014b323ad18f575be F src/sqlite.h.in 99786216caf1c57aa3d70f95a7f84566dff6a9eeb50174799ea3b387eafd2a22 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h d8f6f67ae9ad990a70dd03c093bcdc8883e159ff4bfd16a496f8fb80c6840b5a -F src/sqliteInt.h 02f7ccc971d67d8641707f219b9c304113d43a9a128b73a39d1fcaa036c885b7 +F src/sqliteInt.h 1af24220f40265a8fc164cd1bc4cfbec33550d4be205510d71a48b7198aed0e3 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 @@ -1431,7 +1431,7 @@ F test/stat.test 15a3106eddedfc882f64bc09f237b4169be4b92dd57c93031b8ff8b13af3e7c F test/statfault.test 55f86055f9cd7b2d962a621b8a04215c1cebd4eaaecde92d279442327fe648a0 F test/stmt.test 54ed2cc0764bf3e48a058331813c3dbd19fc1d0827c3d8369914a5d8f564ec75 F test/stmtvtab1.test 6873dfb24f8e79cbb5b799b95c2e4349060eb7a3b811982749a84b359468e2d5 -F test/strict1.test e010d546fbe8a6427ae93179c631bea9a462315b442f6d27b815a150a2393713 +F test/strict1.test b13473c6f61a1744806969f841c4a1872081f2114de7145f04e4def42be154d0 F test/strict2.test b22c7a98b5000aef937f1990776497f0e979b1a23bc4f63e2d53b00e59b20070 F test/subjournal.test 8d4e2572c0ee9a15549f0d8e40863161295107e52f07a3e8012a2e1fdd093c49 F test/subquery.test d7268d193dd33d5505df965399d3a594e76ae13f @@ -1712,7 +1712,7 @@ F test/vtabF.test 1918844c7c902f6a16c8dacf1ec8f84886d6e78b F test/vtabH.test 2efb5a24b0bb50796b21eca23032cfb77abfa4b0c03938e38ce5897abac404ca F test/vtabI.test 751b07636700dbdea328e4265b6077ccd6811a3f F test/vtabJ.test a6aef49d558af90fae10565b29501f82a95781cb4f797f2d13e2d19f9b6bc77b -F test/vtabK.test d769aa2689999f510045c219ec45dc8db5266a9b3932bf47d49e1065e4261b69 +F test/vtabK.test 13293177528fada1235c0112db0d187d754af1355c5a39371abd365104e3afbf F test/vtab_alter.test 736e66fb5ec7b4fee58229aa3ada2f27ec58bc58c00edae4836890c3784c6783 F test/vtab_err.test dcc8b7b9cb67522b3fe7a272c73856829dae4ab7fdb30399aea1b6981bda2b65 F test/vtab_shared.test 5253bff2355a9a3f014c15337da7e177ab0ef8ad @@ -1930,7 +1930,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P a247b5d88c12b1952b656e4f069c9229e0886ba16d7018ddf600e74592224792 -R d7bb2ae8b0f1e80db6e056f5f83d3b71 +P 24285d913678853213532d61aba077d576e3cd7629159e0a75dc3c16e54e2662 +R c65dc02471c3bd0a2fb7b99a1bdfeb55 U drh -Z 143c1e571d41c429c49647e6acfdd03c +Z 4361cb2bc45addecc76fa216d9bd6573 diff --git a/manifest.uuid b/manifest.uuid index c803df41e7..3bf60cc174 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -24285d913678853213532d61aba077d576e3cd7629159e0a75dc3c16e54e2662 \ No newline at end of file +b007a39dd3a46d13fe06f2a1eeb4e3fd4cad1a77892be6d175b31db1edd6f6a8 \ No newline at end of file diff --git a/src/alter.c b/src/alter.c index 817ea64999..e162847371 100644 --- a/src/alter.c +++ b/src/alter.c @@ -439,7 +439,7 @@ void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){ sqlite3ReleaseTempReg(pParse, r1); /* Reload the table definition */ - renameReloadSchema(pParse, iDb, INITFLAG_AlterRename); + renameReloadSchema(pParse, iDb, INITFLAG_AlterAdd); /* Verify that constraints are still satisfied */ if( pNew->pCheck!=0 diff --git a/src/prepare.c b/src/prepare.c index 62dca01b6b..14b5dbad6d 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -29,10 +29,15 @@ static void corruptSchema( pData->rc = SQLITE_NOMEM_BKPT; }else if( pData->pzErrMsg[0]!=0 ){ /* A error message has already been generated. Do not overwrite it */ - }else if( pData->mInitFlags & (INITFLAG_AlterRename|INITFLAG_AlterDrop) ){ + }else if( pData->mInitFlags & (INITFLAG_AlterMask) ){ + static const char *azAlterType[] = { + "rename", + "drop column", + "add column" + }; *pData->pzErrMsg = sqlite3MPrintf(db, "error in %s %s after %s: %s", azObj[0], azObj[1], - (pData->mInitFlags & INITFLAG_AlterRename) ? "rename" : "drop column", + azAlterType[(pData->mInitFlags&INITFLAG_AlterMask)-1], zExtra ); pData->rc = SQLITE_ERROR; diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 53e9033183..18205ed838 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -3826,8 +3826,10 @@ typedef struct { /* ** Allowed values for mInitFlags */ +#define INITFLAG_AlterMask 0x0003 /* Types of ALTER */ #define INITFLAG_AlterRename 0x0001 /* Reparse after a RENAME */ #define INITFLAG_AlterDrop 0x0002 /* Reparse after a DROP COLUMN */ +#define INITFLAG_AlterAdd 0x0003 /* Reparse after an ADD COLUMN */ /* Tuning parameters are set using SQLITE_TESTCTRL_TUNE and are controlled ** on debug-builds of the CLI using ".testctrl tune ID VALUE". Tuning diff --git a/test/strict1.test b/test/strict1.test index 9ba7f7a6d3..0ffcc6f8c4 100644 --- a/test/strict1.test +++ b/test/strict1.test @@ -126,5 +126,11 @@ do_execsql_test strict1-7.1 { INSERT INTO t4(c) VALUES(1); SELECT * FROM t4; } {4 2 1} +do_catchsql_test strict-7.2 { + ALTER TABLE t4 ADD COLUMN d VARCHAR; +} {1 {error in table t4 after add column: unknown datatype for t4.d: "VARCHAR"}} +do_catchsql_test strict-7.3 { + ALTER TABLE t4 ADD COLUMN d; +} {1 {error in table t4 after add column: missing datatype for t4.d}} finish_test diff --git a/test/vtabK.test b/test/vtabK.test index dc91687a8a..07fe9c1312 100644 --- a/test/vtabK.test +++ b/test/vtabK.test @@ -78,6 +78,6 @@ do_catchsql_test 300 { CREATE VIRTUAL TABLE t1 USING rtree(a,b,c); CREATE TABLE t2(x); ALTER TABLE t2 ADD d GENERATED ALWAYS AS (c IN (SELECT 1 FROM t1)) VIRTUAL; -} {1 {error in table t2 after rename: subqueries prohibited in generated columns}} +} {1 {error in table t2 after add column: subqueries prohibited in generated columns}} finish_test