构建者模式-动态创建表
分析表SQL语句构建过程
分析动态构建表
需要实现两个功能:
提供绑定数据方法
提供一个类,封装整个SQL的管理:绑定、转换,包括swift到数据库及其方向的操作。
//作用:封装SQL,同时绑定数据(类型映射)
public final class Statement {
//第一步:提供构造方法->执行创建表SQL语句
fileprivate var handle: OpaquePointer? = nil
fileprivate let connection: Connection
//提供构造方法
init(_ connection: Connection, _ SQL: String) throws {
self.connection = connection
//执行创建表操作
try connection.check(sqlite3_prepare_v2(connection.handle, SQL, -1, &handle, nil))
}
//析构函数
deinit {
sqlite3_finalize(handle)
}
第二步:绑定数据 =>提供原始绑定方法
//1、原始方法->绑定数据
//Swift属性值->绑定到->数据库
//为什么搞了一个Binding?
//父类引用指向子类实例对象(多态)
fileprivate func bind(_ value: Binding?, atIndex idx: Int) {
if value == nil {
//一一对应
//绑定的是nil空值->"NULL"
sqlite3_bind_null(handle, Int32(idx))
} else if let value = value as? String {
sqlite3_bind_text(handle, Int32(idx), value, -1, SQLITE_TRANSIENT)
} else if let value = value {
fatalError("tried to bind unexpected value