@capgo/capacitor-data-storage-sqlite 6.0.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.
Files changed (59) hide show
  1. package/CapacitorDataStorageSqlite.podspec +18 -0
  2. package/LICENSE +21 -0
  3. package/android/build.gradle +63 -0
  4. package/android/src/main/AndroidManifest.xml +3 -0
  5. package/android/src/main/java/com/jeep/plugin/capacitor/capacitordatastoragesqlite/CapacitorDataStorageSqlite.java +387 -0
  6. package/android/src/main/java/com/jeep/plugin/capacitor/capacitordatastoragesqlite/CapacitorDataStorageSqlitePlugin.java +447 -0
  7. package/android/src/main/java/com/jeep/plugin/capacitor/capacitordatastoragesqlite/RetHandler.java +117 -0
  8. package/android/src/main/java/com/jeep/plugin/capacitor/capacitordatastoragesqlite/cdssUtils/Data.java +8 -0
  9. package/android/src/main/java/com/jeep/plugin/capacitor/capacitordatastoragesqlite/cdssUtils/Global.java +7 -0
  10. package/android/src/main/java/com/jeep/plugin/capacitor/capacitordatastoragesqlite/cdssUtils/ImportExportJson/JsonStore.java +131 -0
  11. package/android/src/main/java/com/jeep/plugin/capacitor/capacitordatastoragesqlite/cdssUtils/ImportExportJson/JsonTable.java +110 -0
  12. package/android/src/main/java/com/jeep/plugin/capacitor/capacitordatastoragesqlite/cdssUtils/ImportExportJson/JsonValue.java +89 -0
  13. package/android/src/main/java/com/jeep/plugin/capacitor/capacitordatastoragesqlite/cdssUtils/StorageDatabaseHelper.java +691 -0
  14. package/android/src/main/java/com/jeep/plugin/capacitor/capacitordatastoragesqlite/cdssUtils/UtilsSQLCipher.java +162 -0
  15. package/android/src/main/res/.gitkeep +0 -0
  16. package/dist/docs.json +995 -0
  17. package/dist/esm/definitions.d.ts +296 -0
  18. package/dist/esm/definitions.js +2 -0
  19. package/dist/esm/definitions.js.map +1 -0
  20. package/dist/esm/index.d.ts +4 -0
  21. package/dist/esm/index.js +9 -0
  22. package/dist/esm/index.js.map +1 -0
  23. package/dist/esm/web-utils/Data.d.ts +5 -0
  24. package/dist/esm/web-utils/Data.js +3 -0
  25. package/dist/esm/web-utils/Data.js.map +1 -0
  26. package/dist/esm/web-utils/StorageDatabaseHelper.d.ts +23 -0
  27. package/dist/esm/web-utils/StorageDatabaseHelper.js +247 -0
  28. package/dist/esm/web-utils/StorageDatabaseHelper.js.map +1 -0
  29. package/dist/esm/web-utils/json-utils.d.ts +15 -0
  30. package/dist/esm/web-utils/json-utils.js +76 -0
  31. package/dist/esm/web-utils/json-utils.js.map +1 -0
  32. package/dist/esm/web.d.ts +27 -0
  33. package/dist/esm/web.js +295 -0
  34. package/dist/esm/web.js.map +1 -0
  35. package/dist/plugin.cjs.js +633 -0
  36. package/dist/plugin.cjs.js.map +1 -0
  37. package/dist/plugin.js +635 -0
  38. package/dist/plugin.js.map +1 -0
  39. package/electron/dist/plugin.js +1044 -0
  40. package/electron/dist/plugin.js.map +1 -0
  41. package/electron/rollup.config.mjs +17 -0
  42. package/electron/tsconfig.json +19 -0
  43. package/ios/Plugin/CapacitorDataStorageSqlite.swift +550 -0
  44. package/ios/Plugin/CapacitorDataStorageSqlitePlugin.h +10 -0
  45. package/ios/Plugin/CapacitorDataStorageSqlitePlugin.m +29 -0
  46. package/ios/Plugin/CapacitorDataStorageSqlitePlugin.swift +550 -0
  47. package/ios/Plugin/Data.swift +16 -0
  48. package/ios/Plugin/Global.swift +13 -0
  49. package/ios/Plugin/ImportExportJson/JsonStore.swift +47 -0
  50. package/ios/Plugin/Info.plist +24 -0
  51. package/ios/Plugin/ReturnHandler.swift +85 -0
  52. package/ios/Plugin/StorageDatabaseHelper.swift +603 -0
  53. package/ios/Plugin/Utils/Blob.swift +41 -0
  54. package/ios/Plugin/Utils/UtilsBinding.swift +73 -0
  55. package/ios/Plugin/Utils/UtilsEncryption.swift +79 -0
  56. package/ios/Plugin/Utils/UtilsFile.swift +244 -0
  57. package/ios/Plugin/Utils/UtilsSQLCipher.swift +605 -0
  58. package/package.json +96 -0
  59. package/readme.md +203 -0
@@ -0,0 +1,85 @@
1
+ //
2
+ // ReturnHandler.swift
3
+ // Plugin
4
+ //
5
+ // Created by Quéau Jean Pierre on 08/04/2021.
6
+ // Copyright © 2021 Max Lynch. All rights reserved.
7
+ //
8
+
9
+ import Foundation
10
+ import Capacitor
11
+
12
+ class ReturnHandler {
13
+
14
+ // MARK: - rResult
15
+
16
+ func rResult(call: CAPPluginCall, ret: Bool? = nil,
17
+ message: String? = nil) {
18
+ if let intMessage = message {
19
+ call.reject(intMessage)
20
+ return
21
+ } else {
22
+ if let res = ret {
23
+ call.resolve(["result": res])
24
+ return
25
+
26
+ } else {
27
+ call.resolve()
28
+ return
29
+ }
30
+ }
31
+ }
32
+
33
+ // MARK: - rValue
34
+
35
+ func rValue(call: CAPPluginCall, ret: String,
36
+ message: String? = nil) {
37
+ if let intMessage = message {
38
+ call.reject(intMessage)
39
+ return
40
+ } else {
41
+ call.resolve(["value": ret])
42
+ return
43
+ }
44
+ }
45
+
46
+ // MARK: - rDict
47
+
48
+ func rDict(call: CAPPluginCall, ret: [String: [Any]],
49
+ message: String? = nil) {
50
+ if let intMessage = message {
51
+ call.reject(intMessage)
52
+ return
53
+ } else {
54
+ call.resolve(ret)
55
+ return
56
+ }
57
+ }
58
+
59
+ // MARK: - rChanges
60
+
61
+ func rChanges(call: CAPPluginCall, ret: [String: Any],
62
+ message: String? = nil) {
63
+ if let intMessage = message {
64
+ call.reject(intMessage)
65
+ return
66
+ } else {
67
+ call.resolve(["changes": ret])
68
+ return
69
+ }
70
+ }
71
+
72
+ // MARK: - rJsonStore
73
+
74
+ func rJsonStore(call: CAPPluginCall, ret: [String: Any],
75
+ message: String? = nil) {
76
+ if let intMessage = message {
77
+ call.reject(intMessage)
78
+ return
79
+ } else {
80
+ call.resolve(["export": ret])
81
+ return
82
+ }
83
+ }
84
+
85
+ }
@@ -0,0 +1,603 @@
1
+ //
2
+ // StorageDatabaseHelper.swift
3
+ // Plugin
4
+ //
5
+ // Created by Quéau Jean Pierre on 08/04/2021.
6
+ // Copyright © 2021 Max Lynch. All rights reserved.
7
+ //
8
+
9
+ import Foundation
10
+ import SQLCipher
11
+
12
+ enum StorageHelperError: Error {
13
+ case initFailed(message: String)
14
+ case open(message: String)
15
+ case close(message: String)
16
+ case setTable(message: String)
17
+ case setkey(message: String)
18
+ case getkey(message: String)
19
+ case iskey(message: String)
20
+ case remove(message: String)
21
+ case clear(message: String)
22
+ case isKeyExists(message: String)
23
+ case closeDB(message: String)
24
+ case getValue(message: String)
25
+ case resetIndex(message: String)
26
+ case keys(message: String)
27
+ case values(message: String)
28
+ case filtervalues(message: String)
29
+ case keysvalues(message: String)
30
+ case getKeysValues(message: String)
31
+ case encryptionFailed
32
+ case deleteFileFailed
33
+ case fileNotExist
34
+ case alreadyEncrypted
35
+ case renameFileFailed
36
+ case insertRowFailed
37
+ case deleteStore
38
+ case deleteDB(message: String)
39
+ case isTable(message: String)
40
+ case tables(message: String)
41
+ case deleteTable(message: String)
42
+ case importFromJson(message: String)
43
+ case exportToJson(message: String)
44
+ }
45
+ // swiftlint:disable type_body_length
46
+ // swiftlint:disable file_length
47
+ class StorageDatabaseHelper {
48
+ var isOpen: Bool = false
49
+ var mDB: OpaquePointer?
50
+ var tableName: String
51
+ var encrypted: Bool
52
+ var dbName: String
53
+ var mode: String
54
+ // define the path for the database
55
+ var path: String = ""
56
+ var globalData: Global = Global()
57
+
58
+ // MARK: - Init
59
+
60
+ init(databaseName: String, tableName: String, encrypted: Bool,
61
+ mode: String) throws {
62
+ self.tableName = tableName
63
+ self.mode = mode
64
+ self.encrypted = encrypted
65
+ self.dbName = databaseName
66
+ do {
67
+ self.path = try UtilsFile.getFilePath(
68
+ fileName: databaseName)
69
+ } catch UtilsFileError.getFilePathFailed {
70
+ throw StorageHelperError
71
+ .initFailed(message: "Could not generate the store path")
72
+ }
73
+ print("database path \(self.path)")
74
+ if self.path.count > 0 {
75
+ do {
76
+ try open()
77
+ } catch StorageHelperError.open(let message) {
78
+ throw StorageHelperError.initFailed(message: message)
79
+ }
80
+ } else {
81
+ let msg = "Could not generate the store path"
82
+ throw StorageHelperError.initFailed(message: msg)
83
+ }
84
+ }
85
+
86
+ // MARK: - Open
87
+
88
+ // swiftlint:disable function_body_length
89
+ func open () throws {
90
+ var password: String = ""
91
+ if encrypted && (mode == "secret" || mode == "newsecret"
92
+ || mode == "encryption") {
93
+ password = globalData.secret
94
+ }
95
+ if mode == "newsecret" {
96
+ do {
97
+ try UtilsSQLCipher
98
+ .changePassword(filename: path,
99
+ password: password,
100
+ newpassword: globalData.newsecret)
101
+ password = globalData.newsecret
102
+
103
+ } catch UtilsSQLCipherError.changePassword(let message) {
104
+ let msg: String = "Failed in changePassword \(message)"
105
+ throw StorageHelperError.open(message: msg)
106
+
107
+ }
108
+ }
109
+ if mode == "encryption" {
110
+ do {
111
+ let ret: Bool = try UtilsEncryption
112
+ .encryptDatabase(filePath: path, password: password)
113
+ if !ret {
114
+ let msg: String = "Failed in encryption"
115
+ throw StorageHelperError.open(message: msg)
116
+ }
117
+ } catch UtilsEncryptionError.encryptionFailed(let message) {
118
+ let msg: String = "Failed in encryption \(message)"
119
+ throw StorageHelperError.open(message: msg)
120
+
121
+ }
122
+ }
123
+
124
+ do {
125
+ mDB = try UtilsSQLCipher
126
+ .openOrCreateDatabase(filename: path,
127
+ password: password,
128
+ readonly: false)
129
+ if mDB != nil {
130
+ isOpen = true
131
+ try setTable(tblName: self.tableName)
132
+ return
133
+ } else {
134
+ isOpen = false
135
+ throw StorageHelperError.open(message: "No store returned" )
136
+ }
137
+ } catch StorageHelperError.setTable(let message) {
138
+ isOpen = false
139
+ throw StorageHelperError.open(message: message )
140
+ } catch UtilsSQLCipherError.openOrCreateDatabase(let message) {
141
+ isOpen = false
142
+ var msg: String = "Failed in "
143
+ msg.append("openOrCreateDatabase \(message)")
144
+ throw StorageHelperError.open(message: msg )
145
+ }
146
+ }
147
+ // swiftlint:enable function_body_length
148
+ // MARK: - Close
149
+
150
+ func close() throws {
151
+ if mDB != nil {
152
+ if isOpen {
153
+ do {
154
+ try UtilsSQLCipher.closeDB(mDB: self)
155
+ return
156
+ } catch UtilsSQLCipherError.closeDB(let message) {
157
+ throw StorageHelperError.close(message: message)
158
+ }
159
+ } else {
160
+ return
161
+ }
162
+ } else {
163
+ throw StorageHelperError.close(message: "No store returned" )
164
+ }
165
+ }
166
+
167
+ // MARK: - SetTable
168
+
169
+ func setTable(tblName: String) throws {
170
+ if mDB != nil {
171
+ do {
172
+ try UtilsSQLCipher.createTable(mDB: self,
173
+ tableName: tblName,
174
+ ifNotExists: true)
175
+ tableName = tblName
176
+ // create index
177
+ try UtilsSQLCipher.createIndex(mDB: self,
178
+ tableName: tblName,
179
+ ifNotExists: true)
180
+ return
181
+ } catch UtilsSQLCipherError.creationIndex(let message) {
182
+ throw StorageHelperError.setTable(message: message)
183
+ } catch UtilsSQLCipherError.creationTable(let message) {
184
+ throw StorageHelperError.setTable(message: message)
185
+ } catch let error {
186
+ throw StorageHelperError
187
+ .setTable(message: error.localizedDescription)
188
+ }
189
+
190
+ } else {
191
+ throw StorageHelperError.setTable(message: "No store returned" )
192
+ }
193
+ }
194
+
195
+ // MARK: - Get
196
+
197
+ func get(name: String) throws -> Data? {
198
+ if mDB != nil && isOpen {
199
+ var result: [[String: Any]] = []
200
+ var retData: Data = Data()
201
+ do {
202
+ let getString: String = """
203
+ SELECT * FROM \(tableName) WHERE \(COLNAME) = '\(name)';
204
+ """
205
+ result = try UtilsSQLCipher.querySQL(mDB: self,
206
+ sql: getString,
207
+ values: [])
208
+ if result.count == 1 {
209
+ guard let name = result[0]["name"] as? String else {
210
+ let msg = "no returned key"
211
+ throw StorageHelperError.getkey(message: msg)
212
+ }
213
+ guard let value = result[0]["value"] as? String else {
214
+ let msg = "no returned value"
215
+ throw StorageHelperError.getkey(message: msg)
216
+ }
217
+ guard let mID = result[0]["id"] as? Int64 else {
218
+ let msg = "no returned id"
219
+ throw StorageHelperError.getkey(message: msg)
220
+ }
221
+ retData.id = mID
222
+ retData.name = name
223
+ retData.value = value
224
+ } else {
225
+ retData.id = nil
226
+ }
227
+ return retData
228
+ } catch UtilsSQLCipherError.querySQL(let message) {
229
+ throw StorageHelperError.getkey(message: message)
230
+ } catch let error {
231
+ let msg = error.localizedDescription
232
+ throw StorageHelperError.getkey(message: msg)
233
+ }
234
+ } else {
235
+ throw StorageHelperError.getkey(message: "No store not opened" )
236
+ }
237
+
238
+ }
239
+
240
+ // MARK: - Iskey
241
+
242
+ func iskey(name: String) throws -> Bool {
243
+ var ret: Bool = false
244
+ // check if the key already exists
245
+ guard let data: Data = try get(name: name) else {
246
+ let msg = "Error no data.name given"
247
+ throw StorageHelperError.iskey(message: msg)
248
+ }
249
+ if data.id != nil {
250
+ ret = true
251
+ }
252
+ return ret
253
+ }
254
+
255
+ // MARK: - Set
256
+
257
+ func set(data: Data) throws {
258
+ if mDB != nil && isOpen {
259
+ // check if the data already exists
260
+ guard let key: String = data.name else {
261
+ let msg = "no data.name given"
262
+ throw StorageHelperError.setkey(message: msg)
263
+ }
264
+ do {
265
+ let isKeyExists = try iskey(name: key)
266
+ if isKeyExists {
267
+ try UtilsSQLCipher.updateData(mDB: self,
268
+ tableName: tableName,
269
+ data: data)
270
+ } else {
271
+ try UtilsSQLCipher.insertData(mDB: self,
272
+ tableName: tableName,
273
+ data: data)
274
+ }
275
+ } catch StorageHelperError.iskey(let message) {
276
+ throw StorageHelperError.setkey(message: message)
277
+ } catch UtilsSQLCipherError.insertData(let message) {
278
+ throw StorageHelperError.setkey(message: message)
279
+ } catch UtilsSQLCipherError.updateData(let message) {
280
+ throw StorageHelperError.setkey(message: message)
281
+ } catch let error {
282
+ let msg = error.localizedDescription
283
+ throw StorageHelperError.setkey(message: msg)
284
+ }
285
+ } else {
286
+ throw StorageHelperError.setkey(message: "No store not opened" )
287
+ }
288
+ }
289
+
290
+ // MARK: - Remove
291
+
292
+ func remove(name: String) throws {
293
+ do {
294
+ let deleteStatement = "DELETE FROM \(tableName) WHERE " +
295
+ "\(COLNAME) = '\(name)';"
296
+ try UtilsSQLCipher.execute(mDB: self, sql: deleteStatement)
297
+ return
298
+ } catch UtilsSQLCipherError.execute(let message) {
299
+ throw StorageHelperError.remove(message: message)
300
+ } catch let error {
301
+ let msg = error.localizedDescription
302
+ throw StorageHelperError.remove(message: msg)
303
+ }
304
+ }
305
+
306
+ // MARK: - Clear
307
+
308
+ func clear() throws {
309
+ if mDB != nil && isOpen {
310
+ do {
311
+ let deleteStatementString = "DELETE FROM \(tableName);"
312
+ try UtilsSQLCipher.execute(mDB: self,
313
+ sql: deleteStatementString)
314
+ let resetStatement = "UPDATE SQLITE_SEQUENCE SET SEQ=0 " +
315
+ "WHERE NAME='" + tableName + "';"
316
+ try UtilsSQLCipher.execute(mDB: self,
317
+ sql: resetStatement)
318
+ return
319
+ } catch UtilsSQLCipherError.execute(let message) {
320
+ throw StorageHelperError.clear(message: message)
321
+ } catch let error {
322
+ let msg = error.localizedDescription
323
+ throw StorageHelperError.remove(message: msg)
324
+ }
325
+ } else {
326
+ throw StorageHelperError.getkey(message: "No store not opened" )
327
+ }
328
+ }
329
+
330
+ // MARK: - DeleteDB
331
+
332
+ func deleteDB(databaseName: String) throws {
333
+ do {
334
+ try UtilsSQLCipher.deleteDB(databaseName: databaseName)
335
+ return
336
+ } catch UtilsSQLCipherError.deleteDB(let message) {
337
+ throw StorageHelperError.deleteDB(message: message)
338
+ }
339
+ }
340
+
341
+ // MARK: - Keys
342
+
343
+ func keys() throws -> [String] {
344
+ var retArray: [String] = [String]()
345
+ if mDB != nil && isOpen {
346
+ let keysStatement = "SELECT \(COLNAME) FROM \(tableName) ORDER BY \(COLNAME);"
347
+ var results: [[String: Any]] = []
348
+ do {
349
+ results = try UtilsSQLCipher.querySQL(mDB: self,
350
+ sql: keysStatement,
351
+ values: [])
352
+ if results.count > 0 {
353
+ for res in results {
354
+ guard let name = res["name"] as? String else {
355
+ let msg = "no returned key"
356
+ throw StorageHelperError.keys(message: msg)
357
+ }
358
+ retArray.append(name)
359
+ }
360
+ }
361
+ return retArray
362
+ } catch UtilsSQLCipherError.querySQL(let message) {
363
+ throw StorageHelperError.keys(message: message)
364
+ } catch let error {
365
+ let msg = error.localizedDescription
366
+ throw StorageHelperError.keys(message: msg)
367
+ }
368
+ } else {
369
+ throw StorageHelperError.keys(message: "No store not opened" )
370
+ }
371
+ }
372
+
373
+ // MARK: - Values
374
+
375
+ func values() throws -> [String] {
376
+ var retArray: [String] = [String]()
377
+ if mDB != nil && isOpen {
378
+ let valuesStatement = "SELECT \(COLVALUE) FROM \(tableName) ORDER BY \(COLNAME);"
379
+ var results: [[String: Any]] = []
380
+ do {
381
+ results = try UtilsSQLCipher.querySQL(mDB: self,
382
+ sql: valuesStatement,
383
+ values: [])
384
+ if results.count > 0 {
385
+ for res in results {
386
+ guard let value = res["value"] as? String else {
387
+ let msg = "no returned value"
388
+ throw StorageHelperError.values(message: msg)
389
+ }
390
+ retArray.append(value)
391
+ }
392
+ }
393
+ return retArray
394
+ } catch UtilsSQLCipherError.querySQL(let message) {
395
+ throw StorageHelperError.values(message: message)
396
+ } catch let error {
397
+ let msg = error.localizedDescription
398
+ throw StorageHelperError.values(message: msg)
399
+ }
400
+ } else {
401
+ throw StorageHelperError.values(message: "No store not opened" )
402
+ }
403
+ }
404
+
405
+ // MARK: - FilterValues
406
+
407
+ func filtervalues(filter: String) throws -> [String] {
408
+ var retArray: [String] = [String]()
409
+ if mDB != nil && isOpen {
410
+ var inFilter: String = filter
411
+ if inFilter.prefix(1) != "%" && inFilter.suffix(1) != "%" {
412
+ inFilter = "%" + inFilter + "%"
413
+ }
414
+ var valuesStatement = "SELECT \(COLVALUE) FROM \(tableName)"
415
+ valuesStatement.append(" WHERE \(COLNAME) LIKE '\(inFilter)';")
416
+ var results: [[String: Any]] = []
417
+ do {
418
+ results = try UtilsSQLCipher.querySQL(mDB: self,
419
+ sql: valuesStatement,
420
+ values: [])
421
+ if results.count > 0 {
422
+ for res in results {
423
+ guard let value = res["value"] as? String else {
424
+ let msg = "no returned value"
425
+ throw StorageHelperError
426
+ .filtervalues(message: msg)
427
+ }
428
+ retArray.append(value)
429
+ }
430
+ }
431
+ return retArray
432
+ } catch UtilsSQLCipherError.querySQL(let message) {
433
+ throw StorageHelperError.filtervalues(message: message)
434
+ } catch let error {
435
+ let msg = error.localizedDescription
436
+ throw StorageHelperError.filtervalues(message: msg)
437
+ }
438
+ } else {
439
+ throw StorageHelperError
440
+ .filtervalues(message: "No store not opened" )
441
+ }
442
+ }
443
+
444
+ // MARK: - KeysValues
445
+
446
+ func keysvalues() throws -> [Data] {
447
+ var retArray: [Data] = [Data]()
448
+ if mDB != nil && isOpen {
449
+ let keysStatement = "SELECT * FROM \(tableName) ORDER BY \(COLNAME);"
450
+ var results: [[String: Any]] = []
451
+ do {
452
+ results = try UtilsSQLCipher.querySQL(mDB: self,
453
+ sql: keysStatement,
454
+ values: [])
455
+ if results.count > 0 {
456
+ for res in results {
457
+ guard let name = res["name"] as? String else {
458
+ let msg = "no returned key"
459
+ throw StorageHelperError
460
+ .keysvalues(message: msg)
461
+ }
462
+ guard let value = res["value"] as? String else {
463
+ let msg = "no returned value"
464
+ throw StorageHelperError
465
+ .keysvalues(message: msg)
466
+ }
467
+ guard let mID = res["id"] as? Int64 else {
468
+ let msg = "no returned id"
469
+ throw StorageHelperError
470
+ .keysvalues(message: msg)
471
+ }
472
+ var data: Data = Data()
473
+ data.id = mID
474
+ data.name = name
475
+ data.value = value
476
+ retArray.append(data)
477
+ }
478
+ }
479
+ return retArray
480
+ } catch UtilsSQLCipherError.querySQL(let message) {
481
+ throw StorageHelperError.keysvalues(message: message)
482
+ } catch let error {
483
+ let msg = error.localizedDescription
484
+ throw StorageHelperError.keysvalues(message: msg)
485
+ }
486
+ } else {
487
+ let msg = "No store not opened"
488
+ throw StorageHelperError.keysvalues(message: msg)
489
+ }
490
+ }
491
+
492
+ // MARK: - IsTable
493
+
494
+ func isTable(name: String) throws -> Bool {
495
+ var ret: Bool = false
496
+ var retArray: [String] = [String]()
497
+ do {
498
+ retArray = try UtilsSQLCipher.getTables(mDB: self)
499
+ if retArray.contains(name) {ret = true}
500
+ return ret
501
+ } catch UtilsSQLCipherError.getTables(let message) {
502
+ throw StorageHelperError.isTable(message: message)
503
+ } catch let error {
504
+ throw StorageHelperError
505
+ .isTable(message: error.localizedDescription)
506
+ }
507
+ }
508
+
509
+ // MARK: - tables
510
+
511
+ func tables() throws -> [String] {
512
+ var retArray: [String] = [String]()
513
+ do {
514
+ retArray = try UtilsSQLCipher.getTables(mDB: self)
515
+ return retArray
516
+ } catch UtilsSQLCipherError.getTables(let message) {
517
+ throw StorageHelperError.tables(message: message)
518
+ } catch let error {
519
+ throw StorageHelperError
520
+ .tables(message: error.localizedDescription)
521
+ }
522
+ }
523
+
524
+ // MARK: - DeleteTable
525
+
526
+ func deleteTable(tableName: String) throws {
527
+ var retArray: [String] = [String]()
528
+
529
+ do {
530
+ retArray = try UtilsSQLCipher.getTables(mDB: self)
531
+ if retArray.contains(tableName) {
532
+ try UtilsSQLCipher.dropTable(mDB: self,
533
+ tableName: tableName)
534
+ }
535
+ return
536
+ } catch UtilsSQLCipherError.dropTable(let message) {
537
+ throw StorageHelperError.deleteTable(message: message)
538
+ } catch UtilsSQLCipherError.getTables(let message) {
539
+ throw StorageHelperError.deleteTable(message: message)
540
+ } catch let error {
541
+ throw StorageHelperError
542
+ .deleteTable(message: error.localizedDescription)
543
+ }
544
+
545
+ }
546
+
547
+ // MARK: - ImportFromJson
548
+
549
+ func importFromJson(values: [JsonValue]) throws -> Int {
550
+ var changes: Int = 0
551
+ do {
552
+ for val in values {
553
+ var data: Data = Data()
554
+ data.name = val.key
555
+ data.value = val.value
556
+ try set(data: data)
557
+ changes += 1
558
+ }
559
+ return changes
560
+ } catch StorageHelperError.setkey(let message) {
561
+ throw StorageHelperError.importFromJson(message: message)
562
+ }
563
+ }
564
+
565
+ // MARK: - ExportToJson
566
+
567
+ func exportToJson() throws -> [String: Any] {
568
+ var retObj: [String: Any] = [:]
569
+ do {
570
+ let previousTableName: String = tableName
571
+ retObj["database"] = String(dbName.dropLast(9))
572
+ retObj["encrypted"] = encrypted
573
+ var rTables: [Any] = []
574
+ retObj["tables"] = []
575
+ let tables: [String] = try tables()
576
+ for table in tables {
577
+ var rtable: [String: Any] = [:]
578
+ tableName = table
579
+ rtable["name"] = table
580
+ let dataTable: [Data] = try keysvalues()
581
+ var values: [Any] = []
582
+ for data in dataTable {
583
+ var rData: [String: String] = [:]
584
+ rData["key"] = data.name
585
+ rData["value"] = data.value
586
+ values.append(rData)
587
+ }
588
+ rtable["values"] = values
589
+ rTables.append(rtable)
590
+ }
591
+ retObj["tables"] = rTables
592
+ tableName = previousTableName
593
+ return retObj
594
+ } catch StorageHelperError.tables(let message) {
595
+ throw StorageHelperError.exportToJson(message: message)
596
+ } catch StorageHelperError.keysvalues(let message) {
597
+ throw StorageHelperError.exportToJson(message: message)
598
+ }
599
+ }
600
+
601
+ }
602
+ // swiftlint:enable type_body_length
603
+ // swiftlint:enable file_length