         }
     }
 }
-

    }
}

private enum ObservationStrategy<Record: MutablePersistable> {
    case request(QueryInterfaceRequest<Record>)
    case row(selectionInfo: SelectStatement.SelectionInfo, rowIDColumn: String, rowID: Int64)
    
    init(request: QueryInterfaceRequest<Record>) {
        self = .request(request)
    }
    
    /// An optimized observation strategy based on rowID
    init?(_ db: Database, record: Record, rowIDColumn: String) throws {
        let dict = record.databaseDictionary()
        guard let rowID = dict[caseInsensitive: rowIDColumn] else {

        let condition = pkColumns.map { "\($0.quotedDatabaseIdentifier) = ?" }.joined(separator: " AND ")
        self.init(request: Record.filter(sql: condition, arguments: StatementArguments(pkValues)))
    }
}

private extension MutablePersistable {
