2013-12-21 63 views
0

假設我有以下sqlite的語句:Haskell和SQLITE3 - 轉換「SqlValue」到「整型」

res <- quickQuery' conn_1 "SELECT COUNT(*) FROM company WHERE code = ? " [toSql code] 

我想要的結果轉換到整數 再這樣做,

if numRowsReturned == 0 
then something 
else somethingElse 

我嘗試了所有可能的方式,現在我已經厭倦了它。

+0

由於FB的Haskell線程上討論,http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=SqlValue%20 - %3E%20&start = 0是起點(ConvertResult就是你要找的)。 –

+0

如果你不介意,你能告訴我是否有一種方法來計算查詢返回的元組數量:「quickQuery'conn_1」SELECT * FROM company WHERE code =?「[toSql code] – ashani123

回答

3

safeFromSql :: Convertible SqlValue a => SqlValue -> ConvertResult a是你想要的,雖然它可能不會立即看起來像它。我們假設a ~ Integer。首先我們檢查看看這個假設是否可以被seeing if there exists an instance Convertible SqlValue Integer所接受。它不在convertible包中,但它確實存在,我們可以在the instance list for SqlValue中看到它。

所以現在我們知道safeFromSql :: SqlValue -> ConvertResult Integer是可以接受的。讓我們看看我們如何使用它。

> safeFromSql (SqlInteger 10) :: ConvertResult Integer 
Right 10 

我們看到,ConvertResult只是type ConvertResult a = Either ConvertError a -i.e.任何一種類型。因此,我們需要處理故障,以正確使用ConvertResult

doWithSqlValue :: SqlValue -> IO() 
doWithSqlValue someSqlValue = 
    case safeFromSql someSqlValue of 
    Left err -> print err 
    Right val -> print val