Mon, 20 Dec 2010 09:03:33 +0000
Removed commented code
1 | 1 | #include "dbd_sqlite3.h" |
2 | ||
3 | int dbd_sqlite3_statement_create(lua_State *L, connection_t *conn, const char *sql_query); | |
4 | ||
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
5 | static int run(connection_t *conn, const char *command) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
6 | int res = sqlite3_exec(conn->sqlite, command, NULL, NULL, NULL); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
7 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
8 | return res != SQLITE_OK; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
9 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
10 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
11 | static int commit(connection_t *conn) { |
41 | 12 | conn->txn_in_progress = 0; |
13 | return run(conn, "COMMIT TRANSACTION"); | |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
14 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
15 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
16 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
17 | static int begin(connection_t *conn) { |
41 | 18 | int err = 0; |
19 | ||
20 | if (conn->txn_in_progress) { | |
21 | err = 0; | |
22 | } else { | |
23 | conn->txn_in_progress = 1; | |
24 | err = run(conn, "BEGIN TRANSACTION"); | |
25 | } | |
26 | ||
27 | return err; | |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
28 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
29 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
30 | static int rollback(connection_t *conn) { |
41 | 31 | conn->txn_in_progress = 0; |
32 | return run(conn, "ROLLBACK TRANSACTION"); | |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
33 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
34 | |
41 | 35 | int try_begin_transaction(connection_t *conn) { |
36 | if (conn->autocommit) { | |
37 | return 1; | |
38 | } | |
39 | ||
40 | return begin(conn) == 0; | |
41 | } | |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
42 | |
2 | 43 | /* |
3 | 44 | * connection,err = DBD.SQLite3.New(dbfile) |
2 | 45 | */ |
1 | 46 | static int connection_new(lua_State *L) { |
47 | int n = lua_gettop(L); | |
48 | ||
49 | const char *db = NULL; | |
50 | connection_t *conn = NULL; | |
51 | ||
52 | /* db */ | |
9 | 53 | switch(n) { |
54 | default: | |
14 | 55 | /* |
56 | * db is the only mandatory parameter | |
57 | */ | |
58 | db = luaL_checkstring(L, 1); | |
1 | 59 | } |
60 | ||
61 | conn = (connection_t *)lua_newuserdata(L, sizeof(connection_t)); | |
62 | ||
3 | 63 | if (sqlite3_open(db, &conn->sqlite) != SQLITE_OK) { |
1 | 64 | lua_pushnil(L); |
4 | 65 | lua_pushfstring(L, DBI_ERR_CONNECTION_FAILED, sqlite3_errmsg(conn->sqlite)); |
3 | 66 | return 2; |
1 | 67 | } |
68 | ||
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
69 | conn->autocommit = 0; |
41 | 70 | conn->txn_in_progress = 0; |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
71 | |
3 | 72 | luaL_getmetatable(L, DBD_SQLITE_CONNECTION); |
73 | lua_setmetatable(L, -2); | |
74 | ||
1 | 75 | return 1; |
76 | } | |
77 | ||
2 | 78 | /* |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
79 | * success = connection:autocommit(on) |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
80 | */ |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
81 | static int connection_autocommit(lua_State *L) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
82 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_SQLITE_CONNECTION); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
83 | int on = lua_toboolean(L, 2); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
84 | int err = 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
85 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
86 | if (conn->sqlite) { |
41 | 87 | if (on) { |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
88 | err = rollback(conn); |
41 | 89 | } |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
90 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
91 | conn->autocommit = on; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
92 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
93 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
94 | lua_pushboolean(L, !err); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
95 | return 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
96 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
97 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
98 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
99 | /* |
2 | 100 | * success = connection:close() |
101 | */ | |
1 | 102 | static int connection_close(lua_State *L) { |
103 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_SQLITE_CONNECTION); | |
104 | int disconnect = 0; | |
105 | ||
106 | if (conn->sqlite) { | |
41 | 107 | rollback(conn); |
3 | 108 | sqlite3_close(conn->sqlite); |
109 | disconnect = 1; | |
110 | conn->sqlite = NULL; | |
1 | 111 | } |
112 | ||
113 | lua_pushboolean(L, disconnect); | |
114 | return 1; | |
115 | } | |
116 | ||
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
117 | /* |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
118 | * success = connection:commit() |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
119 | */ |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
120 | static int connection_commit(lua_State *L) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
121 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_SQLITE_CONNECTION); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
122 | int err = 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
123 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
124 | if (conn->sqlite) { |
41 | 125 | err = commit(conn); |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
126 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
127 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
128 | lua_pushboolean(L, !err); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
129 | return 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
130 | } |
3 | 131 | |
2 | 132 | /* |
133 | * ok = connection:ping() | |
134 | */ | |
1 | 135 | static int connection_ping(lua_State *L) { |
136 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_SQLITE_CONNECTION); | |
137 | int ok = 0; | |
138 | ||
139 | if (conn->sqlite) { | |
140 | ok = 1; | |
141 | } | |
142 | ||
143 | lua_pushboolean(L, ok); | |
144 | return 1; | |
145 | } | |
146 | ||
2 | 147 | /* |
3 | 148 | * statement,err = connection:prepare(sql_str) |
2 | 149 | */ |
1 | 150 | static int connection_prepare(lua_State *L) { |
151 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_SQLITE_CONNECTION); | |
152 | ||
153 | if (conn->sqlite) { | |
154 | return dbd_sqlite3_statement_create(L, conn, luaL_checkstring(L, 2)); | |
155 | } | |
156 | ||
157 | lua_pushnil(L); | |
4 | 158 | lua_pushstring(L, DBI_ERR_DB_UNAVAILABLE); |
3 | 159 | return 2; |
1 | 160 | } |
161 | ||
2 | 162 | /* |
22 | 163 | * quoted = connection:quote(str) |
164 | */ | |
165 | static int connection_quote(lua_State *L) { | |
166 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_SQLITE_CONNECTION); | |
167 | size_t len; | |
168 | const char *from = luaL_checklstring(L, 2, &len); | |
169 | char *to; | |
170 | ||
171 | if (!conn->sqlite) { | |
172 | luaL_error(L, DBI_ERR_DB_UNAVAILABLE); | |
173 | } | |
174 | ||
175 | to = sqlite3_mprintf("%q", from); | |
176 | ||
177 | lua_pushstring(L, to); | |
178 | sqlite3_free(to); | |
179 | ||
180 | return 1; | |
181 | } | |
182 | ||
183 | /* | |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
184 | * success = connection:rollback() |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
185 | */ |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
186 | static int connection_rollback(lua_State *L) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
187 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_SQLITE_CONNECTION); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
188 | int err = 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
189 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
190 | if (conn->sqlite) { |
41 | 191 | err =rollback(conn); |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
192 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
193 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
194 | lua_pushboolean(L, !err); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
195 | return 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
196 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
197 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
198 | /* |
2 | 199 | * __gc |
200 | */ | |
1 | 201 | static int connection_gc(lua_State *L) { |
202 | /* always close the connection */ | |
203 | connection_close(L); | |
204 | ||
205 | return 0; | |
206 | } | |
207 | ||
32
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
208 | /* |
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
209 | * __tostring |
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
210 | */ |
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
211 | static int connection_tostring(lua_State *L) { |
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
212 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_SQLITE_CONNECTION); |
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
213 | |
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
214 | lua_pushfstring(L, "%s: %p", DBD_SQLITE_CONNECTION, conn); |
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
215 | |
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
216 | return 1; |
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
217 | } |
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
218 | |
2 | 219 | int dbd_sqlite3_connection(lua_State *L) { |
220 | /* | |
221 | * instance methods | |
222 | */ | |
223 | static const luaL_Reg connection_methods[] = { | |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
224 | {"autocommit", connection_autocommit}, |
2 | 225 | {"close", connection_close}, |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
226 | {"commit", connection_commit}, |
2 | 227 | {"ping", connection_ping}, |
228 | {"prepare", connection_prepare}, | |
22 | 229 | {"quote", connection_quote}, |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
9
diff
changeset
|
230 | {"rollback", connection_rollback}, |
2 | 231 | {NULL, NULL} |
232 | }; | |
1 | 233 | |
2 | 234 | /* |
235 | * class methods | |
236 | */ | |
237 | static const luaL_Reg connection_class_methods[] = { | |
238 | {"New", connection_new}, | |
239 | {NULL, NULL} | |
240 | }; | |
1 | 241 | |
242 | luaL_newmetatable(L, DBD_SQLITE_CONNECTION); | |
243 | luaL_register(L, 0, connection_methods); | |
244 | lua_pushvalue(L,-1); | |
245 | lua_setfield(L, -2, "__index"); | |
246 | ||
247 | lua_pushcfunction(L, connection_gc); | |
248 | lua_setfield(L, -2, "__gc"); | |
249 | ||
32
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
250 | lua_pushcfunction(L, connection_tostring); |
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
251 | lua_setfield(L, -2, "__tostring"); |
03ed0ca09837
Add __tostring method to connection and statement objects.
nrich@ii.net
parents:
22
diff
changeset
|
252 | |
1 | 253 | luaL_register(L, DBD_SQLITE_CONNECTION, connection_class_methods); |
254 | ||
255 | return 1; | |
256 | } |