@@ -1,8 +1,9 @@
1module Sqlite3
1module Sqlite3
2−import Sqlexpr
2+import public Sqlexpr
5%lib C "sqlite3"
4%lib C "sqlite3"
6+-- %include C "sqlite3.h"
6%link C "sqlite3api.o"
7%link C "sqlite3api.o"
7%include C "sqlite3api.h"
8%include C "sqlite3api.h"
@@ -59,7 +60,7 @@ instance Monad DB where
59 Left err => return (Left err)
60 Left err => return (Left err)
60 Right v => case k v of
61 Right v => case k v of
61 MkDB k' => k')
62 MkDB k' => k')
62− return x = MkDB (return (Right x))
63+ --return x = MkDB (return (Right x))
64fail : String -> DB a
65fail : String -> DB a
65fail err = MkDB (return (Left err))
66fail err = MkDB (return (Left err))
@@ -83,7 +84,7 @@ runDB (MkDB f) = do f' <- f
83-----------------------------------------------------------------------------
84-----------------------------------------------------------------------------
85open_db : String -> DB DBPointer
86open_db : String -> DB DBPointer
86−open_db name = do x <- liftIO (mkForeign (FFun "sqlite3_open_idr" [FString] FPtr) name)
87+open_db name = do x <- liftIO (foreign FFI_C "sqlite3_open_idr" (String -> IO Ptr) name)
87 return (MkDBPointer x)
88 return (MkDBPointer x)
89-----------------------------------------------------------------------------
90-----------------------------------------------------------------------------
@@ -91,7 +92,7 @@ open_db name = do x <- liftIO (mkForeign (FFun "sqlite3_open_idr" [FString] FPtr
91-----------------------------------------------------------------------------
92-----------------------------------------------------------------------------
93close_db : DBPointer -> DB Int
94close_db : DBPointer -> DB Int
94−close_db (MkDBPointer pointer) = liftIO (mkForeign (FFun "sqlite3_close_idr" [FPtr] FInt) pointer)
95+close_db (MkDBPointer pointer) = liftIO (foreign FFI_C "sqlite3_close_idr" (Ptr -> IO Int) pointer)
96-----------------------------------------------------------------------------
97-----------------------------------------------------------------------------
97-- | Wrapper around prepare, step and finalize.
98-- | Wrapper around prepare, step and finalize.
@@ -99,7 +100,7 @@ close_db (MkDBPointer pointer) = liftIO (mkForeign (FFun "sqlite3_close_idr" [FP
100exec_db : DBPointer -> String -> DB Int
101exec_db : DBPointer -> String -> DB Int
101exec_db (MkDBPointer pointer) stmt = do
102exec_db (MkDBPointer pointer) stmt = do
102− x <- liftIO (mkForeign (FFun "sqlite3_exec_idr" [FPtr, FString] FInt) pointer stmt)
103+ x <- liftIO (foreign FFI_C "sqlite3_exec_idr" (Ptr -> String -> IO Int) pointer stmt)
103 if (x == 1)
104 if (x == 1)
104 then fail "Could not execute."
105 then fail "Could not execute."
105 else return x
106 else return x
@@ -110,7 +111,7 @@ exec_db (MkDBPointer pointer) stmt = do
111exec_db_v2 : StmtPtr -> DB Int
112exec_db_v2 : StmtPtr -> DB Int
112exec_db_v2 (MkStmtPtr pointer) = do
113exec_db_v2 (MkStmtPtr pointer) = do
113− x <- liftIO (mkForeign (FFun "exec_db" [FPtr] FInt) pointer)
114+ x <- liftIO (foreign FFI_C "exec_db" (Ptr -> IO Int) pointer)
114 if (x == 21)
115 if (x == 21)
115 then fail "No data returned."
116 then fail "No data returned."
116 else return x
117 else return x
@@ -122,8 +123,7 @@ exec_db_v2 (MkStmtPtr pointer) = do
122-----------------------------------------------------------------------------
123-----------------------------------------------------------------------------
124get_error : DBPointer -> IO String
125get_error : DBPointer -> IO String
125−get_error (MkDBPointer pointer) = mkForeign (FFun "sqlite3_get_error" [FPtr] FString) pointer
126+get_error (MkDBPointer pointer) = foreign FFI_C "sqlite3_get_error" (Ptr -> IO String) pointer
128-----------------------------------------------------------------------------
128-----------------------------------------------------------------------------
129-- | Compiles the query inot a byte-code program in order to execute it.
129-- | Compiles the query inot a byte-code program in order to execute it.
@@ -133,7 +133,7 @@ get_error (MkDBPointer pointer) = mkForeign (FFun "sqlite3_get_error" [FPtr] FSt
134prepare_db : DBPointer -> String -> DB StmtPtr
134prepare_db : DBPointer -> String -> DB StmtPtr
135prepare_db (MkDBPointer pointer) cmd = do
135prepare_db (MkDBPointer pointer) cmd = do
136− result <- liftIO (mkForeign (FFun "sqlite3_prepare_idr" [FPtr, FString] FPtr) pointer cmd)
136+ result <- liftIO (foreign FFI_C "sqlite3_prepare_idr" (Ptr -> String -> IO Ptr) pointer cmd)
137 flag <- liftIO (nullPtr result)
137 flag <- liftIO (nullPtr result)
139 then fail "Error occured while preparing"
139 then fail "Error occured while preparing"
@@ -147,8 +147,8 @@ prepare_db (MkDBPointer pointer) cmd = do
148step_db : StmtPtr -> DB Int
148step_db : StmtPtr -> DB Int
149step_db (MkStmtPtr pointer)= do
149step_db (MkStmtPtr pointer)= do
150− x <- liftIO (mkForeign (FFun "sqlite3_step_idr" [FPtr] FInt)pointer)
150+ x <- liftIO (foreign FFI_C "sqlite3_step_idr" (Ptr -> IO Int) pointer)
151− if ( x == 101)
151+ if (x == 101)
152 then fail "SQLITE_DONE"
152 then fail "SQLITE_DONE"
153 else return x
153 else return x
@@ -159,7 +159,7 @@ step_db (MkStmtPtr pointer)= do
160finalize_db : StmtPtr -> DB Int
160finalize_db : StmtPtr -> DB Int
161finalize_db (MkStmtPtr pointer) = do
161finalize_db (MkStmtPtr pointer) = do
162− x <- liftIO (mkForeign (FFun "sqlite3_finalize_idr" [FPtr] FInt) pointer)
162+ x <- liftIO (foreign FFI_C "sqlite3_finalize_idr" (Ptr -> IO Int) pointer)
163 if (x /= 0)
163 if (x /= 0)
164 then fail "Could not finalize"
164 then fail "Could not finalize"
165 else return x
165 else return x
@@ -170,7 +170,7 @@ finalize_db (MkStmtPtr pointer) = do
171reset_db : StmtPtr -> DB Int
171reset_db : StmtPtr -> DB Int
172reset_db (MkStmtPtr pointer) = do
172reset_db (MkStmtPtr pointer) = do
173− x <- liftIO (mkForeign (FFun "sqlite3_reset_idr" [FPtr] FInt) pointer)
173+ x <- liftIO (foreign FFI_C "sqlite3_reset_idr" (Ptr -> IO Int) pointer)
174 if (x /= 0)
174 if (x /= 0)
175 then fail "Could not reset"
175 then fail "Could not reset"
176 else return x
176 else return x
@@ -181,38 +181,34 @@ reset_db (MkStmtPtr pointer) = do
182column_count : DBPointer -> IO (Either String Int)
182column_count : DBPointer -> IO (Either String Int)
183column_count (MkDBPointer pointer) = do
183column_count (MkDBPointer pointer) = do
184− x <- mkForeign (FFun "sqlite3_column_count_idr" [FPtr] FInt) pointer
184+ x <- foreign FFI_C "sqlite3_column_count_idr" (Ptr -> IO Int) pointer
185− return $ if (x == 0 )
185+ return $ if (x == 0)
186 then Left "No Data"
186 then Left "No Data"
187 else (Right x)
187 else (Right x)
189column_name : DBPointer -> Int -> IO String
189column_name : DBPointer -> Int -> IO String
190column_name (MkDBPointer pointer) iCol =
190column_name (MkDBPointer pointer) iCol =
191− mkForeign (FFun "sqlite3_column_name_idr" [FPtr, FInt] FString) pointer iCol
191+ foreign FFI_C "sqlite3_column_name_idr" (Ptr -> Int -> IO String) pointer iCol
193column_decltype : DBPointer -> Int -> IO String
193column_decltype : DBPointer -> Int -> IO String
194column_decltype (MkDBPointer pointer) iCol =
194column_decltype (MkDBPointer pointer) iCol =
195− mkForeign (FFun "sqlite3_column_decltype_idr" [FPtr, FInt] FString) pointer iCol
195+ foreign FFI_C "sqlite3_column_decltype_idr" (Ptr -> Int -> IO String) pointer iCol
198column_bytes : DBPointer -> Int -> IO Int
197column_bytes : DBPointer -> Int -> IO Int
199column_bytes (MkDBPointer pointer) iCol =
198column_bytes (MkDBPointer pointer) iCol =
200− mkForeign (FFun "sqlite3_column_bytes_idr" [FPtr, FInt] FInt) pointer iCol
199+ foreign FFI_C "sqlite3_column_bytes_idr" (Ptr -> Int -> IO Int) pointer iCol
203column_blob : DBPointer -> Int -> IO String
201column_blob : DBPointer -> Int -> IO String
204column_blob (MkDBPointer pointer) iCol =
202column_blob (MkDBPointer pointer) iCol =
205− mkForeign (FFun "sqlite3_column_bytes_idr" [FPtr, FInt] FString) pointer iCol
203+ foreign FFI_C "sqlite3_column_bytes_idr" (Ptr -> Int -> IO String) pointer iCol
208column_text : DBPointer -> Int -> IO String
205column_text : DBPointer -> Int -> IO String
209column_text (MkDBPointer pointer) iCol =
206column_text (MkDBPointer pointer) iCol =
210− mkForeign (FFun "sqlite3_column_text_idr" [FPtr, FInt] FString) pointer iCol
207+ foreign FFI_C "sqlite3_column_text_idr" (Ptr -> Int -> IO String) pointer iCol
213column_Int : DBPointer -> Int -> IO Int
209column_Int : DBPointer -> Int -> IO Int
214column_Int (MkDBPointer pointer) iCol =
210column_Int (MkDBPointer pointer) iCol =
215− mkForeign (FFun "sqlite3_column_int_idr" [FPtr, FInt] FInt) pointer iCol
211+ foreign FFI_C "sqlite3_column_int_idr" (Ptr -> Int -> IO Int) pointer iCol
217-----------------------------------------------------------------------------
213-----------------------------------------------------------------------------
218-- | These routines support some of SQLite backup functions.
214-- | These routines support some of SQLite backup functions.
@@ -220,22 +216,21 @@ column_Int (MkDBPointer pointer) iCol =
221backup_init : DBPointer -> String -> DBPointer -> String -> IO DBPointer
217backup_init : DBPointer -> String -> DBPointer -> String -> IO DBPointer
222backup_init (MkDBPointer des_pointer) destName (MkDBPointer src_pointer) srcName =
218backup_init (MkDBPointer des_pointer) destName (MkDBPointer src_pointer) srcName =
223− do x <- mkForeign (FFun "sqlite3_backup_init_idr" [FPtr,FString, FPtr, FString] FPtr)
219+ do x <- foreign FFI_C "sqlite3_backup_init_idr" (Ptr -> String -> Ptr -> String -> IO Ptr)
224 des_pointer destName src_pointer srcName
220 des_pointer destName src_pointer srcName
225 return (MkDBPointer x)
221 return (MkDBPointer x)
227backup_step : DBPointer -> Int -> IO Int
223backup_step : DBPointer -> Int -> IO Int
228backup_step (MkDBPointer pointer) nPage =
224backup_step (MkDBPointer pointer) nPage =
229− mkForeign (FFun "sqlite3_backup_step_idr" [FPtr, FInt] FInt) pointer nPage
225+ foreign FFI_C "sqlite3_backup_step_idr" (Ptr -> Int -> IO Int) pointer nPage
231backup_finish : DBPointer -> IO Int
227backup_finish : DBPointer -> IO Int
232backup_finish (MkDBPointer pointer) =
228backup_finish (MkDBPointer pointer) =
233− mkForeign (FFun "sqlite3_backup_finish_idr" [FPtr] FInt) pointer
229+ foreign FFI_C "sqlite3_backup_finish_idr" (Ptr -> IO Int) pointer
235backup_remaining : DBPointer -> IO Int
231backup_remaining : DBPointer -> IO Int
236backup_remaining (MkDBPointer pointer) =
232backup_remaining (MkDBPointer pointer) =
237− mkForeign (FFun "sqlite3_backup_remaining_idr" [FPtr] FInt) pointer
233+ foreign FFI_C "sqlite3_backup_remaining_idr" (Ptr -> IO Int) pointer
240-----------------------------------------------------------------------------
235-----------------------------------------------------------------------------
241-- | Use of this interface is not recommended.
236-- | Use of this interface is not recommended.
@@ -246,19 +241,18 @@ backup_remaining (MkDBPointer pointer) =
247get_table : DBPointer -> String -> DB TBPointer
242get_table : DBPointer -> String -> DB TBPointer
248get_table (MkDBPointer pointer) name = do
243get_table (MkDBPointer pointer) name = do
249− x <- liftIO(mkForeign (FFun "sqlite3_get_table_idr" [FPtr, FString] FPtr) pointer name)
244+ x <- liftIO(foreign FFI_C "sqlite3_get_table_idr" (Ptr -> String -> IO Ptr) pointer name)
250 flag <- liftIO (nullPtr x)
245 flag <- liftIO (nullPtr x)
252 then do x <- liftIO(get_error_table pointer) ; fail x
247 then do x <- liftIO(get_error_table pointer) ; fail x
253 else return (MkTBPointer x)
248 else return (MkTBPointer x)
255 get_error_table : Ptr-> IO String
250 get_error_table : Ptr-> IO String
256− get_error_table pointer = do x <- mkForeign (FFun "sqlite3_get_error" [FPtr] FString) pointer
251+ get_error_table pointer = do x <- foreign FFI_C "sqlite3_get_error" (Ptr -> IO String) pointer
260free_table : TBPointer -> IO ()
254free_table : TBPointer -> IO ()
261−free_table (MkTBPointer pointer) = do x <- mkForeign (FFun "sqlite3_free_table_idr" [FPtr] FUnit) pointer
255+free_table (MkTBPointer pointer) = do x <- foreign FFI_C "sqlite3_free_table_idr" (Ptr -> IO ()) pointer
262 return ()
256 return ()
264-----------------------------------------------------------------------------
258-----------------------------------------------------------------------------
@@ -267,11 +261,11 @@ free_table (MkTBPointer pointer) = do x <- mkForeign (FFun "sqlite3_free_table_i
267-----------------------------------------------------------------------------
261-----------------------------------------------------------------------------
269num_row : TBPointer -> IO Int
263num_row : TBPointer -> IO Int
270−num_row (MkTBPointer pointer) = do x <- mkForeign (FFun "sqlite3_get_num_row" [FPtr] FInt) pointer
264+num_row (MkTBPointer pointer) = do x <- foreign FFI_C "sqlite3_get_num_row" (Ptr -> IO Int) pointer
273num_col : TBPointer -> IO Int
267num_col : TBPointer -> IO Int
274−num_col (MkTBPointer pointer) = do x <- mkForeign (FFun "sqlite3_get_num_col" [FPtr] FInt) pointer
268+num_col (MkTBPointer pointer) = do x <- foreign FFI_C "sqlite3_get_num_col" (Ptr -> IO Int) pointer
277-----------------------------------------------------------------------------
271-----------------------------------------------------------------------------
@@ -280,11 +274,11 @@ num_col (MkTBPointer pointer) = do x <- mkForeign (FFun "sqlite3_get_num_col" [F
280-----------------------------------------------------------------------------
274-----------------------------------------------------------------------------
282num_row_v2 : DBPointer -> IO Int
276num_row_v2 : DBPointer -> IO Int
283−num_row_v2 (MkDBPointer pointer) = do x <- mkForeign (FFun "sqlite3_get_num_row_v2" [FPtr] FInt) pointer
277+num_row_v2 (MkDBPointer pointer) = do x <- foreign FFI_C "sqlite3_get_num_row_v2" (Ptr -> IO Int) pointer
286num_col_v2 : DBPointer -> IO Int
280num_col_v2 : DBPointer -> IO Int
287−num_col_v2 (MkDBPointer pointer) = do x <- mkForeign (FFun "sqlite3_get_num_col_v2" [FPtr] FInt) pointer
281+num_col_v2 (MkDBPointer pointer) = do x <- foreign FFI_C "sqlite3_get_num_col_v2" (Ptr -> IO Int) pointer
290-----------------------------------------------------------------------------
284-----------------------------------------------------------------------------
@@ -299,18 +293,18 @@ get_data (MkDBPointer pointer) row col = do
299 helper ty
293 helper ty
300 where get_data_type : Ptr ->Int -> Int -> IO Int
294 where get_data_type : Ptr ->Int -> Int -> IO Int
301 get_data_type pointer row col =
295 get_data_type pointer row col =
302− mkForeign (FFun "sqlite3_get_data_type" [FPtr, FInt, FInt] FInt) pointer row col
296+ foreign FFI_C "sqlite3_get_data_type" (Ptr -> Int -> Int -> IO Int) pointer row col
303 get_data_val_int : Ptr -> Int -> IO Int
297 get_data_val_int : Ptr -> Int -> IO Int
304 get_data_val_int pointer col =
298 get_data_val_int pointer col =
305− mkForeign (FFun "sqlite3_get_val_int" [FPtr,FInt] FInt) pointer col
299+ foreign FFI_C "sqlite3_get_val_int" (Ptr -> Int -> IO Int) pointer col
307 get_data_val_text : Ptr -> Int -> IO String
301 get_data_val_text : Ptr -> Int -> IO String
308 get_data_val_text pointer col =
302 get_data_val_text pointer col =
309− mkForeign (FFun "sqlite3_get_val_text" [FPtr, FInt] FString) pointer col
303+ foreign FFI_C "sqlite3_get_val_text" (Ptr -> Int -> IO String) pointer col
311 get_data_val_float : Ptr -> Int -> IO Float
305 get_data_val_float : Ptr -> Int -> IO Float
312 get_data_val_float pointer col =
306 get_data_val_float pointer col =
313− mkForeign (FFun "sqlite3_get_float" [FPtr, FInt] FFloat) pointer col
307+ foreign FFI_C "sqlite3_get_float" (Ptr -> Int -> IO Float) pointer col
315 helper : Int -> IO DBVal
309 helper : Int -> IO DBVal
316 helper 1 = do i <- get_data_val_int pointer col ; return (DBInt i)
310 helper 1 = do i <- get_data_val_int pointer col ; return (DBInt i)
@@ -360,7 +354,7 @@ strcat str1 str2 = str1 ++ str2
361bind_int : StmtPtr -> Int -> Int -> DB StmtPtr
355bind_int : StmtPtr -> Int -> Int -> DB StmtPtr
362bind_int (MkStmtPtr pointer) indexval val = do
356bind_int (MkStmtPtr pointer) indexval val = do
363− x <- liftIO (mkForeign (FFun "sqlite3_bind_int_idr" [FPtr, FInt, FInt] FPtr) pointer indexval val)
357+ x <- liftIO (foreign FFI_C "sqlite3_bind_int_idr" (Ptr -> Int -> Int -> IO Ptr) pointer indexval val)
364 flag <- liftIO (nullPtr x)
358 flag <- liftIO (nullPtr x)
366 then fail "Could not bind int."
360 then fail "Could not bind int."
@@ -369,7 +363,7 @@ bind_int (MkStmtPtr pointer) indexval val = do
370bind_float : StmtPtr -> Int -> Float -> DB StmtPtr
364bind_float : StmtPtr -> Int -> Float -> DB StmtPtr
371bind_float (MkStmtPtr pointer) indexval val = do
365bind_float (MkStmtPtr pointer) indexval val = do
372− x <- liftIO (mkForeign (FFun "sqlite3_bind_float_idr" [FPtr, FInt, FFloat] FPtr) pointer indexval val)
366+ x <- liftIO (foreign FFI_C "sqlite3_bind_float_idr" (Ptr -> Int -> Float -> IO Ptr) pointer indexval val)
373 flag <- liftIO (nullPtr x)
367 flag <- liftIO (nullPtr x)
375 then fail "Could not bind float."
369 then fail "Could not bind float."
@@ -377,7 +371,7 @@ bind_float (MkStmtPtr pointer) indexval val = do
378bind_text : StmtPtr -> String -> Int -> Int -> DB StmtPtr
372bind_text : StmtPtr -> String -> Int -> Int -> DB StmtPtr
379bind_text (MkStmtPtr pointer) text indexval lengthval = do
373bind_text (MkStmtPtr pointer) text indexval lengthval = do
380− x <- liftIO (mkForeign (FFun "sqlite3_bind_text_idr" [FPtr, FString, FInt, FInt] FPtr)
374+ x <- liftIO (foreign FFI_C "sqlite3_bind_text_idr" (Ptr -> String -> Int -> Int -> IO Ptr)
381 pointer text indexval lengthval)
375 pointer text indexval lengthval)
382 flag <- liftIO(nullPtr x)
376 flag <- liftIO(nullPtr x)
@@ -386,7 +380,7 @@ bind_text (MkStmtPtr pointer) text indexval lengthval = do
387bind_null : StmtPtr -> Int -> DB StmtPtr
381bind_null : StmtPtr -> Int -> DB StmtPtr
388bind_null (MkStmtPtr pointer) indexval = do
382bind_null (MkStmtPtr pointer) indexval = do
389− x <- liftIO (mkForeign (FFun "sqlite3_bind_null_idr" [FPtr, FInt] FPtr) pointer indexval)
383+ x <- liftIO (foreign FFI_C "sqlite3_bind_null_idr" (Ptr -> Int -> IO Ptr) pointer indexval)
390 flag <- liftIO (nullPtr x)
384 flag <- liftIO (nullPtr x)
392 then fail "Could not bind null."
386 then fail "Could not bind null."
@@ -397,7 +391,7 @@ bind_null (MkStmtPtr pointer) indexval = do
397-----------------------------------------------------------------------------
391-----------------------------------------------------------------------------
399strlen : String -> DB Int
393strlen : String -> DB Int
400−strlen str = liftIO (mkForeign (FFun "strLength" [FString] FInt) str)
394+strlen str = liftIO (foreign FFI_C "strLength" (String -> IO Int) str)
402instance Show DBVal where
396instance Show DBVal where
403 show (DBInt i) = "Int val: " ++ show i ++ "\n"
397 show (DBInt i) = "Int val: " ++ show i ++ "\n"