mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Give oo1.Stmt.get() similar treatment to [8c187140a60b]. This is an internal change only - the API is unaffected.
FossilOrigin-Name: f5a7abc0a447273de40dacc463d267d26d4b62be56ee15baf05825791c2a7a6e
This commit is contained in:
@ -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,10 +1842,14 @@ 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;
|
||||
case capi.SQLITE_DONE:
|
||||
__stmtMayGet.delete(this);
|
||||
return false;
|
||||
case capi.SQLITE_ROW:
|
||||
__stmtMayGet.add(this);
|
||||
return true;
|
||||
default:
|
||||
this._mayGet = false;
|
||||
__stmtMayGet.delete(this);
|
||||
sqlite3.config.warn("sqlite3_step() rc=",rc,
|
||||
capi.sqlite3_js_rc_str(rc),
|
||||
"SQL =", capi.sqlite3_sql(this.pointer));
|
||||
@ -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)){
|
||||
|
@ -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
|
||||
|
14
manifest
14
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.
|
||||
|
@ -1 +1 @@
|
||||
fc001aa5ee978795c2ff670bea64db0b69b6bde98653769d9cede8825a28e698
|
||||
f5a7abc0a447273de40dacc463d267d26d4b62be56ee15baf05825791c2a7a6e
|
||||
|
Reference in New Issue
Block a user