@capacitor-community/sqlite 3.2.5-2 → 3.3.3-1
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/CHANGELOG.md +49 -0
- package/README.md +16 -0
- package/android/src/main/java/com/getcapacitor/community/database/sqlite/CapacitorSQLite.java +86 -10
- package/android/src/main/java/com/getcapacitor/community/database/sqlite/CapacitorSQLitePlugin.java +101 -3
- package/android/src/main/java/com/getcapacitor/community/database/sqlite/RetHandler.java +24 -0
- package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/Database.java +67 -47
- package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/ImportExportJson/JsonIndex.java +5 -4
- package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/UtilsFile.java +9 -0
- package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/UtilsMigrate.java +34 -15
- package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/UtilsNCDatabase.java +26 -0
- package/dist/esm/definitions.d.ts +111 -2
- package/dist/esm/definitions.js +63 -0
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.d.ts +5 -1
- package/dist/esm/web.js +16 -0
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +79 -0
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +79 -0
- package/dist/plugin.js.map +1 -1
- package/electron/dist/plugin.js +17 -1
- package/electron/dist/plugin.js.map +1 -1
- package/ios/Plugin/CapacitorSQLite.swift +85 -8
- package/ios/Plugin/CapacitorSQLitePlugin.m +4 -0
- package/ios/Plugin/CapacitorSQLitePlugin.swift +111 -0
- package/ios/Plugin/Database.swift +39 -22
- package/ios/Plugin/ImportExportJson/ImportFromJson.swift +2 -1
- package/ios/Plugin/ImportExportJson/JsonSQLite.swift +1 -1
- package/ios/Plugin/ReturnHandler.swift +13 -0
- package/ios/Plugin/Utils/UtilsFile.swift +12 -5
- package/ios/Plugin/Utils/UtilsMigrate.swift +59 -13
- package/ios/Plugin/Utils/UtilsNCDatabase.swift +31 -0
- package/package.json +5 -5
|
@@ -57,6 +57,67 @@ enum CapacitorSQLiteError: Error {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
}
|
|
60
|
+
// MARK: - getNCDatabasePath
|
|
61
|
+
|
|
62
|
+
@objc public func getNCDatabasePath(_ folderPath: String, dbName: String ) throws -> String {
|
|
63
|
+
do {
|
|
64
|
+
let databasePath: String = try UtilsNCDatabase
|
|
65
|
+
.getNCDatabasePath(folderPath: folderPath,
|
|
66
|
+
database: dbName )
|
|
67
|
+
return databasePath
|
|
68
|
+
} catch let error {
|
|
69
|
+
throw CapacitorSQLiteError.failed(message: "\(error)")
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// MARK: - CreateNCConnection
|
|
75
|
+
|
|
76
|
+
@objc public func createNCConnection(_ databasePath: String,
|
|
77
|
+
version: Int) throws {
|
|
78
|
+
|
|
79
|
+
// check if the connection already exists
|
|
80
|
+
let conn = dbDict[databasePath]
|
|
81
|
+
if conn != nil {
|
|
82
|
+
let msg = "Connection \(databasePath) already exists"
|
|
83
|
+
throw CapacitorSQLiteError.failed(message: msg)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
do {
|
|
87
|
+
let isFileExists: Bool = UtilsFile
|
|
88
|
+
.isFileExist(filePath: databasePath)
|
|
89
|
+
|
|
90
|
+
if !isFileExists {
|
|
91
|
+
throw CapacitorSQLiteError.failed(message: "database \(databasePath) does not exist")
|
|
92
|
+
}
|
|
93
|
+
let mDb: Database = try Database(
|
|
94
|
+
databaseName: databasePath,
|
|
95
|
+
encrypted: false, mode: "no-encryption", version: version,
|
|
96
|
+
vUpgDict: [:])
|
|
97
|
+
dbDict[databasePath] = mDb
|
|
98
|
+
return
|
|
99
|
+
} catch let error {
|
|
100
|
+
throw CapacitorSQLiteError.failed(message: "\(error)")
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// MARK: - CloseNCConnection
|
|
105
|
+
|
|
106
|
+
@objc public func closeNCConnection(_ dbName: String) throws {
|
|
107
|
+
guard let mDb: Database = dbDict[dbName] else {
|
|
108
|
+
let msg = "Connection to \(dbName) not available"
|
|
109
|
+
throw CapacitorSQLiteError.failed(message: msg)
|
|
110
|
+
}
|
|
111
|
+
if mDb.isDBOpen() {
|
|
112
|
+
do {
|
|
113
|
+
try mDb.close()
|
|
114
|
+
} catch DatabaseError.close(let message) {
|
|
115
|
+
throw CapacitorSQLiteError.failed(message: message)
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
dbDict.removeValue(forKey: dbName)
|
|
119
|
+
return
|
|
120
|
+
}
|
|
60
121
|
|
|
61
122
|
// MARK: - CreateConnection
|
|
62
123
|
|
|
@@ -133,6 +194,7 @@ enum CapacitorSQLiteError: Error {
|
|
|
133
194
|
throw CapacitorSQLiteError.failed(message: message)
|
|
134
195
|
}
|
|
135
196
|
}
|
|
197
|
+
|
|
136
198
|
// MARK: - Close Connection
|
|
137
199
|
|
|
138
200
|
@objc public func closeConnection(_ dbName: String) throws {
|
|
@@ -193,6 +255,7 @@ enum CapacitorSQLiteError: Error {
|
|
|
193
255
|
throw CapacitorSQLiteError.failed(message: "\(error)")
|
|
194
256
|
}
|
|
195
257
|
}
|
|
258
|
+
|
|
196
259
|
// MARK: - IsDatabase
|
|
197
260
|
|
|
198
261
|
@objc public func isDatabase(_ dbName: String) throws -> NSNumber {
|
|
@@ -206,6 +269,18 @@ enum CapacitorSQLiteError: Error {
|
|
|
206
269
|
}
|
|
207
270
|
}
|
|
208
271
|
|
|
272
|
+
// MARK: - IsNCDatabase
|
|
273
|
+
|
|
274
|
+
@objc public func isNCDatabase(_ databasePath: String) throws -> NSNumber {
|
|
275
|
+
let isFileExists: Bool = UtilsFile
|
|
276
|
+
.isFileExist(filePath: databasePath)
|
|
277
|
+
if isFileExists {
|
|
278
|
+
return 1
|
|
279
|
+
} else {
|
|
280
|
+
return 0
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
209
284
|
// MARK: - IsTableExists
|
|
210
285
|
|
|
211
286
|
@objc public func isTableExists(_ dbName: String, tableName: String) throws -> NSNumber {
|
|
@@ -244,7 +319,7 @@ enum CapacitorSQLiteError: Error {
|
|
|
244
319
|
let msg = "Connection to \(mDbName) not available"
|
|
245
320
|
throw CapacitorSQLiteError.failed(message: msg)
|
|
246
321
|
}
|
|
247
|
-
if mDb.isDBOpen() {
|
|
322
|
+
if !mDb.isNCDB() && mDb.isDBOpen() {
|
|
248
323
|
do {
|
|
249
324
|
var stmts = statements
|
|
250
325
|
// remove carriage returns
|
|
@@ -268,7 +343,7 @@ enum CapacitorSQLiteError: Error {
|
|
|
268
343
|
throw CapacitorSQLiteError.failed(message: msg)
|
|
269
344
|
}
|
|
270
345
|
} else {
|
|
271
|
-
let msg = "Database \(mDbName) not opened"
|
|
346
|
+
let msg = "Database \(mDbName) not opened or in read-only"
|
|
272
347
|
throw CapacitorSQLiteError.failed(message: msg)
|
|
273
348
|
}
|
|
274
349
|
}
|
|
@@ -283,7 +358,7 @@ enum CapacitorSQLiteError: Error {
|
|
|
283
358
|
let msg = "Connection to \(mDbName) not available"
|
|
284
359
|
throw CapacitorSQLiteError.failed(message: msg)
|
|
285
360
|
}
|
|
286
|
-
if mDb.isDBOpen() {
|
|
361
|
+
if !mDb.isNCDB() && mDb.isDBOpen() {
|
|
287
362
|
do {
|
|
288
363
|
let res = try mDb.execSet(set: set, transaction: transaction)
|
|
289
364
|
return res
|
|
@@ -294,7 +369,7 @@ enum CapacitorSQLiteError: Error {
|
|
|
294
369
|
throw CapacitorSQLiteError.failed(message: msg)
|
|
295
370
|
}
|
|
296
371
|
} else {
|
|
297
|
-
let msg = "Database \(mDbName) not opened"
|
|
372
|
+
let msg = "Database \(mDbName) not opened or in read-only"
|
|
298
373
|
throw CapacitorSQLiteError.failed(message: msg)
|
|
299
374
|
}
|
|
300
375
|
}
|
|
@@ -310,7 +385,7 @@ enum CapacitorSQLiteError: Error {
|
|
|
310
385
|
let msg = "Connection to \(mDbName) not available"
|
|
311
386
|
throw CapacitorSQLiteError.failed(message: msg)
|
|
312
387
|
}
|
|
313
|
-
if mDb.isDBOpen() {
|
|
388
|
+
if !mDb.isNCDB() && mDb.isDBOpen() {
|
|
314
389
|
do {
|
|
315
390
|
var val: [Any] = []
|
|
316
391
|
if values.count > 0 {
|
|
@@ -343,7 +418,7 @@ enum CapacitorSQLiteError: Error {
|
|
|
343
418
|
throw CapacitorSQLiteError.failed(message: msg)
|
|
344
419
|
}
|
|
345
420
|
} else {
|
|
346
|
-
let msg = "Database \(mDbName) not opened"
|
|
421
|
+
let msg = "Database \(mDbName) not opened or in read-only"
|
|
347
422
|
throw CapacitorSQLiteError.failed(message: msg)
|
|
348
423
|
}
|
|
349
424
|
}
|
|
@@ -799,8 +874,10 @@ enum CapacitorSQLiteError: Error {
|
|
|
799
874
|
}
|
|
800
875
|
class func getDatabaseName(dbName: String) -> String {
|
|
801
876
|
var retName: String = dbName
|
|
802
|
-
if retName.
|
|
803
|
-
|
|
877
|
+
if !retName.contains("/") {
|
|
878
|
+
if retName.suffix(3) == ".db" {
|
|
879
|
+
retName = String(retName.dropLast(3))
|
|
880
|
+
}
|
|
804
881
|
}
|
|
805
882
|
return retName
|
|
806
883
|
}
|
|
@@ -7,6 +7,9 @@ CAP_PLUGIN(CapacitorSQLitePlugin, "CapacitorSQLite",
|
|
|
7
7
|
CAP_PLUGIN_METHOD(echo, CAPPluginReturnPromise);
|
|
8
8
|
CAP_PLUGIN_METHOD(createConnection, CAPPluginReturnPromise);
|
|
9
9
|
CAP_PLUGIN_METHOD(closeConnection, CAPPluginReturnPromise);
|
|
10
|
+
CAP_PLUGIN_METHOD(createNCConnection, CAPPluginReturnPromise);
|
|
11
|
+
CAP_PLUGIN_METHOD(closeNCConnection, CAPPluginReturnPromise);
|
|
12
|
+
CAP_PLUGIN_METHOD(getNCDatabasePath, CAPPluginReturnPromise);
|
|
10
13
|
CAP_PLUGIN_METHOD(open, CAPPluginReturnPromise);
|
|
11
14
|
CAP_PLUGIN_METHOD(close, CAPPluginReturnPromise);
|
|
12
15
|
CAP_PLUGIN_METHOD(getVersion, CAPPluginReturnPromise);
|
|
@@ -26,6 +29,7 @@ CAP_PLUGIN(CapacitorSQLitePlugin, "CapacitorSQLite",
|
|
|
26
29
|
CAP_PLUGIN_METHOD(addUpgradeStatement, CAPPluginReturnPromise);
|
|
27
30
|
CAP_PLUGIN_METHOD(copyFromAssets, CAPPluginReturnPromise);
|
|
28
31
|
CAP_PLUGIN_METHOD(isDatabase, CAPPluginReturnPromise);
|
|
32
|
+
CAP_PLUGIN_METHOD(isNCDatabase, CAPPluginReturnPromise);
|
|
29
33
|
CAP_PLUGIN_METHOD(isTableExists, CAPPluginReturnPromise);
|
|
30
34
|
CAP_PLUGIN_METHOD(getDatabaseList, CAPPluginReturnPromise);
|
|
31
35
|
CAP_PLUGIN_METHOD(getMigratableDbList, CAPPluginReturnPromise);
|
|
@@ -966,6 +966,117 @@ public class CapacitorSQLitePlugin: CAPPlugin {
|
|
|
966
966
|
}
|
|
967
967
|
}
|
|
968
968
|
|
|
969
|
+
// MARK: - getNCDatabasePath
|
|
970
|
+
|
|
971
|
+
@objc func getNCDatabasePath(_ call: CAPPluginCall) {
|
|
972
|
+
guard let folderPath = call.options["path"] as? String else {
|
|
973
|
+
retHandler.rPath(call: call, ret: "",
|
|
974
|
+
message: "getNCDatabasePath: Must provide a folder path")
|
|
975
|
+
return
|
|
976
|
+
}
|
|
977
|
+
guard let dbName = call.options["database"] as? String else {
|
|
978
|
+
retHandler.rPath(call: call, ret: "",
|
|
979
|
+
message: "getNCDatabasePath: Must provide a database name")
|
|
980
|
+
return
|
|
981
|
+
}
|
|
982
|
+
do {
|
|
983
|
+
|
|
984
|
+
let path: String = try implementation.getNCDatabasePath(folderPath,
|
|
985
|
+
dbName: dbName)
|
|
986
|
+
retHandler.rPath(call: call, ret: path)
|
|
987
|
+
return
|
|
988
|
+
} catch CapacitorSQLiteError.failed(let message) {
|
|
989
|
+
let msg = "getNCDatabasePath: \(message)"
|
|
990
|
+
retHandler.rPath(call: call, ret: "", message: msg)
|
|
991
|
+
return
|
|
992
|
+
} catch let error {
|
|
993
|
+
retHandler.rPath(call: call, ret: "",
|
|
994
|
+
message: "getNCDatabasePath: \(error)")
|
|
995
|
+
return
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
// MARK: - CreateNCConnection
|
|
1000
|
+
|
|
1001
|
+
@objc func createNCConnection(_ call: CAPPluginCall) {
|
|
1002
|
+
guard let dbPath = call.options["databasePath"] as? String else {
|
|
1003
|
+
retHandler.rResult(
|
|
1004
|
+
call: call,
|
|
1005
|
+
message: "CreateNCConnection: Must provide a database path")
|
|
1006
|
+
return
|
|
1007
|
+
}
|
|
1008
|
+
let version: Int = call.getInt("version") ?? 1
|
|
1009
|
+
do {
|
|
1010
|
+
try implementation.createNCConnection(dbPath,
|
|
1011
|
+
version: version)
|
|
1012
|
+
retHandler.rResult(call: call)
|
|
1013
|
+
return
|
|
1014
|
+
} catch CapacitorSQLiteError.failed(let message) {
|
|
1015
|
+
let msg = "CreateNCConnection: \(message)"
|
|
1016
|
+
retHandler.rResult(call: call, message: msg)
|
|
1017
|
+
return
|
|
1018
|
+
} catch let error {
|
|
1019
|
+
retHandler.rResult(
|
|
1020
|
+
call: call,
|
|
1021
|
+
message: "CreateNCConnection: \(error)")
|
|
1022
|
+
return
|
|
1023
|
+
}
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
// MARK: - CloseNCConnection
|
|
1027
|
+
|
|
1028
|
+
@objc func closeNCConnection(_ call: CAPPluginCall) {
|
|
1029
|
+
guard let dbPath = call.options["databasePath"] as? String else {
|
|
1030
|
+
retHandler.rResult(
|
|
1031
|
+
call: call,
|
|
1032
|
+
message: "CloseNCConnection: Must provide a database path")
|
|
1033
|
+
return
|
|
1034
|
+
}
|
|
1035
|
+
do {
|
|
1036
|
+
try implementation.closeNCConnection(dbPath)
|
|
1037
|
+
retHandler.rResult(call: call)
|
|
1038
|
+
return
|
|
1039
|
+
} catch CapacitorSQLiteError.failed(let message) {
|
|
1040
|
+
let msg = "CloseNCConnection: \(message)"
|
|
1041
|
+
retHandler.rResult(call: call, message: msg)
|
|
1042
|
+
return
|
|
1043
|
+
} catch let error {
|
|
1044
|
+
retHandler.rResult(
|
|
1045
|
+
call: call,
|
|
1046
|
+
message: "CloseNCConnection: \(error)")
|
|
1047
|
+
return
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
// MARK: - IsNCDatabase
|
|
1052
|
+
|
|
1053
|
+
@objc func isNCDatabase(_ call: CAPPluginCall) {
|
|
1054
|
+
guard let dbPath = call.options["databasePath"] as? String else {
|
|
1055
|
+
retHandler.rResult(
|
|
1056
|
+
call: call, ret: false,
|
|
1057
|
+
message: "isNCDatabase: Must provide a database path")
|
|
1058
|
+
return
|
|
1059
|
+
}
|
|
1060
|
+
do {
|
|
1061
|
+
let res = try implementation.isNCDatabase(dbPath)
|
|
1062
|
+
var bRes: Bool = false
|
|
1063
|
+
if res == 1 {
|
|
1064
|
+
bRes = true
|
|
1065
|
+
}
|
|
1066
|
+
retHandler.rResult(call: call, ret: bRes)
|
|
1067
|
+
} catch CapacitorSQLiteError.failed(let message) {
|
|
1068
|
+
let msg = "isNCDatabase: \(message)"
|
|
1069
|
+
retHandler.rResult(call: call, message: msg)
|
|
1070
|
+
return
|
|
1071
|
+
} catch let error {
|
|
1072
|
+
retHandler.rResult(
|
|
1073
|
+
call: call,
|
|
1074
|
+
message: "isNCDatabase: \(error)")
|
|
1075
|
+
return
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
}
|
|
1079
|
+
|
|
969
1080
|
// MARK: - Add Observers
|
|
970
1081
|
|
|
971
1082
|
@objc func addObserversToNotificationCenter() {
|
|
@@ -37,6 +37,8 @@ class Database {
|
|
|
37
37
|
var mDb: OpaquePointer?
|
|
38
38
|
let globalData: GlobalSQLite = GlobalSQLite()
|
|
39
39
|
let uUpg: UtilsUpgrade = UtilsUpgrade()
|
|
40
|
+
var readOnly: Bool = false
|
|
41
|
+
var ncDB: Bool = false
|
|
40
42
|
|
|
41
43
|
// MARK: - Init
|
|
42
44
|
init(databaseName: String, encrypted: Bool,
|
|
@@ -48,12 +50,19 @@ class Database {
|
|
|
48
50
|
self.dbName = databaseName
|
|
49
51
|
self.mode = mode
|
|
50
52
|
self.vUpgDict = vUpgDict
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
if databaseName.contains("/") &&
|
|
54
|
+
databaseName.suffix(9) != "SQLite.db" {
|
|
55
|
+
self.readOnly = true
|
|
56
|
+
self.path = databaseName
|
|
57
|
+
self.ncDB = true
|
|
58
|
+
} else {
|
|
59
|
+
do {
|
|
60
|
+
self.path = try UtilsFile.getFilePath(
|
|
61
|
+
fileName: databaseName)
|
|
62
|
+
} catch UtilsFileError.getFilePathFailed {
|
|
63
|
+
throw DatabaseError.filePath(
|
|
64
|
+
message: "Could not generate the file path")
|
|
65
|
+
}
|
|
57
66
|
}
|
|
58
67
|
print("database path \(self.path)")
|
|
59
68
|
}
|
|
@@ -64,6 +73,12 @@ class Database {
|
|
|
64
73
|
return isOpen
|
|
65
74
|
}
|
|
66
75
|
|
|
76
|
+
// MARK: - isNCDB
|
|
77
|
+
|
|
78
|
+
func isNCDB () -> Bool {
|
|
79
|
+
return ncDB
|
|
80
|
+
}
|
|
81
|
+
|
|
67
82
|
// MARK: - Open
|
|
68
83
|
|
|
69
84
|
// swiftlint:disable cyclomatic_complexity
|
|
@@ -92,27 +107,29 @@ class Database {
|
|
|
92
107
|
mDb = try UtilsSQLCipher
|
|
93
108
|
.openOrCreateDatabase(filename: path,
|
|
94
109
|
password: password,
|
|
95
|
-
readonly:
|
|
110
|
+
readonly: self.readOnly)
|
|
96
111
|
isOpen = true
|
|
97
112
|
// PRAGMA foreign_keys = ON;
|
|
98
113
|
try UtilsSQLCipher
|
|
99
114
|
.setForeignKeyConstraintsEnabled(mDB: self,
|
|
100
115
|
toggle: true)
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
if
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
+
if !ncDB {
|
|
117
|
+
var curVersion: Int = try UtilsSQLCipher
|
|
118
|
+
.getVersion(mDB: self)
|
|
119
|
+
if curVersion == 0 {
|
|
120
|
+
try UtilsSQLCipher.setVersion(mDB: self, version: 1)
|
|
121
|
+
curVersion = try UtilsSQLCipher.getVersion(mDB: self)
|
|
122
|
+
}
|
|
123
|
+
if dbVersion > curVersion {
|
|
124
|
+
if vUpgDict.count > 0 {
|
|
125
|
+
_ = try uUpg.onUpgrade(mDB: self, upgDict: vUpgDict,
|
|
126
|
+
dbName: dbName,
|
|
127
|
+
currentVersion: curVersion,
|
|
128
|
+
targetVersion: dbVersion)
|
|
129
|
+
try UtilsSQLCipher.deleteBackupDB(databaseName: dbName)
|
|
130
|
+
} else {
|
|
131
|
+
try UtilsSQLCipher.setVersion(mDB: self, version: dbVersion)
|
|
132
|
+
}
|
|
116
133
|
}
|
|
117
134
|
}
|
|
118
135
|
} catch UtilsSQLCipherError.openOrCreateDatabase(let message) {
|
|
@@ -245,7 +245,8 @@ class ImportFromJson {
|
|
|
245
245
|
var statements: [String] = []
|
|
246
246
|
for jpos in 0..<mIndexes.count {
|
|
247
247
|
var mUnique: String = ""
|
|
248
|
-
if
|
|
248
|
+
if var mMode = mIndexes[jpos].mode {
|
|
249
|
+
mMode = mMode.uppercased()
|
|
249
250
|
if mMode == "UNIQUE" {
|
|
250
251
|
mUnique = mMode + " "
|
|
251
252
|
}
|
|
@@ -93,4 +93,17 @@ class ReturnHandler {
|
|
|
93
93
|
return
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
|
+
|
|
97
|
+
// MARK: - rPath
|
|
98
|
+
|
|
99
|
+
func rPath(call: CAPPluginCall, ret: String,
|
|
100
|
+
message: String? = nil) {
|
|
101
|
+
if let intMessage = message {
|
|
102
|
+
call.reject(intMessage)
|
|
103
|
+
return
|
|
104
|
+
} else {
|
|
105
|
+
call.resolve(["path": ret])
|
|
106
|
+
return
|
|
107
|
+
}
|
|
108
|
+
}
|
|
96
109
|
}
|
|
@@ -180,17 +180,24 @@ class UtilsFile {
|
|
|
180
180
|
|
|
181
181
|
// MARK: - GetFileList
|
|
182
182
|
|
|
183
|
-
class func getFileList(path: String, ext: String) throws -> [String] {
|
|
183
|
+
class func getFileList(path: String, ext: String? = nil) throws -> [String] {
|
|
184
|
+
|
|
184
185
|
do {
|
|
185
|
-
var
|
|
186
|
+
var files: [String] = []
|
|
186
187
|
let filenames = try FileManager.default
|
|
187
188
|
.contentsOfDirectory(atPath: path)
|
|
188
189
|
for file in filenames {
|
|
189
|
-
if
|
|
190
|
-
|
|
190
|
+
if let mExtension = ext {
|
|
191
|
+
if file.hasSuffix(mExtension) {
|
|
192
|
+
files.append(file)
|
|
193
|
+
}
|
|
194
|
+
} else {
|
|
195
|
+
if file.prefix(1) != "." {
|
|
196
|
+
files.append(file)
|
|
197
|
+
}
|
|
191
198
|
}
|
|
192
199
|
}
|
|
193
|
-
return
|
|
200
|
+
return files
|
|
194
201
|
} catch let error {
|
|
195
202
|
print("Error: \(error)")
|
|
196
203
|
throw UtilsFileError.getFileListFailed
|
|
@@ -14,7 +14,7 @@ enum UtilsMigrateError: Error {
|
|
|
14
14
|
|
|
15
15
|
class UtilsMigrate {
|
|
16
16
|
|
|
17
|
-
// MARK: -
|
|
17
|
+
// MARK: - getMigratableList
|
|
18
18
|
|
|
19
19
|
class func getMigratableList(folderPath: String) throws -> [String] {
|
|
20
20
|
var mDbList: [String] = []
|
|
@@ -25,7 +25,7 @@ class UtilsMigrate {
|
|
|
25
25
|
if FileManager.default.fileExists(atPath: dbPathURL.relativePath,
|
|
26
26
|
isDirectory: &isDir) &&
|
|
27
27
|
isDir.boolValue {
|
|
28
|
-
mDbList = try UtilsFile.getFileList(path: dbPathURL.relativePath, ext:
|
|
28
|
+
mDbList = try UtilsFile.getFileList(path: dbPathURL.relativePath, ext: nil)
|
|
29
29
|
|
|
30
30
|
return mDbList
|
|
31
31
|
} else {
|
|
@@ -47,7 +47,9 @@ class UtilsMigrate {
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
// MARK: - addSQLiteSuffix
|
|
50
|
+
|
|
50
51
|
// swiftlint:disable function_body_length
|
|
52
|
+
// swiftlint:disable cyclomatic_complexity
|
|
51
53
|
class func addSQLiteSuffix(folderPath: String, dbList: [String]) throws {
|
|
52
54
|
var fromFile: String = ""
|
|
53
55
|
var toFile: String = ""
|
|
@@ -59,12 +61,32 @@ class UtilsMigrate {
|
|
|
59
61
|
if FileManager.default.fileExists(atPath: dbPathURL.relativePath,
|
|
60
62
|
isDirectory: &isDir) &&
|
|
61
63
|
isDir.boolValue {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
var mDbList: [String]
|
|
65
|
+
if dbList.count > 0 {
|
|
66
|
+
mDbList = try UtilsFile
|
|
67
|
+
.getFileList(path: dbPathURL.relativePath, ext: nil)
|
|
68
|
+
} else {
|
|
69
|
+
mDbList = try UtilsFile
|
|
70
|
+
.getFileList(path: dbPathURL.relativePath, ext: "db")
|
|
71
|
+
}
|
|
64
72
|
for file: String in mDbList {
|
|
65
73
|
if !file.contains("SQLite.db") {
|
|
66
74
|
fromFile = file
|
|
67
|
-
if dbList.
|
|
75
|
+
if dbList.count > 0 {
|
|
76
|
+
if dbList.contains(fromFile) {
|
|
77
|
+
if String(file.suffix(3)) == ".db" {
|
|
78
|
+
toFile = file
|
|
79
|
+
.replacingOccurrences(of: ".db", with: "SQLite.db")
|
|
80
|
+
} else {
|
|
81
|
+
toFile = file + "SQLite.db"
|
|
82
|
+
}
|
|
83
|
+
try UtilsFile
|
|
84
|
+
.copyFromNames(dbPathURL: dbPathURL,
|
|
85
|
+
fromFile: fromFile,
|
|
86
|
+
databaseURL: databaseURL,
|
|
87
|
+
toFile: toFile)
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
68
90
|
toFile = file
|
|
69
91
|
.replacingOccurrences(of: ".db", with: "SQLite.db")
|
|
70
92
|
try UtilsFile
|
|
@@ -98,9 +120,13 @@ class UtilsMigrate {
|
|
|
98
120
|
throw UtilsMigrateError.addSQLiteSuffix(message: msg)
|
|
99
121
|
}
|
|
100
122
|
}
|
|
123
|
+
// swiftlint:enable cyclomatic_complexity
|
|
101
124
|
// swiftlint:enable function_body_length
|
|
102
125
|
|
|
103
126
|
// MARK: - deleteOldDatabase
|
|
127
|
+
|
|
128
|
+
// swiftlint:disable function_body_length
|
|
129
|
+
// swiftlint:disable cyclomatic_complexity
|
|
104
130
|
class func deleteOldDatabases(folderPath: String, dbList: [String]) throws {
|
|
105
131
|
do {
|
|
106
132
|
let dbPathURL: URL = try UtilsMigrate
|
|
@@ -109,17 +135,35 @@ class UtilsMigrate {
|
|
|
109
135
|
if FileManager.default.fileExists(atPath: dbPathURL.relativePath,
|
|
110
136
|
isDirectory: &isDir) &&
|
|
111
137
|
isDir.boolValue {
|
|
112
|
-
|
|
113
|
-
|
|
138
|
+
var mDbList: [String]
|
|
139
|
+
if dbList.count > 0 {
|
|
140
|
+
mDbList = try UtilsFile
|
|
141
|
+
.getFileList(path: dbPathURL.relativePath, ext: nil)
|
|
142
|
+
} else {
|
|
143
|
+
mDbList = try UtilsFile
|
|
144
|
+
.getFileList(path: dbPathURL.relativePath, ext: "db")
|
|
145
|
+
}
|
|
114
146
|
for file: String in mDbList {
|
|
115
147
|
if !file.contains("SQLite.db") {
|
|
116
|
-
if dbList.
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
148
|
+
if dbList.count > 0 {
|
|
149
|
+
if dbList.contains(file) {
|
|
150
|
+
let ret: Bool = try UtilsFile
|
|
151
|
+
.deleteFile(dbPathURL: dbPathURL, fileName: file)
|
|
152
|
+
if !ret {
|
|
153
|
+
throw UtilsMigrateError
|
|
154
|
+
.deleteOldDatabases(message: "deleteFileFailed")
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
} else {
|
|
158
|
+
if file.contains(".db") {
|
|
159
|
+
let ret: Bool = try UtilsFile
|
|
160
|
+
.deleteFile(dbPathURL: dbPathURL, fileName: file)
|
|
161
|
+
if !ret {
|
|
162
|
+
throw UtilsMigrateError
|
|
163
|
+
.deleteOldDatabases(message: "deleteFileFailed")
|
|
164
|
+
}
|
|
122
165
|
}
|
|
166
|
+
|
|
123
167
|
}
|
|
124
168
|
}
|
|
125
169
|
}
|
|
@@ -144,6 +188,8 @@ class UtilsMigrate {
|
|
|
144
188
|
throw UtilsMigrateError.addSQLiteSuffix(message: msg)
|
|
145
189
|
}
|
|
146
190
|
}
|
|
191
|
+
// swiftlint:enable cyclomatic_complexity
|
|
192
|
+
// swiftlint:enable function_body_length
|
|
147
193
|
|
|
148
194
|
// MARK: - getFolderURL
|
|
149
195
|
class func getFolderURL(folderPath: String) throws -> URL {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//
|
|
2
|
+
// UtilsNCDatabase.swift
|
|
3
|
+
// CapacitorCommunitySqlite
|
|
4
|
+
//
|
|
5
|
+
// Created by Quéau Jean Pierre on 17/12/2021.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
enum UtilsNCDatabaseError: Error {
|
|
10
|
+
case getNCDatabasePath(message: String)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
class UtilsNCDatabase {
|
|
14
|
+
|
|
15
|
+
// MARK: - getNCDatabasePath
|
|
16
|
+
|
|
17
|
+
class func getNCDatabasePath(folderPath: String, database: String) throws -> String {
|
|
18
|
+
do {
|
|
19
|
+
let dbPathURL: URL = try UtilsMigrate
|
|
20
|
+
.getFolderURL(folderPath: folderPath)
|
|
21
|
+
return dbPathURL.appendingPathComponent("\(database)").path
|
|
22
|
+
} catch UtilsMigrateError.getFolderURL(let message) {
|
|
23
|
+
throw UtilsNCDatabaseError.getNCDatabasePath(message: message)
|
|
24
|
+
} catch let error {
|
|
25
|
+
var msg: String = "getNCDatabasePath command failed :"
|
|
26
|
+
msg.append(" \(error.localizedDescription)")
|
|
27
|
+
throw UtilsNCDatabaseError.getNCDatabasePath(message: msg)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
}
|
|
31
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capacitor-community/sqlite",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.3-1",
|
|
4
4
|
"description": "Community plugin for native & electron SQLite databases",
|
|
5
5
|
"main": "dist/plugin.cjs.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -55,10 +55,10 @@
|
|
|
55
55
|
"prepublishOnly": "npm run build && npm run build-electron && npm run docgen"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@capacitor/android": "^3.
|
|
59
|
-
"@capacitor/core": "3.
|
|
58
|
+
"@capacitor/android": "^3.3.3",
|
|
59
|
+
"@capacitor/core": "3.3.3",
|
|
60
60
|
"@capacitor/docgen": "^0.0.17",
|
|
61
|
-
"@capacitor/ios": "^3.
|
|
61
|
+
"@capacitor/ios": "^3.3.3",
|
|
62
62
|
"@ionic/eslint-config": "^0.3.0",
|
|
63
63
|
"@ionic/prettier-config": "^1.0.1",
|
|
64
64
|
"@ionic/swiftlint-config": "^1.1.2",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"typescript": "~4.0.5"
|
|
75
75
|
},
|
|
76
76
|
"peerDependencies": {
|
|
77
|
-
"@capacitor/core": "^3.
|
|
77
|
+
"@capacitor/core": "^3.3.3"
|
|
78
78
|
},
|
|
79
79
|
"prettier": "@ionic/prettier-config",
|
|
80
80
|
"swiftlint": "@ionic/swiftlint-config",
|