on master help sign in
added another case of insert and is Null
commitd73317242dc8e3c2b962f3e2a62ee9bcbf0a028d authormelissam <mfm6@st-andrews.ac.uk> dateMon 6 Aug 2012, 17:52 (14 years ago) parentb1efbab
4 files changed+45−3
contribs/lib/SQLite3/._sqlexpr.idr contribs/lib/SQLite3/._sqlite3.idr contribs/lib/SQLite3/sqlexpr.idr+12−1 contribs/lib/SQLite3/sqlite3.idr+33−2
contribs/lib/SQLite3/._sqlexpr.idr

Binary file not shown.

contribs/lib/SQLite3/._sqlite3.idr

Binary file not shown.

contribs/lib/SQLite3/sqlexpr.idr+12−1
@@ -17,6 +17,7 @@ data Cond = Equals Value Value
1717 |MkGTE Value Value
1818 |MkLT Value Value
1919 |MkLTE Value Value
20+ |MkNULL Value
2021
2122
2223data Clause = MkCond Cond
@@ -25,7 +26,7 @@ data Clause = MkCond Cond
2526 | Empty
2627
2728data condClause = SET Clause
28− | WHERE condClause Clause
29+ |WHERE condClause Clause
2930
3031data SelVar = Cols (List String)
3132 |ALL
@@ -33,7 +34,9 @@ data SelVar = Cols (List String)
3334data SQL = SELECT SelVar SQL Clause
3435 | TBL String
3536 | INSERT SQL (List Value)
37+ | INSERTC SQL (List Value) (List Value)
3638 | UPDATE SQL condClause
39+ | CREATE SQL (List Value)
3740
3841-- remember to remove these funcs later
3942foldr1 : (a -> a -> a) -> List a -> a
@@ -85,6 +88,8 @@ evalCond xs (MkLTE val1 val2) = let (restring , newxs ) = valString xs val1 in
8588 let (restring2, newxs') = valString newxs val2 in
8689 (restring ++ " =< " ++ restring2, ( newxs'))
8790
91+evalCond xs (MkNULL val) = let (restring , newxs ) = valString xs val in
92+ (restring ++ " IS NULL " , newxs)
8893
8994clauseString : List (Maybe(Int, Value)) -> Clause -> (String, List (Maybe(Int, Value)))
9095clauseString xs (Empty) = ("" , []) -- No condition
@@ -129,6 +134,12 @@ evalSQL xs (INSERT sql vals) = let (tblname, newvals) = evalSQL xs sql in
129134 let (str, newxs ) = listVal newvals vals in
130135 ("INSERT INTO " ++ tblname ++ " VALUES (" ++ str ++ ")" , newxs)
131136
137+evalSQL xs (INSERTC sql cols vals) = let (tblname, newvals) = evalSQL xs sql in
138+ let (strcol, newcol) = listVal newvals cols in
139+ let (strval, newcolval) = listVal newcol vals in
140+ ("INSERT INTO " ++ tblname ++ "(" ++ strcol ++ ")" ++ "VALUES (" ++ strval ++ ")", newcolval)
141+
142+
132143evalSQL xs (UPDATE sql cl) = let (tblname, newxs) = evalSQL xs sql in
133144 let (csstring, newxs') = condClauseStr newxs cl in
134145 ("UPDATE " ++ tblname ++ csstring, newxs')
contribs/lib/SQLite3/sqlite3.idr+33−2
@@ -395,11 +395,42 @@ testInsert = do db <- open_db "somedb.db"
395395 exec_db_v2 stmt
396396 finalize_db stmt
397397 close_db db
398− return ()
398+ return ()
399+
400+testNull : DB()
401+testNull = do db <- open_db "somedb.db"
402+ let sql = (evalSQL [] ((SELECT ALL)(TBL "tbl1") (MkCond (MkNULL (VCol "data")))))
403+ let x = (fst sql)
404+ let list = (snd sql)
405+ liftIO(print x)
406+ stmt <- (prepare_db db x)
407+ bindMulti stmt list
408+ exec_db_v2 stmt
409+ res <- toList_v2 db
410+ liftIO(print res)
411+ finalize_db stmt
412+ close_db db
413+ return ()
414+
415+testInsertWithCond : DB()
416+testInsertWithCond = do db <- open_db "somedb.db"
417+ let sql = (evalSQL [] (INSERTC (TBL "tbl1") [(VCol "data"),(VCol "num")] [(VInt 201),(VStr "newinserted")]))
418+ let x = (fst sql)
419+ let list = (snd sql)
420+ liftIO(print x)
421+ stmt <- (prepare_db db x)
422+ bindMulti stmt list
423+ exec_db_v2 stmt
424+ finalize_db stmt
425+ close_db db
426+ return ()
427+
428+
399429main : IO ()
400430main = do --x <- runDB (test3)
401− y <- runDB (testexpr)
431+ y <- runDB (testInsertWithCond)
402432 return ()
403433
434+
404435
405436