SQLite.Swift "not null" 表单的 Expression() 初始化?
SQLite.Swift Expression() initialization 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
如何为内联 sql ifnull 子句创建表达式?
(doco 提到 Expression 有一个 init(literal:) 初始化器——也许它是相关的——但它没有记录并且有不寻常的绑定参数。)
请注意,我完全知道您可以将该值设为可选
let q = Expression<String?>("q")
然后稍后输入默认值即可;
我在问如何将 "ifnull(b.q, 'default text')" 表达为表达式(或者,学习它是不可能的),以便在 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)
请注意,此问题仅与流行的 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
如何为内联 sql ifnull 子句创建表达式?
(doco 提到 Expression 有一个 init(literal:) 初始化器——也许它是相关的——但它没有记录并且有不寻常的绑定参数。)
请注意,我完全知道您可以将该值设为可选
let q = Expression<String?>("q")
然后稍后输入默认值即可;
我在问如何将 "ifnull(b.q, 'default text')" 表达为表达式(或者,学习它是不可能的),以便在 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)