on master help sign in
fixed prepare to return null pointer on failure
b4bf889melissam
contribs/lib/SQLite3/sqlite3.idr+15−22
@@ -70,17 +70,7 @@ exec_db (MkDBPointer pointer) stmt = do
70get_error : DBPointer -> IO String
70get_error : DBPointer -> IO String
71get_error (MkDBPointer pointer) =mkForeign (FFun "sqlite3_get_error" [FPtr] FString)pointer
71get_error (MkDBPointer pointer) =mkForeign (FFun "sqlite3_get_error" [FPtr] FString)pointer
72
72
73−
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−
84prepare_db : DBPointer -> String -> DB StmtPtr
74prepare_db : DBPointer -> String -> DB StmtPtr
85prepare_db (MkDBPointer pointer) cmd = do
75prepare_db (MkDBPointer pointer) cmd = do
86
76
@@ -90,6 +80,7 @@ prepare_db (MkDBPointer pointer) cmd = do
90 then fail "Error occured"
80 then fail "Error occured"
91 else return (MkStmtPtr result)
81 else return (MkStmtPtr result)
92
82
83+
93step_db : StmtPtr -> DB Int
84step_db : StmtPtr -> DB Int
94step_db (MkStmtPtr pointer) = do
85step_db (MkStmtPtr pointer) = do
95 x <- liftIO (mkForeign (FFun "sqlite3_step_idr" [FPtr] FInt)pointer)
86 x <- liftIO (mkForeign (FFun "sqlite3_step_idr" [FPtr] FInt)pointer)
@@ -157,13 +148,13 @@ backup_remaining (MkDBPointer pointer) =mkForeign (FFun "sqlite3_backup_remainin
157
148
158
149
159
150
160−get_table : DBPointer -> String -> IO (Either String TBPointer)
151+get_table : DBPointer -> String -> DB TBPointer
161get_table (MkDBPointer pointer) name = do
152get_table (MkDBPointer pointer) name = do
162− x <- mkForeign (FFun "sqlite3_get_table_idr" [FPtr, FString] FPtr)pointer name
153+ x <- liftIO(mkForeign (FFun "sqlite3_get_table_idr" [FPtr, FString] FPtr)pointer name)
163− flag <- nullPtr x
154+ flag <- liftIO(nullPtr x)
164 if flag
155 if flag
165− then do x <- get_error_table pointer ; return (Left (x))
156+ then fail "Boooo"
166− else return (Right (MkTBPointer x))
157+ else return (MkTBPointer x)
167 where
158 where
168 get_error_table : Ptr-> IO String
159 get_error_table : Ptr-> IO String
169 get_error_table pointer = do x <- mkForeign (FFun "sqlite3_get_error" [FPtr] FString)pointer
160 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
214
205
215toList : String -> String -> DBPointer -> DB Table
206toList : String -> String -> DBPointer -> DB Table
216toList name stmt x = do
207toList name stmt x = do
217− ptr <- MkDB (get_table x (stmt))
208+ ptr <- (get_table x (stmt))
218 nbR <- liftIO (num_row ptr)
209 nbR <- liftIO (num_row ptr)
219 nmC <- liftIO (num_col ptr)
210 nmC <- liftIO (num_col ptr)
220 res <- forM [0..(nbR-1)] (\ i =>
211 res <- forM [0..(nbR-1)] (\ i =>
@@ -267,7 +258,7 @@ print_data_v2 val = (show val)
267
258
268test : DB()
259test : DB()
269test = do db <- liftIO (open_db "somedb.db")
260test = 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 (?,?);")
271 bind_int stmt 1 456
262 bind_int stmt 1 456
272 bind_text stmt "testing" 2 4
263 bind_text stmt "testing" 2 4
273 step_db stmt
264 step_db stmt
@@ -277,10 +268,12 @@ test = do db <- liftIO (open_db "somedb.db")
277 return ()
268 return ()
278
269
279test2 : DB ()
270test2 : DB ()
280−test2 = do db <- liftIO (open_db "students.db")
271+test2 = do db <- liftIO (open_db "somedb.db")
272+ stmt <- (prepare_db db "insert into tbl1 values (?,?);")
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")
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")
282− res <- (toList "Student" "select *from Student;" db)
274+ --res <- (toList "Student" "select *from Student;" db)
283− mydata <- liftIO ( get_data db "Student" 1 1)
275+ -- mydata <- liftIO ( get_data db "Student" 1 1)
276+ finalize_db stmt
284 c <- liftIO (close_db db)
277 c <- liftIO (close_db db)
285 return ()
278 return ()
286
279
contribs/lib/SQLite3/sqlite3api.c+6−25
@@ -84,8 +84,7 @@ void* sqlite3_prepare_idr(void *db,const char *zSql){
84 dbi ->Ptr_tail = tail;
84 dbi ->Ptr_tail = tail;
85
85
86 if(rec != SQLITE_OK){
86 if(rec != SQLITE_OK){
87− fprintf(stderr, "SQL Prepare error.\n");
88− return dbi;
87+ return NULL;
89 }
88 }
90
89
91 return dbi;
90 return dbi;
@@ -158,7 +157,7 @@ int sqlite3_get_data_type(void* p,const char* tbl_name, int nRow, int nCol){
158
157
159 rc = sqlite3_prepare_v2(dbi->db_ptr, sql_query_buffer, -1, &stmt, &tail);
158 rc = sqlite3_prepare_v2(dbi->db_ptr, sql_query_buffer, -1, &stmt, &tail);
160 if(rc != SQLITE_OK){
159 if(rc != SQLITE_OK){
161− fprintf(stderr, "SQL Prepare error");
160+ fprintf(stderr, "SQL Prepare error\n");
162 return rc;
161 return rc;
163 }
162 }
164 rc = sqlite3_step(stmt);
163 rc = sqlite3_step(stmt);
@@ -197,7 +196,7 @@ int sqlite3_get_val_int(void* p,const char* tbl_name, int nRow, int nCol){
197
196
198 rc = sqlite3_prepare_v2(dbi->db_ptr, sql_query_buffer, -1, &stmt, &tail);
197 rc = sqlite3_prepare_v2(dbi->db_ptr, sql_query_buffer, -1, &stmt, &tail);
199 if(rc != SQLITE_OK){
198 if(rc != SQLITE_OK){
200− fprintf(stderr, "SQL Prepare error");
199+ fprintf(stderr, "SQL Prepare error\n");
201 return rc;
200 return rc;
202 }
201 }
203 rc = sqlite3_step(stmt);
202 rc = sqlite3_step(stmt);
@@ -308,7 +307,6 @@ int sqlite3_step_idr(void* db){
308
307
309 DBinfo* dbi =(DBinfo*) db;
308 DBinfo* dbi =(DBinfo*) db;
310 int rc =sqlite3_step(dbi->ppStmt);
309 int rc =sqlite3_step(dbi->ppStmt);
311−
312 return rc;
310 return rc;
313}
311}
314
312
@@ -320,13 +318,9 @@ int sqlite3_bind_int_idr(void* p,int index, int val){
320 printf("\nThe statement has %d wildcards\n", sqlite3_bind_parameter_count(dbi->ppStmt));
318 printf("\nThe statement has %d wildcards\n", sqlite3_bind_parameter_count(dbi->ppStmt));
321 rc =sqlite3_bind_int(dbi->ppStmt,index,val);
319 rc =sqlite3_bind_int(dbi->ppStmt,index,val);
322 if(rc != SQLITE_OK){
320 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");
328 return 1;
321 return 1;
329 }
322 }
323+
330 return rc;
324 return rc;
331}
325}
332
326
@@ -339,14 +333,9 @@ int sqlite3_bind_float_idr(void* p,int index, float val){
339 rc =sqlite3_bind_double(dbi->ppStmt,index,res);
333 rc =sqlite3_bind_double(dbi->ppStmt,index,res);
340
334
341 if(rc != SQLITE_OK){
335 if(rc != SQLITE_OK){
342− printf("\nCould not bind float.\n");
343 return 1;
336 return 1;
344 }
337 }
345
338
346− if (sqlite3_step(dbi->ppStmt) != SQLITE_DONE) {
347− printf("\nCould not step (execute) stmt.\n");
348− return 1;
349− }
350 return rc;
339 return rc;
351}
340}
352
341
@@ -356,13 +345,9 @@ int sqlite3_bind_null_idr(void* p,int index){
356 int rc;
345 int rc;
357 rc =sqlite3_bind_null(dbi->ppStmt,index);
346 rc =sqlite3_bind_null(dbi->ppStmt,index);
358 if(rc != SQLITE_OK){
347 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");
364 return 1;
348 return 1;
365 }
349 }
350+
366 return rc;
351 return rc;
367}
352}
368
353
@@ -372,13 +357,9 @@ int sqlite3_bind_text_idr(void* p,const char* text, int index,int length){
372 int rc;
357 int rc;
373 rc =sqlite3_bind_text(dbi->ppStmt,index,text,length,SQLITE_STATIC);
358 rc =sqlite3_bind_text(dbi->ppStmt,index,text,length,SQLITE_STATIC);
374 if(rc != SQLITE_OK){
359 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");
380 return 1;
360 return 1;
381 }
361 }
362+
382 return rc;
363 return rc;
383
364
384}
365}
contribs/lib/simpleparser.idr+3−4
@@ -26,8 +26,7 @@ instance MonadPlus Parser where
26 mzero = P (\inp => Left "Parse Error")
26 mzero = P (\inp => Left "Parse Error")
27 mplus p q = P (\inp => case parse p inp of
27 mplus p q = P (\inp => case parse p inp of
28 Left msg => parse q inp
28 Left msg => parse q inp
29− Right (v,out) => Right(v,out))
29+ Right (v,out) => Right(v,out))
30−-- this is a comment for testing
31
30
32
31
33{-
32{-
@@ -162,13 +161,13 @@ expr = do t <- term
162
161
163
162
164factor = do symbol "("
163factor = do symbol "("
165− e <- expr
164+ do e <- expr
166 symbol ")"
165 symbol ")"
167 return e
166 return e
168 ||| natural
167 ||| natural
169
168
170term = do f <- factor
169term = do f <- factor
171− symbol "*"
170+ do symbol "*"
172 t <- term
171 t <- term
173 return (f * t)
172 return (f * t)
174 ||| return f
173 ||| return f