@@ -70,20 +70,31 @@ exec_db (MkDBPointer pointer) stmt = do
70get_error : DBPointer -> IO String
70get_error : DBPointer -> IO String
71get_error (MkDBPointer pointer) =mkForeign (FFun "sqlite3_get_error" [FPtr] FString)pointer
71get_error (MkDBPointer pointer) =mkForeign (FFun "sqlite3_get_error" [FPtr] FString)pointer
73−prepare_db : DBPointer -> String -> IO (Either String StmtPtr)
74+--prepare_db : DBPointer -> String -> IO (Either String StmtPtr)
75+--prepare_db (MkDBPointer pointer) cmd = do
77+-- result <- mkForeign (FFun "sqlite3_prepare_idr" [FPtr, FString] FPtr)pointer cmd
78+-- flag <- nullPtr result
80+-- then return (Left "Error occured")
81+-- else return (Right (MkStmtPtr result))
84+prepare_db : DBPointer -> String -> DB StmtPtr
74prepare_db (MkDBPointer pointer) cmd = do
85prepare_db (MkDBPointer pointer) cmd = do
76− result <- mkForeign (FFun "sqlite3_prepare_idr" [FPtr, FString] FPtr)pointer cmd
87+ result <- liftIO (mkForeign (FFun "sqlite3_prepare_idr" [FPtr, FString] FPtr)pointer cmd)
77− flag <- nullPtr result
88+ flag <- liftIO(nullPtr result)
79− then return (Left "Error occured")
90+ then fail "Error occured"
80− else return (Right (MkStmtPtr result))
91+ else return (MkStmtPtr result)
82−step_db : StmtPtr -> DB Int
93+step_db : StmtPtr -> DB Int
83step_db (MkStmtPtr pointer) = do
94step_db (MkStmtPtr pointer) = do
84 x <- liftIO (mkForeign (FFun "sqlite3_step_idr" [FPtr] FInt)pointer)
95 x <- liftIO (mkForeign (FFun "sqlite3_step_idr" [FPtr] FInt)pointer)
85− if ( x /= 0)
96+ if ( x == 101)
86− then fail "Step failed"
97+ then fail "SQLITE_DONE"
87 else return x
98 else return x
@@ -214,31 +225,37 @@ toList name stmt x = do
214 liftIO (free_table ptr)
225 liftIO (free_table ptr)
215 return res
226 return res
217−bind_int : Either String StmtPtr -> Int -> Int -> IO (Either String Int)
218−bind_int (Right (MkStmtPtr pointer)) indexval val = do x <- mkForeign (FFun "sqlite3_bind_int_idr" [FPtr, FInt, FInt] FInt)pointer indexval val
221−bind_int (Left erro) indexval val = return (Left "Could not bind int.")
223−bind_float : Either String StmtPtr -> Int -> Int -> IO (Either String Int)
224−bind_float (Right (MkStmtPtr pointer)) indexval val = do x <- mkForeign (FFun "sqlite3_bind_float_idr" [FPtr, FInt, FInt] FInt)pointer indexval val
227−bind_float (Left erro) indexval val = return (Left "Could not bind float.")
229−bind_text : Either String StmtPtr -> String -> Int -> Int -> IO (Either String Int)
230−bind_text (Right (MkStmtPtr pointer)) text indexval lengthval = do x <- mkForeign (FFun "sqlite3_bind_text_idr" [FPtr, FString, FInt, FInt] FInt)pointer text indexval lengthval
233−bind_text (Left erro) text indexval lengthval = return (Left "Could not bind text.")
235−bind_null : Either String StmtPtr -> Int -> IO (Either String Int)
236−bind_null (Right (MkStmtPtr pointer)) indexval =do x <- mkForeign (FFun "sqlite3_bind_null_idr" [FPtr, FInt] FInt)pointer indexval
239−bind_null (Left erro) indexval = return (Left "Could not bind null.")
229+bind_int : StmtPtr -> Int -> Int -> DB Int
230+bind_int (MkStmtPtr pointer) indexval val = do
231+ x <- liftIO(mkForeign (FFun "sqlite3_bind_int_idr" [FPtr, FInt, FInt] FInt)pointer indexval val)
233+ then fail "Could not bind int."
237+bind_float : StmtPtr -> Int -> Int -> DB Int
238+bind_float (MkStmtPtr pointer) indexval val = do
239+ x <- liftIO(mkForeign (FFun "sqlite3_bind_float_idr" [FPtr, FInt, FInt] FInt)pointer indexval val)
241+ then fail "Could not bind float."
244+bind_text : StmtPtr -> String -> Int -> Int -> DB Int
245+bind_text (MkStmtPtr pointer) text indexval lengthval = do
246+ x <- liftIO(mkForeign (FFun "sqlite3_bind_text_idr" [FPtr, FString, FInt, FInt] FInt)pointer text indexval lengthval)
248+ then fail "Could not bind text."
251+bind_null : StmtPtr -> Int -> DB Int
252+bind_null (MkStmtPtr pointer) indexval =do
253+ x <- liftIO(mkForeign (FFun "sqlite3_bind_null_idr" [FPtr, FInt] FInt)pointer indexval)
255+ then fail "Could not bind null."
242instance Show DBVal where
259instance Show DBVal where
243 show (DBInt i) = "Int val: " ++ show i
260 show (DBInt i) = "Int val: " ++ show i
244 show (DBText i) = "Text val: " ++ i
261 show (DBText i) = "Text val: " ++ i
@@ -248,18 +265,28 @@ instance Show DBVal where
248print_data_v2 : DBVal -> String
265print_data_v2 : DBVal -> String
249print_data_v2 val = (show val)
266print_data_v2 val = (show val)
253−test4 = do db <- liftIO (open_db "somedb.db")
269+test = do db <- liftIO (open_db "somedb.db")
270+ stmt <- (prepare_db db "insert into tbl1 values (?,?);;")
272+ bind_text stmt "testing" 2 4
276+ c <- liftIO (close_db db)
280+test2 = do db <- liftIO (open_db "students.db")
254 tbl <- liftIO (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")
281 tbl <- liftIO (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")
255 res <- (toList "Student" "select *from Student;" db)
282 res <- (toList "Student" "select *from Student;" db)
256 mydata <- liftIO ( get_data db "Student" 1 1)
283 mydata <- liftIO ( get_data db "Student" 1 1)
258 c <- liftIO (close_db db)
284 c <- liftIO (close_db db)
259 return ()
285 return ()
261main : IO ()
287main : IO ()
262−main = do x <- runDB (test4)
288+main = do x <- runDB (test2)
263 return ()
290 return ()