From a4a2112fc90f88b51f4aac2c0fb0c2b98d98551d Mon Sep 17 00:00:00 2001 From: David Jones Date: Thu, 3 Jan 2019 15:03:08 +0000 Subject: [PATCH] Update API documentation for 0.4.0 (#86) --- docs/Classes.html | 29 +- docs/Classes/Database.html | 128 ++++++-- docs/Classes/DatabaseDecoder.html | 29 +- docs/Classes/DatabaseEncoder.html | 29 +- docs/Extensions.html | 31 +- docs/Extensions/RequestError.html | 97 ++++--- docs/Protocols.html | 29 +- docs/Protocols/Model.html | 268 +++++++++-------- docs/Typealiases.html | 274 +++++++++++++++++- .../Contents/Resources/Documents/Classes.html | 29 +- .../Resources/Documents/Classes/Database.html | 128 ++++++-- .../Documents/Classes/DatabaseDecoder.html | 29 +- .../Documents/Classes/DatabaseEncoder.html | 29 +- .../Resources/Documents/Extensions.html | 31 +- .../Documents/Extensions/RequestError.html | 97 ++++--- .../Resources/Documents/Protocols.html | 29 +- .../Resources/Documents/Protocols/Model.html | 268 +++++++++-------- .../Resources/Documents/Typealiases.html | 274 +++++++++++++++++- .../Contents/Resources/Documents/index.html | 60 +++- .../Contents/Resources/Documents/search.json | 2 +- .../Contents/Resources/docSet.dsidx | Bin 28672 -> 28672 bytes docs/docsets/SwiftKueryORM.tgz | Bin 76548 -> 80050 bytes docs/index.html | 60 +++- docs/search.json | 2 +- docs/undocumented.json | 4 +- 25 files changed, 1532 insertions(+), 424 deletions(-) diff --git a/docs/Classes.html b/docs/Classes.html index 1985684..331e747 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -88,12 +88,39 @@ + + + + + + + + + @@ -255,7 +282,7 @@

Declaration

diff --git a/docs/Classes/Database.html b/docs/Classes/Database.html index e652b54..90e8997 100644 --- a/docs/Classes/Database.html +++ b/docs/Classes/Database.html @@ -89,12 +89,39 @@ + + + + + + + + + @@ -134,9 +161,9 @@

Database

  • - - - default + + + DatabaseTask
    @@ -144,14 +171,14 @@

    Database

    -

    Global default Database for the application

    +

    Definition of a DatabaseTask completion handler which accepts an optional Connection and optional Error

    Declaration

    Swift

    -
    public static var `default`: Database?
    +
    public typealias DatabaseTask = (Connection?, QueryError?) -> ()
    @@ -161,9 +188,9 @@

    Declaration

  • - - - tableInfo + + + default
    @@ -171,14 +198,14 @@

    Declaration

    -

    Instance of TableInfo containing cached tables

    +

    Global default Database for the application

    Declaration

    Swift

    -
    public static var tableInfo = TableInfo()
    +
    public static var `default`: Database?
    @@ -188,9 +215,9 @@

    Declaration

  • - - - init(single:) + + + tableInfo
    @@ -198,14 +225,14 @@

    Declaration

    -

    Constructor for a single connection which becomes a connection pool

    +

    Instance of TableInfo containing cached tables

    Declaration

    Swift

    -
    public convenience init(single connection: Connection)
    +
    public static var tableInfo = TableInfo()
    @@ -215,9 +242,9 @@

    Declaration

  • - - - init(_:) + + + init(single:)
    @@ -225,14 +252,28 @@

    Declaration

    -

    Default constructor for a connection pool

    +

    Create a Database instance which uses a single connection to perform each operation. The connection will remain open for the lifetime of the Database. +It is safe for you to issue concurrent operations on the database: the ORM will ensure those operations are executed sequentially. +This connection strategy provides lower latency requests, as a new connection does not need to be established for each operation, and has a small resource overhead. However, scalability is limited as all database operations are serialized. +Below is example code which creates a connection and uses it to create a Database instance:

    +
    var opts = [ConnectionOptions]()
    +opts.append(ConnectionOptions.userName("myUser"))
    +opts.append(ConnectionOptions.password("myPassword"))
    +let connection = PostgreSQLConnection(host: host, port: port, options: opts)
    +let result = connection.connectSync()
    +guard let result.success else {
    +    // Handle error
    +    return
    +}
    +let db = Database(single: connection)
    +

    Declaration

    Swift

    -
    public init(_ pool: ConnectionPool)
    +
    public convenience init(single connection: Connection)
    @@ -242,9 +283,9 @@

    Declaration

  • @@ -252,14 +293,20 @@

    Declaration

    -

    Constructor for a custom connection generator

    +

    Create a Database instance with multiple connections, managed by a connection pool, allowing operations to be performed concurrently. These connections will remain open for the lifetime of the Database. +This connection strategy provides lower latency requests, as a new connection does not need to be established for each operation. You can choose between better performance or lower resource consumption by adjusting the number of connections in the pool. +Below is an example code which creates a connection pool and uses it to create a Database instance:

    +
    let connectionPool = PostgreSQLConnection.createPool(host: host, port: port, options: [.userName("myUser"), .password("myPassword")], poolOptions: ConnectionPoolOptions(initialCapacity: 5, maxCapacity: 10))
    +
    +let db = Database(connectionPool)
    +

    Declaration

    Swift

    -
    public init(generator: @escaping () -> Connection?)
    +
    public init(_ pool: ConnectionPool)
    @@ -269,9 +316,9 @@

    Declaration

  • @@ -279,15 +326,32 @@

    Declaration

    -

    Connection getter: either new connection from pool -or call the custom generator

    +

    Create a Database instance which uses short-lived connections that are generated on demand. A new Connection is created for every operation, and will be closed once the operation completes. +This connection strategy allows for minimal resource consumption when idle, and allows multiple operations to be performed concurrently. However, the process of establishing a connection will increase the time taken to process each operation. +Below is an example of a function that can be used as a connection generator and the call to create the Database instance:

    +
    func getConnectionAndRunTask(task: @escaping (Connection?, QueryError?) -> ()) {
    +    var opts = [ConnectionOptions]()
    +    opts.append(ConnectionOptions.userName("myUser"))
    +    opts.append(ConnectionOptions.password("myPassword"))
    +    let connection = PostgreSQLConnection(host: host, port: port, options: opts)
    +    connection.connect() { result in
    +        guard result.success else {
    +            // Handle error
    +            return task(nil, QueryError.connection(result.asError?.localizedDescription ?? "Unknown connection error"))
    +        }
    +    return task(connection, nil)
    +    }
    +}
    +
    +let db = Database(generator: getConnectionAndRunTask)```
    +

    Declaration

    Swift

    -
    public func getConnection() -> Connection?
    +
    public init(generator: @escaping (@escaping DatabaseTask) -> ())
    @@ -302,7 +366,7 @@

    Declaration

    diff --git a/docs/Classes/DatabaseDecoder.html b/docs/Classes/DatabaseDecoder.html index 6faff34..630771a 100644 --- a/docs/Classes/DatabaseDecoder.html +++ b/docs/Classes/DatabaseDecoder.html @@ -89,12 +89,39 @@
  • + + + + + + + + +
  • @@ -154,7 +181,7 @@

    Declaration

    diff --git a/docs/Classes/DatabaseEncoder.html b/docs/Classes/DatabaseEncoder.html index a732a2c..9c81680 100644 --- a/docs/Classes/DatabaseEncoder.html +++ b/docs/Classes/DatabaseEncoder.html @@ -89,12 +89,39 @@
  • + + + + + + + + +
  • @@ -154,7 +181,7 @@

    Declaration

    diff --git a/docs/Extensions.html b/docs/Extensions.html index c019029..3a3f249 100644 --- a/docs/Extensions.html +++ b/docs/Extensions.html @@ -88,12 +88,39 @@
  • + + + + + + + + +
  • @@ -133,7 +160,7 @@

    Extensions

    Declaration

    Swift

    -
    public typealias RequestError = KituraContracts.RequestError
    +
    public typealias RequestError = KituraContracts.RequestError
    @@ -148,7 +175,7 @@

    Declaration

    diff --git a/docs/Extensions/RequestError.html b/docs/Extensions/RequestError.html index 0a6054b..57d3688 100644 --- a/docs/Extensions/RequestError.html +++ b/docs/Extensions/RequestError.html @@ -89,12 +89,39 @@ + + + + + + + + + @@ -106,7 +133,7 @@

    RequestError

    -
    public typealias RequestError = KituraContracts.RequestError
    +
    public typealias RequestError = KituraContracts.RequestError
    @@ -122,9 +149,9 @@

    RequestError

  • - + - ormDatabaseNotInitialized + ormDatabaseNotInitialized
    @@ -139,7 +166,7 @@

    RequestError

    Declaration

    Swift

    -
    public static let ormDatabaseNotInitialized = RequestError(rawValue: 700, reason: "Database not Initialized")
    +
    public static let ormDatabaseNotInitialized = RequestError(rawValue: 700, reason: "Database not Initialized")
    @@ -149,9 +176,9 @@

    Declaration

  • - + - ormTableCreationError + ormTableCreationError
    @@ -166,7 +193,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormTableCreationError = RequestError(rawValue: 701)
    +
    public static let ormTableCreationError = RequestError(rawValue: 701)
    @@ -176,9 +203,9 @@

    Declaration

  • - + - ormCodableDecodingError + ormCodableDecodingError
    @@ -193,7 +220,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormCodableDecodingError = RequestError(rawValue: 702)
    +
    public static let ormCodableDecodingError = RequestError(rawValue: 702)
    @@ -203,9 +230,9 @@

    Declaration

  • - + - ormDatabaseDecodingError + ormDatabaseDecodingError
    @@ -220,7 +247,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormDatabaseDecodingError = RequestError(rawValue: 703)
    +
    public static let ormDatabaseDecodingError = RequestError(rawValue: 703)
    @@ -230,9 +257,9 @@

    Declaration

  • - + - ormDatabaseEncodingError + ormDatabaseEncodingError
    @@ -247,7 +274,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormDatabaseEncodingError = RequestError(rawValue: 704)
    +
    public static let ormDatabaseEncodingError = RequestError(rawValue: 704)
    @@ -257,9 +284,9 @@

    Declaration

  • - + - ormQueryError + ormQueryError
    @@ -274,7 +301,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormQueryError = RequestError(rawValue: 706)
    +
    public static let ormQueryError = RequestError(rawValue: 706)
    @@ -284,9 +311,9 @@

    Declaration

  • - + - ormNotFound + ormNotFound
    @@ -301,7 +328,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormNotFound = RequestError(rawValue: 707)
    +
    public static let ormNotFound = RequestError(rawValue: 707)
    @@ -311,9 +338,9 @@

    Declaration

  • - + - ormInvalidTableDefinition + ormInvalidTableDefinition
    @@ -328,7 +355,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormInvalidTableDefinition = RequestError(rawValue: 708)
    +
    public static let ormInvalidTableDefinition = RequestError(rawValue: 708)
    @@ -338,9 +365,9 @@

    Declaration

  • - + - ormIdentifierError + ormIdentifierError
    @@ -355,7 +382,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormIdentifierError = RequestError(rawValue: 709)
    +
    public static let ormIdentifierError = RequestError(rawValue: 709)
    @@ -365,9 +392,9 @@

    Declaration

  • - + - ormInternalError + ormInternalError
    @@ -382,7 +409,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormInternalError = RequestError(rawValue: 710)
    +
    public static let ormInternalError = RequestError(rawValue: 710)
    @@ -392,9 +419,9 @@

    Declaration

  • - + - ormConnectionFailed + ormConnectionFailed
    @@ -409,7 +436,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormConnectionFailed = RequestError(rawValue: 711, reason: "Failed to retrieve a connection from the database")
    +
    public static let ormConnectionFailed = RequestError(rawValue: 711, reason: "Failed to retrieve a connection from the database")
    @@ -424,7 +451,7 @@

    Declaration

    diff --git a/docs/Protocols.html b/docs/Protocols.html index fbc49f3..675e8f1 100644 --- a/docs/Protocols.html +++ b/docs/Protocols.html @@ -88,12 +88,39 @@
  • + + + + + + + + + @@ -148,7 +175,7 @@

    Declaration

    diff --git a/docs/Protocols/Model.html b/docs/Protocols/Model.html index 74ede76..511b7e6 100644 --- a/docs/Protocols/Model.html +++ b/docs/Protocols/Model.html @@ -89,12 +89,39 @@ + + + + + + + + + @@ -122,9 +149,9 @@

    Model

  • - + - tableName + tableName Default implementation @@ -157,9 +184,9 @@

    Declaration

  • - + - idColumnName + idColumnName Default implementation @@ -192,9 +219,9 @@

    Declaration

  • - + - idColumnType + idColumnType Default implementation @@ -217,7 +244,7 @@

    Default Implementation

    Declaration

    Swift

    -
    static var idColumnType: SQLDataType.Type
    +
    static var idColumnType: SQLDataType.Type
    @@ -285,7 +312,7 @@

    Default Implementation

    Declaration

    Swift

    -
    static func createTable(using db: Database?, _ onCompletion: @escaping (Bool?, RequestError?) -> Void)
    +
    static func createTable(using db: Database?, _ onCompletion: @escaping (Bool?, RequestError?) -> Void)
    @@ -353,7 +380,7 @@

    Default Implementation

    Declaration

    Swift

    -
    static func dropTable(using db: Database?, _ onCompletion: @escaping (Bool?, RequestError?) -> Void)
    +
    static func dropTable(using db: Database?, _ onCompletion: @escaping (Bool?, RequestError?) -> Void)
    @@ -390,7 +417,7 @@

    Default Implementation

    Declaration

    Swift

    -
    func save(using db: Database?, _ onCompletion: @escaping (Self?, RequestError?) -> Void)
    +
    func save(using db: Database?, _ onCompletion: @escaping (Self?, RequestError?) -> Void)
    @@ -418,7 +445,7 @@

    Declaration

    Declaration

    Swift

    -
    func save<I: Identifier>(using db: Database?, _ onCompletion: @escaping (I?, Self?, RequestError?) -> Void)
    +
    func save<I: Identifier>(using db: Database?, _ onCompletion: @escaping (I?, Self?, RequestError?) -> Void)
    @@ -428,9 +455,9 @@

    Declaration

  • - - - find(id:using:_:) + + + update(id:using:_:) Default implementation @@ -441,20 +468,19 @@

    Declaration

    -

    Call to find a model in the database with an id that accepts a completion -handler. The callback is passed the model or an error

    +

    Call to update a model in the database with an id that accepts a completion +handler. The callback is passed a updated model or an error

    Default Implementation

    -

    Find a model with an id

    - +

    Declaration

    Swift

    -
    static func find<I: Identifier>(id: I, using db: Database?, _ onCompletion: @escaping (Self?, RequestError?) -> Void)
    +
    func update<I: Identifier>(id: I, using db: Database?, _ onCompletion: @escaping (Self?, RequestError?) -> Void)
    @@ -464,9 +490,9 @@

    Declaration

  • - - - findAll(using:_:) + + + delete(id:using:_:) Default implementation @@ -477,20 +503,19 @@

    Declaration

    -

    Call to find all the models in the database that accepts a completion -handler. The callback is passed an array of models or an error

    +

    Call to delete a model in the database with an id that accepts a completion +handler. The callback is passed an optional error

    Default Implementation

    -

    Find all the models

    - +

    Declaration

    Swift

    -
    static func findAll(using db: Database?, _ onCompletion: @escaping ([Self]?, RequestError?) -> Void)
    +
    static func delete(id: Identifier, using db: Database?, _ onCompletion: @escaping (RequestError?) -> Void)
    @@ -500,25 +525,32 @@

    Declaration

  • - - - findAll(using:_:) + + + deleteAll(using:_:) + + Default implementation +
    -

    Call to find all the models in the database that accepts a completion -handler. The callback is passed an array of tuples (id, model) or an error

    +

    Call to delete all the models in the database that accepts a completion +handler. The callback is passed an optional error

    +
    +

    Default Implementation

    +
    +

    Declaration

    Swift

    -
    static func findAll<I: Identifier>(using db: Database?, _ onCompletion: @escaping ([(I, Self)]?, RequestError?) -> Void)
    +
    static func deleteAll(using db: Database?, _ onCompletion: @escaping (RequestError?) -> Void)
    @@ -528,25 +560,33 @@

    Declaration

  • - - - findAll(using:_:) + + + deleteAll(using:matching:_:) + + Default implementation +
    -

    Call to find all the models in the database that accepts a completion -handler. The callback is passed a dictionary [id: model] or an error

    +

    Call to delete all the models in the database mathcing the QueryParams that accepts a completion +handler. The callback is passed an optional error

    + +
    +

    Default Implementation

    +
    +

    Delete all the models matching the QueryParams

    Declaration

    Swift

    -
    static func findAll<I: Identifier>(using db: Database?, _ onCompletion: @escaping ([I: Self]?, RequestError?) -> Void)
    +
    static func deleteAll<Q: QueryParams>(using db: Database?, matching queryParams:Q?, _ onCompletion: @escaping (RequestError?) -> Void)
    @@ -556,9 +596,9 @@

    Declaration

  • - - - findAll(using:matching:_:) + + + getTable() Default implementation @@ -569,22 +609,18 @@

    Declaration

    -

    Call to find all the models in the database matching the QueryParams that accepts a completion -handler. The callback is passed an array of models or an error

    +

    Call to get the table of the model

    Default Implementation

    -

    Find all the models matching the QueryParams

    -

    Find all the models matching the QueryParams

    -

    Find all the models matching the QueryParams

    - +

    Declaration

    Swift

    -
    static func findAll<Q: QueryParams>(using db: Database?, matching queryParams: Q, _ onCompletion: @escaping ([Self]?, RequestError?) -> Void)
    +
    static func getTable() throws -> Table
    @@ -594,25 +630,33 @@

    Declaration

  • - - - findAll(using:matching:_:) + + + find(id:using:_:) + + Default implementation +
    -

    Call to find all the models in the database matching the QueryParams that accepts a completion -handler. The callback is passed an array of tuples (id, model) or an error

    +

    Call to find a model in the database with an id that accepts a completion +handler. The callback is passed the model or an error

    + +
    +

    Default Implementation

    +
    +

    Find a model with an id

    Declaration

    Swift

    -
    static func findAll<Q: QueryParams, I: Identifier>(using db: Database?, matching queryParams: Q, _ onCompletion: @escaping ([(I, Self)]?, RequestError?) -> Void)
    +
    static func find<I: Identifier>(id: I, using db: Database?, _ onCompletion: @escaping (Self?, RequestError?) -> Void)
    @@ -622,25 +666,33 @@

    Declaration

  • - - - findAll(using:matching:_:) + + + findAll(using:_:) + + Default implementation +
    -

    Call to find all the models in the database matching the QueryParams that accepts a completion -handler. The callback is passed a dictionary [id: model] or an error

    +

    Call to find all the models in the database that accepts a completion +handler. The callback is passed an array of models or an error

    + +
    +

    Default Implementation

    +
    +

    Find all the models

    Declaration

    Swift

    -
    static func findAll<Q: QueryParams, I: Identifier>(using db: Database?, matching queryParams: Q, _ onCompletion: @escaping ([I: Self]?, RequestError?) -> Void)
    +
    static func findAll(using db: Database?, _ onCompletion: @escaping ([Self]?, RequestError?) -> Void)
    @@ -650,32 +702,25 @@

    Declaration

  • - - - update(id:using:_:) + + + findAll(using:_:) - - Default implementation -
    -

    Call to update a model in the database with an id that accepts a completion -handler. The callback is passed a updated model or an error

    +

    Call to find all the models in the database that accepts a completion +handler. The callback is passed an array of tuples (id, model) or an error

    -
    -

    Default Implementation

    -
    -

    Declaration

    Swift

    -
    func update<I: Identifier>(id: I, using db: Database?, _ onCompletion: @escaping (Self?, RequestError?) -> Void)
    +
    static func findAll<I: Identifier>(using db: Database?, _ onCompletion: @escaping ([(I, Self)]?, RequestError?) -> Void)
    @@ -685,32 +730,25 @@

    Declaration

  • - - - delete(id:using:_:) + + + findAll(using:_:) - - Default implementation -
    -

    Call to delete a model in the database with an id that accepts a completion -handler. The callback is passed an optional error

    +

    Call to find all the models in the database that accepts a completion +handler. The callback is passed a dictionary [id: model] or an error

    -
    -

    Default Implementation

    -
    -

    Declaration

    Swift

    -
    static func delete(id: Identifier, using db: Database?, _ onCompletion: @escaping (RequestError?) -> Void)
    +
    static func findAll<I: Identifier>(using db: Database?, _ onCompletion: @escaping ([I: Self]?, RequestError?) -> Void)
    @@ -720,9 +758,9 @@

    Declaration

  • - - - deleteAll(using:_:) + + + findAll(using:matching:_:) Default implementation @@ -733,19 +771,21 @@

    Declaration

    -

    Call to delete all the models in the database that accepts a completion -handler. The callback is passed an optional error

    +

    Call to find all the models in the database matching the QueryParams that accepts a completion +handler. The callback is passed an array of models or an error

    Default Implementation

    - +

    Find all the models matching the QueryParams

    +

    Find all the models matching the QueryParams

    +

    Declaration

    Swift

    -
    static func deleteAll(using db: Database?, _ onCompletion: @escaping (RequestError?) -> Void)
    +
    static func findAll<Q: QueryParams>(using db: Database?, matching queryParams: Q?, _ onCompletion: @escaping ([Self]?, RequestError?) -> Void)
    @@ -755,33 +795,25 @@

    Declaration

  • - - - deleteAll(using:matching:_:) + + + findAll(using:matching:_:) - - Default implementation -
    -

    Call to delete all the models in the database mathcing the QueryParams that accepts a completion -handler. The callback is passed an optional error

    - -
    -

    Default Implementation

    -
    -

    Delete all the models matching the QueryParams

    +

    Call to find all the models in the database matching the QueryParams that accepts a completion +handler. The callback is passed an array of tuples (id, model) or an error

    Declaration

    Swift

    -
    static func deleteAll<Q: QueryParams>(using db: Database?, matching queryParams:Q, _ onCompletion: @escaping (RequestError?) -> Void)
    +
    static func findAll<Q: QueryParams, I: Identifier>(using db: Database?, matching queryParams: Q?, _ onCompletion: @escaping ([(I, Self)]?, RequestError?) -> Void)
    @@ -791,31 +823,25 @@

    Declaration

  • - - - getTable() + + + findAll(using:matching:_:) - - Default implementation -
    -

    Call to get the table of the model

    +

    Call to find all the models in the database matching the QueryParams that accepts a completion +handler. The callback is passed a dictionary [id: model] or an error

    -
    -

    Default Implementation

    -
    -

    Declaration

    Swift

    -
    static func getTable() throws -> Table
    +
    static func findAll<Q: QueryParams, I: Identifier>(using db: Database?, matching queryParams: Q?, _ onCompletion: @escaping ([I: Self]?, RequestError?) -> Void)
    @@ -830,7 +856,7 @@

    Declaration

    diff --git a/docs/Typealiases.html b/docs/Typealiases.html index daace50..80971a4 100644 --- a/docs/Typealiases.html +++ b/docs/Typealiases.html @@ -88,12 +88,39 @@
  • + + + + + + + + +
  • @@ -170,6 +197,33 @@

    Declaration

  • +
  • +
    + + + + SQLDataType + +
    +
    +
    +
    +
    +
    +

    Type Alias for SQLDataType from SwiftKuery

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias SQLDataType = SwiftKuery.SQLDataType
    + +
    +
    +
    +
    +
  • @@ -183,7 +237,7 @@

    Declaration

    -

    Type Alias for QueryParams from KituraContracts

    +

    Public TypeAlias for QueryParams Type from KituraContracts

    @@ -197,6 +251,222 @@

    Declaration

  • +
  • +
    + + + + GreaterThan + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for GreaterThan Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias GreaterThan = KituraContracts.GreaterThan
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LowerThan + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for LowerThan Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias LowerThan = KituraContracts.LowerThan
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + GreaterThanOrEqual + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for GreaterThanOrEqual Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias GreaterThanOrEqual = KituraContracts.GreaterThanOrEqual
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LowerThanOrEqual + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for LowerThanOrEqual Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias LowerThanOrEqual = KituraContracts.LowerThanOrEqual
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + InclusiveRange + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for InclusiveRange Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias InclusiveRange = KituraContracts.InclusiveRange
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ExclusiveRange + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for ExclusiveRange Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ExclusiveRange = KituraContracts.ExclusiveRange
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Pagination + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for Pagination Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Pagination = KituraContracts.Pagination
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Ordering + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for Ordering Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Ordering = KituraContracts.Ordering
    + +
    +
    +
    +
    +
  • @@ -205,7 +475,7 @@

    Declaration

  • diff --git a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes.html index 1985684..331e747 100644 --- a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes.html +++ b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes.html @@ -88,12 +88,39 @@
  • + + + + + + + + +
  • @@ -255,7 +282,7 @@

    Declaration

    diff --git a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes/Database.html b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes/Database.html index e652b54..90e8997 100644 --- a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes/Database.html +++ b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes/Database.html @@ -89,12 +89,39 @@
  • + + + + + + + + +
  • @@ -134,9 +161,9 @@

    Database

  • - - - default + + + DatabaseTask
    @@ -144,14 +171,14 @@

    Database

    -

    Global default Database for the application

    +

    Definition of a DatabaseTask completion handler which accepts an optional Connection and optional Error

    Declaration

    Swift

    -
    public static var `default`: Database?
    +
    public typealias DatabaseTask = (Connection?, QueryError?) -> ()
    @@ -161,9 +188,9 @@

    Declaration

  • - - - tableInfo + + + default
    @@ -171,14 +198,14 @@

    Declaration

    -

    Instance of TableInfo containing cached tables

    +

    Global default Database for the application

    Declaration

    Swift

    -
    public static var tableInfo = TableInfo()
    +
    public static var `default`: Database?
    @@ -188,9 +215,9 @@

    Declaration

  • - - - init(single:) + + + tableInfo
    @@ -198,14 +225,14 @@

    Declaration

    -

    Constructor for a single connection which becomes a connection pool

    +

    Instance of TableInfo containing cached tables

    Declaration

    Swift

    -
    public convenience init(single connection: Connection)
    +
    public static var tableInfo = TableInfo()
    @@ -215,9 +242,9 @@

    Declaration

  • - - - init(_:) + + + init(single:)
    @@ -225,14 +252,28 @@

    Declaration

    -

    Default constructor for a connection pool

    +

    Create a Database instance which uses a single connection to perform each operation. The connection will remain open for the lifetime of the Database. +It is safe for you to issue concurrent operations on the database: the ORM will ensure those operations are executed sequentially. +This connection strategy provides lower latency requests, as a new connection does not need to be established for each operation, and has a small resource overhead. However, scalability is limited as all database operations are serialized. +Below is example code which creates a connection and uses it to create a Database instance:

    +
    var opts = [ConnectionOptions]()
    +opts.append(ConnectionOptions.userName("myUser"))
    +opts.append(ConnectionOptions.password("myPassword"))
    +let connection = PostgreSQLConnection(host: host, port: port, options: opts)
    +let result = connection.connectSync()
    +guard let result.success else {
    +    // Handle error
    +    return
    +}
    +let db = Database(single: connection)
    +

    Declaration

    Swift

    -
    public init(_ pool: ConnectionPool)
    +
    public convenience init(single connection: Connection)
    @@ -242,9 +283,9 @@

    Declaration

  • @@ -252,14 +293,20 @@

    Declaration

    -

    Constructor for a custom connection generator

    +

    Create a Database instance with multiple connections, managed by a connection pool, allowing operations to be performed concurrently. These connections will remain open for the lifetime of the Database. +This connection strategy provides lower latency requests, as a new connection does not need to be established for each operation. You can choose between better performance or lower resource consumption by adjusting the number of connections in the pool. +Below is an example code which creates a connection pool and uses it to create a Database instance:

    +
    let connectionPool = PostgreSQLConnection.createPool(host: host, port: port, options: [.userName("myUser"), .password("myPassword")], poolOptions: ConnectionPoolOptions(initialCapacity: 5, maxCapacity: 10))
    +
    +let db = Database(connectionPool)
    +

    Declaration

    Swift

    -
    public init(generator: @escaping () -> Connection?)
    +
    public init(_ pool: ConnectionPool)
    @@ -269,9 +316,9 @@

    Declaration

  • @@ -279,15 +326,32 @@

    Declaration

    -

    Connection getter: either new connection from pool -or call the custom generator

    +

    Create a Database instance which uses short-lived connections that are generated on demand. A new Connection is created for every operation, and will be closed once the operation completes. +This connection strategy allows for minimal resource consumption when idle, and allows multiple operations to be performed concurrently. However, the process of establishing a connection will increase the time taken to process each operation. +Below is an example of a function that can be used as a connection generator and the call to create the Database instance:

    +
    func getConnectionAndRunTask(task: @escaping (Connection?, QueryError?) -> ()) {
    +    var opts = [ConnectionOptions]()
    +    opts.append(ConnectionOptions.userName("myUser"))
    +    opts.append(ConnectionOptions.password("myPassword"))
    +    let connection = PostgreSQLConnection(host: host, port: port, options: opts)
    +    connection.connect() { result in
    +        guard result.success else {
    +            // Handle error
    +            return task(nil, QueryError.connection(result.asError?.localizedDescription ?? "Unknown connection error"))
    +        }
    +    return task(connection, nil)
    +    }
    +}
    +
    +let db = Database(generator: getConnectionAndRunTask)```
    +

    Declaration

    Swift

    -
    public func getConnection() -> Connection?
    +
    public init(generator: @escaping (@escaping DatabaseTask) -> ())
    @@ -302,7 +366,7 @@

    Declaration

    diff --git a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes/DatabaseDecoder.html b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes/DatabaseDecoder.html index 6faff34..630771a 100644 --- a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes/DatabaseDecoder.html +++ b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes/DatabaseDecoder.html @@ -89,12 +89,39 @@
  • + + + + + + + + +
  • @@ -154,7 +181,7 @@

    Declaration

    diff --git a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes/DatabaseEncoder.html b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes/DatabaseEncoder.html index a732a2c..9c81680 100644 --- a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes/DatabaseEncoder.html +++ b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Classes/DatabaseEncoder.html @@ -89,12 +89,39 @@
  • + + + + + + + + +
  • @@ -154,7 +181,7 @@

    Declaration

    diff --git a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Extensions.html index c019029..3a3f249 100644 --- a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Extensions.html +++ b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Extensions.html @@ -88,12 +88,39 @@
  • + + + + + + + + +
  • @@ -133,7 +160,7 @@

    Extensions

    Declaration

    Swift

    -
    public typealias RequestError = KituraContracts.RequestError
    +
    public typealias RequestError = KituraContracts.RequestError
    @@ -148,7 +175,7 @@

    Declaration

  • diff --git a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Extensions/RequestError.html b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Extensions/RequestError.html index 0a6054b..57d3688 100644 --- a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Extensions/RequestError.html +++ b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Extensions/RequestError.html @@ -89,12 +89,39 @@
  • + + + + + + + + +
  • @@ -106,7 +133,7 @@

    RequestError

    -
    public typealias RequestError = KituraContracts.RequestError
    +
    public typealias RequestError = KituraContracts.RequestError
    @@ -122,9 +149,9 @@

    RequestError

  • - + - ormDatabaseNotInitialized + ormDatabaseNotInitialized
    @@ -139,7 +166,7 @@

    RequestError

    Declaration

    Swift

    -
    public static let ormDatabaseNotInitialized = RequestError(rawValue: 700, reason: "Database not Initialized")
    +
    public static let ormDatabaseNotInitialized = RequestError(rawValue: 700, reason: "Database not Initialized")
    @@ -149,9 +176,9 @@

    Declaration

  • - + - ormTableCreationError + ormTableCreationError
    @@ -166,7 +193,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormTableCreationError = RequestError(rawValue: 701)
    +
    public static let ormTableCreationError = RequestError(rawValue: 701)
    @@ -176,9 +203,9 @@

    Declaration

  • - + - ormCodableDecodingError + ormCodableDecodingError
    @@ -193,7 +220,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormCodableDecodingError = RequestError(rawValue: 702)
    +
    public static let ormCodableDecodingError = RequestError(rawValue: 702)
    @@ -203,9 +230,9 @@

    Declaration

  • - + - ormDatabaseDecodingError + ormDatabaseDecodingError
    @@ -220,7 +247,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormDatabaseDecodingError = RequestError(rawValue: 703)
    +
    public static let ormDatabaseDecodingError = RequestError(rawValue: 703)
    @@ -230,9 +257,9 @@

    Declaration

  • - + - ormDatabaseEncodingError + ormDatabaseEncodingError
    @@ -247,7 +274,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormDatabaseEncodingError = RequestError(rawValue: 704)
    +
    public static let ormDatabaseEncodingError = RequestError(rawValue: 704)
    @@ -257,9 +284,9 @@

    Declaration

  • - + - ormQueryError + ormQueryError
    @@ -274,7 +301,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormQueryError = RequestError(rawValue: 706)
    +
    public static let ormQueryError = RequestError(rawValue: 706)
    @@ -284,9 +311,9 @@

    Declaration

  • - + - ormNotFound + ormNotFound
    @@ -301,7 +328,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormNotFound = RequestError(rawValue: 707)
    +
    public static let ormNotFound = RequestError(rawValue: 707)
    @@ -311,9 +338,9 @@

    Declaration

  • - + - ormInvalidTableDefinition + ormInvalidTableDefinition
    @@ -328,7 +355,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormInvalidTableDefinition = RequestError(rawValue: 708)
    +
    public static let ormInvalidTableDefinition = RequestError(rawValue: 708)
    @@ -338,9 +365,9 @@

    Declaration

  • - + - ormIdentifierError + ormIdentifierError
    @@ -355,7 +382,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormIdentifierError = RequestError(rawValue: 709)
    +
    public static let ormIdentifierError = RequestError(rawValue: 709)
    @@ -365,9 +392,9 @@

    Declaration

  • - + - ormInternalError + ormInternalError
    @@ -382,7 +409,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormInternalError = RequestError(rawValue: 710)
    +
    public static let ormInternalError = RequestError(rawValue: 710)
    @@ -392,9 +419,9 @@

    Declaration

  • - + - ormConnectionFailed + ormConnectionFailed
    @@ -409,7 +436,7 @@

    Declaration

    Declaration

    Swift

    -
    public static let ormConnectionFailed = RequestError(rawValue: 711, reason: "Failed to retrieve a connection from the database")
    +
    public static let ormConnectionFailed = RequestError(rawValue: 711, reason: "Failed to retrieve a connection from the database")
    @@ -424,7 +451,7 @@

    Declaration

    diff --git a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Protocols.html index fbc49f3..675e8f1 100644 --- a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Protocols.html +++ b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Protocols.html @@ -88,12 +88,39 @@
  • + + + + + + + + + @@ -148,7 +175,7 @@

    Declaration

    diff --git a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Protocols/Model.html b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Protocols/Model.html index 74ede76..511b7e6 100644 --- a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Protocols/Model.html +++ b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Protocols/Model.html @@ -89,12 +89,39 @@ + + + + + + + + + @@ -122,9 +149,9 @@

    Model

  • - + - tableName + tableName Default implementation @@ -157,9 +184,9 @@

    Declaration

  • - + - idColumnName + idColumnName Default implementation @@ -192,9 +219,9 @@

    Declaration

  • - + - idColumnType + idColumnType Default implementation @@ -217,7 +244,7 @@

    Default Implementation

    Declaration

    Swift

    -
    static var idColumnType: SQLDataType.Type
    +
    static var idColumnType: SQLDataType.Type
    @@ -285,7 +312,7 @@

    Default Implementation

    Declaration

    Swift

    -
    static func createTable(using db: Database?, _ onCompletion: @escaping (Bool?, RequestError?) -> Void)
    +
    static func createTable(using db: Database?, _ onCompletion: @escaping (Bool?, RequestError?) -> Void)
    @@ -353,7 +380,7 @@

    Default Implementation

    Declaration

    Swift

    -
    static func dropTable(using db: Database?, _ onCompletion: @escaping (Bool?, RequestError?) -> Void)
    +
    static func dropTable(using db: Database?, _ onCompletion: @escaping (Bool?, RequestError?) -> Void)
    @@ -390,7 +417,7 @@

    Default Implementation

    Declaration

    Swift

    -
    func save(using db: Database?, _ onCompletion: @escaping (Self?, RequestError?) -> Void)
    +
    func save(using db: Database?, _ onCompletion: @escaping (Self?, RequestError?) -> Void)
    @@ -418,7 +445,7 @@

    Declaration

    Declaration

    Swift

    -
    func save<I: Identifier>(using db: Database?, _ onCompletion: @escaping (I?, Self?, RequestError?) -> Void)
    +
    func save<I: Identifier>(using db: Database?, _ onCompletion: @escaping (I?, Self?, RequestError?) -> Void)
    @@ -428,9 +455,9 @@

    Declaration

  • - - - find(id:using:_:) + + + update(id:using:_:) Default implementation @@ -441,20 +468,19 @@

    Declaration

    -

    Call to find a model in the database with an id that accepts a completion -handler. The callback is passed the model or an error

    +

    Call to update a model in the database with an id that accepts a completion +handler. The callback is passed a updated model or an error

    Default Implementation

    -

    Find a model with an id

    - +

    Declaration

    Swift

    -
    static func find<I: Identifier>(id: I, using db: Database?, _ onCompletion: @escaping (Self?, RequestError?) -> Void)
    +
    func update<I: Identifier>(id: I, using db: Database?, _ onCompletion: @escaping (Self?, RequestError?) -> Void)
    @@ -464,9 +490,9 @@

    Declaration

  • - - - findAll(using:_:) + + + delete(id:using:_:) Default implementation @@ -477,20 +503,19 @@

    Declaration

    -

    Call to find all the models in the database that accepts a completion -handler. The callback is passed an array of models or an error

    +

    Call to delete a model in the database with an id that accepts a completion +handler. The callback is passed an optional error

    Default Implementation

    -

    Find all the models

    - +

    Declaration

    Swift

    -
    static func findAll(using db: Database?, _ onCompletion: @escaping ([Self]?, RequestError?) -> Void)
    +
    static func delete(id: Identifier, using db: Database?, _ onCompletion: @escaping (RequestError?) -> Void)
    @@ -500,25 +525,32 @@

    Declaration

  • - - - findAll(using:_:) + + + deleteAll(using:_:) + + Default implementation +
    -

    Call to find all the models in the database that accepts a completion -handler. The callback is passed an array of tuples (id, model) or an error

    +

    Call to delete all the models in the database that accepts a completion +handler. The callback is passed an optional error

    +
    +

    Default Implementation

    +
    +

    Declaration

    Swift

    -
    static func findAll<I: Identifier>(using db: Database?, _ onCompletion: @escaping ([(I, Self)]?, RequestError?) -> Void)
    +
    static func deleteAll(using db: Database?, _ onCompletion: @escaping (RequestError?) -> Void)
    @@ -528,25 +560,33 @@

    Declaration

  • - - - findAll(using:_:) + + + deleteAll(using:matching:_:) + + Default implementation +
    -

    Call to find all the models in the database that accepts a completion -handler. The callback is passed a dictionary [id: model] or an error

    +

    Call to delete all the models in the database mathcing the QueryParams that accepts a completion +handler. The callback is passed an optional error

    + +
    +

    Default Implementation

    +
    +

    Delete all the models matching the QueryParams

    Declaration

    Swift

    -
    static func findAll<I: Identifier>(using db: Database?, _ onCompletion: @escaping ([I: Self]?, RequestError?) -> Void)
    +
    static func deleteAll<Q: QueryParams>(using db: Database?, matching queryParams:Q?, _ onCompletion: @escaping (RequestError?) -> Void)
    @@ -556,9 +596,9 @@

    Declaration

  • - - - findAll(using:matching:_:) + + + getTable() Default implementation @@ -569,22 +609,18 @@

    Declaration

    -

    Call to find all the models in the database matching the QueryParams that accepts a completion -handler. The callback is passed an array of models or an error

    +

    Call to get the table of the model

    Default Implementation

    -

    Find all the models matching the QueryParams

    -

    Find all the models matching the QueryParams

    -

    Find all the models matching the QueryParams

    - +

    Declaration

    Swift

    -
    static func findAll<Q: QueryParams>(using db: Database?, matching queryParams: Q, _ onCompletion: @escaping ([Self]?, RequestError?) -> Void)
    +
    static func getTable() throws -> Table
    @@ -594,25 +630,33 @@

    Declaration

  • - - - findAll(using:matching:_:) + + + find(id:using:_:) + + Default implementation +
    -

    Call to find all the models in the database matching the QueryParams that accepts a completion -handler. The callback is passed an array of tuples (id, model) or an error

    +

    Call to find a model in the database with an id that accepts a completion +handler. The callback is passed the model or an error

    + +
    +

    Default Implementation

    +
    +

    Find a model with an id

    Declaration

    Swift

    -
    static func findAll<Q: QueryParams, I: Identifier>(using db: Database?, matching queryParams: Q, _ onCompletion: @escaping ([(I, Self)]?, RequestError?) -> Void)
    +
    static func find<I: Identifier>(id: I, using db: Database?, _ onCompletion: @escaping (Self?, RequestError?) -> Void)
    @@ -622,25 +666,33 @@

    Declaration

  • - - - findAll(using:matching:_:) + + + findAll(using:_:) + + Default implementation +
    -

    Call to find all the models in the database matching the QueryParams that accepts a completion -handler. The callback is passed a dictionary [id: model] or an error

    +

    Call to find all the models in the database that accepts a completion +handler. The callback is passed an array of models or an error

    + +
    +

    Default Implementation

    +
    +

    Find all the models

    Declaration

    Swift

    -
    static func findAll<Q: QueryParams, I: Identifier>(using db: Database?, matching queryParams: Q, _ onCompletion: @escaping ([I: Self]?, RequestError?) -> Void)
    +
    static func findAll(using db: Database?, _ onCompletion: @escaping ([Self]?, RequestError?) -> Void)
    @@ -650,32 +702,25 @@

    Declaration

  • - - - update(id:using:_:) + + + findAll(using:_:) - - Default implementation -
    -

    Call to update a model in the database with an id that accepts a completion -handler. The callback is passed a updated model or an error

    +

    Call to find all the models in the database that accepts a completion +handler. The callback is passed an array of tuples (id, model) or an error

    -
    -

    Default Implementation

    -
    -

    Declaration

    Swift

    -
    func update<I: Identifier>(id: I, using db: Database?, _ onCompletion: @escaping (Self?, RequestError?) -> Void)
    +
    static func findAll<I: Identifier>(using db: Database?, _ onCompletion: @escaping ([(I, Self)]?, RequestError?) -> Void)
    @@ -685,32 +730,25 @@

    Declaration

  • - - - delete(id:using:_:) + + + findAll(using:_:) - - Default implementation -
    -

    Call to delete a model in the database with an id that accepts a completion -handler. The callback is passed an optional error

    +

    Call to find all the models in the database that accepts a completion +handler. The callback is passed a dictionary [id: model] or an error

    -
    -

    Default Implementation

    -
    -

    Declaration

    Swift

    -
    static func delete(id: Identifier, using db: Database?, _ onCompletion: @escaping (RequestError?) -> Void)
    +
    static func findAll<I: Identifier>(using db: Database?, _ onCompletion: @escaping ([I: Self]?, RequestError?) -> Void)
    @@ -720,9 +758,9 @@

    Declaration

  • - - - deleteAll(using:_:) + + + findAll(using:matching:_:) Default implementation @@ -733,19 +771,21 @@

    Declaration

    -

    Call to delete all the models in the database that accepts a completion -handler. The callback is passed an optional error

    +

    Call to find all the models in the database matching the QueryParams that accepts a completion +handler. The callback is passed an array of models or an error

    Default Implementation

    - +

    Find all the models matching the QueryParams

    +

    Find all the models matching the QueryParams

    +

    Declaration

    Swift

    -
    static func deleteAll(using db: Database?, _ onCompletion: @escaping (RequestError?) -> Void)
    +
    static func findAll<Q: QueryParams>(using db: Database?, matching queryParams: Q?, _ onCompletion: @escaping ([Self]?, RequestError?) -> Void)
    @@ -755,33 +795,25 @@

    Declaration

  • - - - deleteAll(using:matching:_:) + + + findAll(using:matching:_:) - - Default implementation -
    -

    Call to delete all the models in the database mathcing the QueryParams that accepts a completion -handler. The callback is passed an optional error

    - -
    -

    Default Implementation

    -
    -

    Delete all the models matching the QueryParams

    +

    Call to find all the models in the database matching the QueryParams that accepts a completion +handler. The callback is passed an array of tuples (id, model) or an error

    Declaration

    Swift

    -
    static func deleteAll<Q: QueryParams>(using db: Database?, matching queryParams:Q, _ onCompletion: @escaping (RequestError?) -> Void)
    +
    static func findAll<Q: QueryParams, I: Identifier>(using db: Database?, matching queryParams: Q?, _ onCompletion: @escaping ([(I, Self)]?, RequestError?) -> Void)
    @@ -791,31 +823,25 @@

    Declaration

  • - - - getTable() + + + findAll(using:matching:_:) - - Default implementation -
    -

    Call to get the table of the model

    +

    Call to find all the models in the database matching the QueryParams that accepts a completion +handler. The callback is passed a dictionary [id: model] or an error

    -
    -

    Default Implementation

    -
    -

    Declaration

    Swift

    -
    static func getTable() throws -> Table
    +
    static func findAll<Q: QueryParams, I: Identifier>(using db: Database?, matching queryParams: Q?, _ onCompletion: @escaping ([I: Self]?, RequestError?) -> Void)
    @@ -830,7 +856,7 @@

    Declaration

    diff --git a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Typealiases.html b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Typealiases.html index daace50..80971a4 100644 --- a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Typealiases.html +++ b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/Typealiases.html @@ -88,12 +88,39 @@
  • + + + + + + + + +
  • @@ -170,6 +197,33 @@

    Declaration

  • +
  • +
    + + + + SQLDataType + +
    +
    +
    +
    +
    +
    +

    Type Alias for SQLDataType from SwiftKuery

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias SQLDataType = SwiftKuery.SQLDataType
    + +
    +
    +
    +
    +
  • @@ -183,7 +237,7 @@

    Declaration

    -

    Type Alias for QueryParams from KituraContracts

    +

    Public TypeAlias for QueryParams Type from KituraContracts

    @@ -197,6 +251,222 @@

    Declaration

  • +
  • +
    + + + + GreaterThan + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for GreaterThan Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias GreaterThan = KituraContracts.GreaterThan
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LowerThan + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for LowerThan Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias LowerThan = KituraContracts.LowerThan
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + GreaterThanOrEqual + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for GreaterThanOrEqual Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias GreaterThanOrEqual = KituraContracts.GreaterThanOrEqual
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LowerThanOrEqual + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for LowerThanOrEqual Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias LowerThanOrEqual = KituraContracts.LowerThanOrEqual
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + InclusiveRange + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for InclusiveRange Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias InclusiveRange = KituraContracts.InclusiveRange
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ExclusiveRange + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for ExclusiveRange Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ExclusiveRange = KituraContracts.ExclusiveRange
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Pagination + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for Pagination Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Pagination = KituraContracts.Pagination
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Ordering + +
    +
    +
    +
    +
    +
    +

    Public TypeAlias for Ordering Type from KituraContracts

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Ordering = KituraContracts.Ordering
    + +
    +
    +
    +
    +
  • @@ -205,7 +475,7 @@

    Declaration

  • diff --git a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/index.html b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/index.html index dec2331..0bff6fd 100644 --- a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/index.html @@ -88,12 +88,39 @@
  • + + + + + + + + +
  • @@ -110,13 +137,13 @@

    - - Docs + + APIDoc Build Status - Master - Mac OS X + macOS Linux Apache 2 @@ -124,14 +151,13 @@

    Swift-Kuery-ORM

    -

    Summary

    Swift-Kuery-ORM is an ORM (Object Relational Mapping) library built for Swift. Using it allows you to simplify persistence of model objects with your server.

    Swift-Kuery-ORM is built on top of Swift-Kuery, which means that its possible to use Swift-Kuery to customize SQL queries made to the database, if the functionality of the ORM is insufficient.

    The Model Protocol

    -

    The key component of Swift-Kuery-ORM is the protocol Model.

    +

    The key component of Swift-Kuery-ORM is the protocol Model.

    Let’s propose a struct to use as an example. We can declare an object that looks like so:

    struct Grade: Codable {
    @@ -157,15 +183,15 @@ 

    The Model Protocol

    The Model protocol is the key to using the ORM. Let’s walk through how to fully set up an application to make use of the ORM.

    Example

    -

    You’ll want to go here to create a server from the CLI to get started. You’ll be using the PostgreSQL plugin of Swift Kuery, so you will want to make sure that you have PostgreSQL running on your local machine, which you can install with brew install postgresql. The default port for PostgreSQL is 5432.

    +

    Follow Getting Started to create a Kitura server. In this example you’ll be using the Swift Kuery PostgreSQL plugin, so you will need PostgreSQL running on your local machine, which you can install with brew install postgresql. The default port for PostgreSQL is 5432.

    Update your Package.swift file

    -

    Add Swift-Kuery-ORM and Swift-Kuery-PostgreSQL to your Package.swift:

    +

    Add Swift-Kuery-ORM and Swift-Kuery-PostgreSQL to your application’s Package.swift. Substitute "x.x.x" with the latest Swift-Kuery-ORM release and the latest Swift-Kuery-PostgreSQL release.

    dependencies: [
         ...
         // Add these two lines
    -    .package(url: "https://github.com/IBM-Swift/Swift-Kuery-ORM.git", from: "0.0.1"),
    -    .package(url: "https://github.com/IBM-Swift/Swift-Kuery-PostgreSQL.git", from: "1.0.0"),
    +    .package(url: "https://github.com/IBM-Swift/Swift-Kuery-ORM.git", from: "x.x.x"),
    +    .package(url: "https://github.com/IBM-Swift/Swift-Kuery-PostgreSQL.git", from: "x.x.x"),
       ],
       targets: [
         .target(
    @@ -175,14 +201,14 @@ 

    Update your Package.swif ]

    -

    Let’s assume you want to add ORM functionality to a file called Application.swift. You’ll need to make the following import statements at the top of the file:

    +

    Let’s assume you want to add ORM functionality to a file called Application.swift. You’ll need to add the following import statements at the top of the file:

    import SwiftKueryORM
     import SwiftKueryPostgreSQL
     

    Create Your Database

    As mentioned before, we recommend you use Homebrew to set up PostgreSQL on your machine. You can install PostgreSQL and set up your table like so:

    -
    brew install postgresql
    +
    brew install postgresql
     brew services start postgresql
     createdb school
     
    @@ -201,7 +227,7 @@

    Set Up Your Object

    In your Application.swift file, extend Grade to conform to Model

    -
    extension Grade : Model { 
    +
    extension Grade : Model {
         // here, you can add any server-side specific logic to your object
     }
     
    @@ -306,13 +332,19 @@

    Customization

    If you’d like to learn more about how you can customize queries, check out the Swift-Kuery repository for more information.

    -

    List of plugins:

    +

    List of plugins

    +

    API Documentation

    + +

    For more information visit our API reference.

    +

    Community

    + +

    We love to talk server-side Swift, and Kitura. Join our Slack to meet the team!

    License

    This library is licensed under Apache 2.0. Full license text is available in LICENSE.

    @@ -324,7 +356,7 @@

    License

    diff --git a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/search.json b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/search.json index 21cdea4..832748c 100644 --- a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/search.json +++ b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/Documents/search.json @@ -1 +1 @@ -{"Typealiases.html#/s:13SwiftKueryORM21ConnectionPoolOptionsa":{"name":"ConnectionPoolOptions","abstract":"

    Defines the parameters of the ConnectionPool from SwiftKuery

    "},"Typealiases.html#/s:13SwiftKueryORM12RequestErrora":{"name":"RequestError","abstract":"

    Type Alias for RequestError from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM11QueryParamsa":{"name":"QueryParams","abstract":"

    Type Alias for QueryParams from KituraContracts

    "},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9tableNameSSvZ":{"name":"tableName","abstract":"

    Defines the tableName in the Database

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP12idColumnNameSSvZ":{"name":"idColumnName","abstract":"

    Defines the id column name in the Database

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP12idColumnType0aB007SQLDataG0_pXpvZ":{"name":"idColumnType","abstract":"

    Defines the id column type in the Database

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP15createTableSyncSbAA8DatabaseCSg5using_tKFZ":{"name":"createTableSync(using:)","abstract":"

    Call to create the table in the database synchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP11createTableyAA8DatabaseCSg5using_ySbSg_15KituraContracts12RequestErrorVSgtctFZ":{"name":"createTable(using:_:)","abstract":"

    Call to create the table in the database asynchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP13dropTableSyncSbAA8DatabaseCSg5using_tKFZ":{"name":"dropTableSync(using:)","abstract":"

    Call to drop the table in the database synchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9dropTableyAA8DatabaseCSg5using_ySbSg_15KituraContracts12RequestErrorVSgtctFZ":{"name":"dropTable(using:_:)","abstract":"

    Call to drop the table in the database asynchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP4saveyAA8DatabaseCSg5using_yxSg_15KituraContracts12RequestErrorVSgtctF":{"name":"save(using:_:)","abstract":"

    Call to save a model to the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP4saveyAA8DatabaseCSg5using_yqd__Sg_xSg15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lF":{"name":"save(using:_:)","abstract":"

    Call to save a model to the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP4findyqd__2id_AA8DatabaseCSg5usingyxSg_15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lFZ":{"name":"find(id:using:_:)","abstract":"

    Call to find a model in the database with an id that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_ySayxGSg_15KituraContracts12RequestErrorVSgtctFZ":{"name":"findAll(using:_:)","abstract":"

    Call to find all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_ySayqd___xtGSg_15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lFZ":{"name":"findAll(using:_:)","abstract":"

    Call to find all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_ys10DictionaryVyqd__xGSg_15KituraContracts12RequestErrorVSgtctAM10IdentifierRd__s8HashableRd__lFZ":{"name":"findAll(using:_:)","abstract":"

    Call to find all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_qd__8matchingySayxGSg_15KituraContracts12RequestErrorVSgtctAL11QueryParamsRd__lFZ":{"name":"findAll(using:matching:_:)","abstract":"

    Call to find all the models in the database matching the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_qd__8matchingySayqd_0__xtGSg_15KituraContracts12RequestErrorVSgtctAL11QueryParamsRd__AL10IdentifierRd_0_r0_lFZ":{"name":"findAll(using:matching:_:)","abstract":"

    Call to find all the models in the database matching the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_qd__8matchingys10DictionaryVyqd_0_xGSg_15KituraContracts12RequestErrorVSgtctAN11QueryParamsRd__AN10IdentifierRd_0_s8HashableRd_0_r0_lFZ":{"name":"findAll(using:matching:_:)","abstract":"

    Call to find all the models in the database matching the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP6updateyqd__2id_AA8DatabaseCSg5usingyxSg_15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lF":{"name":"update(id:using:_:)","abstract":"

    Call to update a model in the database with an id that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP6deletey15KituraContracts10Identifier_p2id_AA8DatabaseCSg5usingyAE12RequestErrorVSgctFZ":{"name":"delete(id:using:_:)","abstract":"

    Call to delete a model in the database with an id that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9deleteAllyAA8DatabaseCSg5using_y15KituraContracts12RequestErrorVSgctFZ":{"name":"deleteAll(using:_:)","abstract":"

    Call to delete all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9deleteAllyAA8DatabaseCSg5using_qd__8matchingy15KituraContracts12RequestErrorVSgctAJ11QueryParamsRd__lFZ":{"name":"deleteAll(using:matching:_:)","abstract":"

    Call to delete all the models in the database mathcing the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP8getTable0aB00F0CyKFZ":{"name":"getTable()","abstract":"

    Call to get the table of the model

    ","parent_name":"Model"},"Protocols/Model.html":{"name":"Model","abstract":"

    Protocol Model conforming to Codable defining the available operations

    "},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME25ormDatabaseNotInitializedACvZ":{"name":"ormDatabaseNotInitialized","abstract":"

    Error when the Database has not been set

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME016ormTableCreationD0ACvZ":{"name":"ormTableCreationError","abstract":"

    Error when the createTable call fails

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME018ormCodableDecodingD0ACvZ":{"name":"ormCodableDecodingError","abstract":"

    Error when the TypeDecoder failed to extract the types from the model

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME019ormDatabaseDecodingD0ACvZ":{"name":"ormDatabaseDecodingError","abstract":"

    Error when the DatabaseDecoder could not construct a Model

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME019ormDatabaseEncodingD0ACvZ":{"name":"ormDatabaseEncodingError","abstract":"

    Error when the DatabaseEncoder could not decode a Model

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME08ormQueryD0ACvZ":{"name":"ormQueryError","abstract":"

    Error when the Query fails to be executed

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME11ormNotFoundACvZ":{"name":"ormNotFound","abstract":"

    Error when the values retrieved from the database are nil

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME25ormInvalidTableDefinitionACvZ":{"name":"ormInvalidTableDefinition","abstract":"

    Error when the table defined does not contain a specific column

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME013ormIdentifierD0ACvZ":{"name":"ormIdentifierError","abstract":"

    Error when the Identifier could not be constructed

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME011ormInternalD0ACvZ":{"name":"ormInternalError","abstract":"

    Error when an internal error occurs

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME19ormConnectionFailedACvZ":{"name":"ormConnectionFailed","abstract":"

    Error when retrieving a connection from the database fails

    ","parent_name":"RequestError"},"Extensions/RequestError.html":{"name":"RequestError","abstract":"

    Extension of the RequestError from KituraContracts

    "},"Classes/DatabaseEncoder.html#/s:13SwiftKueryORM15DatabaseEncoderC6encodes10DictionaryVySSypGxKs9EncodableRzlF":{"name":"encode(_:)","abstract":"

    Encode a Encodable type to a dictionary [String: Any]

    ","parent_name":"DatabaseEncoder"},"Classes/DatabaseDecoder.html#/s:13SwiftKueryORM15DatabaseDecoderC6decodexxm_s10DictionaryVySSypSgGtKs9DecodableRzlF":{"name":"decode(_:_:)","abstract":"

    Decode from a dictionary [String: Any] to a Decodable type

    ","parent_name":"DatabaseDecoder"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseC7defaultACSgvZ":{"name":"default","abstract":"

    Global default Database for the application

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseC9tableInfoAA05TableF0CvZ":{"name":"tableInfo","abstract":"

    Instance of TableInfo containing cached tables

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseCAC0aB010Connection_p6single_tcfc":{"name":"init(single:)","abstract":"

    Constructor for a single connection which becomes a connection pool

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseCAC0aB014ConnectionPoolCcfc":{"name":"init(_:)","abstract":"

    Default constructor for a connection pool

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseCAC0aB010Connection_pSgyc9generator_tcfc":{"name":"init(generator:)","abstract":"

    Constructor for a custom connection generator

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseC13getConnection0aB00F0_pSgyF":{"name":"getConnection()","abstract":"

    Connection getter: either new connection from pool","parent_name":"Database"},"Classes/Database.html":{"name":"Database","abstract":"

    Class defining the connection to the database.

    "},"Classes/DatabaseDecoder.html":{"name":"DatabaseDecoder","abstract":"

    Class used to construct a Model from a row in the database

    "},"Classes/DatabaseEncoder.html":{"name":"DatabaseEncoder","abstract":"

    Class used to construct a dictionary [String: Any] from a Model

    "},"Classes.html#/s:13SwiftKueryORM9TableInfoC":{"name":"TableInfo","abstract":"

    Class caching the tables for the models of the application

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Typealiases.html":{"name":"Type Aliases","abstract":"

    The following type aliases are available globally.

    "}} \ No newline at end of file +{"Typealiases.html#/s:13SwiftKueryORM21ConnectionPoolOptionsa":{"name":"ConnectionPoolOptions","abstract":"

    Defines the parameters of the ConnectionPool from SwiftKuery

    "},"Typealiases.html#/s:13SwiftKueryORM12RequestErrora":{"name":"RequestError","abstract":"

    Type Alias for RequestError from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM11SQLDataTypea":{"name":"SQLDataType","abstract":"

    Type Alias for SQLDataType from SwiftKuery

    "},"Typealiases.html#/s:13SwiftKueryORM11QueryParamsa":{"name":"QueryParams","abstract":"

    Public TypeAlias for QueryParams Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM11GreaterThana":{"name":"GreaterThan","abstract":"

    Public TypeAlias for GreaterThan Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM9LowerThana":{"name":"LowerThan","abstract":"

    Public TypeAlias for LowerThan Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM18GreaterThanOrEquala":{"name":"GreaterThanOrEqual","abstract":"

    Public TypeAlias for GreaterThanOrEqual Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM16LowerThanOrEquala":{"name":"LowerThanOrEqual","abstract":"

    Public TypeAlias for LowerThanOrEqual Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM14InclusiveRangea":{"name":"InclusiveRange","abstract":"

    Public TypeAlias for InclusiveRange Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM14ExclusiveRangea":{"name":"ExclusiveRange","abstract":"

    Public TypeAlias for ExclusiveRange Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM10Paginationa":{"name":"Pagination","abstract":"

    Public TypeAlias for Pagination Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM8Orderinga":{"name":"Ordering","abstract":"

    Public TypeAlias for Ordering Type from KituraContracts

    "},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9tableNameSSvpZ":{"name":"tableName","abstract":"

    Defines the tableName in the Database

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP12idColumnNameSSvpZ":{"name":"idColumnName","abstract":"

    Defines the id column name in the Database

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP12idColumnType0aB007SQLDataG0_pXpvpZ":{"name":"idColumnType","abstract":"

    Defines the id column type in the Database

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP15createTableSyncSbAA8DatabaseCSg5using_tKFZ":{"name":"createTableSync(using:)","abstract":"

    Call to create the table in the database synchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP11createTableyAA8DatabaseCSg5using_ySbSg_15KituraContracts12RequestErrorVSgtctFZ":{"name":"createTable(using:_:)","abstract":"

    Call to create the table in the database asynchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP13dropTableSyncSbAA8DatabaseCSg5using_tKFZ":{"name":"dropTableSync(using:)","abstract":"

    Call to drop the table in the database synchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9dropTableyAA8DatabaseCSg5using_ySbSg_15KituraContracts12RequestErrorVSgtctFZ":{"name":"dropTable(using:_:)","abstract":"

    Call to drop the table in the database asynchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP4saveyAA8DatabaseCSg5using_yxSg_15KituraContracts12RequestErrorVSgtctF":{"name":"save(using:_:)","abstract":"

    Call to save a model to the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP4saveyAA8DatabaseCSg5using_yqd__Sg_xSg15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lF":{"name":"save(using:_:)","abstract":"

    Call to save a model to the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP6updateyqd__2id_AA8DatabaseCSg5usingyxSg_15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lF":{"name":"update(id:using:_:)","abstract":"

    Call to update a model in the database with an id that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP6deletey15KituraContracts10Identifier_p2id_AA8DatabaseCSg5usingyAE12RequestErrorVSgctFZ":{"name":"delete(id:using:_:)","abstract":"

    Call to delete a model in the database with an id that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9deleteAllyAA8DatabaseCSg5using_y15KituraContracts12RequestErrorVSgctFZ":{"name":"deleteAll(using:_:)","abstract":"

    Call to delete all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9deleteAllyAA8DatabaseCSg5using_qd__Sg8matchingy15KituraContracts12RequestErrorVSgctAK11QueryParamsRd__lFZ":{"name":"deleteAll(using:matching:_:)","abstract":"

    Call to delete all the models in the database mathcing the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP8getTable0aB00F0CyKFZ":{"name":"getTable()","abstract":"

    Call to get the table of the model

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP4findyqd__2id_AA8DatabaseCSg5usingyxSg_15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lFZ":{"name":"find(id:using:_:)","abstract":"

    Call to find a model in the database with an id that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_ySayxGSg_15KituraContracts12RequestErrorVSgtctFZ":{"name":"findAll(using:_:)","abstract":"

    Call to find all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_ySayqd___xtGSg_15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lFZ":{"name":"findAll(using:_:)","abstract":"

    Call to find all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_ys10DictionaryVyqd__xGSg_15KituraContracts12RequestErrorVSgtctAM10IdentifierRd__s8HashableRd__lFZ":{"name":"findAll(using:_:)","abstract":"

    Call to find all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_qd__Sg8matchingySayxGSg_15KituraContracts12RequestErrorVSgtctAM11QueryParamsRd__lFZ":{"name":"findAll(using:matching:_:)","abstract":"

    Call to find all the models in the database matching the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_qd__Sg8matchingySayqd_0__xtGSg_15KituraContracts12RequestErrorVSgtctAM11QueryParamsRd__AM10IdentifierRd_0_r0_lFZ":{"name":"findAll(using:matching:_:)","abstract":"

    Call to find all the models in the database matching the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_qd__Sg8matchingys10DictionaryVyqd_0_xGSg_15KituraContracts12RequestErrorVSgtctAO11QueryParamsRd__AO10IdentifierRd_0_s8HashableRd_0_r0_lFZ":{"name":"findAll(using:matching:_:)","abstract":"

    Call to find all the models in the database matching the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html":{"name":"Model","abstract":"

    Protocol Model conforming to Codable defining the available operations

    "},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME25ormDatabaseNotInitializedACvpZ":{"name":"ormDatabaseNotInitialized","abstract":"

    Error when the Database has not been set

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME016ormTableCreationD0ACvpZ":{"name":"ormTableCreationError","abstract":"

    Error when the createTable call fails

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME018ormCodableDecodingD0ACvpZ":{"name":"ormCodableDecodingError","abstract":"

    Error when the TypeDecoder failed to extract the types from the model

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME019ormDatabaseDecodingD0ACvpZ":{"name":"ormDatabaseDecodingError","abstract":"

    Error when the DatabaseDecoder could not construct a Model

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME019ormDatabaseEncodingD0ACvpZ":{"name":"ormDatabaseEncodingError","abstract":"

    Error when the DatabaseEncoder could not decode a Model

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME08ormQueryD0ACvpZ":{"name":"ormQueryError","abstract":"

    Error when the Query fails to be executed

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME11ormNotFoundACvpZ":{"name":"ormNotFound","abstract":"

    Error when the values retrieved from the database are nil

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME25ormInvalidTableDefinitionACvpZ":{"name":"ormInvalidTableDefinition","abstract":"

    Error when the table defined does not contain a specific column

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME013ormIdentifierD0ACvpZ":{"name":"ormIdentifierError","abstract":"

    Error when the Identifier could not be constructed

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME011ormInternalD0ACvpZ":{"name":"ormInternalError","abstract":"

    Error when an internal error occurs

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME19ormConnectionFailedACvpZ":{"name":"ormConnectionFailed","abstract":"

    Error when retrieving a connection from the database fails

    ","parent_name":"RequestError"},"Extensions/RequestError.html":{"name":"RequestError","abstract":"

    Extension of the RequestError from KituraContracts

    "},"Classes/DatabaseEncoder.html#/s:13SwiftKueryORM15DatabaseEncoderC6encodes10DictionaryVySSypGxKs9EncodableRzlF":{"name":"encode(_:)","abstract":"

    Encode a Encodable type to a dictionary [String: Any]

    ","parent_name":"DatabaseEncoder"},"Classes/DatabaseDecoder.html#/s:13SwiftKueryORM15DatabaseDecoderC6decodexxm_s10DictionaryVySSypSgGtKs9DecodableRzlF":{"name":"decode(_:_:)","abstract":"

    Decode from a dictionary [String: Any] to a Decodable type

    ","parent_name":"DatabaseDecoder"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseC0D4Taska":{"name":"DatabaseTask","abstract":"

    Definition of a DatabaseTask completion handler which accepts an optional Connection and optional Error

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseC7defaultACSgvpZ":{"name":"default","abstract":"

    Global default Database for the application

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseC9tableInfoAA05TableF0CvpZ":{"name":"tableInfo","abstract":"

    Instance of TableInfo containing cached tables

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseCAC0aB010Connection_p6single_tcfc":{"name":"init(single:)","abstract":"

    Create a Database instance which uses a single connection to perform each operation. The connection will remain open for the lifetime of the Database.","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseCAC0aB014ConnectionPoolCcfc":{"name":"init(_:)","abstract":"

    Create a Database instance with multiple connections, managed by a connection pool, allowing operations to be performed concurrently. These connections will remain open for the lifetime of the Database.","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseCACyy0aB010Connection_pSg_AD10QueryErrorOSgtcc9generator_tcfc":{"name":"init(generator:)","abstract":"

    Create a Database instance which uses short-lived connections that are generated on demand. A new Connection is created for every operation, and will be closed once the operation completes.","parent_name":"Database"},"Classes/Database.html":{"name":"Database","abstract":"

    Class defining the connection to the database.

    "},"Classes/DatabaseDecoder.html":{"name":"DatabaseDecoder","abstract":"

    Class used to construct a Model from a row in the database

    "},"Classes/DatabaseEncoder.html":{"name":"DatabaseEncoder","abstract":"

    Class used to construct a dictionary [String: Any] from a Model

    "},"Classes.html#/s:13SwiftKueryORM9TableInfoC":{"name":"TableInfo","abstract":"

    Class caching the tables for the models of the application

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Typealiases.html":{"name":"Type Aliases","abstract":"

    The following type aliases are available globally.

    "}} \ No newline at end of file diff --git a/docs/docsets/SwiftKueryORM.docset/Contents/Resources/docSet.dsidx b/docs/docsets/SwiftKueryORM.docset/Contents/Resources/docSet.dsidx index febcd91f169cfc4754eb5f8bd5aae93a45fcde18..67a650252ca7a06c3038a85325053e428c2e595f 100644 GIT binary patch literal 28672 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 diff --git a/docs/docsets/SwiftKueryORM.tgz b/docs/docsets/SwiftKueryORM.tgz index f0a641588203d18a83484ebfe3ace7d4a0437478..beb5c95eaa00a2a556c3f655ec2377fd11a0de1b 100644 GIT binary patch delta 79769 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%0Ac00N~N=!BrsO`7$Sk9YhJ1L2x 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

    )RL;h+L;;9IA}Cp0-rBAfosRs*o@9(qX|CEct6 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 delta 76256 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 Zr~avb>Yw_j{`q71{6EF%TLu7-1^^`L!!!T@ diff --git a/docs/index.html b/docs/index.html index dec2331..0bff6fd 100644 --- a/docs/index.html +++ b/docs/index.html @@ -88,12 +88,39 @@

  • + + + + + + + + +
  • @@ -110,13 +137,13 @@

    - - Docs + + APIDoc Build Status - Master - Mac OS X + macOS Linux Apache 2 @@ -124,14 +151,13 @@

    Swift-Kuery-ORM

    -

    Summary

    Swift-Kuery-ORM is an ORM (Object Relational Mapping) library built for Swift. Using it allows you to simplify persistence of model objects with your server.

    Swift-Kuery-ORM is built on top of Swift-Kuery, which means that its possible to use Swift-Kuery to customize SQL queries made to the database, if the functionality of the ORM is insufficient.

    The Model Protocol

    -

    The key component of Swift-Kuery-ORM is the protocol Model.

    +

    The key component of Swift-Kuery-ORM is the protocol Model.

    Let’s propose a struct to use as an example. We can declare an object that looks like so:

    struct Grade: Codable {
    @@ -157,15 +183,15 @@ 

    The Model Protocol

    The Model protocol is the key to using the ORM. Let’s walk through how to fully set up an application to make use of the ORM.

    Example

    -

    You’ll want to go here to create a server from the CLI to get started. You’ll be using the PostgreSQL plugin of Swift Kuery, so you will want to make sure that you have PostgreSQL running on your local machine, which you can install with brew install postgresql. The default port for PostgreSQL is 5432.

    +

    Follow Getting Started to create a Kitura server. In this example you’ll be using the Swift Kuery PostgreSQL plugin, so you will need PostgreSQL running on your local machine, which you can install with brew install postgresql. The default port for PostgreSQL is 5432.

    Update your Package.swift file

    -

    Add Swift-Kuery-ORM and Swift-Kuery-PostgreSQL to your Package.swift:

    +

    Add Swift-Kuery-ORM and Swift-Kuery-PostgreSQL to your application’s Package.swift. Substitute "x.x.x" with the latest Swift-Kuery-ORM release and the latest Swift-Kuery-PostgreSQL release.

    dependencies: [
         ...
         // Add these two lines
    -    .package(url: "https://github.com/IBM-Swift/Swift-Kuery-ORM.git", from: "0.0.1"),
    -    .package(url: "https://github.com/IBM-Swift/Swift-Kuery-PostgreSQL.git", from: "1.0.0"),
    +    .package(url: "https://github.com/IBM-Swift/Swift-Kuery-ORM.git", from: "x.x.x"),
    +    .package(url: "https://github.com/IBM-Swift/Swift-Kuery-PostgreSQL.git", from: "x.x.x"),
       ],
       targets: [
         .target(
    @@ -175,14 +201,14 @@ 

    Update your Package.swif ]

    -

    Let’s assume you want to add ORM functionality to a file called Application.swift. You’ll need to make the following import statements at the top of the file:

    +

    Let’s assume you want to add ORM functionality to a file called Application.swift. You’ll need to add the following import statements at the top of the file:

    import SwiftKueryORM
     import SwiftKueryPostgreSQL
     

    Create Your Database

    As mentioned before, we recommend you use Homebrew to set up PostgreSQL on your machine. You can install PostgreSQL and set up your table like so:

    -
    brew install postgresql
    +
    brew install postgresql
     brew services start postgresql
     createdb school
     
    @@ -201,7 +227,7 @@

    Set Up Your Object

    In your Application.swift file, extend Grade to conform to Model

    -
    extension Grade : Model { 
    +
    extension Grade : Model {
         // here, you can add any server-side specific logic to your object
     }
     
    @@ -306,13 +332,19 @@

    Customization

    If you’d like to learn more about how you can customize queries, check out the Swift-Kuery repository for more information.

    -

    List of plugins:

    +

    List of plugins

    +

    API Documentation

    + +

    For more information visit our API reference.

    +

    Community

    + +

    We love to talk server-side Swift, and Kitura. Join our Slack to meet the team!

    License

    This library is licensed under Apache 2.0. Full license text is available in LICENSE.

    @@ -324,7 +356,7 @@

    License

    diff --git a/docs/search.json b/docs/search.json index 21cdea4..832748c 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"Typealiases.html#/s:13SwiftKueryORM21ConnectionPoolOptionsa":{"name":"ConnectionPoolOptions","abstract":"

    Defines the parameters of the ConnectionPool from SwiftKuery

    "},"Typealiases.html#/s:13SwiftKueryORM12RequestErrora":{"name":"RequestError","abstract":"

    Type Alias for RequestError from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM11QueryParamsa":{"name":"QueryParams","abstract":"

    Type Alias for QueryParams from KituraContracts

    "},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9tableNameSSvZ":{"name":"tableName","abstract":"

    Defines the tableName in the Database

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP12idColumnNameSSvZ":{"name":"idColumnName","abstract":"

    Defines the id column name in the Database

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP12idColumnType0aB007SQLDataG0_pXpvZ":{"name":"idColumnType","abstract":"

    Defines the id column type in the Database

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP15createTableSyncSbAA8DatabaseCSg5using_tKFZ":{"name":"createTableSync(using:)","abstract":"

    Call to create the table in the database synchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP11createTableyAA8DatabaseCSg5using_ySbSg_15KituraContracts12RequestErrorVSgtctFZ":{"name":"createTable(using:_:)","abstract":"

    Call to create the table in the database asynchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP13dropTableSyncSbAA8DatabaseCSg5using_tKFZ":{"name":"dropTableSync(using:)","abstract":"

    Call to drop the table in the database synchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9dropTableyAA8DatabaseCSg5using_ySbSg_15KituraContracts12RequestErrorVSgtctFZ":{"name":"dropTable(using:_:)","abstract":"

    Call to drop the table in the database asynchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP4saveyAA8DatabaseCSg5using_yxSg_15KituraContracts12RequestErrorVSgtctF":{"name":"save(using:_:)","abstract":"

    Call to save a model to the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP4saveyAA8DatabaseCSg5using_yqd__Sg_xSg15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lF":{"name":"save(using:_:)","abstract":"

    Call to save a model to the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP4findyqd__2id_AA8DatabaseCSg5usingyxSg_15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lFZ":{"name":"find(id:using:_:)","abstract":"

    Call to find a model in the database with an id that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_ySayxGSg_15KituraContracts12RequestErrorVSgtctFZ":{"name":"findAll(using:_:)","abstract":"

    Call to find all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_ySayqd___xtGSg_15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lFZ":{"name":"findAll(using:_:)","abstract":"

    Call to find all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_ys10DictionaryVyqd__xGSg_15KituraContracts12RequestErrorVSgtctAM10IdentifierRd__s8HashableRd__lFZ":{"name":"findAll(using:_:)","abstract":"

    Call to find all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_qd__8matchingySayxGSg_15KituraContracts12RequestErrorVSgtctAL11QueryParamsRd__lFZ":{"name":"findAll(using:matching:_:)","abstract":"

    Call to find all the models in the database matching the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_qd__8matchingySayqd_0__xtGSg_15KituraContracts12RequestErrorVSgtctAL11QueryParamsRd__AL10IdentifierRd_0_r0_lFZ":{"name":"findAll(using:matching:_:)","abstract":"

    Call to find all the models in the database matching the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_qd__8matchingys10DictionaryVyqd_0_xGSg_15KituraContracts12RequestErrorVSgtctAN11QueryParamsRd__AN10IdentifierRd_0_s8HashableRd_0_r0_lFZ":{"name":"findAll(using:matching:_:)","abstract":"

    Call to find all the models in the database matching the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP6updateyqd__2id_AA8DatabaseCSg5usingyxSg_15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lF":{"name":"update(id:using:_:)","abstract":"

    Call to update a model in the database with an id that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP6deletey15KituraContracts10Identifier_p2id_AA8DatabaseCSg5usingyAE12RequestErrorVSgctFZ":{"name":"delete(id:using:_:)","abstract":"

    Call to delete a model in the database with an id that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9deleteAllyAA8DatabaseCSg5using_y15KituraContracts12RequestErrorVSgctFZ":{"name":"deleteAll(using:_:)","abstract":"

    Call to delete all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9deleteAllyAA8DatabaseCSg5using_qd__8matchingy15KituraContracts12RequestErrorVSgctAJ11QueryParamsRd__lFZ":{"name":"deleteAll(using:matching:_:)","abstract":"

    Call to delete all the models in the database mathcing the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP8getTable0aB00F0CyKFZ":{"name":"getTable()","abstract":"

    Call to get the table of the model

    ","parent_name":"Model"},"Protocols/Model.html":{"name":"Model","abstract":"

    Protocol Model conforming to Codable defining the available operations

    "},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME25ormDatabaseNotInitializedACvZ":{"name":"ormDatabaseNotInitialized","abstract":"

    Error when the Database has not been set

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME016ormTableCreationD0ACvZ":{"name":"ormTableCreationError","abstract":"

    Error when the createTable call fails

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME018ormCodableDecodingD0ACvZ":{"name":"ormCodableDecodingError","abstract":"

    Error when the TypeDecoder failed to extract the types from the model

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME019ormDatabaseDecodingD0ACvZ":{"name":"ormDatabaseDecodingError","abstract":"

    Error when the DatabaseDecoder could not construct a Model

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME019ormDatabaseEncodingD0ACvZ":{"name":"ormDatabaseEncodingError","abstract":"

    Error when the DatabaseEncoder could not decode a Model

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME08ormQueryD0ACvZ":{"name":"ormQueryError","abstract":"

    Error when the Query fails to be executed

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME11ormNotFoundACvZ":{"name":"ormNotFound","abstract":"

    Error when the values retrieved from the database are nil

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME25ormInvalidTableDefinitionACvZ":{"name":"ormInvalidTableDefinition","abstract":"

    Error when the table defined does not contain a specific column

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME013ormIdentifierD0ACvZ":{"name":"ormIdentifierError","abstract":"

    Error when the Identifier could not be constructed

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME011ormInternalD0ACvZ":{"name":"ormInternalError","abstract":"

    Error when an internal error occurs

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME19ormConnectionFailedACvZ":{"name":"ormConnectionFailed","abstract":"

    Error when retrieving a connection from the database fails

    ","parent_name":"RequestError"},"Extensions/RequestError.html":{"name":"RequestError","abstract":"

    Extension of the RequestError from KituraContracts

    "},"Classes/DatabaseEncoder.html#/s:13SwiftKueryORM15DatabaseEncoderC6encodes10DictionaryVySSypGxKs9EncodableRzlF":{"name":"encode(_:)","abstract":"

    Encode a Encodable type to a dictionary [String: Any]

    ","parent_name":"DatabaseEncoder"},"Classes/DatabaseDecoder.html#/s:13SwiftKueryORM15DatabaseDecoderC6decodexxm_s10DictionaryVySSypSgGtKs9DecodableRzlF":{"name":"decode(_:_:)","abstract":"

    Decode from a dictionary [String: Any] to a Decodable type

    ","parent_name":"DatabaseDecoder"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseC7defaultACSgvZ":{"name":"default","abstract":"

    Global default Database for the application

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseC9tableInfoAA05TableF0CvZ":{"name":"tableInfo","abstract":"

    Instance of TableInfo containing cached tables

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseCAC0aB010Connection_p6single_tcfc":{"name":"init(single:)","abstract":"

    Constructor for a single connection which becomes a connection pool

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseCAC0aB014ConnectionPoolCcfc":{"name":"init(_:)","abstract":"

    Default constructor for a connection pool

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseCAC0aB010Connection_pSgyc9generator_tcfc":{"name":"init(generator:)","abstract":"

    Constructor for a custom connection generator

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseC13getConnection0aB00F0_pSgyF":{"name":"getConnection()","abstract":"

    Connection getter: either new connection from pool","parent_name":"Database"},"Classes/Database.html":{"name":"Database","abstract":"

    Class defining the connection to the database.

    "},"Classes/DatabaseDecoder.html":{"name":"DatabaseDecoder","abstract":"

    Class used to construct a Model from a row in the database

    "},"Classes/DatabaseEncoder.html":{"name":"DatabaseEncoder","abstract":"

    Class used to construct a dictionary [String: Any] from a Model

    "},"Classes.html#/s:13SwiftKueryORM9TableInfoC":{"name":"TableInfo","abstract":"

    Class caching the tables for the models of the application

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Typealiases.html":{"name":"Type Aliases","abstract":"

    The following type aliases are available globally.

    "}} \ No newline at end of file +{"Typealiases.html#/s:13SwiftKueryORM21ConnectionPoolOptionsa":{"name":"ConnectionPoolOptions","abstract":"

    Defines the parameters of the ConnectionPool from SwiftKuery

    "},"Typealiases.html#/s:13SwiftKueryORM12RequestErrora":{"name":"RequestError","abstract":"

    Type Alias for RequestError from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM11SQLDataTypea":{"name":"SQLDataType","abstract":"

    Type Alias for SQLDataType from SwiftKuery

    "},"Typealiases.html#/s:13SwiftKueryORM11QueryParamsa":{"name":"QueryParams","abstract":"

    Public TypeAlias for QueryParams Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM11GreaterThana":{"name":"GreaterThan","abstract":"

    Public TypeAlias for GreaterThan Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM9LowerThana":{"name":"LowerThan","abstract":"

    Public TypeAlias for LowerThan Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM18GreaterThanOrEquala":{"name":"GreaterThanOrEqual","abstract":"

    Public TypeAlias for GreaterThanOrEqual Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM16LowerThanOrEquala":{"name":"LowerThanOrEqual","abstract":"

    Public TypeAlias for LowerThanOrEqual Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM14InclusiveRangea":{"name":"InclusiveRange","abstract":"

    Public TypeAlias for InclusiveRange Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM14ExclusiveRangea":{"name":"ExclusiveRange","abstract":"

    Public TypeAlias for ExclusiveRange Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM10Paginationa":{"name":"Pagination","abstract":"

    Public TypeAlias for Pagination Type from KituraContracts

    "},"Typealiases.html#/s:13SwiftKueryORM8Orderinga":{"name":"Ordering","abstract":"

    Public TypeAlias for Ordering Type from KituraContracts

    "},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9tableNameSSvpZ":{"name":"tableName","abstract":"

    Defines the tableName in the Database

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP12idColumnNameSSvpZ":{"name":"idColumnName","abstract":"

    Defines the id column name in the Database

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP12idColumnType0aB007SQLDataG0_pXpvpZ":{"name":"idColumnType","abstract":"

    Defines the id column type in the Database

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP15createTableSyncSbAA8DatabaseCSg5using_tKFZ":{"name":"createTableSync(using:)","abstract":"

    Call to create the table in the database synchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP11createTableyAA8DatabaseCSg5using_ySbSg_15KituraContracts12RequestErrorVSgtctFZ":{"name":"createTable(using:_:)","abstract":"

    Call to create the table in the database asynchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP13dropTableSyncSbAA8DatabaseCSg5using_tKFZ":{"name":"dropTableSync(using:)","abstract":"

    Call to drop the table in the database synchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9dropTableyAA8DatabaseCSg5using_ySbSg_15KituraContracts12RequestErrorVSgtctFZ":{"name":"dropTable(using:_:)","abstract":"

    Call to drop the table in the database asynchronously

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP4saveyAA8DatabaseCSg5using_yxSg_15KituraContracts12RequestErrorVSgtctF":{"name":"save(using:_:)","abstract":"

    Call to save a model to the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP4saveyAA8DatabaseCSg5using_yqd__Sg_xSg15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lF":{"name":"save(using:_:)","abstract":"

    Call to save a model to the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP6updateyqd__2id_AA8DatabaseCSg5usingyxSg_15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lF":{"name":"update(id:using:_:)","abstract":"

    Call to update a model in the database with an id that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP6deletey15KituraContracts10Identifier_p2id_AA8DatabaseCSg5usingyAE12RequestErrorVSgctFZ":{"name":"delete(id:using:_:)","abstract":"

    Call to delete a model in the database with an id that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9deleteAllyAA8DatabaseCSg5using_y15KituraContracts12RequestErrorVSgctFZ":{"name":"deleteAll(using:_:)","abstract":"

    Call to delete all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP9deleteAllyAA8DatabaseCSg5using_qd__Sg8matchingy15KituraContracts12RequestErrorVSgctAK11QueryParamsRd__lFZ":{"name":"deleteAll(using:matching:_:)","abstract":"

    Call to delete all the models in the database mathcing the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP8getTable0aB00F0CyKFZ":{"name":"getTable()","abstract":"

    Call to get the table of the model

    ","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP4findyqd__2id_AA8DatabaseCSg5usingyxSg_15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lFZ":{"name":"find(id:using:_:)","abstract":"

    Call to find a model in the database with an id that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_ySayxGSg_15KituraContracts12RequestErrorVSgtctFZ":{"name":"findAll(using:_:)","abstract":"

    Call to find all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_ySayqd___xtGSg_15KituraContracts12RequestErrorVSgtctAK10IdentifierRd__lFZ":{"name":"findAll(using:_:)","abstract":"

    Call to find all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_ys10DictionaryVyqd__xGSg_15KituraContracts12RequestErrorVSgtctAM10IdentifierRd__s8HashableRd__lFZ":{"name":"findAll(using:_:)","abstract":"

    Call to find all the models in the database that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_qd__Sg8matchingySayxGSg_15KituraContracts12RequestErrorVSgtctAM11QueryParamsRd__lFZ":{"name":"findAll(using:matching:_:)","abstract":"

    Call to find all the models in the database matching the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_qd__Sg8matchingySayqd_0__xtGSg_15KituraContracts12RequestErrorVSgtctAM11QueryParamsRd__AM10IdentifierRd_0_r0_lFZ":{"name":"findAll(using:matching:_:)","abstract":"

    Call to find all the models in the database matching the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html#/s:13SwiftKueryORM5ModelP7findAllyAA8DatabaseCSg5using_qd__Sg8matchingys10DictionaryVyqd_0_xGSg_15KituraContracts12RequestErrorVSgtctAO11QueryParamsRd__AO10IdentifierRd_0_s8HashableRd_0_r0_lFZ":{"name":"findAll(using:matching:_:)","abstract":"

    Call to find all the models in the database matching the QueryParams that accepts a completion","parent_name":"Model"},"Protocols/Model.html":{"name":"Model","abstract":"

    Protocol Model conforming to Codable defining the available operations

    "},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME25ormDatabaseNotInitializedACvpZ":{"name":"ormDatabaseNotInitialized","abstract":"

    Error when the Database has not been set

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME016ormTableCreationD0ACvpZ":{"name":"ormTableCreationError","abstract":"

    Error when the createTable call fails

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME018ormCodableDecodingD0ACvpZ":{"name":"ormCodableDecodingError","abstract":"

    Error when the TypeDecoder failed to extract the types from the model

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME019ormDatabaseDecodingD0ACvpZ":{"name":"ormDatabaseDecodingError","abstract":"

    Error when the DatabaseDecoder could not construct a Model

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME019ormDatabaseEncodingD0ACvpZ":{"name":"ormDatabaseEncodingError","abstract":"

    Error when the DatabaseEncoder could not decode a Model

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME08ormQueryD0ACvpZ":{"name":"ormQueryError","abstract":"

    Error when the Query fails to be executed

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME11ormNotFoundACvpZ":{"name":"ormNotFound","abstract":"

    Error when the values retrieved from the database are nil

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME25ormInvalidTableDefinitionACvpZ":{"name":"ormInvalidTableDefinition","abstract":"

    Error when the table defined does not contain a specific column

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME013ormIdentifierD0ACvpZ":{"name":"ormIdentifierError","abstract":"

    Error when the Identifier could not be constructed

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME011ormInternalD0ACvpZ":{"name":"ormInternalError","abstract":"

    Error when an internal error occurs

    ","parent_name":"RequestError"},"Extensions/RequestError.html#/s:15KituraContracts12RequestErrorV13SwiftKueryORME19ormConnectionFailedACvpZ":{"name":"ormConnectionFailed","abstract":"

    Error when retrieving a connection from the database fails

    ","parent_name":"RequestError"},"Extensions/RequestError.html":{"name":"RequestError","abstract":"

    Extension of the RequestError from KituraContracts

    "},"Classes/DatabaseEncoder.html#/s:13SwiftKueryORM15DatabaseEncoderC6encodes10DictionaryVySSypGxKs9EncodableRzlF":{"name":"encode(_:)","abstract":"

    Encode a Encodable type to a dictionary [String: Any]

    ","parent_name":"DatabaseEncoder"},"Classes/DatabaseDecoder.html#/s:13SwiftKueryORM15DatabaseDecoderC6decodexxm_s10DictionaryVySSypSgGtKs9DecodableRzlF":{"name":"decode(_:_:)","abstract":"

    Decode from a dictionary [String: Any] to a Decodable type

    ","parent_name":"DatabaseDecoder"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseC0D4Taska":{"name":"DatabaseTask","abstract":"

    Definition of a DatabaseTask completion handler which accepts an optional Connection and optional Error

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseC7defaultACSgvpZ":{"name":"default","abstract":"

    Global default Database for the application

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseC9tableInfoAA05TableF0CvpZ":{"name":"tableInfo","abstract":"

    Instance of TableInfo containing cached tables

    ","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseCAC0aB010Connection_p6single_tcfc":{"name":"init(single:)","abstract":"

    Create a Database instance which uses a single connection to perform each operation. The connection will remain open for the lifetime of the Database.","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseCAC0aB014ConnectionPoolCcfc":{"name":"init(_:)","abstract":"

    Create a Database instance with multiple connections, managed by a connection pool, allowing operations to be performed concurrently. These connections will remain open for the lifetime of the Database.","parent_name":"Database"},"Classes/Database.html#/s:13SwiftKueryORM8DatabaseCACyy0aB010Connection_pSg_AD10QueryErrorOSgtcc9generator_tcfc":{"name":"init(generator:)","abstract":"

    Create a Database instance which uses short-lived connections that are generated on demand. A new Connection is created for every operation, and will be closed once the operation completes.","parent_name":"Database"},"Classes/Database.html":{"name":"Database","abstract":"

    Class defining the connection to the database.

    "},"Classes/DatabaseDecoder.html":{"name":"DatabaseDecoder","abstract":"

    Class used to construct a Model from a row in the database

    "},"Classes/DatabaseEncoder.html":{"name":"DatabaseEncoder","abstract":"

    Class used to construct a dictionary [String: Any] from a Model

    "},"Classes.html#/s:13SwiftKueryORM9TableInfoC":{"name":"TableInfo","abstract":"

    Class caching the tables for the models of the application

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Typealiases.html":{"name":"Type Aliases","abstract":"

    The following type aliases are available globally.

    "}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json index b6ca435..74a3ab2 100644 --- a/docs/undocumented.json +++ b/docs/undocumented.json @@ -2,14 +2,14 @@ "warnings": [ { "file": "/Users/travis/build/IBM-Swift/Swift-Kuery-ORM/Sources/SwiftKueryORM/Model.swift", - "line": 241, + "line": 223, "symbol": "Model.save(using:_:)", "symbol_kind": "source.lang.swift.decl.function.method.instance", "warning": "undocumented" }, { "file": "/Users/travis/build/IBM-Swift/Swift-Kuery-ORM/Sources/SwiftKueryORM/Model.swift", - "line": 291, + "line": 241, "symbol": "Model.save(using:_:)", "symbol_kind": "source.lang.swift.decl.function.method.instance", "warning": "undocumented"