module Main where import Control.Monad (unless) import Database.HDBC import Database.HDBC.Sqlite3 import Data.JSON2 import Database.JSON2.HDBC dbName = "test.db" tableName = "test" mkSqlTable = unlines [ "CREATE TABLE test (", "corporation VARCHAR(40) NOT NULL,", "division INTEGER NOT NULL,", "name VARCHAR(40) NOT NULL,", "id INTEGER)" ] selectSql = "SELECT * from test" insertSql = " INSERT INTO test VALUES (?, ?, ?, ?)" dataTable :: [(String, Int, String, Maybe Int)] dataTable = [("A", 1, "Pupkin", Just 1) ,("A", 1, "Sidorov", Just 2) ,("B", 22, "Petrov", Just 3) ,("B", 22, "Ivanov", Nothing) ,("B", 22, "Golubev", Nothing) ,("B", 1, "Petrov", Nothing) ] toSql4 (x1, x2, x3, x4) = [toSql x1, toSql x2, toSql x3, toSql x4] sqlTable = map toSql4 dataTable main = do conn <- connectSqlite3 dbName tables <- getTables conn unless (tableName `elem` tables) $ do run conn mkSqlTable [] stmt <- prepare conn insertSql executeMany stmt sqlTable commit conn stmtSel <- prepare conn selectSql execute stmtSel [] -- Get data from db. q <- fetchAllRows stmtSel mapM print q -- Conversion SQL to Json let json = toJson (q :: [[SqlValue]]) pprint json -- Conversion JSON . let json' = groupWithNCol 2 json pprint json' disconnect conn