QueryInterfaceRequest

public struct QueryInterfaceRequest<T> : TypedRequest

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 persons
    var request = Person.all()
    request = request.select(Column("id"), Column("email"))
    

    Any previous selection is replaced:

    // SELECT email FROM persons
    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 persons
    var request = Person.all()
    request = request.select([Column("id"), Column("email")])
    

    Any previous selection is replaced:

    // SELECT email FROM persons
    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 persons
    var request = Person.all()
    request = request.select(sql: "id, email")
    

    Any previous selection is replaced:

    // SELECT email FROM persons
    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 persons
    var request = Person.all()
    request = request.distinct()
    
    // SELECT DISTINCT name FROM persons
    var request = Person.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 persons WHERE email = 'arthur@example.com'
    var request = Person.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 persons WHERE email = 'arthur@example.com'
    var request = Person.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 persons ORDER BY name
    var request = Person.all()
    request = request.order(Column("name"))
    

    Any previous ordering is replaced:

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

    Declaration

    Swift

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

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

    Any previous ordering is replaced:

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

    Declaration

    Swift

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

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

    Any previous ordering is replaced:

    // SELECT * FROM persons 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 persons ORDER BY name DESC
    var request = Person.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 persons LIMIT 1
    var request = Person.all()
    request = request.limit(1)
    

    Declaration

    Swift

    public func limit(_ limit: Int, offset: Int? = nil) -> QueryInterfaceRequest<T>
  • The number of rows fetched by the request.

    Declaration

    Swift

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

    Parameters

    db

    A database connection.

  • 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