请注意,此问题仅与流行的SQLite.swift
库,stephencelis/sqlite.swift
使用sqlite.swift你可以
let a = Expression<String>("a")
let b = Expression<String>("b")
等等。但是你怎么
select a.x, a.y, ifnull(b.q, 'default text'), a.z
from a
left join b on blah
您如何为Inline SQL IFNULL子句制作表达式?
(doco提到表达具有启动(字面意义::)初始化器 - 也许是相关的 - 但它是无证件的,并且具有异常的约束性论点。(
请注意,我完全知道您可以使值可选
let q = Expression<String?>("q")
然后稍后放入默认值;
我在问如何表达" ifnull(b.q,'默认文本'("作为表达式(或者,学习是不可能的(,以便在SQL表达式中实际使用值。
再次,此问题仅与库/stephencelis/sqlite.swift
我不喜欢回答自己的问题,
说实话,这里的实际答案是:
如今,您必须像其他所有人一样使用grdb,github.com/groue/grdb.swift
老年的SQL-Wrapper库(当时像宏伟,令人难以置信,令人难以置信(只是
- 现在完全过时,技术方面的
- 不再现实地保持
截至2017年底GRDB是唯一的实际可能性。
也许这为时已晚,但是无论如何。我已经检查了源代码,有函数
public func ??<V : Value>(optional: Expression<V?>, defaultValue: V) -> Expression<V> {
return "ifnull".wrap([optional, defaultValue])
}
因此,您必须使值可选
row.get(Expression<Double?>("q")) ?? 0 //this will be equals ifnull(q, 0)