             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"))
+        }
+    }
 }

    // > the entire table content without having to visit each row of the
    // > table individually.
    //
    // Here we test that the truncate optimization does not prevent
    // transaction observers from observing individual deletions.

    class DeletionObserver : TransactionObserver {
        private var notify: ([String: Int]) -> Void

    }
    
    func testDropTableWithPreparedStatement() throws {
        let dbQueue = try makeDatabaseQueue()
        try dbQueue.inDatabase { db in
            try db.execute("CREATE TABLE t(a)")
