SQL

SQL helps you build SQL literal with SQL Interpolation.

For example:

try dbQueue.write { db in
    let name: String = ...
    let id: Int64 = ...
    let query: SQL = "UPDATE player SET name = \(name) WHERE id = \(id)"
    try db.execute(literal: query)
}
  • Creates an SQL literal from a plain SQL string, and eventual arguments.

    For example:

    let query = SQL(
        sql: "UPDATE player SET name = ? WHERE id = ?",
        arguments: [name, id])
    
  • Creates an SQL literal from an SQL expression.

    For example:

    let columnLiteral = SQL(Column("username"))
    let suffixLiteral = SQL("@example.com".databaseValue)
    let emailLiteral = [columnLiteral, suffixLiteral].joined(separator: " || ")
    let request = User.select(emailLiteral.sqlExpression)
    let emails = try String.fetchAll(db, request)
    
  • Returns true if this literal generates an empty SQL string

  • Turn a SQL literal into raw SQL and arguments.

  • Returns the SQL literal produced by the concatenation of two literals.

    let name = "O'Brien"
    let selection: SQL = "SELECT * FROM player "
    let condition: SQL = "WHERE name = \(name)"
    let query = selection + condition
    
  • Appends an SQL literal to the receiver.

    let name = "O'Brien"
    var query: SQL = "SELECT * FROM player "
    query += "WHERE name = \(name)"
    
  • Appends an SQL literal to the receiver.

    let name = "O'Brien"
    var query: SQL = "SELECT * FROM player "
    query.append(literal: "WHERE name = \(name)")
    
  • Appends a plain SQL string to the receiver, and eventual arguments.

    let name = "O'Brien"
    var query: SQL = "SELECT * FROM player "
    query.append(sql: "WHERE name = ?", arguments: [name])
    
  • Creates a literal SQL expression.

    Use this property when you need an explicit SQLExpression. For example:

    func date(_ value: some SQLExpressible) -> SQLExpression {
        SQL("DATE(\(value))").sqlExpression
    }
    
    // SELECT * FROM "player" WHERE DATE("createdAt") = '2020-01-23'
    let createdAt = Column("createdAt")
    let request = Player.filter(date(createdAt) == "2020-01-23")
    
  • Creates a literal SQL expression.

    Use this property when you need an explicit SQLSelection. For example:

    // SELECT firstName AS givenName, lastName AS familyName FROM player
    let selection = SQL("firstName AS givenName, lastName AS familyName").sqlSelection
    let request = Player.select(selection)
    
  • Creates a literal SQL ordering.

    Use this property when you need an explicit SQLOrdering. For example:

    // SELECT * FROM player ORDER BY name DESC
    let ordering = SQL("name DESC").sqlOrdering
    let request = Player.order(ordering)
    

ExpressibleByStringInterpolation