@@ -1,8 +1,13 @@
2%lib "sqlite3"
5%lib "sqlite3"
3%link "sqlite3api.o"
6%link "sqlite3api.o"
4%include "sqlite3api.h"
7%include "sqlite3api.h"
6data DBVal = DBInt Int
11data DBVal = DBInt Int
7 | DBText String
12 | DBText String
8 | DBFloat Float
13 | DBFloat Float
@@ -79,7 +84,7 @@ prepare_db (MkDBPointer pointer) cmd = do
79 result <- liftIO (mkForeign (FFun "sqlite3_prepare_idr" [FPtr, FString] FPtr)pointer cmd)
84 result <- liftIO (mkForeign (FFun "sqlite3_prepare_idr" [FPtr, FString] FPtr)pointer cmd)
80 flag <- liftIO(nullPtr result)
85 flag <- liftIO(nullPtr result)
82− then fail "Error occured"
87+ then fail "Error occured while preparing"
83 else return (MkStmtPtr result)
88 else return (MkStmtPtr result)
85exec_db_v2 : StmtPtr -> DB Int
90exec_db_v2 : StmtPtr -> DB Int
@@ -241,7 +246,7 @@ toList_v2 : DBPointer -> DB Table
241toList_v2 db = do
246toList_v2 db = do
242 nbR <- liftIO (num_row_v2 db)
247 nbR <- liftIO (num_row_v2 db)
243 nmC <- liftIO (num_col_v2 db)
248 nmC <- liftIO (num_col_v2 db)
244− res <- forM [1..(nbR)] (\ i =>
249+ res <- forM [0..(nbR-1)] (\ i =>
245 forM [0..(nmC-1)] (\ j =>
250 forM [0..(nmC-1)] (\ j =>
246 liftIO(get_data_v2 db i j)
251 liftIO(get_data_v2 db i j)
@@ -320,29 +325,43 @@ test = do db <- liftIO (open_db "somedb.db")
320 reset_db stmt
325 reset_db stmt
321 finalize_db stmt
326 finalize_db stmt
322 c <- liftIO (close_db db)
327 c <- liftIO (close_db db)
323− return ()
328+ return ()
326−test2 = do db <- liftIO (open_db "students.db")
327− tbl <- (get_table db "SELECT Student.Name FROM Student, Module, Enrollment WHERE Module.Credits = 30 AND Student.School_student = Enrollment.School_Student AND Student.School = Enrollment.School AND Enrollment.Code = Module.Code")
328− res <- (toList "Student" "select *from Student;" db)
330− c <- liftIO (close_db db)
333test3 : DB()
330test3 : DB()
334−test3 = do db <- liftIO (open_db "somedb.db")
331+test3 = do db <- liftIO (open_db "students.db")
335− stmt <- (prepare_db db "select *from tbl1 where num >10;")
332+ stmt <- (prepare_db db "SELECT Student.Name FROM Student, Module, Enrollment WHERE Module.Credits = 30 AND Student.School_student = Enrollment.School_Student AND Student.School = Enrollment.School AND Enrollment.Code = Module.Code")
336 exec_db_v2 stmt
333 exec_db_v2 stmt
337 res <- toList_v2 db
334 res <- toList_v2 db
338 liftIO(print res)
335 liftIO(print res)
339 finalize_db stmt
336 finalize_db stmt
340 c <- liftIO (close_db db)
337 c <- liftIO (close_db db)
341− return ()
338+ return ()
340+--bindMulti : StmtPtr -> List (Int, (Maybe Value)) -> StmtPtr
341+--bindMulti (MkStmtPtr pointer) [] = (MkStmtPtr pointer)
342+--bindMulti (MkStmtPtr pointer) xs = let newxs = mapping 0 xs in
344+-- ((_, Nothing):: vs) => bindMulti (MkStmtPtr pointer) vs
345+-- ((index, Just v)::vs) => bindMulti(bind pointer index v) vs
348+testexpr = do db <- liftIO (open_db "somedb.db")
349+ let sql = (evalSQL [] ((SELECT ALL)(TBL "tbl1")(MkCond (Equals (VCol "data")(VInt 1)))))
350+ let x = (display sql)
352+ stmt <- (prepare_db db "select * from tbl1 where num =?")
353+ --let Int(theval) = getval(getlist(sql))
359+ c <- liftIO (close_db db)
344main : IO ()
362main : IO ()
345−main = do x <- runDB (test3)
363+main = do --x <- runDB (test3)
364+ y <- runDB (testexpr)
346 return ()
365 return ()