on master help sign in
fixed strln in data_type func, and another bug in to_list_v2
bb342d8melissam
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 @@
1module main
1module main
2+import sqlexpr
3+
4+
2%lib "sqlite3"
5%lib "sqlite3"
3%link "sqlite3api.o"
6%link "sqlite3api.o"
4%include "sqlite3api.h"
7%include "sqlite3api.h"
5
8
9+
10+
6data DBVal = DBInt Int
11data DBVal = DBInt Int
7 | DBText String
12 | DBText String
8 | DBFloat Float
13 | DBFloat Float
@@ -79,7 +84,7 @@ prepare_db (MkDBPointer pointer) cmd = do
79 result <- liftIO (mkForeign (FFun "sqlite3_prepare_idr" [FPtr, FString] FPtr)pointer cmd)
84 result <- liftIO (mkForeign (FFun "sqlite3_prepare_idr" [FPtr, FString] FPtr)pointer cmd)
80 flag <- liftIO(nullPtr result)
85 flag <- liftIO(nullPtr result)
81 if flag
86 if flag
82− then fail "Error occured"
87+ then fail "Error occured while preparing"
83 else return (MkStmtPtr result)
88 else return (MkStmtPtr result)
84
89
85exec_db_v2 : StmtPtr -> DB Int
90exec_db_v2 : StmtPtr -> DB Int
@@ -241,7 +246,7 @@ toList_v2 : DBPointer -> DB Table
241toList_v2 db = do
246toList_v2 db = do
242 nbR <- liftIO (num_row_v2 db)
247 nbR <- liftIO (num_row_v2 db)
243 nmC <- liftIO (num_col_v2 db)
248 nmC <- liftIO (num_col_v2 db)
244− res <- forM [1..(nbR)] (\ i =>
249+ res <- forM [0..(nbR-1)] (\ i =>
245 forM [0..(nmC-1)] (\ j =>
250 forM [0..(nmC-1)] (\ j =>
246 liftIO(get_data_v2 db i j)
251 liftIO(get_data_v2 db i j)
247
252
@@ -320,29 +325,43 @@ test = do db <- liftIO (open_db "somedb.db")
320 reset_db stmt
325 reset_db stmt
321 finalize_db stmt
326 finalize_db stmt
322 c <- liftIO (close_db db)
327 c <- liftIO (close_db db)
323− return ()
328+ 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 ()
332
329
333test3 : DB()
330test3 : DB()
334−test3 = do db <- liftIO (open_db "somedb.db")
331+test3 = do db <- liftIO (open_db "students.db")
335− stmt <- (prepare_db db "select *from tbl1 where num >10;")
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")
336 exec_db_v2 stmt
333 exec_db_v2 stmt
337 res <- toList_v2 db
334 res <- toList_v2 db
338 liftIO(print res)
335 liftIO(print res)
339 finalize_db stmt
336 finalize_db stmt
340 c <- liftIO (close_db db)
337 c <- liftIO (close_db db)
341− return ()
338+ return ()
342−
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 ()
343
361
344main : IO ()
362main : IO ()
345−main = do x <- runDB (test3)
363+main = do --x <- runDB (test3)
364+ y <- runDB (testexpr)
346 return ()
365 return ()
347
366
348
367
contribs/lib/SQLite3/sqlite3api.c+4−2
@@ -126,7 +126,7 @@ int exec_db(void*p){
126 if( rc == SQLITE_DONE){
126 if( rc == SQLITE_DONE){
127 return rc;
127 return rc;
128 }
128 }
129− if(rc == SQLITE_ERROR && rc == SQLITE_MIUSE){
129+ if(rc == SQLITE_ERROR && rc == SQLITE_MISUSE){
130 return 1;
130 return 1;
131 }
131 }
132
132
@@ -296,7 +296,9 @@ const unsigned char* sqlite3_get_val_text_v2(void* p,int nCol){
296 array =(unsigned char *) GC_malloc(1000*sizeof(char));
296 array =(unsigned char *) GC_malloc(1000*sizeof(char));
297
297
298 text_val =sqlite3_column_text(dbi->ppStmt, nCol);
298 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+
300 return array;
302 return array;
301
303
302}
304}