     
     // MARK: -
     
+    func testWriteAndReturnObservableAsCompletable() throws {
+        func setUp<Writer: DatabaseWriter>(_ writer: Writer) throws -> Writer {
+            try writer.write(Player.createTable)
+            return writer
+        }
+        
+        func test(writer: DatabaseWriter) throws {
+            let completable = writer.rx
+                .writeAndReturn(updates: { db -> Int in
+                    try Player(id: 1, name: "Arthur", score: 1000).insert(db)
+                    return try Player.fetchCount(db)
+                })
+                .asCompletable()
+            _ = try completable.toBlocking(timeout: 1).last()
+        }
+        
+        try Test(test)
+            .run { try setUp(DatabaseQueue()) }
+            .runAtTemporaryDatabasePath { try setUp(DatabaseQueue(path: $0)) }
+            .runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)) }
+    }
+    
+    // MARK: -
+    
     func testWriteAndReturnObservableError() throws {
         func test(writer: DatabaseWriter) throws {
             let single = writer.rx.writeAndReturn(updates: { db in

        
        func test(writer: DatabaseWriter) throws {
            try XCTAssertEqual(writer.read(Player.fetchCount), 0)
            let single = writer.rx.write(updates: { db in
                try Player(id: 1, name: "Arthur", score: 1000).insert(db)
            })
            _ = try single.toBlocking(timeout: 1).last()
            try XCTAssertEqual(writer.read(Player.fetchCount), 1)
        }
        

    
    func testWriteObservableError() throws {
        func test(writer: DatabaseWriter) throws {
            let completable = writer.rx.write(updates: { db in
                try db.execute(sql: "THIS IS NOT SQL")
            })
            do {
                _ = try completable.toBlocking(timeout: 1).last()
                XCTFail("Expected error")
            } catch let error as DatabaseError {
                XCTAssertEqual(error.resultCode, .SQLITE_ERROR)
