QueryInterfaceRequest

public struct QueryInterfaceRequest<T>

A QueryInterfaceRequest describes an SQL query.

See https://github.com/groue/GRDB.swift#the-query-interface

  • Returns a new QueryInterfaceRequest with a matching predicate added to the eventual set of already applied predicates.

    // SELECT * FROM books WHERE books MATCH '...'
    var request = Book.all()
    request = request.matching(pattern)
    

    If the search pattern is nil, the request does not match any database row.

    Declaration

    Swift

    public func matching(_ pattern: FTS3Pattern?) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest with a new net of selected columns.

    // SELECT id, email FROM players
    var request = Player.all()
    request = request.select(Column("id"), Column("email"))
    

    Any previous selection is replaced:

    // SELECT email FROM players
    request
        .select(Column("id"))
        .select(Column("email"))
    

    Declaration

    Swift

    public func select(_ selection: SQLSelectable...) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest with a new net of selected columns.

    // SELECT id, email FROM players
    var request = Player.all()
    request = request.select([Column("id"), Column("email")])
    

    Any previous selection is replaced:

    // SELECT email FROM players
    request
        .select([Column("id")])
        .select([Column("email")])
    

    Declaration

    Swift

    public func select(_ selection: [SQLSelectable]) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest with a new net of selected columns.

    // SELECT id, email FROM players
    var request = Player.all()
    request = request.select(sql: "id, email")
    

    Any previous selection is replaced:

    // SELECT email FROM players
    request
        .select(sql: "id")
        .select(sql: "email")
    

    Declaration

    Swift

    public func select(sql: String, arguments: StatementArguments? = nil) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest which returns distinct rows.

    // SELECT DISTINCT * FROM players
    var request = Player.all()
    request = request.distinct()
    
    // SELECT DISTINCT name FROM players
    var request = Player.select(Column("name"))
    request = request.distinct()
    

    Declaration

    Swift

    public func distinct() -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest with the provided predicate added to the eventual set of already applied predicates.

    // SELECT * FROM players WHERE email = 'arthur@example.com'
    var request = Player.all()
    request = request.filter(Column("email") == "arthur@example.com")
    

    Declaration

    Swift

    public func filter(_ predicate: SQLExpressible) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest with the provided predicate added to the eventual set of already applied predicates.

    // SELECT * FROM players WHERE email = 'arthur@example.com'
    var request = Player.all()
    request = request.filter(sql: "email = ?", arguments: ["arthur@example.com"])
    

    Declaration

    Swift

    public func filter(sql: String, arguments: StatementArguments? = nil) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest grouped according to expressions.

    Declaration

    Swift

    public func group(_ expressions: SQLExpressible...) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest grouped according to expressions.

    Declaration

    Swift

    public func group(_ expressions: [SQLExpressible]) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest with a new grouping.

    Declaration

    Swift

    public func group(sql: String, arguments: StatementArguments? = nil) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest with the provided predicate added to the eventual set of already applied predicates.

    Declaration

    Swift

    public func having(_ predicate: SQLExpressible) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest with the provided sql added to the eventual set of already applied predicates.

    Declaration

    Swift

    public func having(sql: String, arguments: StatementArguments? = nil) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest with the provided orderings.

    // SELECT * FROM players ORDER BY name
    var request = Player.all()
    request = request.order(Column("name"))
    

    Any previous ordering is replaced:

    // SELECT * FROM players ORDER BY name
    request
        .order(Column("email"))
        .reversed()
        .order(Column("name"))
    

    Declaration

    Swift

    public func order(_ orderings: SQLOrderingTerm...) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest with the provided orderings.

    // SELECT * FROM players ORDER BY name
    var request = Player.all()
    request = request.order([Column("name")])
    

    Any previous ordering is replaced:

    // SELECT * FROM players ORDER BY name
    request
        .order([Column("email")])
        .reversed()
        .order([Column("name")])
    

    Declaration

    Swift

    public func order(_ orderings: [SQLOrderingTerm]) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest with the provided sql used for sorting.

    // SELECT * FROM players ORDER BY name
    var request = Player.all()
    request = request.order(sql: "name")
    

    Any previous ordering is replaced:

    // SELECT * FROM players ORDER BY name
    request
        .order(sql: "email")
        .order(sql: "name")
    

    Declaration

    Swift

    public func order(sql: String, arguments: StatementArguments? = nil) -> QueryInterfaceRequest<T>
  • A new QueryInterfaceRequest sorted in reversed order.

    // SELECT * FROM players ORDER BY name DESC
    var request = Player.all().order(Column("name"))
    request = request.reversed()
    

    Declaration

    Swift

    public func reversed() -> QueryInterfaceRequest<T>
  • A QueryInterfaceRequest which fetches limit rows, starting at offset.

    // SELECT * FROM players LIMIT 1
    var request = Player.all()
    request = request.limit(1)
    

    Declaration

    Swift

    public func limit(_ limit: Int, offset: Int? = nil) -> QueryInterfaceRequest<T>
  • Creates a QueryInterfaceRequest with the provided primary key predicate.

    // SELECT * FROM players WHERE id = 1
    var request = Player.all()
    request = request.filter(key: 1)
    

    The selection defaults to all columns. This default can be changed for all requests by the TableMapping.databaseSelection property, or for individual requests with the TableMapping.select method.

    Declaration

    Swift

    public func filter<PrimaryKeyType: DatabaseValueConvertible>(key: PrimaryKeyType?) -> QueryInterfaceRequest<T>
  • Creates a QueryInterfaceRequest with the provided primary key predicate.

    // SELECT * FROM players WHERE id IN (1, 2, 3)
    var request = Player.all()
    request = request.filter(keys: [1, 2, 3])
    

    The selection defaults to all columns. This default can be changed for all requests by the TableMapping.databaseSelection property, or for individual requests with the TableMapping.select method.

    Declaration

    Swift

    public func filter<Sequence: Swift.Sequence>(keys: Sequence) -> QueryInterfaceRequest<T> where Sequence.Element: DatabaseValueConvertible
  • Creates a QueryInterfaceRequest with the provided primary key predicate.

    // SELECT * FROM passports WHERE personId = 1 AND countryCode = 'FR'
    var request = Player.all()
    request = request.filter(key: ["personId": 1, "countryCode": "FR"])
    

    When executed, this request raises a fatal error if there is no unique index on the key columns.

    The selection defaults to all columns. This default can be changed for all requests by the TableMapping.databaseSelection property, or for individual requests with the TableMapping.select method.

    Declaration

    Swift

    public func filter(key: [String: DatabaseValueConvertible?]?) -> QueryInterfaceRequest<T>
  • Creates a QueryInterfaceRequest with the provided primary key predicate.

    // SELECT * FROM passports WHERE (personId = 1 AND countryCode = 'FR') OR ...
    let request = Passport.filter(keys: [["personId": 1, "countryCode": "FR"], ...])
    

    When executed, this request raises a fatal error if there is no unique index on the key columns.

    The selection defaults to all columns. This default can be changed for all requests by the TableMapping.databaseSelection property, or for individual requests with the TableMapping.select method.

    Declaration

    Swift

    public func filter(keys: [[String: DatabaseValueConvertible?]]) -> QueryInterfaceRequest<T>
  • Deletes matching rows; returns the number of deleted rows.

    Throws

    A DatabaseError is thrown whenever an SQLite error occurs.

    Declaration

    Swift

    public func deleteAll(_ db: Database) throws -> Int

    Parameters

    db

    A database connection.

    Return Value

    The number of deleted rows