on 7afa310 help sign in
140 lines 5.5 kB history raw
1module Main
2import Sqlite3
5testexpr : DB()
6testexpr = do db <- open_db "somedb.db"
7 let sql = (evalSQL [] ((SELECT ALL)(TBL ["tbl1"]) (OR (AND (MkCond (Equals (VCol "data")(VStr "data0"))) (MkCond (Equals (VCol "num")(VInt 1))) ) (MkCond (Equals (VCol "num")(VInt 2))))))
8 let x = (fst sql) -- get the string
9 let list = (snd sql) -- list of vals
10 liftIO(print x) -- use liftIO to turn this into DB type
11 stmt <- (prepare_db db x) -- prepare the statement
12 bindMulti stmt list -- bind the values in the list
13 exec_db_v2 stmt -- execute the prepared query
14 res <- toList_v1 db -- toList_v1 to get the result
15 liftIO(print res) -- print the result
16 finalize_db stmt -- Statment pointer must be finalized in the end
17 close_db db -- close the datbase
18 return ()
20testupdate : DB()
21testupdate = do db <- open_db "somedb.db"
22 let sql = (evalSQL [] (UPDATE (TBL ["tbl1"]) (WHERE (SET (MkCond (Equals(VCol "data") (VStr "data600"))) ) (MkCond (Equals (VCol "num") (VInt 2))) ) ))
23 let x = (fst sql)
24 let list = (snd sql)
25 liftIO(print x)
26 stmt <- (prepare_db db x)
27 bindMulti stmt list
28 exec_db_v2 stmt
29 finalize_db stmt
30 close_db db
31 return ()
33testInsert : DB()
34testInsert = do db <- open_db "somedb.db"
35 let sql = (evalSQL [] (INSERT (TBL ["tbl1"]) [(VInt 3),(VStr "ham")]))
36 let x = (fst sql)
37 let list = (snd sql)
38 liftIO(print x)
39 stmt <- (prepare_db db x)
40 bindMulti stmt list
41 exec_db_v2 stmt
42 finalize_db stmt
43 close_db db
44 return ()
46testNull : DB()
47testNull = do db <- open_db "somedb.db"
48 let sql = (evalSQL [] ((SELECT ALL)(TBL ["tbl1"]) (MkCond (MkNULL (VCol "data")))))
49 let x = (fst sql)
50 let list = (snd sql)
51 liftIO(print x)
52 stmt <- (prepare_db db x)
53 bindMulti stmt list
54 exec_db_v2 stmt
55 res <- toList_v1 db
56 liftIO(print res)
57 finalize_db stmt
58 close_db db
59 return ()
62testInsertWithCond : DB()
63testInsertWithCond = do db <- open_db "somedb.db"
64 let sql = (evalSQL [] (INSERTC (TBL ["tbl1"]) [(VCol "data"),(VCol "num")] [(VInt 30),(VStr "inserthere")]))
65 let x = (fst sql)
66 let list = (snd sql)
67 liftIO(print x)
68 stmt <- (prepare_db db x)
69 bindMulti stmt list
70 exec_db_v2 stmt
71 finalize_db stmt
72 close_db db
73 return ()
75-- Nested queries need to have the same column as the outer queries.
76testNestedSel1 : DB()
77testNestedSel1 = do db <- open_db "somedb.db"
78 let sql = (evalSQL [] (SELECT (Cols ["data"]) (SELECT (Cols["num","data"]) (TBL ["tbl1"]) (MkCond (MkGT (VCol "num")(VInt 2))))Empty))
79 let x = (fst sql)
80 let list = (snd sql)
81 liftIO(print x)
82 stmt <- (prepare_db db x)
83 bindMulti stmt list
84 exec_db_v2 stmt
85 res <- toList_v1 db
86 liftIO(print res)
87 finalize_db stmt
88 close_db db
89 return ()
91-- Testing Create Table
92testCreateTable : DB ()
93testCreateTable = do db <- open_db "somedb.db"
94 let sql = (evalSQL [] (CREATE (TBL ["mynewtbl"]) [ ((VCol "col"),(CInt "int"),(None)) ] ) )
95 let x = (fst sql)
96 let list = (snd sql)
97 liftIO(print x)
98 stmt <- (prepare_db db x)
99 bindMulti stmt list
100 exec_db_v2 stmt
101 finalize_db stmt
102 close_db db
103 return ()
105-- This may be a bit slow
106testMultiTable : DB ()
107testMultiTable = do db <- open_db "somedb.db"
108 let sql = (evalSQL [] ((SELECT ALL )(TBL ["mytable","tbl1"]) (Empty) ) )
109 let x = (fst sql)
110 let list = (snd sql)
111 liftIO(print x)
112 stmt <- (prepare_db db x)
113 bindMulti stmt list
114 exec_db_v2 stmt
115 res <- toList_v1 db
116 liftIO(print res)
117 finalize_db stmt
118 close_db db
119 return ()
121testSelAll : DB ()
122testSelAll = do db <- open_db "somedb.db"
123 let sql = (evalSQL [] ((SELECT ALL )(TBL ["tbl1"]) (Empty) ) )
124 let x = (fst sql)
125 let list = (snd sql)
126 liftIO(print x)
127 stmt <- (prepare_db db x)
128 bindMulti stmt list
129 exec_db_v2 stmt
130 res <- toList_v1 db
131 liftIO(print res)
132 finalize_db stmt
133 close_db db
134 return ()
137main : IO ()
138main = do x <- runDB (testMultiTable) -- runDB : DB a -> IO a
139 --y <- runDB (testNestedSel1)
140 return ()