on master help sign in
Merge pull request #1934 from Heather/ff
80d4472David Christiansen
contribs/lib/SQLite3/Makefile+2−3
@@ -7,10 +7,9 @@ sqltest : testunit.idr Sqlite3.idr sqlite3api.o
7 idris testunit.idr -o sqltest
7 idris testunit.idr -o sqltest
8
8
9sqlite3api.o : sqlite3api.c
9sqlite3api.o : sqlite3api.c
10− gcc -c sqlite3api.c
10+ gcc -I . -c sqlite3api.c
11
11
12sqlite3api.so: sqlite3api.c
12sqlite3api.so: sqlite3api.c
13− gcc -fPIC -o sqlite3api.so -shared sqlite3api.c
13+ gcc -I . -fPIC -o sqlite3api.so -shared sqlite3api.c
14
14
15all : sqltest sqlite3api.o
15all : sqltest sqlite3api.o
16−
contribs/lib/SQLite3/Sqlite3.idr+42−48
@@ -1,8 +1,9 @@
1module Sqlite3
1module Sqlite3
2−import Sqlexpr
2+import public Sqlexpr
3−
4
3
5%lib C "sqlite3"
4%lib C "sqlite3"
5+-- %link C "sqlite3.o"
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"
8
9
@@ -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))
63
64
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-----------------------------------------------------------------------------
84
85
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)
88
89
89-----------------------------------------------------------------------------
90-----------------------------------------------------------------------------
@@ -91,7 +92,7 @@ open_db name = do x <- liftIO (mkForeign (FFun "sqlite3_open_idr" [FString] FPtr
91-----------------------------------------------------------------------------
92-----------------------------------------------------------------------------
92
93
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)
95
96
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
99
100
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
110
111
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-----------------------------------------------------------------------------
123
124
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
126−
127
127
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
133
133
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)
138 if flag
138 if flag
139 then fail "Error occured while preparing"
139 then fail "Error occured while preparing"
@@ -147,8 +147,8 @@ prepare_db (MkDBPointer pointer) cmd = do
147
147
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
154
154
@@ -159,7 +159,7 @@ step_db (MkStmtPtr pointer)= do
159
159
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
170
170
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
181
181
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)
188
188
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
192
192
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
196−
197
196
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
201−
202
200
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
206−
207
204
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
211−
212
208
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
216
212
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 =
220
216
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)
226
222
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
230
226
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
234
230
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
238−
239
234
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) =
246
241
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)
251 if flag
246 if flag
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)
254 where
249 where
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
257 return x
252 return x
258
253
259−
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 ()
263
257
264-----------------------------------------------------------------------------
258-----------------------------------------------------------------------------
@@ -267,11 +261,11 @@ free_table (MkTBPointer pointer) = do x <- mkForeign (FFun "sqlite3_free_table_i
267-----------------------------------------------------------------------------
261-----------------------------------------------------------------------------
268
262
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
271 return x
265 return x
272
266
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
275 return x
269 return x
276
270
277-----------------------------------------------------------------------------
271-----------------------------------------------------------------------------
@@ -280,11 +274,11 @@ num_col (MkTBPointer pointer) = do x <- mkForeign (FFun "sqlite3_get_num_col" [F
280-----------------------------------------------------------------------------
274-----------------------------------------------------------------------------
281
275
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
284 return x
278 return x
285
279
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
288 return x
282 return x
289
283
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
306
300
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
310
304
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
314
308
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
360
354
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)
365 if flag
359 if flag
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
369
363
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)
374 if flag
368 if flag
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
377
371
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)
383 if flag
377 if flag
@@ -386,7 +380,7 @@ bind_text (MkStmtPtr pointer) text indexval lengthval = do
386
380
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)
391 if flag
385 if flag
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-----------------------------------------------------------------------------
398
392
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)
401
395
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"