]> gitweb.factorcode.org Git - factor.git/blob - libs/sql/sqlite/simple.factor
more sql changes
[factor.git] / libs / sql / sqlite / simple.factor
1 USING: generic kernel namespaces prettyprint sequences sql sql:utils ;\r
2 IN: sqlite\r
3 \r
4 TUPLE: sqlite ;\r
5 C: sqlite ( path -- db )\r
6     >r sqlite-open <connection> r>\r
7     [ set-delegate ] keep ;\r
8 \r
9 M: sqlite create-sql* ( db tuple -- string )\r
10     nip [\r
11         "create table " % dup tuple>sql-name %\r
12         " (" % full-tuple>alist "id" alist-remove-key\r
13         [ first sanitize ] map ", " join %\r
14         ");" %\r
15     ] "" make ;\r
16 \r
17 M: sqlite drop-sql* ( db tuple -- string )\r
18     nip [ "drop table " % tuple>sql-name % ";" % ] "" make \r
19 \r
20 M: sqlite insert-sql* ( db tuple -- string )\r
21     #! Insert and fill in the ID column\r
22     nip [\r
23         "insert into " %\r
24         dup tuple>sql-name %\r
25         " (" % tuple>insert-alist\r
26         [ [ first ] map ", " join % ] keep\r
27         ") values(" %\r
28         [ first field>sqlite-bind-name ] map ", " join %\r
29         ");" %\r
30     ] "" make ;\r
31 \r
32 M: sqlite delete-sql* ( db tuple -- string )\r
33     #! Delete based on the ID column\r
34     nip [\r
35         "delete from " % tuple>sql-name %\r
36         " where ROWID=:rowid;" %\r
37     ] "" make ;\r
38 \r
39 M: sqlite update-sql* ( db tuple -- string )\r
40     #! Update based on the ID column\r
41     nip [\r
42         "update " % dup tuple>sql-name%\r
43         " set " % full-tuple>alist "id" alist-remove-key\r
44         [\r
45             [\r
46                 first [ sanitize % ] keep\r
47                 " = " % field>sqlite-bind-name %\r
48             ] "" make\r
49         ] map ", " join %\r
50         " where ROWID = :rowid;" %\r
51     ] "" make ;\r
52 \r
53 M: sqlite select-sql* ( db tuple -- string )\r
54     nip [\r
55         "select ROWID,* from " % dup tuple>sql-name %\r
56         " where " % tuple>select-alist\r
57         [\r
58             [\r
59                 first dup %\r
60                 " = " %\r
61                 field>sqlite-bind-name %\r
62             ] "" make\r
63         ] map " and " join %\r
64         ";" %\r
65     ] "" make ;\r
66 \r
67 \r