]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Give oo1.Stmt.get() similar treatment to [8c187140a60b]. This is an internal change...
authorstephan <stephan@noemail.net>
Sat, 21 Jun 2025 15:58:20 +0000 (15:58 +0000)
committerstephan <stephan@noemail.net>
Sat, 21 Jun 2025 15:58:20 +0000 (15:58 +0000)
FossilOrigin-Name: f5a7abc0a447273de40dacc463d267d26d4b62be56ee15baf05825791c2a7a6e

ext/wasm/api/sqlite3-api-oo1.c-pp.js
ext/wasm/tester1.c-pp.js
manifest
manifest.uuid

index 41caf04da9f5367dfa8e957531ac51b270f26013..06f91600212d0f133436dcaedd44c2de796d6f93 100644 (file)
@@ -1518,6 +1518,16 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
      exec() but it must not use certain Stmt APIs.
   */
   const __execLock = new Set();
+  /**
+     This is a Stmt.get() counterpart of __execLock. Each time
+     Stmt.step() returns true, the statement is added to this set,
+     indicating that Stmt.get() is legal. Stmt APIs which invalidate
+     that status remove the Stmt object from this set, which will
+     cause Stmt.get() to throw with a descriptive error message
+     instead of a more generic "API misuse" if we were to allow that
+     call to reach the C API.
+  */
+  const __stmtMayGet = new Set();
 
   /**
      Stmt APIs which are prohibited on locked objects must call
@@ -1616,7 +1626,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
           toss3("Unsupported bind() argument type: "+(typeof val));
     }
     if(rc) DB.checkRc(stmt.db.pointer, rc);
-    stmt._mayGet = false;
     return stmt;
   };
 
@@ -1640,7 +1649,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
         delete __stmtMap.get(this.db)[this.pointer];
         __ptrMap.delete(this);
         __execLock.delete(this);
-        delete this._mayGet;
+        __stmtMayGet.delete(this);
         delete this.parameterCount;
         delete this.db;
         return rc;
@@ -1655,7 +1664,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
     clearBindings: function(){
       affirmNotLockedByExec(affirmStmtOpen(this), 'clearBindings()')
       capi.sqlite3_clear_bindings(this.pointer);
-      this._mayGet = false;
+        __stmtMayGet.delete(this);
       return this;
     },
     /**
@@ -1681,7 +1690,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
       affirmNotLockedByExec(this,'reset()');
       if(alsoClearBinds) this.clearBindings();
       const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer);
-      this._mayGet = false;
+      __stmtMayGet.delete(this);
       checkSqlite3Rc(this.db, rc);
       return this;
     },
@@ -1768,7 +1777,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
       }else if(!this.parameterCount){
         toss3("This statement has no bindable parameters.");
       }
-      this._mayGet = false;
+      __stmtMayGet.delete(this);
       if(null===arg){
         /* bind NULL */
         return bindOne(this, ndx, BindTypes.null, arg);
@@ -1833,14 +1842,18 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
       affirmNotLockedByExec(this, 'step()');
       const rc = capi.sqlite3_step(affirmStmtOpen(this).pointer);
       switch(rc){
-          case capi.SQLITE_DONE: return this._mayGet = false;
-          case capi.SQLITE_ROW: return this._mayGet = true;
-          default:
-            this._mayGet = false;
-            sqlite3.config.warn("sqlite3_step() rc=",rc,
-                         capi.sqlite3_js_rc_str(rc),
-                         "SQL =", capi.sqlite3_sql(this.pointer));
-            DB.checkRc(this.db.pointer, rc);
+        case capi.SQLITE_DONE:
+          __stmtMayGet.delete(this);
+          return false;
+        case capi.SQLITE_ROW:
+          __stmtMayGet.add(this);
+          return true;
+        default:
+          __stmtMayGet.delete(this);
+          sqlite3.config.warn("sqlite3_step() rc=",rc,
+                              capi.sqlite3_js_rc_str(rc),
+                              "SQL =", capi.sqlite3_sql(this.pointer));
+          DB.checkRc(this.db.pointer, rc);
       }
     },
     /**
@@ -1925,7 +1938,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
        getJSON() can be used for that.
     */
     get: function(ndx,asType){
-      if(!affirmStmtOpen(this)._mayGet){
+      if(!__stmtMayGet.has(affirmStmtOpen(this))){
         toss3("Stmt.step() has not (recently) returned true.");
       }
       if(Array.isArray(ndx)){
index e489b6c617c2c9a3673b8083b236768d471694c4..25760940e3291a8cfddc423bf481b2e65a19228c 100644 (file)
@@ -1263,7 +1263,6 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
             capi.sqlite3_stmt_status(
               st, capi.SQLITE_STMTSTATUS_RUN, 0
             ) === 0)
-          .assert(!st._mayGet)
           .assert('a' === st.getColumnName(0))
           .mustThrowMatching(()=>st.columnCount=2,
                              /columnCount property is read-only/)
@@ -1287,9 +1286,9 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
           .assert(1===st.get(0,capi.SQLITE_BLOB).length)
           .assert(st.getBlob(0) instanceof Uint8Array)
           .assert('3'.charCodeAt(0) === st.getBlob(0)[0])
-          .assert(st._mayGet)
           .assert(false===st.step())
-          .assert(!st._mayGet)
+          .mustThrowMatching(()=>st.get(0),
+                             "Stmt.step() has not (recently) returned true.")
           .assert(
             capi.sqlite3_stmt_status(
               st, capi.SQLITE_STMTSTATUS_RUN, 0
index 3838f3d621ea827254d0464eb883ca83cd9abff6..d104453c07837e2be46775864a63fccaee91061b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Extend\sthe\sSEE-via-kvvfs\stests\sto\sinclude\sall\sthree\skey\stypes.
-D 2025-06-21T15:38:59.405
+C Give\soo1.Stmt.get()\ssimilar\streatment\sto\s[8c187140a60b].\sThis\sis\san\sinternal\schange\sonly\s-\sthe\sAPI\sis\sunaffected.
+D 2025-06-21T15:58:20.803
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -641,7 +641,7 @@ F ext/wasm/api/post-js-header.js 53740d824e5d9027eb1e6fd59e216abbd2136740ce260ea
 F ext/wasm/api/pre-js.c-pp.js a614a2c82b12c4d96d8e3ba77330329efc53c4d56a8a7e60ade900f341866cfb
 F ext/wasm/api/sqlite3-api-cleanup.js 3ac1786e461ada63033143be8c3b00b26b939540661f3e839515bb92f2e35359
 F ext/wasm/api/sqlite3-api-glue.c-pp.js 0b76510f3650053bac67ca8947cb6ab9d050ad2218118a2e7796dd37be832ffa
-F ext/wasm/api/sqlite3-api-oo1.c-pp.js 29b3188237535b290e89f26d9ea22168deed4e428a62cf37177ad95f8a7b6447
+F ext/wasm/api/sqlite3-api-oo1.c-pp.js c68d6da0088c2527156fca9163a721abe08e7bd077b15404fd8d292f4612adc1
 F ext/wasm/api/sqlite3-api-prologue.js 8708570165f5b4bce9a78ccd91bc9ddf8735970ac1c4d659e36c9a7d9a644bb4
 F ext/wasm/api/sqlite3-api-worker1.c-pp.js f646a65257973b8c4481f8a6a216370b85644f23e64b126e7ae113570587c0ab
 F ext/wasm/api/sqlite3-license-version-header.js 0c807a421f0187e778dc1078f10d2994b915123c1223fe752b60afdcd1263f89
@@ -698,7 +698,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555
 F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
 F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c
 F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2
-F ext/wasm/tester1.c-pp.js e675c081fa086c21e28628a895b8b2c8fd672febff3f01b020976814e38d535b
+F ext/wasm/tester1.c-pp.js a13b12e1413a60bd696008bcc8f163c1bf23d742610d82409797e2d5ad27d9c2
 F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e
 F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88
 F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
@@ -2208,8 +2208,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 8c187140a60b62dc3b6066b8615766d52b7a29a5de992cbb6d312dbb225a980b
-R ba07a15430b7600819e9382da0f615e2
+P fc001aa5ee978795c2ff670bea64db0b69b6bde98653769d9cede8825a28e698
+R f9b1fe5f263289fcf02ab968d38c2a06
 U stephan
-Z d9c4734e079b5076090e008163d6d7af
+Z 343fb7c72db97d4b2868b2c2bc4717a9
 # Remove this line to create a well-formed Fossil manifest.
index 6250ae0b92d90ce2644f3177d31ed150da3e7713..4445ac258e5b79132986ffa78223f49f94093812 100644 (file)
@@ -1 +1 @@
-fc001aa5ee978795c2ff670bea64db0b69b6bde98653769d9cede8825a28e698
+f5a7abc0a447273de40dacc463d267d26d4b62be56ee15baf05825791c2a7a6e