on master help sign in
fixed prepare to return null pointer on failure
commitb4bf889183e729bd80ef60aff83cdf56dd67b029 authormelissam <mfm6@st-andrews.ac.uk> dateTue 17 Jul 2012, 15:05 (14 years ago) parent7ff4d46
3 files changed+24−51
contribs/lib/SQLite3/sqlite3.idr+15−22 contribs/lib/SQLite3/sqlite3api.c+6−25 contribs/lib/simpleparser.idr+3−4
contribs/lib/SQLite3/sqlite3.idr+15−22
@@ -70,17 +70,7 @@ 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−
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−
73+
8474prepare_db : DBPointer -> String -> DB StmtPtr
8575prepare_db (MkDBPointer pointer) cmd = do
8676
@@ -90,6 +80,7 @@ prepare_db (MkDBPointer pointer) cmd = do
9080 then fail "Error occured"
9181 else return (MkStmtPtr result)
9282
83+
9384step_db : StmtPtr -> DB Int
9485step_db (MkStmtPtr pointer) = do
9586 x <- liftIO (mkForeign (FFun "sqlite3_step_idr" [FPtr] FInt)pointer)
@@ -157,13 +148,13 @@ backup_remaining (MkDBPointer pointer) =mkForeign (FFun "sqlite3_backup_remainin
157148
158149
159150
160−get_table : DBPointer -> String -> IO (Either String TBPointer)
151+get_table : DBPointer -> String -> DB TBPointer
161152get_table (MkDBPointer pointer) name = do
162− x <- mkForeign (FFun "sqlite3_get_table_idr" [FPtr, FString] FPtr)pointer name
163− flag <- nullPtr x
153+ x <- liftIO(mkForeign (FFun "sqlite3_get_table_idr" [FPtr, FString] FPtr)pointer name)
154+ flag <- liftIO(nullPtr x)
164155 if flag
165− then do x <- get_error_table pointer ; return (Left (x))
166− else return (Right (MkTBPointer x))
156+ then fail "Boooo"
157+ else return (MkTBPointer x)
167158 where
168159 get_error_table : Ptr-> IO String
169160 get_error_table pointer = do x <- mkForeign (FFun "sqlite3_get_error" [FPtr] FString)pointer
@@ -214,7 +205,7 @@ free_table (MkTBPointer pointer) = do x <- mkForeign (FFun "sqlite3_free_table_i
214205
215206toList : String -> String -> DBPointer -> DB Table
216207toList name stmt x = do
217− ptr <- MkDB (get_table x (stmt))
208+ ptr <- (get_table x (stmt))
218209 nbR <- liftIO (num_row ptr)
219210 nmC <- liftIO (num_col ptr)
220211 res <- forM [0..(nbR-1)] (\ i =>
@@ -267,7 +258,7 @@ print_data_v2 val = (show val)
267258
268259test : DB()
269260test = do db <- liftIO (open_db "somedb.db")
270− stmt <- (prepare_db db "insert into tbl1 values (?,?);;")
261+ stmt <- (prepare_db db "insert into tbl1 values (?,?);")
271262 bind_int stmt 1 456
272263 bind_text stmt "testing" 2 4
273264 step_db stmt
@@ -277,10 +268,12 @@ test = do db <- liftIO (open_db "somedb.db")
277268 return ()
278269
279270test2 : DB ()
280−test2 = do db <- liftIO (open_db "students.db")
281− 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")
282− res <- (toList "Student" "select *from Student;" db)
283− mydata <- liftIO ( get_data db "Student" 1 1)
271+test2 = do db <- liftIO (open_db "somedb.db")
272+ stmt <- (prepare_db db "insert into tbl1 values (?,?);")
273+ -- 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")
274+ --res <- (toList "Student" "select *from Student;" db)
275+ -- mydata <- liftIO ( get_data db "Student" 1 1)
276+ finalize_db stmt
284277 c <- liftIO (close_db db)
285278 return ()
286279
contribs/lib/SQLite3/sqlite3api.c+6−25
@@ -84,8 +84,7 @@ void* sqlite3_prepare_idr(void *db,const char *zSql){
8484 dbi ->Ptr_tail = tail;
8585
8686 if(rec != SQLITE_OK){
87− fprintf(stderr, "SQL Prepare error.\n");
88− return dbi;
87+ return NULL;
8988 }
9089
9190 return dbi;
@@ -158,7 +157,7 @@ int sqlite3_get_data_type(void* p,const char* tbl_name, int nRow, int nCol){
158157
159158 rc = sqlite3_prepare_v2(dbi->db_ptr, sql_query_buffer, -1, &stmt, &tail);
160159 if(rc != SQLITE_OK){
161− fprintf(stderr, "SQL Prepare error");
160+ fprintf(stderr, "SQL Prepare error\n");
162161 return rc;
163162 }
164163 rc = sqlite3_step(stmt);
@@ -197,7 +196,7 @@ int sqlite3_get_val_int(void* p,const char* tbl_name, int nRow, int nCol){
197196
198197 rc = sqlite3_prepare_v2(dbi->db_ptr, sql_query_buffer, -1, &stmt, &tail);
199198 if(rc != SQLITE_OK){
200− fprintf(stderr, "SQL Prepare error");
199+ fprintf(stderr, "SQL Prepare error\n");
201200 return rc;
202201 }
203202 rc = sqlite3_step(stmt);
@@ -308,7 +307,6 @@ int sqlite3_step_idr(void* db){
308307
309308 DBinfo* dbi =(DBinfo*) db;
310309 int rc =sqlite3_step(dbi->ppStmt);
311−
312310 return rc;
313311}
314312
@@ -320,13 +318,9 @@ int sqlite3_bind_int_idr(void* p,int index, int val){
320318 printf("\nThe statement has %d wildcards\n", sqlite3_bind_parameter_count(dbi->ppStmt));
321319 rc =sqlite3_bind_int(dbi->ppStmt,index,val);
322320 if(rc != SQLITE_OK){
323− printf("\nCould not bind int.\n");
324− return 1;
325− }
326− if (sqlite3_step(dbi->ppStmt) != SQLITE_DONE) {
327− printf("\nCould not step (execute) stmt.\n");
328321 return 1;
329322 }
323+
330324 return rc;
331325}
332326
@@ -339,14 +333,9 @@ int sqlite3_bind_float_idr(void* p,int index, float val){
339333 rc =sqlite3_bind_double(dbi->ppStmt,index,res);
340334
341335 if(rc != SQLITE_OK){
342− printf("\nCould not bind float.\n");
343336 return 1;
344337 }
345338
346− if (sqlite3_step(dbi->ppStmt) != SQLITE_DONE) {
347− printf("\nCould not step (execute) stmt.\n");
348− return 1;
349− }
350339 return rc;
351340}
352341
@@ -356,13 +345,9 @@ int sqlite3_bind_null_idr(void* p,int index){
356345 int rc;
357346 rc =sqlite3_bind_null(dbi->ppStmt,index);
358347 if(rc != SQLITE_OK){
359− printf("\nCould not bind null.\n");
360− return 1;
361− }
362− if (sqlite3_step(dbi->ppStmt) != SQLITE_DONE) {
363− printf("\nCould not step (execute) stmt.\n");
364348 return 1;
365349 }
350+
366351 return rc;
367352}
368353
@@ -372,13 +357,9 @@ int sqlite3_bind_text_idr(void* p,const char* text, int index,int length){
372357 int rc;
373358 rc =sqlite3_bind_text(dbi->ppStmt,index,text,length,SQLITE_STATIC);
374359 if(rc != SQLITE_OK){
375− printf("\nCould not bind null.\n");
376− return 1;
377− }
378− if (sqlite3_step(dbi->ppStmt) != SQLITE_DONE) {
379− printf("\nCould not step (execute) stmt.\n");
380360 return 1;
381361 }
362+
382363 return rc;
383364
384365}
contribs/lib/simpleparser.idr+3−4
@@ -26,8 +26,7 @@ instance MonadPlus Parser where
2626 mzero = P (\inp => Left "Parse Error")
2727 mplus p q = P (\inp => case parse p inp of
2828 Left msg => parse q inp
29− Right (v,out) => Right(v,out))
30−-- this is a comment for testing
29+ Right (v,out) => Right(v,out))
3130
3231
3332{-
@@ -162,13 +161,13 @@ expr = do t <- term
162161
163162
164163factor = do symbol "("
165− e <- expr
164+ do e <- expr
166165 symbol ")"
167166 return e
168167 ||| natural
169168
170169term = do f <- factor
171− symbol "*"
170+ do symbol "*"
172171 t <- term
173172 return (f * t)
174173 ||| return f