 }
 
 extension Date: ColumnConvertible {
-	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) throws {
+	public init(with stmt: SQLitePreparedStatement, parameter idx: Int32) throws {
 		let s = String(cString: sqlite3_column_text(stmt, idx))
 		guard let d = iso8601DateFormatter.date(from: s) else {
 			#if DEBUG

}

extension String: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self.init(cString: sqlite3_column_text(stmt, idx))
	}
}

extension Data: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		let byteCount = Int(sqlite3_column_bytes(stmt, idx))
		self.init(bytes: sqlite3_column_blob(stmt, idx).assumingMemoryBound(to: UInt8.self), count: byteCount)
	}
}

extension Int: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self.init(sqlite3_column_int64(stmt, idx))
	}
}

extension UInt: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self.init(bitPattern: Int(sqlite3_column_int64(stmt, idx)))
	}
}

extension Int8: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self.init(sqlite3_column_int64(stmt, idx))
	}
}

extension UInt8: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self.init(sqlite3_column_int64(stmt, idx))
	}
}

extension Int16: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self.init(sqlite3_column_int64(stmt, idx))
	}
}

extension UInt16: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self.init(sqlite3_column_int64(stmt, idx))
	}
}

extension Int32: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self.init(sqlite3_column_int64(stmt, idx))
	}
}

extension UInt32: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self.init(sqlite3_column_int64(stmt, idx))
	}
}

extension Int64: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self = sqlite3_column_int64(stmt, idx)
	}
}

extension UInt64: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self.init(bitPattern: sqlite3_column_int64(stmt, idx))
	}
}

extension Float: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self.init(sqlite3_column_double(stmt, idx))
	}
}

extension Double: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self = sqlite3_column_double(stmt, idx)
	}
}

extension Bool: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) {
		self.init(sqlite3_column_int64(stmt, idx) != 0)
	}
}

extension UUID: ColumnConvertible {
	public init(withRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) throws {
		let s = String(cString: sqlite3_column_text(stmt, idx))
		guard let u = UUID(uuidString: s) else {
			#if DEBUG

		let idx = Int32(index)
		switch sqlite3_column_type(stmt, idx) {
		case SQLITE_NULL:
			throw DatabaseError.dataFormatError("Database null encountered at column \(index)")
		default:
			return try T(with: stmt, parameter: idx)
		}
	}

