@capacitor-community/sqlite 4.1.0-5 → 4.1.0-6
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/README.md +2 -2
- package/android/src/main/java/com/getcapacitor/community/database/sqlite/CapacitorSQLite.java +77 -70
- package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/Database.java +73 -88
- package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/UtilsUpgrade.java +45 -319
- package/dist/esm/definitions.d.ts +3 -6
- package/dist/esm/definitions.js +2 -4
- package/dist/esm/definitions.js.map +1 -1
- package/dist/plugin.cjs.js +2 -4
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +2 -4
- package/dist/plugin.js.map +1 -1
- package/electron/dist/plugin.js +41 -304
- package/electron/dist/plugin.js.map +1 -1
- package/ios/Plugin/CapacitorSQLite.swift +5 -7
- package/ios/Plugin/Database.swift +8 -7
- package/ios/Plugin/Utils/UtilsUpgrade.swift +46 -370
- package/package.json +2 -2
|
@@ -1146,23 +1146,21 @@ enum CapacitorSQLiteError: Error {
|
|
|
1146
1146
|
var upgDict: [String: Any] = [:]
|
|
1147
1147
|
for dict in upgrade {
|
|
1148
1148
|
let keys = dict.keys
|
|
1149
|
-
if !(keys.contains("
|
|
1150
|
-
!(keys.contains("toVersion")) ||
|
|
1151
|
-
!(keys.contains("statement")) {
|
|
1149
|
+
if !(keys.contains("toVersion")) || !(keys.contains("statements")) {
|
|
1152
1150
|
var msg: String = "upgrade must have keys in "
|
|
1153
|
-
msg.append("{
|
|
1151
|
+
msg.append("{toVersion,statements}")
|
|
1154
1152
|
throw CapacitorSQLiteError.failed(message: msg)
|
|
1155
1153
|
}
|
|
1156
1154
|
for (key, value) in dict {
|
|
1157
1155
|
upgDict[key] = value
|
|
1158
1156
|
}
|
|
1159
1157
|
}
|
|
1160
|
-
guard let
|
|
1161
|
-
let msg: String = "
|
|
1158
|
+
guard let toVersion = upgDict["toVersion"] as? Int else {
|
|
1159
|
+
let msg: String = "toVersion key must be an Int"
|
|
1162
1160
|
throw CapacitorSQLiteError.failed(message: msg)
|
|
1163
1161
|
}
|
|
1164
1162
|
let upgVersionDict: [Int: [String: Any]] =
|
|
1165
|
-
[
|
|
1163
|
+
[toVersion: upgDict]
|
|
1166
1164
|
return upgVersionDict
|
|
1167
1165
|
} else {
|
|
1168
1166
|
throw CapacitorSQLiteError.failed(message: initMessage)
|
|
@@ -134,19 +134,20 @@ class Database {
|
|
|
134
134
|
.setForeignKeyConstraintsEnabled(mDB: self,
|
|
135
135
|
toggle: true)
|
|
136
136
|
if !ncDB {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
if curVersion == 0 {
|
|
140
|
-
try UtilsSQLCipher.setVersion(mDB: self, version: 1)
|
|
141
|
-
curVersion = try UtilsSQLCipher.getVersion(mDB: self)
|
|
142
|
-
}
|
|
137
|
+
let curVersion: Int = try UtilsSQLCipher.getVersion(mDB: self)
|
|
138
|
+
|
|
143
139
|
if dbVersion > curVersion && vUpgDict.count > 0 {
|
|
140
|
+
// backup the database
|
|
141
|
+
_ = try UtilsFile.copyFile(fileName: dbName,
|
|
142
|
+
toFileName: "backup-\(dbName)",
|
|
143
|
+
databaseLocation: databaseLocation)
|
|
144
|
+
|
|
144
145
|
_ = try uUpg
|
|
145
146
|
.onUpgrade(mDB: self, upgDict: vUpgDict,
|
|
146
|
-
dbName: dbName,
|
|
147
147
|
currentVersion: curVersion,
|
|
148
148
|
targetVersion: dbVersion,
|
|
149
149
|
databaseLocation: databaseLocation)
|
|
150
|
+
|
|
150
151
|
try UtilsSQLCipher
|
|
151
152
|
.deleteBackupDB(databaseLocation: databaseLocation,
|
|
152
153
|
databaseName: dbName)
|
|
@@ -11,403 +11,79 @@ import SQLCipher
|
|
|
11
11
|
|
|
12
12
|
enum UtilsUpgradeError: Error {
|
|
13
13
|
case onUpgradeFailed(message: String)
|
|
14
|
-
case backupTablesFailed(message: String)
|
|
15
|
-
case backupTableFailed(message: String)
|
|
16
|
-
case getTableColumnNamesFailed(message: String)
|
|
17
14
|
case updateDatabaseVersionFailed(message: String)
|
|
18
|
-
case
|
|
19
|
-
case arrayIntersectionFailed(message: String)
|
|
20
|
-
case updateNewTablesDataFailed(message: String)
|
|
21
|
-
case executeStatementProcessFailed(message: String)
|
|
22
|
-
case executeSetProcessFailed(message: String)
|
|
15
|
+
case executeStatementsProcessFailed(message: String)
|
|
23
16
|
}
|
|
24
17
|
// swiftlint:disable file_length
|
|
25
18
|
// swiftlint:disable type_body_length
|
|
26
19
|
class UtilsUpgrade {
|
|
27
|
-
let utilsDrop: UtilsDrop = UtilsDrop()
|
|
28
|
-
var alterTables: [String: [String]] = [:]
|
|
29
|
-
var commonColumns: [String: [String]] = [:]
|
|
30
|
-
|
|
31
20
|
// MARK: - onUpgrade
|
|
32
|
-
|
|
21
|
+
|
|
33
22
|
// swiftlint:disable cyclomatic_complexity
|
|
34
23
|
// swiftlint:disable function_body_length
|
|
35
24
|
// swiftlint:disable function_parameter_count
|
|
36
25
|
func onUpgrade(mDB: Database,
|
|
37
26
|
upgDict: [Int: [String: Any]],
|
|
38
|
-
|
|
27
|
+
currentVersion: Int,
|
|
39
28
|
targetVersion: Int,
|
|
40
|
-
databaseLocation: String) throws
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
var set: [[String: Any]] = [[:]]
|
|
59
|
-
if (upgrade["set"] as? [[String: Any]]) != nil {
|
|
60
|
-
if let set1: [[String: Any]] =
|
|
61
|
-
upgrade["set"] as? [[String: Any]] {
|
|
62
|
-
set = set1
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
if targetVersion < toVersion {
|
|
66
|
-
var message: String = "Error: version mistmatch Upgrade "
|
|
67
|
-
message.append("Statement would upgrade to version ")
|
|
68
|
-
message.append("\(toVersion) , but target version is ")
|
|
69
|
-
message.append("\(targetVersion) for database \(dbName) ")
|
|
70
|
-
message.append("and version \(currentVersion)")
|
|
71
|
-
throw UtilsUpgradeError.onUpgradeFailed(message: message)
|
|
72
|
-
}
|
|
73
|
-
do {
|
|
74
|
-
// Set pragma FOREIGN KEY OFF
|
|
75
|
-
try UtilsSQLCipher
|
|
76
|
-
.setForeignKeyConstraintsEnabled(mDB: mDB,
|
|
77
|
-
toggle: false)
|
|
78
|
-
// backup the database
|
|
79
|
-
_ = try UtilsFile.copyFile(fileName: dbName,
|
|
80
|
-
toFileName: "backup-\(dbName)",
|
|
81
|
-
databaseLocation: databaseLocation)
|
|
82
|
-
|
|
83
|
-
let initChanges = UtilsSQLCipher.dbChanges(mDB: mDB.mDb)
|
|
84
|
-
|
|
85
|
-
// Here we assume all the tables schema are given in
|
|
86
|
-
// the upgrade statement
|
|
87
|
-
if statement.count > 0 {
|
|
88
|
-
_ = try executeStatementProcess(mDB: mDB,
|
|
89
|
-
statement: statement)
|
|
90
|
-
// -> Drop _temp_tables
|
|
91
|
-
_ = try UtilsDrop
|
|
92
|
-
.dropTempTables(mDB: mDB,
|
|
93
|
-
alterTables: self.alterTables)
|
|
94
|
-
// -> Do some cleanup
|
|
95
|
-
self.alterTables = [:]
|
|
96
|
-
self.commonColumns = [:]
|
|
97
|
-
|
|
98
|
-
// here we assume that the Set contains only
|
|
99
|
-
// - the data for new tables as INSERT statements
|
|
100
|
-
// - the data for new columns in existing tables
|
|
101
|
-
// as UPDATE statements
|
|
102
|
-
if set.count > 0 {
|
|
103
|
-
_ = try executeSetProcess(mDB: mDB, set: set,
|
|
104
|
-
toVersion: toVersion)
|
|
29
|
+
databaseLocation: String) throws {
|
|
30
|
+
print("UtilsUpgrade.onUpgrade: \(currentVersion) => \(targetVersion)")
|
|
31
|
+
|
|
32
|
+
for (versionKey, upgrade) in Array(upgDict).sorted(by: {$0.0 < $1.0}) {
|
|
33
|
+
if (versionKey > currentVersion && versionKey <= targetVersion) {
|
|
34
|
+
guard let statements = upgrade["statements"] as? [String] else {
|
|
35
|
+
let msg: String = "Error: onUpgrade statements not given"
|
|
36
|
+
throw UtilsUpgradeError.onUpgradeFailed(message: msg)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
do {
|
|
40
|
+
_ = try executeStatementsProcess(mDB: mDB, statements: statements)
|
|
41
|
+
|
|
42
|
+
try UtilsSQLCipher.setVersion(mDB: mDB, version: versionKey)
|
|
43
|
+
} catch UtilsSQLCipherError.setVersion(let message) {
|
|
44
|
+
throw UtilsUpgradeError.onUpgradeFailed(message: "Error: onUpgrade update version: \(message)")
|
|
45
|
+
} catch UtilsUpgradeError.executeStatementsProcessFailed(let message) {
|
|
46
|
+
throw UtilsUpgradeError.onUpgradeFailed(message: "Error: onUpgrade executeStatementProcess: \(message)")
|
|
105
47
|
}
|
|
106
48
|
}
|
|
107
|
-
// Set pragma FOREIGN KEY ON
|
|
108
|
-
try UtilsSQLCipher
|
|
109
|
-
.setForeignKeyConstraintsEnabled(mDB: mDB,
|
|
110
|
-
toggle: true)
|
|
111
|
-
// get the number of changes
|
|
112
|
-
changes = UtilsSQLCipher.dbChanges(mDB: mDB.mDb) -
|
|
113
|
-
initChanges
|
|
114
|
-
return changes
|
|
115
|
-
} catch UtilsFileError.copyFileFailed {
|
|
116
|
-
let msg: String = "Failed in copy file"
|
|
117
|
-
throw UtilsUpgradeError.onUpgradeFailed(message: msg)
|
|
118
|
-
} catch UtilsSQLCipherError
|
|
119
|
-
.setForeignKeyConstraintsEnabled(let message) {
|
|
120
|
-
var msg: String = "Failed in "
|
|
121
|
-
msg.append("setForeignKeyConstraintsEnabled \(message)")
|
|
122
|
-
throw UtilsUpgradeError.onUpgradeFailed(message: msg)
|
|
123
|
-
} catch UtilsUpgradeError.executeStatementProcessFailed(
|
|
124
|
-
let message) {
|
|
125
|
-
var msg: String = message
|
|
126
|
-
do {
|
|
127
|
-
// -> Drop _temp_tables
|
|
128
|
-
_ = try UtilsDrop
|
|
129
|
-
.dropTempTables(mDB: mDB,
|
|
130
|
-
alterTables: self.alterTables)
|
|
131
|
-
// -> Do some cleanup
|
|
132
|
-
self.alterTables = [:]
|
|
133
|
-
self.commonColumns = [:]
|
|
134
|
-
|
|
135
|
-
} catch UtilsDropError.dropTempTablesFailed(let message) {
|
|
136
|
-
msg += ": \(message)"
|
|
137
|
-
throw UtilsUpgradeError.onUpgradeFailed(
|
|
138
|
-
message: message)
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
throw UtilsUpgradeError.onUpgradeFailed(
|
|
142
|
-
message: message)
|
|
143
|
-
} catch UtilsDropError.dropTempTablesFailed(let message) {
|
|
144
|
-
throw UtilsUpgradeError.onUpgradeFailed(
|
|
145
|
-
message: message)
|
|
146
|
-
} catch UtilsUpgradeError.executeSetProcessFailed(
|
|
147
|
-
let message) {
|
|
148
|
-
throw UtilsUpgradeError.onUpgradeFailed(
|
|
149
|
-
message: message)
|
|
150
49
|
}
|
|
151
50
|
}
|
|
152
51
|
// swiftlint:enable function_parameter_count
|
|
153
52
|
// swiftlint:enable function_body_length
|
|
154
53
|
// swiftlint:enable cyclomatic_complexity
|
|
155
|
-
|
|
156
|
-
// MARK: - ExecuteSetProcess
|
|
157
|
-
|
|
158
|
-
// swiftlint:disable function_body_length
|
|
159
|
-
func executeSetProcess(mDB: Database, set: [[String: Any]],
|
|
160
|
-
toVersion: Int) throws {
|
|
161
|
-
var msg: String = "Error: executeSetProcess "
|
|
162
|
-
do {
|
|
163
|
-
// -> load new data
|
|
164
|
-
let changesDict: [String: Int64] = try mDB.execSet(set: set)
|
|
165
|
-
if let changes = changesDict["changes"] {
|
|
166
|
-
if changes < 0 {
|
|
167
|
-
msg.append("changes < 0")
|
|
168
|
-
throw UtilsUpgradeError.executeSetProcessFailed(
|
|
169
|
-
message: msg)
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// -> update database version
|
|
174
|
-
try UtilsSQLCipher.setVersion(mDB: mDB, version: toVersion)
|
|
175
|
-
|
|
176
|
-
// -> update syncDate if any
|
|
177
|
-
let isExists: Bool = try
|
|
178
|
-
UtilsJson.isTableExists(mDB: mDB,
|
|
179
|
-
tableName: "sync_table")
|
|
180
|
-
if isExists {
|
|
181
|
-
let date = Date()
|
|
182
|
-
let syncTime: Int =
|
|
183
|
-
Int(date.timeIntervalSince1970)
|
|
184
|
-
var stmt: String = "UPDATE sync_table SET "
|
|
185
|
-
stmt.append("sync_date = \(syncTime) ")
|
|
186
|
-
stmt.append("WHERE id = 1;")
|
|
187
|
-
let retRun: [String: Int64] = try mDB.runSQL(
|
|
188
|
-
sql: stmt, values: [])
|
|
189
|
-
guard let lastId: Int64 = retRun["lastId"] else {
|
|
190
|
-
msg.append("Update Sync Date lastId not returned")
|
|
191
|
-
throw UtilsUpgradeError.executeSetProcessFailed(
|
|
192
|
-
message: msg)
|
|
193
|
-
}
|
|
194
|
-
if lastId == -1 {
|
|
195
|
-
msg.append("Update Sync Date lastId < 0")
|
|
196
|
-
throw UtilsUpgradeError.executeSetProcessFailed(
|
|
197
|
-
message: msg)
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
} catch DatabaseError.execSet(let message) {
|
|
201
|
-
throw UtilsUpgradeError.executeSetProcessFailed(
|
|
202
|
-
message: message)
|
|
203
|
-
} catch UtilsSQLCipherError.setVersion(let message) {
|
|
204
|
-
throw UtilsUpgradeError.executeSetProcessFailed(
|
|
205
|
-
message: message)
|
|
206
|
-
} catch UtilsJsonError.tableNotExists(let message) {
|
|
207
|
-
throw UtilsUpgradeError.executeSetProcessFailed(
|
|
208
|
-
message: message)
|
|
209
|
-
} catch DatabaseError.runSQL(let message) {
|
|
210
|
-
throw UtilsUpgradeError.executeSetProcessFailed(
|
|
211
|
-
message: message)
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
// swiftlint:enable function_body_length
|
|
215
|
-
|
|
54
|
+
|
|
216
55
|
// MARK: - ExecuteStatementProcess
|
|
217
|
-
|
|
218
|
-
func
|
|
56
|
+
|
|
57
|
+
func executeStatementsProcess(mDB: Database, statements: [String])
|
|
219
58
|
throws {
|
|
220
|
-
var changes: Int = -1
|
|
221
|
-
do {
|
|
222
|
-
|
|
223
|
-
// -> backup all existing tables "tableName" in
|
|
224
|
-
// "temp_tableName"
|
|
225
|
-
_ = try backupTables(mDB: mDB)
|
|
226
|
-
|
|
227
|
-
// -> Drop all Indexes
|
|
228
|
-
_ = try UtilsDrop.dropIndexes(mDB: mDB)
|
|
229
|
-
// -> Drop all Triggers
|
|
230
|
-
_ = try UtilsDrop.dropTriggers(mDB: mDB)
|
|
231
|
-
|
|
232
|
-
// -> Create new tables from upgrade.statement
|
|
233
|
-
changes = try mDB.executeSQL(sql: statement)
|
|
234
|
-
if changes < 0 {
|
|
235
|
-
throw UtilsUpgradeError.executeStatementProcessFailed(
|
|
236
|
-
message: "Create new tables failed")
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// -> Create the list of table's common fields
|
|
240
|
-
try findCommonColumns(mDB: mDB)
|
|
241
|
-
|
|
242
|
-
// -> Update the new table's data from old table's data
|
|
243
|
-
_ = try updateNewTablesData(mDB: mDB)
|
|
244
|
-
|
|
245
|
-
} catch UtilsUpgradeError.backupTablesFailed(let message) {
|
|
246
|
-
throw UtilsUpgradeError.executeStatementProcessFailed(
|
|
247
|
-
message: message)
|
|
248
|
-
} catch UtilsDropError.dropIndexesFailed(let message) {
|
|
249
|
-
throw UtilsUpgradeError.executeStatementProcessFailed(
|
|
250
|
-
message: message)
|
|
251
|
-
} catch UtilsDropError.dropTriggersFailed(let message) {
|
|
252
|
-
throw UtilsUpgradeError.executeStatementProcessFailed(
|
|
253
|
-
message: message)
|
|
254
|
-
} catch DatabaseError.executeSQL(let message) {
|
|
255
|
-
throw UtilsUpgradeError.executeStatementProcessFailed(
|
|
256
|
-
message: message)
|
|
257
|
-
} catch UtilsUpgradeError.findCommonColumnsFailed(
|
|
258
|
-
let message) {
|
|
259
|
-
throw UtilsUpgradeError.executeStatementProcessFailed(
|
|
260
|
-
message: message)
|
|
261
|
-
} catch UtilsUpgradeError.updateNewTablesDataFailed(
|
|
262
|
-
let message) {
|
|
263
|
-
throw UtilsUpgradeError.executeStatementProcessFailed(
|
|
264
|
-
message: message)
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
// MARK: - backupTables
|
|
270
|
-
|
|
271
|
-
func backupTables(mDB: Database) throws {
|
|
272
|
-
do {
|
|
273
|
-
let tables: [String] = try UtilsDrop
|
|
274
|
-
.getTablesNames(mDB: mDB)
|
|
275
|
-
for table in tables {
|
|
276
|
-
try backupTable(mDB: mDB, tableName: table)
|
|
277
|
-
}
|
|
278
|
-
} catch UtilsDropError.getTablesNamesFailed(let message) {
|
|
279
|
-
throw UtilsUpgradeError.backupTablesFailed(message: message)
|
|
280
|
-
} catch UtilsUpgradeError.backupTableFailed(let message) {
|
|
281
|
-
throw UtilsUpgradeError.backupTablesFailed(message: message)
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
// MARK: - backupTable
|
|
286
|
-
|
|
287
|
-
func backupTable(mDB: Database, tableName: String) throws {
|
|
288
|
-
var msg: String = "Error: backupTable "
|
|
289
|
-
var columnNames: [String] = []
|
|
290
|
-
do {
|
|
291
|
-
// get the column's name
|
|
292
|
-
columnNames = try getTableColumnNames(mDB: mDB,
|
|
293
|
-
tableName: tableName)
|
|
294
|
-
alterTables["\(tableName)"] = columnNames
|
|
295
|
-
let tmpTable = "_temp_\(tableName)"
|
|
296
|
-
let delStmt: String = "DROP TABLE IF EXISTS \(tmpTable);"
|
|
297
|
-
_ = try mDB.runSQL(sql: delStmt, values: [])
|
|
298
|
-
// prefix the table with _temp_
|
|
299
|
-
var stmt: String = "ALTER TABLE \(tableName) RENAME "
|
|
300
|
-
stmt.append("TO \(tmpTable);")
|
|
301
|
-
let retRun: [String: Int64] = try mDB.runSQL(
|
|
302
|
-
sql: stmt, values: [])
|
|
303
|
-
guard let changes: Int64 = retRun["changes"] else {
|
|
304
|
-
msg.append("changes not returned")
|
|
305
|
-
throw UtilsUpgradeError.backupTableFailed(
|
|
306
|
-
message: msg)
|
|
307
|
-
}
|
|
308
|
-
if changes < 0 {
|
|
309
|
-
msg.append("changes < 0")
|
|
310
|
-
throw UtilsUpgradeError.backupTableFailed(
|
|
311
|
-
message: msg)
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
} catch UtilsUpgradeError
|
|
315
|
-
.getTableColumnNamesFailed(let message) {
|
|
316
|
-
throw UtilsUpgradeError.backupTableFailed(message: message)
|
|
317
|
-
} catch DatabaseError.runSQL(let message) {
|
|
318
|
-
throw UtilsUpgradeError.backupTableFailed(message: message)
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
// MARK: - getTableColumnNames
|
|
323
|
-
|
|
324
|
-
func getTableColumnNames(mDB: Database, tableName: String)
|
|
325
|
-
throws -> [String] {
|
|
326
|
-
var retNames: [String] = []
|
|
327
|
-
let query: String = "PRAGMA table_info('\(tableName)');"
|
|
328
|
-
do {
|
|
329
|
-
var resColumns: [[String: Any]] = try
|
|
330
|
-
mDB.selectSQL(sql: query, values: [])
|
|
331
|
-
if resColumns.count > 0 {
|
|
332
|
-
resColumns.removeFirst()
|
|
333
|
-
for rColumn in resColumns {
|
|
334
|
-
guard let columnName: String = rColumn["name"] as?
|
|
335
|
-
String else {
|
|
336
|
-
throw
|
|
337
|
-
UtilsUpgradeError.getTableColumnNamesFailed(
|
|
338
|
-
message: "Error did not find column name")
|
|
339
|
-
}
|
|
340
|
-
retNames.append(columnName)
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
return retNames
|
|
344
|
-
} catch DatabaseError.selectSQL(let message) {
|
|
345
|
-
throw UtilsUpgradeError.getTableColumnNamesFailed(
|
|
346
|
-
message: "Error get column's names failed : \(message)")
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// MARK: - findCommonColumns
|
|
351
|
-
|
|
352
|
-
func findCommonColumns(mDB: Database) throws {
|
|
353
|
-
var columnNames: [String] = []
|
|
354
59
|
do {
|
|
355
|
-
|
|
356
|
-
.
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
tableName: table)
|
|
360
|
-
if alterTables["\(table)"] != nil {
|
|
361
|
-
if let array1: [String] = alterTables["\(table)"] {
|
|
362
|
-
commonColumns["\(table)"] =
|
|
363
|
-
arrayIntersection(array1: array1,
|
|
364
|
-
array2: columnNames)
|
|
365
|
-
}
|
|
366
|
-
}
|
|
60
|
+
do {
|
|
61
|
+
try UtilsSQLCipher.beginTransaction(mDB: mDB)
|
|
62
|
+
} catch UtilsSQLCipherError.beginTransaction(let message) {
|
|
63
|
+
throw DatabaseError.executeSQL(message: "Error: onUpgrade: \(message)")
|
|
367
64
|
}
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
let message) {
|
|
373
|
-
throw UtilsUpgradeError.findCommonColumnsFailed(
|
|
374
|
-
message: message)
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
func arrayIntersection( array1: [String], array2: [String])
|
|
378
|
-
-> [String] {
|
|
379
|
-
let array1Set = Set(array1)
|
|
380
|
-
let array2Set = Set(array2)
|
|
381
|
-
return Array(array1Set.intersection(array2Set))
|
|
382
|
-
}
|
|
383
|
-
func updateNewTablesData(mDB: Database) throws {
|
|
384
|
-
var msg: String = "Error: updateNewTablesData "
|
|
385
|
-
var changes: Int = -1
|
|
386
|
-
do {
|
|
387
|
-
var statements: [String] = []
|
|
388
|
-
let keys: [String] = Array(commonColumns.keys)
|
|
389
|
-
for key in keys {
|
|
390
|
-
if let values = commonColumns["\(key)"] {
|
|
391
|
-
let columns: String = values.joined(separator: ",")
|
|
392
|
-
var stmt: String = "INSERT INTO \(key) "
|
|
393
|
-
stmt.append("(\(columns)) SELECT ")
|
|
394
|
-
stmt.append("\(columns) FROM _temp_\(key);")
|
|
395
|
-
statements.append(stmt)
|
|
396
|
-
}
|
|
65
|
+
|
|
66
|
+
// -> Excecute statements
|
|
67
|
+
for (statement) in statements{
|
|
68
|
+
_ = try mDB.executeSQL(sql: statement, transaction: false)
|
|
397
69
|
}
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
throw UtilsUpgradeError.updateNewTablesDataFailed(
|
|
404
|
-
message: msg)
|
|
405
|
-
}
|
|
70
|
+
|
|
71
|
+
do {
|
|
72
|
+
try UtilsSQLCipher.commitTransaction(mDB: mDB)
|
|
73
|
+
} catch UtilsSQLCipherError.commitTransaction(let message) {
|
|
74
|
+
throw DatabaseError.executeSQL(message: "Error: onUpgrade: \(message)")
|
|
406
75
|
}
|
|
76
|
+
|
|
407
77
|
} catch DatabaseError.executeSQL(let message) {
|
|
408
|
-
|
|
409
|
-
|
|
78
|
+
do {
|
|
79
|
+
try UtilsSQLCipher.rollbackTransaction(mDB: mDB)
|
|
80
|
+
} catch UtilsSQLCipherError.rollbackTransaction(let message2) {
|
|
81
|
+
throw DatabaseError.executeSQL(message: "Error: onUpgrade: \(message) \(message2)")
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
throw UtilsUpgradeError.executeStatementsProcessFailed(message: message)
|
|
410
85
|
}
|
|
86
|
+
|
|
411
87
|
}
|
|
412
88
|
}
|
|
413
89
|
// swiftlint:enable type_body_length
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capacitor-community/sqlite",
|
|
3
|
-
"version": "4.1.0-
|
|
3
|
+
"version": "4.1.0-6",
|
|
4
4
|
"description": "Community plugin for native & electron SQLite databases",
|
|
5
5
|
"main": "dist/plugin.cjs.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -93,6 +93,6 @@
|
|
|
93
93
|
}
|
|
94
94
|
},
|
|
95
95
|
"dependencies": {
|
|
96
|
-
"jeep-sqlite": "^1.5.
|
|
96
|
+
"jeep-sqlite": "^1.5.8"
|
|
97
97
|
}
|
|
98
98
|
}
|