         }
     }
     
-    /// Returns an Observable that emits an optional value after each committed
-    /// database transaction that has modified the tables and columns fetched by
-    /// the request.
-    ///
-    /// All values are emitted on *scheduler*, which defaults to
-    /// `MainScheduler.instance`. If you set *startImmediately* to true (the
-    /// default value), the first element is emitted right upon subscription.
-    ///
-    /// - parameter writer: A DatabaseWriter (DatabaseQueue or DatabasePool).
-    /// - parameter startImmediately: When true (the default), the first
-    ///   element is emitted right upon subscription.
-    /// - parameter scheduler: The scheduler on which elements are emitted
-    ///   (default is MainScheduler.instance).
+    /// Returns an Observable that emits after each committed database
+    /// transaction that has modified the tables and columns fetched by
+    /// the request.
+    ///
+    ///     let dbQueue = DatabaseQueue()
+    ///     let request = SQLRequest<String>("SELECT name FROM player ORDER BY score DESC")
+    ///     request.rx
+    ///         .fetchOne(in: dbQueue)
+    ///         .subscribe(onNext: { bestPlayerName: String? in
+    ///             print("Best player has changed")
+    ///         })
+    ///
+    /// By default, all values are emitted on the main dispatch queue. If you
+    /// give a *scheduler*, values are emitted on that scheduler.
+    ///
+    /// If you set *startImmediately* to true (the default value), the first
+    /// element is emitted right upon subscription. It is *synchronously*
+    /// emitted if and only if the observable is subscribed on the main queue,
+    /// and is given a nil *scheduler* argument:
+    ///
+    ///     // on the main queue
+    ///     request.rx
+    ///         .fetchOne(in: dbQueue)
+    ///         .subscribe(onNext: { bestPlayerName: String? in
+    ///             // on the main queue
+    ///             print("Best player has changed")
+    ///         })
+    ///     // <- here "Best player has changed" has been printed
+    ///
+    ///     // on any queue
+    ///     request.rx
+    ///         .fetchOne(in: dbQueue, scheduler: MainScheduler.instance)
+    ///         .subscribe(onNext: { bestPlayerName: String? in
+    ///             // on the main queue
+    ///             print("Best player has changed")
+    ///         })
+    ///     // <- here "Best player has changed" may not be printed yet
+    ///
+    /// - parameter writer: A DatabaseWriter (DatabaseQueue or DatabasePool).
+    /// - parameter startImmediately: When true (the default), the first
+    ///   element is emitted right upon subscription.
+    /// - parameter scheduler: The eventual scheduler on which elements
+    ///   are emitted.
     public func fetchOne(
         in writer: DatabaseWriter,
         startImmediately: Bool = true,

// MARK: - DatabaseValueConvertible & StatementColumnConvertible

extension Reactive where Base: FetchRequest & DatabaseRegionConvertible, Base.RowDecoder: DatabaseValueConvertible & StatementColumnConvertible {
    /// Returns an Observable that emits an array of values after each
    /// committed database transaction that has modified the tables and columns
    /// fetched by the request.
    ///
    /// All arrays are emitted on *scheduler*, which defaults to
    /// `MainScheduler.instance`. If you set *startImmediately* to true (the
    /// default value), the first element is emitted right upon subscription.
    ///
    /// - parameter writer: A DatabaseWriter (DatabaseQueue or DatabasePool).
    /// - parameter startImmediately: When true (the default), the first
    ///   element is emitted right upon subscription.
    /// - parameter scheduler: The scheduler on which elements are emitted
    ///   (default is MainScheduler.instance).
    public func fetchAll(
        in writer: DatabaseWriter,
        startImmediately: Bool = true,

        }
    }
    
    /// Returns an Observable that emits after each committed database
    /// transaction that has modified the tables and columns fetched by
    /// the request.
    ///
    ///     let dbQueue = DatabaseQueue()
    ///     let request = SQLRequest<String>("SELECT name FROM player ORDER BY score DESC")
    ///     request.rx
    ///         .fetchOne(in: dbQueue)
    ///         .subscribe(onNext: { bestPlayerName: String? in
    ///             print("Best player has changed")
    ///         })
    ///
    /// By default, all values are emitted on the main dispatch queue. If you
    /// give a *scheduler*, values are emitted on that scheduler.
    ///
    /// If you set *startImmediately* to true (the default value), the first
    /// element is emitted right upon subscription. It is *synchronously*
    /// emitted if and only if the observable is subscribed on the main queue,
    /// and is given a nil *scheduler* argument:
    ///
    ///     // on the main queue
    ///     request.rx
    ///         .fetchOne(in: dbQueue)
    ///         .subscribe(onNext: { bestPlayerName: String? in
    ///             // on the main queue
    ///             print("Best player has changed")
    ///         })
    ///     // <- here "Best player has changed" has been printed
    ///
    ///     // on any queue
    ///     request.rx
    ///         .fetchOne(in: dbQueue, scheduler: MainScheduler.instance)
    ///         .subscribe(onNext: { bestPlayerName: String? in
    ///             // on the main queue
    ///             print("Best player has changed")
    ///         })
    ///     // <- here "Best player has changed" may not be printed yet
    ///
    /// - parameter writer: A DatabaseWriter (DatabaseQueue or DatabasePool).
    /// - parameter startImmediately: When true (the default), the first
    ///   element is emitted right upon subscription.
    /// - parameter scheduler: The eventual scheduler on which elements
    ///   are emitted.
    public func fetchOne(
        in writer: DatabaseWriter,
        startImmediately: Bool = true,
