@capacitor-community/sqlite 5.6.3 → 5.7.0

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.
@@ -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 && sqlStmt.prefix(6).uppercased() == "DELETE" {
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
- if sqlStmt.prefix(6).uppercased() == "DELETE" &&
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 sqlStmt.prefix(6).uppercased() == "INSERT" {
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 sqlStmt.prefix(6).uppercased() == "UPDATE" {
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 stmt.prefix(6).uppercased() {
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.range(of: ")", options: .backwards, range: valuesIndex..<stmt.endIndex)?.upperBound {
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",
3
+ "version": "5.7.0",
4
4
  "description": "Community plugin for native & electron SQLite databases",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",
@@ -59,11 +59,11 @@
59
59
  "prepublishOnly": "npm run build && npm run build-electron && npm run docgen"
60
60
  },
61
61
  "devDependencies": {
62
- "@capacitor/android": "^5.6.0",
63
- "@capacitor/cli": "^5.6.0",
64
- "@capacitor/core": "^5.6.0",
62
+ "@capacitor/android": "^5.7.0",
63
+ "@capacitor/cli": "^5.7.0",
64
+ "@capacitor/core": "^5.7.0",
65
65
  "@capacitor/docgen": "^0.0.17",
66
- "@capacitor/ios": "^5.6.0",
66
+ "@capacitor/ios": "^5.7.0",
67
67
  "@ionic/eslint-config": "^0.3.0",
68
68
  "@ionic/prettier-config": "^1.0.1",
69
69
  "@ionic/swiftlint-config": "^1.1.2",
@@ -97,6 +97,6 @@
97
97
  }
98
98
  },
99
99
  "dependencies": {
100
- "jeep-sqlite": "^2.6.1"
100
+ "jeep-sqlite": "^2.6.2"
101
101
  }
102
102
  }
@@ -1137,16 +1137,13 @@ export interface ISQLiteConnection {
1137
1137
  /**
1138
1138
  * Add the upgrade Statement for database version upgrading
1139
1139
  * @param database
1140
- * @param toVersion
1141
- * @param statement
1142
- * @param set
1140
+ * @param upgrade @since 5.6.4
1143
1141
  * @returns Promise<void>
1144
1142
  * @since 2.9.0 refactor
1145
1143
  */
1146
1144
  addUpgradeStatement(
1147
1145
  database: string,
1148
- toVersion: number,
1149
- statements: string[],
1146
+ upgrade: capSQLiteVersionUpgrade[]
1150
1147
  ): Promise<void>;
1151
1148
  /**
1152
1149
  * Create a connection to a database
@@ -1460,18 +1457,13 @@ export class SQLiteConnection implements ISQLiteConnection {
1460
1457
  }
1461
1458
  async addUpgradeStatement(
1462
1459
  database: string,
1463
- toVersion: number,
1464
- statements: string[],
1460
+ upgrade: capSQLiteVersionUpgrade[]
1465
1461
  ): Promise<void> {
1466
- const upgrade: capSQLiteVersionUpgrade = {
1467
- toVersion,
1468
- statements,
1469
- };
1470
1462
  try {
1471
1463
  if (database.endsWith('.db')) database = database.slice(0, -3);
1472
1464
  await this.sqlite.addUpgradeStatement({
1473
1465
  database,
1474
- upgrade: [upgrade],
1466
+ upgrade,
1475
1467
  });
1476
1468
  return Promise.resolve();
1477
1469
  } catch (err) {
@@ -2409,20 +2401,16 @@ export class SQLiteDBConnection implements ISQLiteDBConnection {
2409
2401
  let changes = 0;
2410
2402
  let isActive = false;
2411
2403
  if (!this.readonly) {
2412
- try {
2413
- await this.sqlite.beginTransaction({
2414
- database: this.dbName,
2415
- });
2416
- isActive = await this.sqlite.isTransactionActive({
2417
- database: this.dbName,
2418
- });
2419
- if (!isActive) {
2420
- return Promise.reject(
2421
- 'After Begin Transaction, no transaction active',
2422
- );
2423
- }
2424
- } catch (err) {
2425
- 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
+ );
2426
2414
  }
2427
2415
  try {
2428
2416
  for (const task of txn) {
@@ -2453,36 +2441,25 @@ export class SQLiteDBConnection implements ISQLiteDBConnection {
2453
2441
  transaction: false,
2454
2442
  readonly: false,
2455
2443
  });
2456
- isActive = await this.sqlite.isTransactionActive({
2457
- database: this.dbName,
2458
- });
2459
2444
  if (ret.changes.changes < 0) {
2460
2445
  throw new Error('Error in transaction method execute ');
2461
2446
  }
2462
2447
  changes += ret.changes.changes;
2463
2448
  }
2464
2449
  }
2465
- isActive = await this.sqlite.isTransactionActive({
2450
+ // commit
2451
+ const retC = await this.sqlite.commitTransaction({
2466
2452
  database: this.dbName,
2467
2453
  });
2468
- if (isActive) {
2469
- const retC = await this.sqlite.commitTransaction({
2470
- database: this.dbName,
2471
- });
2472
- changes += retC.changes.changes;
2473
- }
2454
+ changes += retC.changes.changes;
2474
2455
  const retChanges = { changes: { changes: changes } };
2475
2456
  return Promise.resolve(retChanges);
2476
2457
  } catch (err: any) {
2458
+ // rollback
2477
2459
  const msg = err.message ? err.message : err;
2478
- isActive = await this.sqlite.isTransactionActive({
2460
+ await this.sqlite.rollbackTransaction({
2479
2461
  database: this.dbName,
2480
2462
  });
2481
- if (isActive) {
2482
- await this.sqlite.rollbackTransaction({
2483
- database: this.dbName,
2484
- });
2485
- }
2486
2463
  return Promise.reject(msg);
2487
2464
  }
2488
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
- await customElements.whenDefined('jeep-sqlite');
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
- if (!this.isWebStoreOpen) {
86
- this.isWebStoreOpen = await this.jeepSqliteElement.isStoreOpen();
87
- }
50
+ this.jeepSqliteElement = document.querySelector('jeep-sqlite');
51
+ this.ensureJeepSqliteIsAvailable();
88
52
 
89
- return;
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> {