@capacitor-community/sqlite 5.6.2 → 5.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/Database.java +3 -2
- package/dist/esm/definitions.d.ts +19 -13
- package/dist/esm/definitions.js +19 -36
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.js +22 -21
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +41 -57
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +41 -57
- package/dist/plugin.js.map +1 -1
- package/electron/dist/plugin.js +7 -7
- package/electron/dist/plugin.js.map +1 -1
- package/ios/Plugin/Utils/UtilsSQLCipher.swift +14 -4
- package/ios/Plugin/Utils/UtilsSQLStatement.swift +8 -2
- package/package.json +2 -2
- package/src/definitions.ts +39 -45
- package/src/web.ts +40 -40
|
@@ -455,6 +455,11 @@ class UtilsSQLCipher {
|
|
|
455
455
|
var names: String = ""
|
|
456
456
|
var result: [[String: Any]] = []
|
|
457
457
|
var retMode: String
|
|
458
|
+
let stmtType = sqlStmt
|
|
459
|
+
.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
460
|
+
.components(separatedBy: " ")
|
|
461
|
+
.first?.capitalized ?? ""
|
|
462
|
+
|
|
458
463
|
if #available(iOS 15, *) {
|
|
459
464
|
retMode = returnMode
|
|
460
465
|
} else {
|
|
@@ -471,7 +476,7 @@ class UtilsSQLCipher {
|
|
|
471
476
|
names = stmtNames["names"] ?? ""
|
|
472
477
|
}
|
|
473
478
|
// Check for DELETE statement
|
|
474
|
-
if !fromJson &&
|
|
479
|
+
if !fromJson && stmtType == "DELETE" {
|
|
475
480
|
do {
|
|
476
481
|
sqlStmt = try deleteSQL(mDB: mDB, sql: sqlStmt,
|
|
477
482
|
values: values)
|
|
@@ -564,7 +569,12 @@ class UtilsSQLCipher {
|
|
|
564
569
|
throws -> [[String: Any]] {
|
|
565
570
|
var result: [[String: Any]] = []
|
|
566
571
|
let initLastId = Int64(sqlite3_last_insert_rowid(mDB.mDb))
|
|
567
|
-
|
|
572
|
+
let stmtType = sqlStmt
|
|
573
|
+
.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
574
|
+
.components(separatedBy: " ")
|
|
575
|
+
.first?.capitalized ?? ""
|
|
576
|
+
|
|
577
|
+
if stmtType == "DELETE" &&
|
|
568
578
|
names.count > 0 {
|
|
569
579
|
do {
|
|
570
580
|
result = try UtilsDelete
|
|
@@ -587,7 +597,7 @@ class UtilsSQLCipher {
|
|
|
587
597
|
.returningWorkAround(message: message)
|
|
588
598
|
|
|
589
599
|
}
|
|
590
|
-
if
|
|
600
|
+
if stmtType == "INSERT" {
|
|
591
601
|
let lastId = Int64(sqlite3_last_insert_rowid(mDB.mDb))
|
|
592
602
|
let tableName = UtilsSQLStatement
|
|
593
603
|
.extractTableName(from: sqlStmt)
|
|
@@ -609,7 +619,7 @@ class UtilsSQLCipher {
|
|
|
609
619
|
|
|
610
620
|
}
|
|
611
621
|
|
|
612
|
-
} else if
|
|
622
|
+
} else if stmtType == "UPDATE" {
|
|
613
623
|
do {
|
|
614
624
|
result = try UtilsDelete
|
|
615
625
|
.getUpdDelReturnedValues(mDB: mDB,
|
|
@@ -326,6 +326,10 @@ class UtilsSQLStatement {
|
|
|
326
326
|
// MARK: - isReturning
|
|
327
327
|
|
|
328
328
|
class func isReturning(sqlStmt: String) -> (Bool, String, String) {
|
|
329
|
+
let stmtType = sqlStmt
|
|
330
|
+
.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
331
|
+
.components(separatedBy: " ")
|
|
332
|
+
.first?.capitalized ?? ""
|
|
329
333
|
var stmt = sqlStmt.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
330
334
|
if stmt.hasSuffix(";") {
|
|
331
335
|
// Remove the suffix
|
|
@@ -333,11 +337,13 @@ class UtilsSQLStatement {
|
|
|
333
337
|
.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
334
338
|
}
|
|
335
339
|
|
|
336
|
-
switch
|
|
340
|
+
switch stmtType {
|
|
337
341
|
|
|
338
342
|
case "INSERT":
|
|
339
343
|
if let valuesIndex = stmt.range(of: "VALUES", options: .caseInsensitive)?.lowerBound,
|
|
340
|
-
let closingParenthesisIndex = stmt
|
|
344
|
+
let closingParenthesisIndex = stmt
|
|
345
|
+
.range(of: ")", options: .backwards, range: valuesIndex..<stmt.endIndex)?
|
|
346
|
+
.upperBound {
|
|
341
347
|
guard closingParenthesisIndex < stmt.endIndex else {
|
|
342
348
|
stmt += ";"
|
|
343
349
|
return (false, stmt, "")
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capacitor-community/sqlite",
|
|
3
|
-
"version": "5.6.
|
|
3
|
+
"version": "5.6.4",
|
|
4
4
|
"description": "Community plugin for native & electron SQLite databases",
|
|
5
5
|
"main": "dist/plugin.cjs.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -97,6 +97,6 @@
|
|
|
97
97
|
}
|
|
98
98
|
},
|
|
99
99
|
"dependencies": {
|
|
100
|
-
"jeep-sqlite": "^2.6.
|
|
100
|
+
"jeep-sqlite": "^2.6.2"
|
|
101
101
|
}
|
|
102
102
|
}
|
package/src/definitions.ts
CHANGED
|
@@ -675,6 +675,20 @@ export interface capSQLiteQueryOptions {
|
|
|
675
675
|
*/
|
|
676
676
|
isSQL92?: boolean;
|
|
677
677
|
}
|
|
678
|
+
export interface capTask {
|
|
679
|
+
/**
|
|
680
|
+
* define task for executeTransaction
|
|
681
|
+
* @since 5.6.3
|
|
682
|
+
*/
|
|
683
|
+
/**
|
|
684
|
+
* A SQLite statement
|
|
685
|
+
*/
|
|
686
|
+
statement: string;
|
|
687
|
+
/**
|
|
688
|
+
* A set of values to bind to the statement (optional)
|
|
689
|
+
*/
|
|
690
|
+
values?: any[];
|
|
691
|
+
}
|
|
678
692
|
export interface capSQLiteImportOptions {
|
|
679
693
|
/**
|
|
680
694
|
* Set the JSON object to import
|
|
@@ -1123,16 +1137,13 @@ export interface ISQLiteConnection {
|
|
|
1123
1137
|
/**
|
|
1124
1138
|
* Add the upgrade Statement for database version upgrading
|
|
1125
1139
|
* @param database
|
|
1126
|
-
* @param
|
|
1127
|
-
* @param statement
|
|
1128
|
-
* @param set
|
|
1140
|
+
* @param upgrade @since 5.6.4
|
|
1129
1141
|
* @returns Promise<void>
|
|
1130
1142
|
* @since 2.9.0 refactor
|
|
1131
1143
|
*/
|
|
1132
1144
|
addUpgradeStatement(
|
|
1133
1145
|
database: string,
|
|
1134
|
-
|
|
1135
|
-
statements: string[],
|
|
1146
|
+
upgrade: capSQLiteVersionUpgrade[]
|
|
1136
1147
|
): Promise<void>;
|
|
1137
1148
|
/**
|
|
1138
1149
|
* Create a connection to a database
|
|
@@ -1446,18 +1457,13 @@ export class SQLiteConnection implements ISQLiteConnection {
|
|
|
1446
1457
|
}
|
|
1447
1458
|
async addUpgradeStatement(
|
|
1448
1459
|
database: string,
|
|
1449
|
-
|
|
1450
|
-
statements: string[],
|
|
1460
|
+
upgrade: capSQLiteVersionUpgrade[]
|
|
1451
1461
|
): Promise<void> {
|
|
1452
|
-
const upgrade: capSQLiteVersionUpgrade = {
|
|
1453
|
-
toVersion,
|
|
1454
|
-
statements,
|
|
1455
|
-
};
|
|
1456
1462
|
try {
|
|
1457
1463
|
if (database.endsWith('.db')) database = database.slice(0, -3);
|
|
1458
1464
|
await this.sqlite.addUpgradeStatement({
|
|
1459
1465
|
database,
|
|
1460
|
-
upgrade
|
|
1466
|
+
upgrade,
|
|
1461
1467
|
});
|
|
1462
1468
|
return Promise.resolve();
|
|
1463
1469
|
} catch (err) {
|
|
@@ -2000,7 +2006,7 @@ export interface ISQLiteDBConnection {
|
|
|
2000
2006
|
* @since 3.4.0
|
|
2001
2007
|
*/
|
|
2002
2008
|
executeTransaction(
|
|
2003
|
-
txn:
|
|
2009
|
+
txn: capTask[],
|
|
2004
2010
|
isSQL92: boolean,
|
|
2005
2011
|
): Promise<capSQLiteChanges>;
|
|
2006
2012
|
}
|
|
@@ -2389,30 +2395,29 @@ export class SQLiteDBConnection implements ISQLiteDBConnection {
|
|
|
2389
2395
|
}
|
|
2390
2396
|
|
|
2391
2397
|
async executeTransaction(
|
|
2392
|
-
txn:
|
|
2398
|
+
txn: capTask[],
|
|
2393
2399
|
isSQL92 = true,
|
|
2394
2400
|
): Promise<capSQLiteChanges> {
|
|
2395
2401
|
let changes = 0;
|
|
2396
2402
|
let isActive = false;
|
|
2397
2403
|
if (!this.readonly) {
|
|
2398
|
-
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
|
|
2408
|
-
);
|
|
2409
|
-
}
|
|
2410
|
-
} catch (err) {
|
|
2411
|
-
return Promise.reject(err);
|
|
2404
|
+
await this.sqlite.beginTransaction({
|
|
2405
|
+
database: this.dbName,
|
|
2406
|
+
});
|
|
2407
|
+
isActive = await this.sqlite.isTransactionActive({
|
|
2408
|
+
database: this.dbName,
|
|
2409
|
+
});
|
|
2410
|
+
if (!isActive) {
|
|
2411
|
+
return Promise.reject(
|
|
2412
|
+
'After Begin Transaction, no transaction active',
|
|
2413
|
+
);
|
|
2412
2414
|
}
|
|
2413
2415
|
try {
|
|
2414
2416
|
for (const task of txn) {
|
|
2415
|
-
if
|
|
2417
|
+
if(typeof task !== 'object' || !('statement' in task)) {
|
|
2418
|
+
throw new Error('Error a task.statement must be provided');
|
|
2419
|
+
}
|
|
2420
|
+
if ('values' in task && task.values && task.values.length > 0) {
|
|
2416
2421
|
const retMode = task.statement.toUpperCase().includes('RETURNING')
|
|
2417
2422
|
? 'all'
|
|
2418
2423
|
: 'no';
|
|
@@ -2436,36 +2441,25 @@ export class SQLiteDBConnection implements ISQLiteDBConnection {
|
|
|
2436
2441
|
transaction: false,
|
|
2437
2442
|
readonly: false,
|
|
2438
2443
|
});
|
|
2439
|
-
isActive = await this.sqlite.isTransactionActive({
|
|
2440
|
-
database: this.dbName,
|
|
2441
|
-
});
|
|
2442
2444
|
if (ret.changes.changes < 0) {
|
|
2443
2445
|
throw new Error('Error in transaction method execute ');
|
|
2444
2446
|
}
|
|
2445
2447
|
changes += ret.changes.changes;
|
|
2446
2448
|
}
|
|
2447
2449
|
}
|
|
2448
|
-
|
|
2450
|
+
// commit
|
|
2451
|
+
const retC = await this.sqlite.commitTransaction({
|
|
2449
2452
|
database: this.dbName,
|
|
2450
2453
|
});
|
|
2451
|
-
|
|
2452
|
-
const retC = await this.sqlite.commitTransaction({
|
|
2453
|
-
database: this.dbName,
|
|
2454
|
-
});
|
|
2455
|
-
changes += retC.changes.changes;
|
|
2456
|
-
}
|
|
2454
|
+
changes += retC.changes.changes;
|
|
2457
2455
|
const retChanges = { changes: { changes: changes } };
|
|
2458
2456
|
return Promise.resolve(retChanges);
|
|
2459
2457
|
} catch (err: any) {
|
|
2458
|
+
// rollback
|
|
2460
2459
|
const msg = err.message ? err.message : err;
|
|
2461
|
-
|
|
2460
|
+
await this.sqlite.rollbackTransaction({
|
|
2462
2461
|
database: this.dbName,
|
|
2463
2462
|
});
|
|
2464
|
-
if (isActive) {
|
|
2465
|
-
await this.sqlite.rollbackTransaction({
|
|
2466
|
-
database: this.dbName,
|
|
2467
|
-
});
|
|
2468
|
-
}
|
|
2469
2463
|
return Promise.reject(msg);
|
|
2470
2464
|
}
|
|
2471
2465
|
} else {
|
package/src/web.ts
CHANGED
|
@@ -45,48 +45,48 @@ export class CapacitorSQLiteWeb
|
|
|
45
45
|
private isWebStoreOpen = false;
|
|
46
46
|
|
|
47
47
|
async initWebStore(): Promise<void> {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
this.jeepSqliteElement = document.querySelector('jeep-sqlite');
|
|
51
|
-
|
|
52
|
-
this.ensureJeepSqliteIsAvailable();
|
|
53
|
-
|
|
54
|
-
this.jeepSqliteElement.addEventListener(
|
|
55
|
-
'jeepSqliteImportProgress',
|
|
56
|
-
(event: CustomEvent) => {
|
|
57
|
-
this.notifyListeners('sqliteImportProgressEvent', event.detail);
|
|
58
|
-
},
|
|
59
|
-
);
|
|
60
|
-
this.jeepSqliteElement.addEventListener(
|
|
61
|
-
'jeepSqliteExportProgress',
|
|
62
|
-
(event: CustomEvent) => {
|
|
63
|
-
this.notifyListeners('sqliteExportProgressEvent', event.detail);
|
|
64
|
-
},
|
|
65
|
-
);
|
|
66
|
-
this.jeepSqliteElement.addEventListener(
|
|
67
|
-
'jeepSqliteHTTPRequestEnded',
|
|
68
|
-
(event: CustomEvent) => {
|
|
69
|
-
this.notifyListeners('sqliteHTTPRequestEndedEvent', event.detail);
|
|
70
|
-
},
|
|
71
|
-
);
|
|
72
|
-
this.jeepSqliteElement.addEventListener(
|
|
73
|
-
'jeepSqlitePickDatabaseEnded',
|
|
74
|
-
(event: CustomEvent) => {
|
|
75
|
-
this.notifyListeners('sqlitePickDatabaseEndedEvent', event.detail);
|
|
76
|
-
},
|
|
77
|
-
);
|
|
78
|
-
this.jeepSqliteElement.addEventListener(
|
|
79
|
-
'jeepSqliteSaveDatabaseToDisk',
|
|
80
|
-
(event: CustomEvent) => {
|
|
81
|
-
this.notifyListeners('sqliteSaveDatabaseToDiskEvent', event.detail);
|
|
82
|
-
},
|
|
83
|
-
);
|
|
48
|
+
customElements.whenDefined('jeep-sqlite').then(async () => {
|
|
84
49
|
|
|
85
|
-
|
|
86
|
-
this.
|
|
87
|
-
}
|
|
50
|
+
this.jeepSqliteElement = document.querySelector('jeep-sqlite');
|
|
51
|
+
this.ensureJeepSqliteIsAvailable();
|
|
88
52
|
|
|
89
|
-
|
|
53
|
+
this.jeepSqliteElement.addEventListener(
|
|
54
|
+
'jeepSqliteImportProgress',
|
|
55
|
+
(event: CustomEvent) => {
|
|
56
|
+
this.notifyListeners('sqliteImportProgressEvent', event.detail);
|
|
57
|
+
},
|
|
58
|
+
);
|
|
59
|
+
this.jeepSqliteElement.addEventListener(
|
|
60
|
+
'jeepSqliteExportProgress',
|
|
61
|
+
(event: CustomEvent) => {
|
|
62
|
+
this.notifyListeners('sqliteExportProgressEvent', event.detail);
|
|
63
|
+
},
|
|
64
|
+
);
|
|
65
|
+
this.jeepSqliteElement.addEventListener(
|
|
66
|
+
'jeepSqliteHTTPRequestEnded',
|
|
67
|
+
(event: CustomEvent) => {
|
|
68
|
+
this.notifyListeners('sqliteHTTPRequestEndedEvent', event.detail);
|
|
69
|
+
},
|
|
70
|
+
);
|
|
71
|
+
this.jeepSqliteElement.addEventListener(
|
|
72
|
+
'jeepSqlitePickDatabaseEnded',
|
|
73
|
+
(event: CustomEvent) => {
|
|
74
|
+
this.notifyListeners('sqlitePickDatabaseEndedEvent', event.detail);
|
|
75
|
+
},
|
|
76
|
+
);
|
|
77
|
+
this.jeepSqliteElement.addEventListener(
|
|
78
|
+
'jeepSqliteSaveDatabaseToDisk',
|
|
79
|
+
(event: CustomEvent) => {
|
|
80
|
+
this.notifyListeners('sqliteSaveDatabaseToDiskEvent', event.detail);
|
|
81
|
+
},
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
if (!this.isWebStoreOpen) {
|
|
85
|
+
this.isWebStoreOpen = await this.jeepSqliteElement.isStoreOpen();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return;
|
|
89
|
+
});
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
async saveToStore(options: capSQLiteOptions): Promise<void> {
|