     let sqliteStatement: SQLiteStatement
     let lowercaseColumnIndexes: [String: Int]
     
-    init(statementRef: Unmanaged<SelectStatement>, sqliteStatement: SQLiteStatement) {
+    init(sqliteStatement: SQLiteStatement, statementRef: Unmanaged<SelectStatement>) {
+        assert(sqliteStatement != nil)
         self.statementRef = statementRef
         self.sqliteStatement = sqliteStatement
         // Optimize row.value(named: "...")

    @warn_unused_result
    public static func fetchOne(statement: SelectStatement, arguments: StatementArguments? = nil) -> Row? {
        let sqliteStatement = statement.sqliteStatement
        let statementRef = Unmanaged.passUnretained(statement)
        let sequence = statement.fetchSequence(arguments: arguments) {
            Row(copiedFromStatementRef: statementRef, sqliteStatement: sqliteStatement)
        }
        return sequence.generate().next()
    }

    @warn_unused_result
    public static func fetchAll(statement: SelectStatement, arguments: StatementArguments? = nil) -> [Row] {
        let sqliteStatement = statement.sqliteStatement
        let columnNames = statement.columnNames
        let sequence = statement.fetchSequence(arguments: arguments) {
            Row(copiedFromSQLiteStatement: sqliteStatement, columnNames: columnNames)
        }
        return Array(sequence)
    }
