DatabaseCursor

A cursor that lazily iterates the results of a prepared Statement.

Statement.swift:714
protocol DatabaseCursor<Element> : Cursor
Browse conforming types

Overview

To get a DatabaseCursor instance, use one of the fetchCursor methods. For example:

  • A cursor of Row built from a prepared Statement:

    try dbQueue.read { db in
        let statement = try db.makeStatement(sql: "SELECT * FROM player")
        let rows = try Row.fetchCursor(statement)
        while let row = try rows.next() {
            let id: Int64 = row["id"]
            let name: String = row["name"]
        }
    }
  • A cursor of Int built from an SQL string (see DatabaseValueConvertible):

    try dbQueue.read { db in
        let sql = "SELECT score FROM player"
        let scores = try Int.fetchCursor(db, sql: sql)
        while let score = try scores.next() {
            print(score)
        }
    }
  • A cursor of Player records built from a request (see FetchableRecord and FetchRequest):

    try dbQueue.read { db in
        let request = Player.all()
        let players = try request.fetchCursor(db)
        while let player = try players.next() {
            print(player.name, player.score)
        }
    }

A database cursor is valid only during the current database access (read or write). Do not store or escape a cursor for later use.

A database cursor resets its underlying prepared statement with sqlite3_reset when the cursor is created, and when it is deallocated. Don’t share the same prepared statement between two cursors!