         columnInfosCache[tableName] = columnInfos
         return columnInfos
     }
-    
-    
-    // =========================================================================
-    // MARK: - Raw SQLite connetion
-    
-    /// The raw SQLite connection, suitable for the SQLite C API.
-    public let sqliteConnection: SQLiteConnection
-    
-    
-    // =========================================================================
-    // MARK: - Initialization
-    
-    /// The queue from which the database can be used. See preconditionValidQueue().
-    /// Design note: this is not very clean. A delegation pattern may be a
-    /// better fit.
-    var databaseQueueID: DatabaseQueueID = nil
-    
-    init(path: String, configuration: Configuration) throws {
-        self.configuration = configuration
-        
-        // See https://www.sqlite.org/c3ref/open.html
-        var sqliteConnection = SQLiteConnection()
-        let code = sqlite3_open_v2(path, &sqliteConnection, configuration.sqliteOpenFlags, nil)
-        self.sqliteConnection = sqliteConnection
-        if code != SQLITE_OK {
-            throw DatabaseError(code: code, message: String.fromCString(sqlite3_errmsg(sqliteConnection)))
-        }
-        
-        // Setup trace first, so that all queries, including initialization queries, are traced.
-        setupTrace()
-        
-        try setupForeignKeys()
-        setupBusyMode()
-        setupTransactionHooks()
-    }
-    
-    // Initializes an in-memory database
-    convenience init(configuration: Configuration) {
-        try! self.init(path: ":memory:", configuration: configuration)
-    }
-    
-    deinit {
-        sqlite3_close(sqliteConnection)
-    }
-    
-    
-    // =========================================================================
-    // MARK: - Misc
-    
-    func preconditionValidQueue() {
-        precondition(databaseQueueID == nil || databaseQueueID == dispatch_get_specific(DatabaseQueue.databaseQueueIDKey), "Database was not used on the correct thread: execute your statements inside DatabaseQueue.inDatabase() or DatabaseQueue.inTransaction(). If you get this error while iterating the result of a fetch() method, consider using the array returned by fetchAll() instead.")
-    }
-    
-    func setupForeignKeys() throws {
-        if configuration.foreignKeysEnabled {
-            try execute("PRAGMA foreign_keys = ON")
-        }
-    }
-    
-    func setupTrace() {
-        guard configuration.trace != nil else {
-            return
-        }
-        let dbPointer = unsafeBitCast(self, UnsafeMutablePointer<Void>.self)
-        sqlite3_trace(sqliteConnection, { (dbPointer, sql) in
-            let database = unsafeBitCast(dbPointer, Database.self)
-            database.configuration.trace!(String.fromCString(sql)!)
-            }, dbPointer)
-    }
-}
-
-
-// =============================================================================
-// MARK: - PrimaryKey
+}
 
 /// A primary key
 enum PrimaryKey {

}


// =============================================================================
// MARK: - TransactionObserverType

/// A transaction observer is notified of all changes and transactions committed
/// or rollbacked on a database.
///

}


/// The end of a transaction: Commit, or Rollback
public enum TransactionCompletion {
    case Commit
