@@ -14,6 +14,7 @@ enum DatabaseError: Error {
1414 case databaseLocked( databaseName: String )
1515 case copyError( message: String )
1616 case maintenanceError( message: String )
17+ case unknownError( message: String )
1718}
1819
1920public class DatabaseManager {
@@ -48,7 +49,7 @@ public class DatabaseManager {
4849 // Initialization code here
4950 }
5051
51- // MARK: - Helper methods
52+ // MARK: - Helper Functions
5253
5354 public func getDatabase( _ name: String ) -> Database ? {
5455 objc_sync_enter ( openDatabases)
@@ -73,7 +74,7 @@ public class DatabaseManager {
7374 return databaseConfiguration
7475 }
7576
76- // MARK: Database Methods
77+ // MARK: Database Functions
7778
7879 public func open( _ databaseName: String , databaseConfig: [ AnyHashable : Any ] ? ) throws {
7980 do {
@@ -137,7 +138,7 @@ public class DatabaseManager {
137138 }
138139 }
139140
140- // MARK: Database Maintenance methods
141+ // MARK: Database Maintenance Functions
141142
142143 func performMaintenance( _ databaseName: String , maintenanceType: MaintenanceType ) throws {
143144 guard let database = self . getDatabase ( databaseName) else {
@@ -157,7 +158,99 @@ public class DatabaseManager {
157158 }
158159 }
159160
160- // MARK: Index Methods
161+ // MARK: Scope Functions
162+
163+ func scopes( _ databaseName: String ) throws -> [ Scope ] ? {
164+ do {
165+ guard let database = self . getDatabase ( databaseName) else {
166+ throw DatabaseError . invalidDatabaseName ( databaseName: databaseName)
167+ }
168+ return try database. scopes ( )
169+ } catch {
170+ throw DatabaseError . unknownError ( message: error. localizedDescription)
171+ }
172+ }
173+
174+ func defaultScope( _ databaseName: String ) throws -> Scope ? {
175+ do {
176+ guard let database = self . getDatabase ( databaseName) else {
177+ throw DatabaseError . invalidDatabaseName ( databaseName: databaseName)
178+ }
179+ return try database. defaultScope ( )
180+ } catch {
181+ throw DatabaseError . unknownError ( message: error. localizedDescription)
182+ }
183+ }
184+
185+ func scope( _ scopeName: String , databaseName: String ) throws -> Scope ? {
186+ do {
187+ guard let database = self . getDatabase ( databaseName) else {
188+ throw DatabaseError . invalidDatabaseName ( databaseName: databaseName)
189+ }
190+ return try database. scope ( name: scopeName)
191+ } catch {
192+ throw DatabaseError . unknownError ( message: error. localizedDescription)
193+ }
194+ }
195+
196+ // MARK: Collection Functions
197+
198+ func defaultCollection( _ databaseName: String ) throws -> Collection ? {
199+ do {
200+ guard let database = self . getDatabase ( databaseName) else {
201+ throw DatabaseError . invalidDatabaseName ( databaseName: databaseName)
202+ }
203+ return try database. defaultCollection ( )
204+ } catch {
205+ throw DatabaseError . unknownError ( message: error. localizedDescription)
206+ }
207+ }
208+
209+ func collections( _ scopeName: String , databaseName: String ) throws -> [ Collection ] {
210+ do {
211+ guard let database = self . getDatabase ( databaseName) else {
212+ throw DatabaseError . invalidDatabaseName ( databaseName: databaseName)
213+ }
214+ return try database. collections ( scope: scopeName)
215+ } catch {
216+ throw DatabaseError . unknownError ( message: error. localizedDescription)
217+ }
218+ }
219+
220+ func createCollection( _ collectionName: String , scopeName: String , databaseName: String ) throws -> Collection {
221+ do {
222+ guard let database = self . getDatabase ( databaseName) else {
223+ throw DatabaseError . invalidDatabaseName ( databaseName: databaseName)
224+ }
225+ return try database. createCollection ( name: collectionName, scope: scopeName)
226+ } catch {
227+ throw DatabaseError . unknownError ( message: error. localizedDescription)
228+ }
229+ }
230+
231+ func collection( _ collectionName: String , scopeName: String , databaseName: String ) throws -> Collection ? {
232+ do {
233+ guard let database = self . getDatabase ( databaseName) else {
234+ throw DatabaseError . invalidDatabaseName ( databaseName: databaseName)
235+ }
236+ return try database. collection ( name: collectionName, scope: scopeName)
237+ } catch {
238+ throw DatabaseError . unknownError ( message: error. localizedDescription)
239+ }
240+ }
241+
242+ func deleteCollection( _ collectionName: String , scopeName: String , databaseName: String ) throws {
243+ do {
244+ guard let database = self . getDatabase ( databaseName) else {
245+ throw DatabaseError . invalidDatabaseName ( databaseName: databaseName)
246+ }
247+ try database. deleteCollection ( name: collectionName, scope: scopeName)
248+ } catch {
249+ throw DatabaseError . unknownError ( message: error. localizedDescription)
250+ }
251+ }
252+
253+ // MARK: Index Functions
161254
162255 func createIndex( _ indexName: String ,
163256 indexType: String ,
@@ -202,7 +295,7 @@ public class DatabaseManager {
202295 }
203296 }
204297
205- // MARK: Document methods
298+ // MARK: Document Functions
206299
207300 func getDocumentsCount( _ databaseName: String )
208301 throws -> UInt64 {
@@ -284,8 +377,61 @@ public class DatabaseManager {
284377 throw error
285378 }
286379 }
287-
288- //TODO add blob support
289380
381+ func getBlobContent( _ key: String ,
382+ documentId: String ,
383+ databaseName: String ) throws -> [ Int ] ? {
384+ do {
385+ return try CollectionManager . shared. getBlobContent (
386+ key,
387+ documentId: documentId,
388+ collectionName: defaultCollectionName,
389+ scopeName: defaultScopeName,
390+ databaseName: databaseName)
391+ } catch {
392+ throw error
393+ }
394+ }
395+
396+ // MARK: SQL++ Query Functions
397+
398+ func executeQuery( _ query: String ,
399+ parameters: [ String : Any ] ? = nil ,
400+ databaseName: String ) throws -> String {
401+ do {
402+ guard let database = self . getDatabase ( databaseName) else {
403+ throw DatabaseError . invalidDatabaseName ( databaseName: databaseName)
404+ }
405+ let query = try database. createQuery ( query)
406+ if let params = parameters {
407+ let queryParams = try QueryHelper . getParamatersFromJson ( params)
408+ query. parameters = queryParams
409+ }
410+ let results = try query. execute ( )
411+ let resultJSONs = results. map { $0. toJSON ( ) }
412+ let jsonArray = " [ " + resultJSONs. joined ( separator: " , " ) + " ] "
413+ return jsonArray
414+ } catch {
415+ throw QueryError . unknownError ( message: error. localizedDescription)
416+ }
417+ }
290418
419+ func queryExplain( _ query: String ,
420+ parameters: [ String : Any ] ? = nil ,
421+ databaseName: String ) throws -> String {
422+ do {
423+ guard let database = self . getDatabase ( databaseName) else {
424+ throw DatabaseError . invalidDatabaseName ( databaseName: databaseName)
425+ }
426+ let query = try database. createQuery ( query)
427+ if let params = parameters {
428+ let queryParams = try QueryHelper . getParamatersFromJson ( params)
429+ query. parameters = queryParams
430+ }
431+ let results = try query. explain ( )
432+ return results
433+ } catch {
434+ throw QueryError . unknownError ( message: error. localizedDescription)
435+ }
436+ }
291437}
0 commit comments