on master help sign in
fixed strln in data_type func, and another bug in to_list_v2
commitbb342d816403c398d8cf2a8dbfd9ff2104c1e731 authormelissam <mfm6@st-andrews.ac.uk> dateThu 2 Aug 2012, 11:19 (14 years ago) parentb35f3e4
4 files changed+39−18
contribs/lib/SQLite3/._sqlite3.idr contribs/lib/SQLite3/._sqlite3api.c contribs/lib/SQLite3/sqlite3.idr+35−16 contribs/lib/SQLite3/sqlite3api.c+4−2
contribs/lib/SQLite3/._sqlite3.idr

Binary file not shown.

contribs/lib/SQLite3/._sqlite3api.c

Binary file not shown.

contribs/lib/SQLite3/sqlite3.idr+35−16
@@ -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
contribs/lib/SQLite3/sqlite3api.c+4−2
@@ -126,7 +126,7 @@ int exec_db(void*p){
126126 if( rc == SQLITE_DONE){
127127 return rc;
128128 }
129− if(rc == SQLITE_ERROR && rc == SQLITE_MIUSE){
129+ if(rc == SQLITE_ERROR && rc == SQLITE_MISUSE){
130130 return 1;
131131 }
132132
@@ -296,7 +296,9 @@ const unsigned char* sqlite3_get_val_text_v2(void* p,int nCol){
296296 array =(unsigned char *) GC_malloc(1000*sizeof(char));
297297
298298 text_val =sqlite3_column_text(dbi->ppStmt, nCol);
299− memcpy(array, text_val, sizeof(text_val));
299+ memcpy(array, text_val, strlen(text_val));
300+ int size = strlen(text_val);
301+
300302 return array;
301303
302304}