1

http://hackage.haskell.org/package/sqlite-simple-0.4.9.0/docs/Database-SQLite-Simple.htmlを実行できるかどうか、queryまたはquery_戻り値の型タプルを明示的に指定せずに行を出力できるかどうかは誰でも知っています。デバッグ目的で?

または、このパッケージではない場合は、別のパッケージでしょうか?

4

2 に答える 2

1

さて、私は、上に構築されdirect-sqliteたパッケージを使用して、1レベル深く行くことによって、大雑把な方法を見つけました。sqlite-simple

import           Database.SQLite.Simple
import           Database.SQLite3.Direct (exec, execWithCallback)

let sql = "SELECT * FROM table LIMIT 3"
let cb count names vals = print vals
execWithCallback (connectionHandle conn) sql cb

私の場合、次のようなものが出力されます。

[Just "1",Just "2016-01-23 11:25:39.16759",Just "val1"]
[Just "2",Just "2016-01-23 11:25:40.266674",Just "val2"]
[Just "3",Just "2016-01-23 11:25:41.396901",Just "val3"]

他の誰かがより良い方法を知っている場合は、共有してください!

于 2016-01-31T00:10:13.797 に答える
1

私のライブラリに関連する質問を以前にスキャンしなかったことをお詫びします。

以下は、SELECT クエリから出てくる生の SQLite 値を出力する 1 つの方法です。それは超きれいでも明白でもありません。

アイデアは、すべての SQLite 行/列を文字列に変換するデバッグ型DebugShowTypeとそのインスタンスを定義することです。FromField

newtype DebugShowType = DebugShowType String deriving (Eq, Show, Typeable)

instance FromField DebugShowType where
  fromField f = cvt f . fieldData $ f where
    cvt _ v = Ok $ DebugShowType (show v)

testShowRawValues :: IO ()
testShowRawValues = do
  elems <- query_ conn "SELECT 13, 'foo'" :: IO [[DebugShowType]]
  mapM_ (\v -> putStrLn (show v ++ "\n"))  elems

これにより、次のように出力されます。

[DebugShowType "SQLInteger 13",DebugShowType "SQLText \"foo\""]

またDatabase.SQLite.Simple.setTrace、どの値が SQL クエリに代入されるかを追跡するのにも役立ちます。

于 2016-12-27T22:31:12.820 に答える