Wed, 03 Dec 2008 08:44:40 +0000
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
1 | 1 | #include "dbd_postgresql.h" |
2 | ||
3 | int dbd_postgresql_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:
4
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:
4
diff
changeset
|
6 | PGresult *result = PQexec(conn->postgresql, command); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
7 | ExecStatusType status; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
8 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
9 | if (!result) |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
10 | return 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
11 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
12 | status = PQresultStatus(result); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
13 | PQclear(result); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
14 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
15 | if (status != PGRES_COMMAND_OK && status != PGRES_TUPLES_OK) |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
16 | return 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
17 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
18 | return 0; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
19 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
20 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
21 | static int commit(connection_t *conn) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
22 | return run(conn, "COMMIT"); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
23 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
24 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
25 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
26 | static int begin(connection_t *conn) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
27 | return run(conn, "BEGIN"); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
28 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
29 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
30 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
31 | static int rollback(connection_t *conn) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
32 | return run(conn, "ROLLBACK"); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
33 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
34 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
35 | |
2 | 36 | /* |
37 | * connection = DBD.PostgreSQL.New(dbname, user, password, host, port) | |
38 | */ | |
1 | 39 | static int connection_new(lua_State *L) { |
40 | int n = lua_gettop(L); | |
41 | connection_t *conn = NULL; | |
42 | ||
43 | const char *host = NULL; | |
44 | const char *user = NULL; | |
45 | const char *password = NULL; | |
46 | const char *db = NULL; | |
47 | const char *port = NULL; | |
48 | ||
49 | const char *options = NULL; /* TODO always NULL */ | |
50 | const char *tty = NULL; /* TODO always NULL */ | |
51 | ||
52 | char portbuf[18]; | |
53 | ||
54 | /* db, user, password, host, port */ | |
55 | switch (n) { | |
56 | case 5: | |
57 | if (lua_isnil(L, 5) == 0) | |
58 | { | |
59 | int pport = luaL_checkint(L, 5); | |
60 | ||
61 | if (pport >= 1 && pport <= 65535) { | |
62 | snprintf(portbuf, sizeof(portbuf), "%d", pport); | |
63 | port = portbuf; | |
64 | } else { | |
4 | 65 | luaL_error(L, DBI_ERR_INVALID_PORT, pport); |
1 | 66 | } |
67 | } | |
68 | case 4: | |
69 | if (lua_isnil(L, 4) == 0) | |
70 | host = luaL_checkstring(L, 4); | |
71 | case 3: | |
72 | if (lua_isnil(L, 3) == 0) | |
73 | password = luaL_checkstring(L, 3); | |
74 | case 2: | |
75 | if (lua_isnil(L, 2) == 0) | |
76 | user = luaL_checkstring(L, 2); | |
77 | case 1: | |
78 | if (lua_isnil(L, 1) == 0) | |
79 | db = luaL_checkstring(L, 1); | |
80 | } | |
81 | ||
82 | conn = (connection_t *)lua_newuserdata(L, sizeof(connection_t)); | |
83 | ||
84 | conn->postgresql = PQsetdbLogin(host, port, options, tty, db, user, password); | |
85 | conn->statement_id = 0; | |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
86 | conn->autocommit = 0; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
87 | begin(conn); |
1 | 88 | |
3 | 89 | if (PQstatus(conn->postgresql) != CONNECTION_OK) { |
1 | 90 | lua_pushnil(L); |
4 | 91 | lua_pushfstring(L, DBI_ERR_CONNECTION_FAILED, PQerrorMessage(conn->postgresql)); |
3 | 92 | return 2; |
1 | 93 | } |
94 | ||
3 | 95 | luaL_getmetatable(L, DBD_POSTGRESQL_CONNECTION); |
96 | lua_setmetatable(L, -2); | |
97 | ||
1 | 98 | return 1; |
99 | } | |
100 | ||
2 | 101 | /* |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
102 | * success = connection:autocommit(on) |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
103 | */ |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
104 | static int connection_autocommit(lua_State *L) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
105 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_POSTGRESQL_CONNECTION); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
106 | int on = lua_toboolean(L, 2); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
107 | int err = 0; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
108 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
109 | if (conn->postgresql) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
110 | if (on) |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
111 | err = rollback(conn); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
112 | else |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
113 | err = begin(conn); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
114 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
115 | conn->autocommit = on; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
116 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
117 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
118 | lua_pushboolean(L, !err); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
119 | return 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
120 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
121 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
122 | /* |
2 | 123 | * success = connection:close() |
124 | */ | |
1 | 125 | static int connection_close(lua_State *L) { |
126 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_POSTGRESQL_CONNECTION); | |
127 | int disconnect = 0; | |
128 | ||
129 | if (conn->postgresql) { | |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
130 | /* |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
131 | * if autocommit is turned off, we probably |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
132 | * want to rollback any outstanding transactions. |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
133 | */ |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
134 | if (!conn->autocommit) |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
135 | rollback(conn); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
136 | |
1 | 137 | PQfinish(conn->postgresql); |
138 | disconnect = 1; | |
3 | 139 | conn->postgresql = NULL; |
1 | 140 | } |
141 | ||
142 | lua_pushboolean(L, disconnect); | |
143 | return 1; | |
144 | } | |
145 | ||
2 | 146 | /* |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
147 | * success = connection:commit() |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
148 | */ |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
149 | static int connection_commit(lua_State *L) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
150 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_POSTGRESQL_CONNECTION); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
151 | int err = 0; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
152 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
153 | if (conn->postgresql) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
154 | commit(conn); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
155 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
156 | if (!conn->autocommit) |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
157 | err = begin(conn); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
158 | else |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
159 | err = 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
160 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
161 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
162 | lua_pushboolean(L, !err); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
163 | return 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
164 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
165 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
166 | /* |
2 | 167 | * ok = connection:ping() |
168 | */ | |
1 | 169 | static int connection_ping(lua_State *L) { |
170 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_POSTGRESQL_CONNECTION); | |
171 | int ok = 0; | |
172 | ||
173 | if (conn->postgresql) { | |
174 | ConnStatusType status = PQstatus(conn->postgresql); | |
175 | ||
176 | if (status == CONNECTION_OK) | |
177 | ok = 1; | |
178 | } | |
179 | ||
180 | lua_pushboolean(L, ok); | |
181 | return 1; | |
182 | } | |
183 | ||
2 | 184 | /* |
185 | * statement = connection:prepare(sql_string) | |
186 | */ | |
1 | 187 | static int connection_prepare(lua_State *L) { |
188 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_POSTGRESQL_CONNECTION); | |
189 | ||
190 | if (conn->postgresql) { | |
191 | return dbd_postgresql_statement_create(L, conn, luaL_checkstring(L, 2)); | |
192 | } | |
193 | ||
194 | lua_pushnil(L); | |
4 | 195 | lua_pushstring(L, DBI_ERR_DB_UNAVAILABLE); |
3 | 196 | return 2; |
1 | 197 | } |
198 | ||
2 | 199 | /* |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
200 | * success = connection:rollback() |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
201 | */ |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
202 | static int connection_rollback(lua_State *L) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
203 | connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_POSTGRESQL_CONNECTION); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
204 | int err = 0; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
205 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
206 | if (conn->postgresql) { |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
207 | rollback(conn); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
208 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
209 | if (!conn->autocommit) |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
210 | err = begin(conn); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
211 | else |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
212 | err = 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
213 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
214 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
215 | lua_pushboolean(L, !err); |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
216 | return 1; |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
217 | } |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
218 | |
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
219 | /* |
2 | 220 | * __gc |
221 | */ | |
1 | 222 | static int connection_gc(lua_State *L) { |
223 | /* always close the connection */ | |
224 | connection_close(L); | |
225 | ||
226 | return 0; | |
227 | } | |
228 | ||
2 | 229 | int dbd_postgresql_connection(lua_State *L) { |
230 | static const luaL_Reg connection_methods[] = { | |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
231 | {"autocommit", connection_autocommit}, |
2 | 232 | {"close", connection_close}, |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
233 | {"commit", connection_commit}, |
2 | 234 | {"ping", connection_ping}, |
235 | {"prepare", connection_prepare}, | |
13
10c8c6f0da14
Added connection:autocommit(), connection:commit(), and connection:rollback() to control transactions.
nrich@ii.net
parents:
4
diff
changeset
|
236 | {"rollback", connection_rollback}, |
2 | 237 | {NULL, NULL} |
238 | }; | |
1 | 239 | |
2 | 240 | static const luaL_Reg connection_class_methods[] = { |
241 | {"New", connection_new}, | |
242 | {NULL, NULL} | |
243 | }; | |
1 | 244 | |
245 | luaL_newmetatable(L, DBD_POSTGRESQL_CONNECTION); | |
246 | luaL_register(L, 0, connection_methods); | |
247 | lua_pushvalue(L,-1); | |
248 | lua_setfield(L, -2, "__index"); | |
249 | ||
250 | lua_pushcfunction(L, connection_gc); | |
251 | lua_setfield(L, -2, "__gc"); | |
252 | ||
253 | luaL_register(L, DBD_POSTGRESQL_CONNECTION, connection_class_methods); | |
254 | ||
255 | return 1; | |
256 | } |