@@ -70,20 +70,31 @@ exec_db (MkDBPointer pointer) stmt = do
7070get_error : DBPointer -> IO String
7171get_error (MkDBPointer pointer) =mkForeign (FFun "sqlite3_get_error" [FPtr] FString)pointer
7272
73−prepare_db : DBPointer -> String -> IO (Either String StmtPtr)
73+
74+--prepare_db : DBPointer -> String -> IO (Either String StmtPtr)
75+--prepare_db (MkDBPointer pointer) cmd = do
76+--
77+-- result <- mkForeign (FFun "sqlite3_prepare_idr" [FPtr, FString] FPtr)pointer cmd
78+-- flag <- nullPtr result
79+-- if flag
80+-- then return (Left "Error occured")
81+-- else return (Right (MkStmtPtr result))
82+
83+
84+prepare_db : DBPointer -> String -> DB StmtPtr
7485prepare_db (MkDBPointer pointer) cmd = do
7586
76− result <- mkForeign (FFun "sqlite3_prepare_idr" [FPtr, FString] FPtr)pointer cmd
77− flag <- nullPtr result
87+ result <- liftIO (mkForeign (FFun "sqlite3_prepare_idr" [FPtr, FString] FPtr)pointer cmd)
88+ flag <- liftIO(nullPtr result)
7889 if flag
79− then return (Left "Error occured")
80− else return (Right (MkStmtPtr result))
90+ then fail "Error occured"
91+ else return (MkStmtPtr result)
8192
82−step_db : StmtPtr -> DB Int
93+step_db : StmtPtr -> DB Int
8394step_db (MkStmtPtr pointer) = do
8495 x <- liftIO (mkForeign (FFun "sqlite3_step_idr" [FPtr] FInt)pointer)
85− if ( x /= 0)
86− then fail "Step failed"
96+ if ( x == 101)
97+ then fail "SQLITE_DONE"
8798 else return x
8899
89100
@@ -214,31 +225,37 @@ toList name stmt x = do
214225 liftIO (free_table ptr)
215226 return res
216227
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
219− return (Right x)
220−
221−bind_int (Left erro) indexval val = return (Left "Could not bind int.")
222−
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
225− return (Right x)
226−
227−bind_float (Left erro) indexval val = return (Left "Could not bind float.")
228−
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
231− return (Right x)
232−
233−bind_text (Left erro) text indexval lengthval = return (Left "Could not bind text.")
234−
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
237− return (Right x)
238−
239−bind_null (Left erro) indexval = return (Left "Could not bind null.")
240−
241228
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)
232+ if (x /= 0 )
233+ then fail "Could not bind int."
234+ else return x
235+
236+
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)
240+ if (x /= 0)
241+ then fail "Could not bind float."
242+ else return x
243+
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)
247+ if (x /= 0)
248+ then fail "Could not bind text."
249+ else return x
250+
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)
254+ if (x /= 0)
255+ then fail "Could not bind null."
256+ else return x
257+
258+
242259instance Show DBVal where
243260 show (DBInt i) = "Int val: " ++ show i
244261 show (DBText i) = "Text val: " ++ i
@@ -248,18 +265,28 @@ instance Show DBVal where
248265print_data_v2 : DBVal -> String
249266print_data_v2 val = (show val)
250267
251−
252−test4 : DB ()
253−test4 = do db <- liftIO (open_db "somedb.db")
268+test : DB()
269+test = do db <- liftIO (open_db "somedb.db")
270+ stmt <- (prepare_db db "insert into tbl1 values (?,?);;")
271+ bind_int stmt 1 456
272+ bind_text stmt "testing" 2 4
273+ step_db stmt
274+ reset_db stmt
275+ finalize_db stmt
276+ c <- liftIO (close_db db)
277+ return ()
278+
279+test2 : DB ()
280+test2 = do db <- liftIO (open_db "students.db")
254281 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")
255282 res <- (toList "Student" "select *from Student;" db)
256283 mydata <- liftIO ( get_data db "Student" 1 1)
257−
258284 c <- liftIO (close_db db)
259285 return ()
260286
261287main : IO ()
262−main = do x <- runDB (test4)
288+main = do x <- runDB (test2)
289+ --y <- runDB (test)
263290 return ()
264291
265292