]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Prototype of the sqlite3_error_schema() interface. Non-functional.
authordrh <>
Mon, 4 Aug 2025 11:40:31 +0000 (11:40 +0000)
committerdrh <>
Mon, 4 Aug 2025 11:40:31 +0000 (11:40 +0000)
FossilOrigin-Name: 715cb6035ea1b8b74c2a19180bbee9027ab8b57e9f2b55be5b512a983d79ba6a

manifest
manifest.uuid
src/main.c
src/sqlite.h.in
src/sqliteInt.h

index 8625888e8b1cf23bc638d23fdaf3a0f47c0de18d..14c3f6384a4d73641ef777bba57ce2c96f163410 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Minor\sdoc\stypo\sfix\sin\ssqliteLimit.h.
-D 2025-08-04T11:20:31.998
+C Prototype\sof\sthe\ssqlite3_error_schema()\sinterface.\s\sNon-functional.
+D 2025-08-04T11:40:31.845
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -750,7 +750,7 @@ F src/insert.c dfd311b0ac2d4f6359e62013db67799757f4d2cc56cca5c10f4888acfbbfa3fd
 F src/json.c cb87977b1ee25ee7d27505d65a9261b687395bf895342c8ba566b7c01aee2047
 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
 F src/loadext.c d7edd8e671237539d795d30daaf888908a2c82e99bade4c78f3be021e8b7d655
-F src/main.c eb46066bf2f0bec2dd89229572de5a9c479c47da134e2422e7a0056e9510cbee
+F src/main.c 12747414946bfee192ae5b692f2abdfb9fd1317c42dd7aa65edc9db0388d797c
 F src/malloc.c 410e570b30c26cc36e3372577df50f7a96ee3eed5b2b161c6b6b48773c650c5e
 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
 F src/mem1.c 3bb59158c38e05f6270e761a9f435bf19827a264c13d1631c58b84bdc96d73b2
@@ -788,10 +788,10 @@ F src/resolve.c 1fba451b87114182213ead347113d15c845dac4e61755754600c85595ec92244
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
 F src/select.c a6be657216e1fb72f85dad7df0dba0eb79fe76527c08caa65da8fe44f0e4db44
 F src/shell.c.in 7918c9355667b3b348e5850f0dad9095476ef942ee3b96ee9b8bc2710adda1da
-F src/sqlite.h.in aa4b705018c98d135b1218e163abbde5b1c333952338eb7ed5adb3dcb5a65682
+F src/sqlite.h.in 5ad19d51a8332718bb4ae7cf05a0316fac66abb76149fa2d5b46acc965628709
 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
 F src/sqlite3ext.h 0bfd049bb2088cc44c2ad54f2079d1c6e43091a4e1ce8868779b75f6c1484f1e
-F src/sqliteInt.h a54f83985985655d1276e9e356dd6ae19b8d0b62c2abc75cc9e8f402ea141207
+F src/sqliteInt.h c52a09238d17eb2dd7f521c2356f8259c655dc26aafd5d36e0f0fae10330f7e9
 F src/sqliteLimit.h fe70bd8983e5d317a264f2ea97473b359faf3ebb0827877a76813f5cf0cdc364
 F src/status.c 0e72e4f6be6ccfde2488eb63210297e75f569f3ce9920f6c3d77590ec6ce5ffd
 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -2213,8 +2213,11 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 50234bc9e9fe58daf820ed5a1355f1d173728b5d33a7534244f1acff974baa30
-R 4c13f1e1414427dd0a236f4709d9ca73
-U stephan
-Z 5ee4651eea51cd57517d27d32904605d
+P 8bb315ef7429a60899f5afe878a3b1aa146b18eef2ac9f4d6eca98587a2255cd
+R cc0d2f0b0bb50e7bf998c482672b2a34
+T *branch * error-schema
+T *sym-error-schema *
+T -sym-trunk *
+U drh
+Z 565b276da4e150dc170705cdd9673a0e
 # Remove this line to create a well-formed Fossil manifest.
index 2f4e21299e03d3be45281b27d93a79b197e477dc..8e08b193bc3fec458bec0f371754ace16fa9ee19 100644 (file)
@@ -1 +1 @@
-8bb315ef7429a60899f5afe878a3b1aa146b18eef2ac9f4d6eca98587a2255cd
+715cb6035ea1b8b74c2a19180bbee9027ab8b57e9f2b55be5b512a983d79ba6a
index 0dd9926fec46b85f5c61b0fb90f8469370465a1f..d1768853e9e965dd686e995fefd5e382e1c35cd2 100644 (file)
@@ -2793,6 +2793,28 @@ int sqlite3_extended_errcode(sqlite3 *db){
 }
 int sqlite3_system_errno(sqlite3 *db){
   return db ? db->iSysErrno : 0;
+}
+
+/*
+** Return the name of the database schema ("main", "temp", or the name of
+** an ATTACH-ed database) to which the latest error applies.  Return NULL
+** if the error does not apply to a specific schema.
+**
+** This routine will typically return a string for errors like SQLITE_READONLY,
+** or SQLITE_CORRUPT, or SQLITE_BUSY.  It will return NULL for errors
+** like SQLITE_NOMEM.
+*/
+const char *sqlite3_error_schema(sqlite3 *db){
+  int iDb;
+  if( db && !sqlite3SafetyCheckSickOrOk(db) ){
+    return 0;
+  }
+  if( !db || db->mallocFailed ){
+    return 0;
+  }
+  iDb = ((db->errCode >> 24) & 0x7f) - 1;
+  if( iDb<0 ) return 0;
+  return db->aDb[iDb].zDbSName;
 } 
 
 /*
@@ -3355,7 +3377,7 @@ static int openDatabase(
     }
   }
   sqlite3_mutex_enter(db->mutex);
-  db->errMask = (flags & SQLITE_OPEN_EXRESCODE)!=0 ? 0xffffffff : 0xff;
+  db->errMask = (flags & SQLITE_OPEN_EXRESCODE)!=0 ? 0x00ffffff : 0xff;
   db->nDb = 2;
   db->eOpenState = SQLITE_STATE_BUSY;
   db->aDb = db->aDbStatic;
@@ -4089,7 +4111,7 @@ int sqlite3_extended_result_codes(sqlite3 *db, int onoff){
   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
 #endif
   sqlite3_mutex_enter(db->mutex);
-  db->errMask = onoff ? 0xffffffff : 0xff;
+  db->errMask = onoff ? 0x00ffffff : 0xff;
   sqlite3_mutex_leave(db->mutex);
   return SQLITE_OK;
 }
index c34283d74e4800171cbd8e37864e1f337d71e86c..cf27721698fd7d2744fbd92e45a81e2081a12484 100644 (file)
@@ -4155,6 +4155,7 @@ void sqlite3_free_filename(sqlite3_filename);
 ** <li> sqlite3_errmsg()
 ** <li> sqlite3_errmsg16()
 ** <li> sqlite3_error_offset()
+** <li> sqlite3_error_schema()
 ** </ul>
 **
 ** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language
@@ -4200,6 +4201,19 @@ const void *sqlite3_errmsg16(sqlite3*);
 const char *sqlite3_errstr(int);
 int sqlite3_error_offset(sqlite3 *db);
 
+/*
+** CAPI3REF: Schema associated with an error
+**
+** The sqlite3_error_schema(D) interface returns the name of a database schema
+** that was the origin of the most recent error.  The database schema is the
+** name assigned to the database, such as "main" or "temp" or the name associated
+** with an attached database.  The sqlite3_error_schema(D) interface returns
+** NULL if the most recent error is generic and is not associated with a
+** particular database file (for example if the error is SQLITE_NOMEM), or if
+** there have been no errors, or if the error code has been reset.
+*/
+const char *sqlite3_error_schema(sqlite3 *db);
+
 /*
 ** CAPI3REF: Prepared Statement Object
 ** KEYWORDS: {prepared statement} {prepared statements}
index a09c94ae62e9d9ed92f05e3a720604aa210e8883..76ca7d3a0dd565a5e6cbe5ce96beb013f3a4acc5 100644 (file)
@@ -1816,6 +1816,11 @@ struct sqlite3 {
 */
 #define HI(X)  ((u64)(X)<<32)
 
+/*
+** Combine a schema index with an error code.
+*/
+#define ERRCODE_WITH_SCHEMA(E,X)  (((X)<<24)|(E))
+
 /*
 ** Possible values for the sqlite3.flags.
 **