]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Earlier detection of a host of errors in CREATE TABLE, such the CREATE TABLE
authordrh <>
Fri, 13 Oct 2023 22:19:23 +0000 (22:19 +0000)
committerdrh <>
Fri, 13 Oct 2023 22:19:23 +0000 (22:19 +0000)
statement itself fails, rather than generating an error on the first attempted
use of the created table.

FossilOrigin-Name: 348fa7aaf7958b3fb689ed023d946064ae8d92718a497a346e95114a2410cbf5

manifest
manifest.uuid
src/btree.c
src/build.c
src/vdbe.c

index 506e60566b097f7855c1bbd54ddf1ecb5e8e5224..dba744e3b82e5797370f39b0774cc50265fb6f11 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Apply\sthe\scorrect\saffinity\sto\sDEFAULT\svalues\sthat\sare\sTRUE\sor\sFALSE.
-D 2023-10-13T19:41:20.296
+C Earlier\sdetection\sof\sa\shost\sof\serrors\sin\sCREATE\sTABLE,\ssuch\sthe\sCREATE\sTABLE\nstatement\sitself\sfails,\srather\sthan\sgenerating\san\serror\son\sthe\sfirst\sattempted\nuse\sof\sthe\screated\stable.
+D 2023-10-13T22:19:23.580
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -653,10 +653,10 @@ F src/auth.c 19b7ccacae3dfba23fc6f1d0af68134fa216e9040e53b0681b4715445ea030b4
 F src/backup.c 5c97e8023aab1ce14a42387eb3ae00ba5a0644569e3476f38661fa6f824c3523
 F src/bitvec.c 9eac5f42c11914d5ef00a75605bb205e934f435c579687f985f1f8b0995c8645
 F src/btmutex.c 79a43670447eacc651519a429f6ece9fd638563cf95b469d6891185ddae2b522
-F src/btree.c fbbbfc51d2fed03c29f20960857d97659d9c682523f32911d5a8e7c5be6436be
+F src/btree.c 63fb3269c93924e734e0586c22816effa530cee933df4aeb2b2e045de0339280
 F src/btree.h 03e3356f5208bcab8eed4e094240fdac4a7f9f5ddf5e91045ce589f67d47c240
 F src/btreeInt.h 91a9e0c41a0e71fa91a742ec285c63dd8dcb38b73d14fae0ed7209174ff0fdc1
-F src/build.c 4b1d6f8d2b2fcd3267ec54254ad78383c6e758f2be479f849e763947344f68d8
+F src/build.c 1a9061ab67987cfa9c7f9d52ccc862a31d37ad2b05faaf0d72eeb4b4b5ee37cf
 F src/callback.c db3a45e376deff6a16c0058163fe0ae2b73a2945f3f408ca32cf74960b28d490
 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
 F src/ctime.c 23331529e654be40ca97d171cbbffe9b3d4c71cc53b78fe5501230675952da8b
@@ -784,7 +784,7 @@ F src/upsert.c fa125a8d3410ce9a97b02cb50f7ae68a2476c405c76aa692d3acf6b8586e9242
 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
 F src/util.c e87f66258c37f87724f46e849572c3ece4c74ef5614ba41eb221e98f0dbc95de
 F src/vacuum.c 604fcdaebe76f3497c855afcbf91b8fa5046b32de3045bab89cc008d68e40104
-F src/vdbe.c 4c688500c530ba8b62a4bb8f561be34a4afe7175fbdaa890b046cb15fb383c19
+F src/vdbe.c ae873b02ade06478b217ea38d90229dff68180d7a1fe526910b0d62a0fe0595a
 F src/vdbe.h 41485521f68e9437fdb7ec4a90f9d86ab294e9bb8281e33b235915e29122cfc0
 F src/vdbeInt.h 949669dfd8a41550d27dcb905b494f2ccde9a2e6c1b0b04daa1227e2e74c2b2c
 F src/vdbeapi.c 4184402246172220418c0ef49ff4cf1a19ced9a4ac6c843c2f0773fb5c543f37
@@ -2128,8 +2128,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 44b932ff16e35814febd842d11215cf243393f173aade33ceded473598221e88
-R 47a32fc26da21940b710878ed0c79b18
+P 4958db70c8103e249748fdeffc35f1c385e2e550e8a48697b82fcd797f3016be
+R 341f9d0d74439d9b617811c449fe1fb8
 U drh
-Z 63c76777fa129ac386380e87c8a0efdb
+Z bbfdb16e7d47445e024bdf790c59ad23
 # Remove this line to create a well-formed Fossil manifest.
index c606ba903c4e9009a89709b98f7d1e5cd79cf18a..01e58cbbf3f1a28785082d195c15d49a37d74a19 100644 (file)
@@ -1 +1 @@
-4958db70c8103e249748fdeffc35f1c385e2e550e8a48697b82fcd797f3016be
\ No newline at end of file
+348fa7aaf7958b3fb689ed023d946064ae8d92718a497a346e95114a2410cbf5
\ No newline at end of file
index 1575d7d942629578492e6bb803b6ba68a6bc4568..3c4f00d154f9ac810946b2e754c4e0958689bce1 100644 (file)
@@ -10708,6 +10708,7 @@ static int checkTreePage(
   if( (rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0 ){
     checkAppendMsg(pCheck,
        "unable to get the page. error code=%d", rc);
+    if( rc==SQLITE_IOERR_NOMEM ) pCheck->rc = SQLITE_NOMEM;
     goto end_of_check;
   }
 
index 0920b0f2243b18b886a082cca71d957bd253265f..24f5d3f96a0c31f97d72e0fbb7506ee2cd2781db 100644 (file)
@@ -2921,12 +2921,16 @@ void sqlite3EndTable(
     sqlite3VdbeAddParseSchemaOp(v, iDb,
            sqlite3MPrintf(db, "tbl_name='%q' AND type!='trigger'", p->zName),0);
 
-    /* Test for cycles in generated columns */
+    /* Test for cycles in generated columns and illegal expressions
+    ** in CHECK constraints and in DEFAULT clauses. */
     if( p->tabFlags & TF_HasGenerated ){
-      sqlite3VdbeAddOp4(v, OP_SqlExec, 0, 0, 0,
-             sqlite3MPrintf(db, "SELECT*FROM\"%w\".\"%s\"",
+      sqlite3VdbeAddOp4(v, OP_SqlExec, 1, 0, 0,
+             sqlite3MPrintf(db, "SELECT*FROM\"%w\".\"%w\"",
                    db->aDb[iDb].zDbSName, p->zName), P4_DYNAMIC);
     }
+    sqlite3VdbeAddOp4(v, OP_SqlExec, 1, 0, 0,
+           sqlite3MPrintf(db, "PRAGMA \"%w\".integrity_check(%Q)",
+                 db->aDb[iDb].zDbSName, p->zName), P4_DYNAMIC);
   }
 
   /* Add the table to the in-memory representation of the database.
index 00d365680b87b3138b96cd84a6f55d64496b1227..ce094f9970c510edb7f6e6df0ee0bc08509068e3 100644 (file)
@@ -6906,18 +6906,31 @@ case OP_CreateBtree: {          /* out2 */
 /* Opcode: SqlExec * * * P4 *
 **
 ** Run the SQL statement or statements specified in the P4 string.
+** Disable Auth and Trace callbacks while those statements are running if
+** P1 is true.
 */
 case OP_SqlExec: {
   char *zErr;
+  sqlite3_xauth xAuth;
+  u8 mTrace;
 
   sqlite3VdbeIncrWriteCounter(p, 0);
   db->nSqlExec++;
   zErr = 0;
+  xAuth = db->xAuth;
+  mTrace = db->mTrace;
+  if( pOp->p1 ){
+    db->xAuth = 0;
+    db->mTrace = 0;
+  }
   rc = sqlite3_exec(db, pOp->p4.z, 0, 0, &zErr);
   db->nSqlExec--;
+  db->xAuth = xAuth;
+  db->mTrace = mTrace;
   if( rc || zErr ){
     sqlite3VdbeError(p, "%s", zErr);
     sqlite3_free(zErr);
+    if( rc==SQLITE_NOMEM ) goto no_mem;
     goto abort_due_to_error;
   }
   break;