pull/1975/merge
Cistus Creticus 2 weeks ago committed by GitHub
commit fcd2849f20
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
"sql-js": patch
---
Allow multiple identical connections to be closed.

@ -1 +1 @@
if("__TAURI__"in window){var __TAURI_PLUGIN_SQL__=function(){"use strict";async function e(e,t={},s){return window.__TAURI_INTERNALS__.invoke(e,t,s)}"function"==typeof SuppressedError&&SuppressedError;class t{constructor(e){this.path=e}static async load(s){const n=await e("plugin:sql|load",{db:s});return new t(n)}static get(e){return new t(e)}async execute(t,s){const[n,r]=await e("plugin:sql|execute",{db:this.path,query:t,values:s??[]});return{lastInsertId:r,rowsAffected:n}}async select(t,s){return await e("plugin:sql|select",{db:this.path,query:t,values:s??[]})}async close(t){return await e("plugin:sql|close",{db:t})}}return t}();Object.defineProperty(window.__TAURI__,"sql",{value:__TAURI_PLUGIN_SQL__})}
if("__TAURI__"in window){var __TAURI_PLUGIN_SQL__=function(){"use strict";async function t(t,e={},s){return window.__TAURI_INTERNALS__.invoke(t,e,s)}"function"==typeof SuppressedError&&SuppressedError;const e=new Map;class s{constructor(t){this.path=t,(t=>{e.set(t,(e.get(t)??0)+1)})(t)}static async load(e){const n=await t("plugin:sql|load",{db:e});return new s(n)}static get(t){return new s(t)}async execute(e,s){const[n,r]=await t("plugin:sql|execute",{db:this.path,query:e,values:s??[]});return{lastInsertId:r,rowsAffected:n}}async select(e,s){return await t("plugin:sql|select",{db:this.path,query:e,values:s??[]})}async close(s){if((t=>{const s=e.get(t)??0;s>0&&e.set(t,s-1)})(this.path),n=this.path,0!==e.get(n))return!0;var n;return await t("plugin:sql|close",{db:s})}}return s}();Object.defineProperty(window.__TAURI__,"sql",{value:__TAURI_PLUGIN_SQL__})}

@ -4,6 +4,24 @@
import { invoke } from '@tauri-apps/api/core'
const DatabaseConnections = new Map<string, number>()
const incrementConnectionCount = (path: string) => {
DatabaseConnections.set(path, (DatabaseConnections.get(path) ?? 0) + 1)
}
const decrementConnectionCount = (path: string) => {
const count = DatabaseConnections.get(path) ?? 0
if (count > 0) {
DatabaseConnections.set(path, count - 1)
}
}
const shouldCloseActualConnection = (path: string) => {
return DatabaseConnections.get(path) === 0
}
export interface QueryResult {
/** The number of rows affected by the query. */
rowsAffected: number
@ -28,6 +46,7 @@ export default class Database {
path: string
constructor(path: string) {
this.path = path
incrementConnectionCount(path)
}
/**
@ -160,6 +179,12 @@ export default class Database {
* @param db - Optionally state the name of a database if you are managing more than one. Otherwise, all database pools will be in scope.
*/
async close(db?: string): Promise<boolean> {
decrementConnectionCount(this.path)
if (!shouldCloseActualConnection(this.path)) {
return true
}
const success = await invoke<boolean>('plugin:sql|close', {
db
})

Loading…
Cancel
Save