@@ -1,8 +1,13 @@
11module main
2+import sqlexpr
3+
4+
25%lib "sqlite3"
36%link "sqlite3api.o"
47%include "sqlite3api.h"
58
9+
10+
611data DBVal = DBInt Int
712 | DBText String
813 | DBFloat Float
@@ -79,7 +84,7 @@ prepare_db (MkDBPointer pointer) cmd = do
7984 result <- liftIO (mkForeign (FFun "sqlite3_prepare_idr" [FPtr, FString] FPtr)pointer cmd)
8085 flag <- liftIO(nullPtr result)
8186 if flag
82− then fail "Error occured"
87+ then fail "Error occured while preparing"
8388 else return (MkStmtPtr result)
8489
8590exec_db_v2 : StmtPtr -> DB Int
@@ -241,7 +246,7 @@ toList_v2 : DBPointer -> DB Table
241246toList_v2 db = do
242247 nbR <- liftIO (num_row_v2 db)
243248 nmC <- liftIO (num_col_v2 db)
244− res <- forM [1..(nbR)] (\ i =>
249+ res <- forM [0..(nbR-1)] (\ i =>
245250 forM [0..(nmC-1)] (\ j =>
246251 liftIO(get_data_v2 db i j)
247252
@@ -320,29 +325,43 @@ test = do db <- liftIO (open_db "somedb.db")
320325 reset_db stmt
321326 finalize_db stmt
322327 c <- liftIO (close_db db)
323− return ()
324−
325−test2 : DB ()
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)
329− liftIO(print res)
330− c <- liftIO (close_db db)
331− return ()
328+ return ()
332329
333330test3 : DB()
334−test3 = do db <- liftIO (open_db "somedb.db")
335− stmt <- (prepare_db db "select *from tbl1 where num >10;")
331+test3 = do db <- liftIO (open_db "students.db")
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")
336333 exec_db_v2 stmt
337334 res <- toList_v2 db
338335 liftIO(print res)
339336 finalize_db stmt
340337 c <- liftIO (close_db db)
341− return ()
342−
338+ return ()
339+
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
343+-- case newxs of
344+-- ((_, Nothing):: vs) => bindMulti (MkStmtPtr pointer) vs
345+-- ((index, Just v)::vs) => bindMulti(bind pointer index v) vs
346+
347+testexpr : DB()
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)
351+ liftIO(print x)
352+ stmt <- (prepare_db db "select * from tbl1 where num =?")
353+ --let Int(theval) = getval(getlist(sql))
354+ bind_int stmt 0 2
355+ exec_db_v2 stmt
356+ res <- toList_v2 db
357+ liftIO(print res)
358+ finalize_db stmt
359+ c <- liftIO (close_db db)
360+ return ()
343361
344362main : IO ()
345−main = do x <- runDB (test3)
363+main = do --x <- runDB (test3)
364+ y <- runDB (testexpr)
346365 return ()
347366
348367