まず第一に、私は Haskell の初心者であり、Haskell を最初の実際の「Haskell プロジェクト」で使用するという大きな飛躍を遂げました。つまり、さまざまなデータ ソースからスキーマ情報を収集することです。
ODBC で HDBC を使用することにしましたが、この予期しない例外が発生します。再現するには:
import Database.HDBC
import Database.HDBC.ODBC
main :: IO ()
main = do
ioc <- connectODBC "Driver={MySQL};Port=3306;Database=northwind;User=root;Host=localhost"
x <- describeTable ioc "Categories"
putStrLn $ show (x !! 3)
実行すると、この例外が発生します。
$ runghc problem-hdbc.hs
problem-hdbc.hs: Convertible: error converting source data -1 of type Int32 to type Word64: Input value outside of bounds: (0,18446744073709551615)
関連するデータベースは、Microsoft のサンプル データベースNorthwindです。表の 3 列目のCategories
タイプはlongblob
です。
タイプのshow
印刷であることがわかります。私が理解していないのは、ODBC がcolSize を返すよりも例外をスローすることを好む理由です。colSize
Maybe Int
Nothing
これは私にいくつかの質問を導きます:
- これはバグですか?
- そうでない場合、これを回避するにはどうすればよいですか?
- を使用する際のベスト プラクティスは何
Convertible
ですか?