SQLite.Swift Expression() 初始化 for "not null" form?



请注意,此问题仅与流行的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)

最新更新