1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-27 20:41:58 +03:00

Add oo1.DB.selectArray() and selectObject().

FossilOrigin-Name: 7660db2a2e9c4f3a6a9343d6929744ad0f4be6820976411f9080165491da59b7
This commit is contained in:
stephan
2022-10-30 11:39:47 +00:00
parent 9163ef1f4d
commit 50ef01398d
4 changed files with 73 additions and 8 deletions

View File

@ -429,6 +429,21 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
return out;
};
/**
Internal impl of the DB.selectRowArray() and
selectRowObject() methods.
*/
const __selectFirstRow = (db, sql, bind, getArg)=>{
let stmt, rc;
try {
stmt = db.prepare(sql).bind(bind);
if(stmt.step()) rc = stmt.get(getArg);
}finally{
if(stmt) stmt.finalize();
}
return rc;
};
/**
Expects to be given a DB instance or an `sqlite3*` pointer (may
be null) and an sqlite3 API result code. If the result code is
@ -982,6 +997,38 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
}
return rc;
},
/**
Prepares the given SQL, step()s it one time, and returns an
array containing the values of the first result row. If it has
no results, `undefined` is returned.
If passed a second argument other than `undefined`, it is
treated like an argument to Stmt.bind(), so may be any type
supported by that function.
Throws on error (e.g. malformed SQL).
*/
selectArray: function(sql,bind){
return __selectFirstRow(this, sql, bind, []);
},
/**
Prepares the given SQL, step()s it one time, and returns an
object containing the key/value pairs of the first result
row. If it has no results, `undefined` is returned.
Note that the order of returned object's keys is not guaranteed
to be the same as the order of the fields in the query string.
If passed a second argument other than `undefined`, it is
treated like an argument to Stmt.bind(), so may be any type
supported by that function.
Throws on error (e.g. malformed SQL).
*/
selectObject: function(sql,bind){
return __selectFirstRow(this, sql, bind, {});
},
/**
Returns the number of currently-opened Stmt handles for this db

View File

@ -1301,6 +1301,24 @@
.assert(0==e.message.indexOf('Cannot prepare empty'));
}
})
////////////////////////////////////////////////////////////////////////
.t('selectArray/Object()', function(sqlite3){
const db = this.db;
let rc = db.selectArray('select a, b from t where a=?', 5);
T.assert(Array.isArray(rc))
.assert(2===rc.length)
.assert(5===rc[0] && 6===rc[1]);
rc = db.selectArray('select a, b from t where b=-1');
T.assert(undefined === rc);
rc = db.selectObject('select a A, b b from t where b=?', 6);
T.assert(rc && 'object'===typeof rc)
.assert(5===rc.A)
.assert(6===rc.b);
rc = db.selectArray('select a, b from t where b=-1');
T.assert(undefined === rc);
})
////////////////////////////////////////////////////////////////////////
.t('sqlite3_js_db_export()', function(){
const db = this.db;

View File

@ -1,5 +1,5 @@
C Adjust\sautomatic\sOPFS\slocking\sretries\ssuch\sthat\sthey\swill\swait\sup\sto\sa\stotal\sof\s3\sseconds\sspanning\s4\sattempts.
D 2022-10-30T10:24:53.526
C Add\soo1.DB.selectArray()\sand\sselectObject().
D 2022-10-30T11:39:47.998
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@ -500,7 +500,7 @@ F ext/wasm/api/post-js-header.js d6ab3dfef4a06960d28a7eaa338d4e2a1a5981e9b387181
F ext/wasm/api/pre-js.js 287e462f969342b032c03900e668099fa1471d852df7a472de5bc349161d9c04
F ext/wasm/api/sqlite3-api-cleanup.js ecdc69dbfccfe26146f04799fcfd4a6f5790d46e7e3b9b6e9b0491f92ed8ae34
F ext/wasm/api/sqlite3-api-glue.js b87543534821ecfa56fc0d0cd153a115fa974e70d6217964baf6e93ef8d25fb1
F ext/wasm/api/sqlite3-api-oo1.js 612063da9838286310712c5411f97b8b20759b1e31e75a9b25b6381541db79a8
F ext/wasm/api/sqlite3-api-oo1.js a17e2624967073f86cc50f4c1e30f8822ef631dc20dfc73b1143847b9e9723fe
F ext/wasm/api/sqlite3-api-opfs.js c67cbe0b1451ec43bc6b3199e13453e1ca56d718a75c0498253b0d479c336256
F ext/wasm/api/sqlite3-api-prologue.js a218dda5e5ced8894f65760131371e4cabd31062af58803af8952cc00ea778d2
F ext/wasm/api/sqlite3-api-worker1.js efdca1b42299d80b54f366d15a8fc5343f3b3e9e3647e5c1fd6f3ee1015e501b
@ -549,7 +549,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555
F ext/wasm/test-opfs-vfs.js 48fc59110e8775bb43c9be25b6d634fc07ebadab7da8fbd44889e8129c6e2548
F ext/wasm/tester1-worker.html d02b9d38876b023854cf8955e77a40912f7e516956b4dbe1ec7f215faac273ee
F ext/wasm/tester1.html c6c47e5a8071eb09cb1301104435c8e44fbb5719c92411f5b2384a461f9793c5
F ext/wasm/tester1.js 679013b874152427d302e56f78bf542c47a090a85c8ca010bb4002859431cf61
F ext/wasm/tester1.js 08ccc16972562ff604b7bda387b56d6eea380aaf968697fc8e2a9bb3c6ba2dda
F ext/wasm/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd72273503ae7d5
F ext/wasm/wasmfs.make fb2d3c4a298b12cf1ec994ad1d0f1d027ae297449b364cde43d2eb807d68048f
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
@ -2054,8 +2054,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 50f678846a2b3c3d0818f0bae89f2ee86252a2e6a9c7029ebaae3953ca0fa14c
R 1972183d0891a999ac8d66d2a75ace56
P bbce49d81abc491ca666474040a53057e26e99131fea9449de253f88f4415ded
R db56e1c7d598fb49e6f4c473767fbbc1
U stephan
Z d56b11be64ada51bbacb5dad8807cd55
Z bb0672930fc07425c0c9d9cd4f958f03
# Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
bbce49d81abc491ca666474040a53057e26e99131fea9449de253f88f4415ded
7660db2a2e9c4f3a6a9343d6929744ad0f4be6820976411f9080165491da59b7