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.
|
exec() but it must not use certain Stmt APIs.
|
||||||
*/
|
*/
|
||||||
const __execLock = new Set();
|
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
|
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));
|
toss3("Unsupported bind() argument type: "+(typeof val));
|
||||||
}
|
}
|
||||||
if(rc) DB.checkRc(stmt.db.pointer, rc);
|
if(rc) DB.checkRc(stmt.db.pointer, rc);
|
||||||
stmt._mayGet = false;
|
|
||||||
return stmt;
|
return stmt;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1640,7 +1649,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
|||||||
delete __stmtMap.get(this.db)[this.pointer];
|
delete __stmtMap.get(this.db)[this.pointer];
|
||||||
__ptrMap.delete(this);
|
__ptrMap.delete(this);
|
||||||
__execLock.delete(this);
|
__execLock.delete(this);
|
||||||
delete this._mayGet;
|
__stmtMayGet.delete(this);
|
||||||
delete this.parameterCount;
|
delete this.parameterCount;
|
||||||
delete this.db;
|
delete this.db;
|
||||||
return rc;
|
return rc;
|
||||||
@ -1655,7 +1664,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
|||||||
clearBindings: function(){
|
clearBindings: function(){
|
||||||
affirmNotLockedByExec(affirmStmtOpen(this), 'clearBindings()')
|
affirmNotLockedByExec(affirmStmtOpen(this), 'clearBindings()')
|
||||||
capi.sqlite3_clear_bindings(this.pointer);
|
capi.sqlite3_clear_bindings(this.pointer);
|
||||||
this._mayGet = false;
|
__stmtMayGet.delete(this);
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
@ -1681,7 +1690,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
|||||||
affirmNotLockedByExec(this,'reset()');
|
affirmNotLockedByExec(this,'reset()');
|
||||||
if(alsoClearBinds) this.clearBindings();
|
if(alsoClearBinds) this.clearBindings();
|
||||||
const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer);
|
const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer);
|
||||||
this._mayGet = false;
|
__stmtMayGet.delete(this);
|
||||||
checkSqlite3Rc(this.db, rc);
|
checkSqlite3Rc(this.db, rc);
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
@ -1768,7 +1777,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
|||||||
}else if(!this.parameterCount){
|
}else if(!this.parameterCount){
|
||||||
toss3("This statement has no bindable parameters.");
|
toss3("This statement has no bindable parameters.");
|
||||||
}
|
}
|
||||||
this._mayGet = false;
|
__stmtMayGet.delete(this);
|
||||||
if(null===arg){
|
if(null===arg){
|
||||||
/* bind NULL */
|
/* bind NULL */
|
||||||
return bindOne(this, ndx, BindTypes.null, arg);
|
return bindOne(this, ndx, BindTypes.null, arg);
|
||||||
@ -1833,14 +1842,18 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
|||||||
affirmNotLockedByExec(this, 'step()');
|
affirmNotLockedByExec(this, 'step()');
|
||||||
const rc = capi.sqlite3_step(affirmStmtOpen(this).pointer);
|
const rc = capi.sqlite3_step(affirmStmtOpen(this).pointer);
|
||||||
switch(rc){
|
switch(rc){
|
||||||
case capi.SQLITE_DONE: return this._mayGet = false;
|
case capi.SQLITE_DONE:
|
||||||
case capi.SQLITE_ROW: return this._mayGet = true;
|
__stmtMayGet.delete(this);
|
||||||
default:
|
return false;
|
||||||
this._mayGet = false;
|
case capi.SQLITE_ROW:
|
||||||
sqlite3.config.warn("sqlite3_step() rc=",rc,
|
__stmtMayGet.add(this);
|
||||||
capi.sqlite3_js_rc_str(rc),
|
return true;
|
||||||
"SQL =", capi.sqlite3_sql(this.pointer));
|
default:
|
||||||
DB.checkRc(this.db.pointer, rc);
|
__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.
|
getJSON() can be used for that.
|
||||||
*/
|
*/
|
||||||
get: function(ndx,asType){
|
get: function(ndx,asType){
|
||||||
if(!affirmStmtOpen(this)._mayGet){
|
if(!__stmtMayGet.has(affirmStmtOpen(this))){
|
||||||
toss3("Stmt.step() has not (recently) returned true.");
|
toss3("Stmt.step() has not (recently) returned true.");
|
||||||
}
|
}
|
||||||
if(Array.isArray(ndx)){
|
if(Array.isArray(ndx)){
|
||||||
|
@ -1263,7 +1263,6 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
|
|||||||
capi.sqlite3_stmt_status(
|
capi.sqlite3_stmt_status(
|
||||||
st, capi.SQLITE_STMTSTATUS_RUN, 0
|
st, capi.SQLITE_STMTSTATUS_RUN, 0
|
||||||
) === 0)
|
) === 0)
|
||||||
.assert(!st._mayGet)
|
|
||||||
.assert('a' === st.getColumnName(0))
|
.assert('a' === st.getColumnName(0))
|
||||||
.mustThrowMatching(()=>st.columnCount=2,
|
.mustThrowMatching(()=>st.columnCount=2,
|
||||||
/columnCount property is read-only/)
|
/columnCount property is read-only/)
|
||||||
@ -1287,9 +1286,9 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
|
|||||||
.assert(1===st.get(0,capi.SQLITE_BLOB).length)
|
.assert(1===st.get(0,capi.SQLITE_BLOB).length)
|
||||||
.assert(st.getBlob(0) instanceof Uint8Array)
|
.assert(st.getBlob(0) instanceof Uint8Array)
|
||||||
.assert('3'.charCodeAt(0) === st.getBlob(0)[0])
|
.assert('3'.charCodeAt(0) === st.getBlob(0)[0])
|
||||||
.assert(st._mayGet)
|
|
||||||
.assert(false===st.step())
|
.assert(false===st.step())
|
||||||
.assert(!st._mayGet)
|
.mustThrowMatching(()=>st.get(0),
|
||||||
|
"Stmt.step() has not (recently) returned true.")
|
||||||
.assert(
|
.assert(
|
||||||
capi.sqlite3_stmt_status(
|
capi.sqlite3_stmt_status(
|
||||||
st, capi.SQLITE_STMTSTATUS_RUN, 0
|
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.
|
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:38:59.405
|
D 2025-06-21T15:58:20.803
|
||||||
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
|
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
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/pre-js.c-pp.js a614a2c82b12c4d96d8e3ba77330329efc53c4d56a8a7e60ade900f341866cfb
|
||||||
F ext/wasm/api/sqlite3-api-cleanup.js 3ac1786e461ada63033143be8c3b00b26b939540661f3e839515bb92f2e35359
|
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-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-prologue.js 8708570165f5b4bce9a78ccd91bc9ddf8735970ac1c4d659e36c9a7d9a644bb4
|
||||||
F ext/wasm/api/sqlite3-api-worker1.c-pp.js f646a65257973b8c4481f8a6a216370b85644f23e64b126e7ae113570587c0ab
|
F ext/wasm/api/sqlite3-api-worker1.c-pp.js f646a65257973b8c4481f8a6a216370b85644f23e64b126e7ae113570587c0ab
|
||||||
F ext/wasm/api/sqlite3-license-version-header.js 0c807a421f0187e778dc1078f10d2994b915123c1223fe752b60afdcd1263f89
|
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/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
|
||||||
F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c
|
F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c
|
||||||
F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2
|
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/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e
|
||||||
F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88
|
F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88
|
||||||
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
|
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-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
|
||||||
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
|
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
|
||||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||||
P 8c187140a60b62dc3b6066b8615766d52b7a29a5de992cbb6d312dbb225a980b
|
P fc001aa5ee978795c2ff670bea64db0b69b6bde98653769d9cede8825a28e698
|
||||||
R ba07a15430b7600819e9382da0f615e2
|
R f9b1fe5f263289fcf02ab968d38c2a06
|
||||||
U stephan
|
U stephan
|
||||||
Z d9c4734e079b5076090e008163d6d7af
|
Z 343fb7c72db97d4b2868b2c2bc4717a9
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
@ -1 +1 @@
|
|||||||
fc001aa5ee978795c2ff670bea64db0b69b6bde98653769d9cede8825a28e698
|
f5a7abc0a447273de40dacc463d267d26d4b62be56ee15baf05825791c2a7a6e
|
||||||
|
Reference in New Issue
Block a user