     }
     
     func testDropTable() throws {
-        // Preventing the truncate optimization requires GRDB to fiddle with
-        // sqlite3_set_authorizer. When badly done, this can prevent DROP TABLE
-        // statements from dropping tables.
-        //
-        // SQLite3 authorizers can perform during both compilation and
-        // execution of statements.
-        //
-        // Here we test that grouping compilation and execution of DROP TABLE
-        // statement does the right thing.
         let dbQueue = try makeDatabaseQueue()
         try dbQueue.inDatabase { db in
             try db.execute("CREATE TABLE t(a)")

    }
    
    func testDropTableWithPreparedStatement() throws {
        // Preventing the truncate optimization requires GRDB to fiddle with
        // sqlite3_set_authorizer. When badly done, this can prevent DROP TABLE
        // statements from dropping tables.
        //
        // SQLite3 authorizers can perform during both compilation and
        // execution of statements.
        //
        // Here we test that splitting compilation from execution of DROP TABLE
        // statement does the right thing.
        let dbQueue = try makeDatabaseQueue()
        try dbQueue.inDatabase { db in
            try db.execute("CREATE TABLE t(a)")

            try XCTAssertFalse(db.tableExists("t"))
        }
    }
    
    func testDropTemporaryTable() throws {
        let dbQueue = try makeDatabaseQueue()
        try dbQueue.inDatabase { db in
            try db.execute("CREATE TEMPORARY TABLE t(a)")
            try db.execute("INSERT INTO t VALUES (NULL)")
            try db.execute("DROP TABLE t") // compile + execute
            try XCTAssertFalse(db.tableExists("t"))
        }
    }
    
    func testDropTemporaryTableWithPreparedStatement() throws {
        let dbQueue = try makeDatabaseQueue()
        try dbQueue.inDatabase { db in
            try db.execute("CREATE TEMPORARY TABLE t(a)")
            try db.execute("INSERT INTO t VALUES (NULL)")
            let dropStatement = try db.makeUpdateStatement("DROP TABLE t") // compile...
            try dropStatement.execute() // ... then execute
            try XCTAssertFalse(db.tableExists("t"))
        }
    }
    
    func testDropVirtualTable() throws {
        let dbQueue = try makeDatabaseQueue()
        try dbQueue.inDatabase { db in
            try db.execute("CREATE VIRTUAL TABLE t USING fts3(a)")
            try db.execute("INSERT INTO t VALUES (NULL)")
            try db.execute("DROP TABLE t") // compile + execute
            try XCTAssertFalse(db.tableExists("t"))
        }
    }
    
    func testDropVirtualTableWithPreparedStatement() throws {
        let dbQueue = try makeDatabaseQueue()
        try dbQueue.inDatabase { db in
            try db.execute("CREATE VIRTUAL TABLE t USING fts3(a)")
            try db.execute("INSERT INTO t VALUES (NULL)")
            let dropStatement = try db.makeUpdateStatement("DROP TABLE t") // compile...
            try dropStatement.execute() // ... then execute
            try XCTAssertFalse(db.tableExists("t"))
        }
    }
}
