2017-04-27 69 views
1

請注意,這個問題僅涉及流行SQLite.swift庫,stephencelis/SQLite.swift「not null」形式的SQLite.Swift Expression()初始化?

隨着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提到,表達了一個init(字面:)初始化 - 也許這是有關 - 但它是無證,具有不同尋常的結合參數)

請注意,我完全知道,你可以做的。值可選

let q = Expression<String?>("q") 

然後只是在默認後放入;

我在問如何表達「ifnull(b.q,'默認文本')」作爲表達式(或者,學習它是不可能的),以便在SQL表達式中實際使用值。

再次,這個問題僅涉及/stephencelis/SQLite.swift

+0

那麼,在[SQLite.swift文檔](https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md#sqliteswift-documentation)中簡單搜索「ifnull」一些東西。 –

+0

嘿@GwendalRoué - 謝謝,但的確,doco頁面上的那一行根本沒有解釋如何或者是否可以使用複雜的行內選擇表達式。 (例如,**選擇ifnull(b.q,'默認文本'),等等,等等......)不幸的是我找不到任何地方 - 也許它只是沒有處理。 – Fattie

+0

所以我想你必須使用原始SQL。在另一個項目中,您可能會嘗試使用GRDB.swift,作爲SQLite.swift的替代品。 GRDB查詢構建器也具有「漏洞」,並且不能生成所有SQL查詢。但至少當你不得不回退到原始SQL時,你不會「受到懲罰」:行消耗是相同的。 –

回答

1

我不喜歡回答我的問題庫,

但老實說,這裏的現實的答案是:

現在你有像其他人一樣使用GRDB,github.com/groue/GRDB.swift

較早的SQL包裝庫(像當時那樣壯麗,真棒,令人難以置信)只是老實說就是

  • 完全過時了,技術明智
  • 沒有老老實實保持實事求是更多

遲至2017年GRDB是唯一現實的可能性。