修改数据和删除数据
修改数据
1、更新所有
跟新操作
let update = users.update(email <- "dream@qq.com", phone <- "88888888")
print(update.asSQL())
try! db.run(update)
更新SQL即更新所有
public struct Update : ExpressionType {
public var template: String
public var bindings: [Binding?]
public init(_ template: String, _ bindings: [Binding?]) {
self.template = template
self.bindings = bindings
}
}
扩展 QueryType
添加update
方法
public func update(_ values: Setter...) -> Update {
return update(values)
}
public func update(_ values: [Setter]) -> Update {
//SQL语句分段存储
//第一个元素:Expression<Void>(literal: "UPDATE")->对应字符串->"update"
//第二个元素:tableName()->对应表名称->"users"
//第三个元素:Expression<Void>(literal: "SET")->对应->"set"
//第四个元素:", ".join(values.map { " = ".join([$0.column, $0.value]) })->字段
//例如:email = 'dream@qq.com', phone = '88888888'
//第四个元素步骤->首先是拼接"="号,其次在拼接","号
//形成完整SQL语句:update users set email = 'dream@qq.com', phone = '88888888'
//注意:这么多的表达式,最终都会组装为一个表达式
let clauses: [Expressible?] = [
Expression<Void>(literal: "UPDATE"),
tableName(),
Expression<Void>(literal: "SET"),
", ".join(values.map {
" = ".join([$0.column, $0.value]) }),
]
//join拼接SQL语句相关
//注意:每一个关键字之间需要" "空格隔开
return Update(" ".join(clauses.compactMap {
$0 }).expression)
}
扩展Connection
添加run
方法,执行SQL语句
@discardableResult public func run(_ query: Update) throws -> Int {
//表达式
//SQL->expression
let expression = query.expression
//队列->同步代码块
return try sync {
try self.run(expression.template, expression.bindings)
//返回执行结果
return self.changes
}
}
2、条件更新(where)
更新SQL,添加条件
let filter = users.filter(name == "hello")
try! db.run(filter.update(email <- "dream@qq.com"))
扩展 QueryType
添加条件方法filter
public func filter(_ predicate: Expression<Bool>) -> Self {
return filter(Expression<Bool?>(predicate))
}
//SQL子句(排序->order by,分组->group...)
public func filter(_ predicate: