     /// Unless specified otherwise at initialization time, it is the main queue.
     public let queue: DispatchQueue
     
-    /// Updates the fetch request, and notifies the delegate of changes in the
-    /// fetched records if delegate is not nil, and performFetch() has been
-    /// called.
-    public func setRequest(_ request: Request) throws {
+    /// Updates the fetch request, and eventually notifies the tracking
+    /// callbacks if performFetch() has been called.
+    public func setRequest<Request>(_ request: Request) throws where Request: TypedRequest, Request.Fetched == Record {
         self.request = try databaseWriter.read { db in try ObservedRequest(db, request: request) }
         
         // No observer: don't look for changes

    /// - parameters:
    ///     - databaseWriter: A DatabaseWriter (DatabaseQueue, or DatabasePool)
    ///     - request: A fetch request.
    ///     - queue: Optional dispatch queue (defaults to the main queue)
    ///
    ///         The fetched records controller delegate will be notified of
    ///         record changes in this queue. The controller itself must be used
    ///         from this queue.
    ///
    ///         This dispatch queue must be serial.
    ///
    ///     - isSameRecord: Optional function that compares two records.
    ///

    /// from the [Query Interface](https://github.com/groue/GRDB.swift#the-query-interface).
    ///
    ///     let request = Wine.order(Column("name"))
    ///     let controller = FetchedRecordsController(
    ///         dbQueue,
    ///         request: request,
    ///         isSameRecord: { (wine1, wine2) in wine1.id == wine2.id })
