dbd/db2/connection.c

Sat, 20 Dec 2008 11:17:37 +0000

author
nrich@ii.net
date
Sat, 20 Dec 2008 11:17:37 +0000
changeset 24
abb9499bef51
parent 23
a4825c3e65e9
child 26
cf847efefdb5
permissions
-rw-r--r--

Remove debug statement.

14
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
1 #include "dbd_db2.h"
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
2
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
3 int dbd_db2_statement_create(lua_State *L, connection_t *conn, const char *sql_query);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
4
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
5 static int commit(connection_t *conn) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
6 SQLRETURN rc = SQL_SUCCESS;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
7
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
8 rc = SQLEndTran(SQL_HANDLE_DBC, conn->db2, SQL_COMMIT);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
9
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
10 return rc != SQL_SUCCESS;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
11 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
12
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
13 static int rollback(connection_t *conn) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
14 SQLRETURN rc = SQL_SUCCESS;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
15
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
16 rc = SQLEndTran(SQL_HANDLE_DBC, conn->db2, SQL_ROLLBACK);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
17
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
18 return rc != SQL_SUCCESS;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
19 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
20
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
21
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
22 /*
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
23 * connection = DBD.DB2.New(dbname, user, password, host, port)
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
24 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
25 static int connection_new(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
26 int n = lua_gettop(L);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
27 connection_t *conn = NULL;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
28 SQLRETURN rc = SQL_SUCCESS;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
29
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
30 const char *user = NULL;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
31 const char *password = NULL;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
32 const char *db = NULL;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
33
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
34 SQLCHAR message[SQL_MAX_MESSAGE_LENGTH + 1];
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
35 SQLCHAR sqlstate[SQL_SQLSTATE_SIZE + 1];
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
36 SQLINTEGER sqlcode;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
37 SQLSMALLINT length;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
38
16
318e5dfd03b8 Bugfix: fix comment in connection
nrich@ii.net
parents: 14
diff changeset
39 /* db, user, password */
14
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
40 switch(n) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
41 case 5:
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
42 case 4:
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
43 case 3:
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
44 if (lua_isnil(L, 3) == 0)
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
45 password = luaL_checkstring(L, 3);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
46 case 2:
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
47 if (lua_isnil(L, 2) == 0)
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
48 user = luaL_checkstring(L, 2);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
49 case 1:
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
50 /*
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
51 * db is the only mandatory parameter
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
52 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
53 db = luaL_checkstring(L, 1);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
54 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
55
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
56 conn = (connection_t *)lua_newuserdata(L, sizeof(connection_t));
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
57
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
58 /* allocate an environment handle */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
59 rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &conn->env);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
60 if (rc != SQL_SUCCESS) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
61 lua_pushnil(L);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
62 lua_pushfstring(L, DBI_ERR_CONNECTION_FAILED, "Cannot allocate environment handle");
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
63 return 2;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
64 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
65
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
66 /* set attribute to enable application to run as ODBC 3.0 application */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
67 rc = SQLSetEnvAttr(conn->env, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
68 if (rc != SQL_SUCCESS) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
69 lua_pushnil(L);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
70 lua_pushfstring(L, DBI_ERR_CONNECTION_FAILED, "Cannot set ODBC version attribute");
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
71 return 2;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
72 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
73
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
74 /* allocate a database connection handle */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
75 rc = SQLAllocHandle(SQL_HANDLE_DBC, conn->env, &conn->db2);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
76 if (rc != SQL_SUCCESS) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
77 lua_pushnil(L);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
78 lua_pushfstring(L, DBI_ERR_CONNECTION_FAILED, "Cannot allocate database handle");
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
79 return 2;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
80 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
81
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
82 /* set AUTOCOMMIT off */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
83 rc = SQLSetConnectAttr(conn->db2, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_NTS);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
84 if (rc != SQL_SUCCESS) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
85 lua_pushnil(L);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
86 lua_pushfstring(L, DBI_ERR_CONNECTION_FAILED, "Cannot turn off autocommit");
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
87 return 2;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
88 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
89
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
90 /* connect to the database */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
91 rc = SQLConnect(conn->db2, (SQLCHAR *)db, SQL_NTS, (SQLCHAR *)user, SQL_NTS, (SQLCHAR *)password, SQL_NTS);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
92 if (rc != SQL_SUCCESS) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
93 SQLGetDiagRec(SQL_HANDLE_DBC, conn->db2, 1, sqlstate, &sqlcode, message, SQL_MAX_MESSAGE_LENGTH + 1, &length);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
94
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
95 lua_pushnil(L);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
96 lua_pushfstring(L, DBI_ERR_CONNECTION_FAILED, message);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
97 return 2;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
98 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
99
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
100 luaL_getmetatable(L, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
101 lua_setmetatable(L, -2);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
102
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
103 return 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
104 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
105
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
106 /*
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
107 * success = connection:autocommit(on)
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
108 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
109 static int connection_autocommit(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
110 connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
111 int on = lua_toboolean(L, 2);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
112 int err = 0;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
113
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
114 if (conn->db2) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
115 int onval = on ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
116
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
117 SQLRETURN rc = SQLSetConnectAttr(conn->db2, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)onval, SQL_NTS);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
118
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
119 err = rc != SQL_SUCCESS;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
120 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
121
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
122 lua_pushboolean(L, !err);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
123 return 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
124 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
125
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
126 /*
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
127 * success = connection:close()
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
128 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
129 static int connection_close(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
130 connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
131 int disconnect = 0;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
132
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
133 if (conn->db2) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
134 SQLRETURN rc = SQL_SUCCESS;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
135
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
136 rollback(conn);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
137
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
138 /* disconnect from the database */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
139 rc = SQLDisconnect(conn->db2);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
140
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
141 /* free connection handle */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
142 rc = SQLFreeHandle(SQL_HANDLE_DBC, conn->db2);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
143
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
144 /* free environment handle */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
145 rc = SQLFreeHandle(SQL_HANDLE_ENV, conn->env);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
146
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
147 conn->db2 = 0;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
148 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
149
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
150 lua_pushboolean(L, disconnect);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
151 return 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
152 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
153
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
154 /*
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
155 * success = connection:commit()
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
156 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
157 static int connection_commit(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
158 connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
159 int err = 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
160
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
161 if (conn->db2) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
162 err = commit(conn);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
163 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
164
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
165 lua_pushboolean(L, !err);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
166 return 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
167 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
168
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
169 /*
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
170 * ok = connection:ping()
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
171 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
172 static int connection_ping(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
173 connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
174 int ok = 0;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
175
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
176 if (conn->db2) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
177 ok = 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
178 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
179
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
180 lua_pushboolean(L, ok);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
181 return 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
182 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
183
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
184 /*
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
185 * statement = connection:prepare(sql_string)
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
186 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
187 static int connection_prepare(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
188 connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
189
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
190 if (conn->db2) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
191 return dbd_db2_statement_create(L, conn, luaL_checkstring(L, 2));
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
192 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
193
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
194 lua_pushnil(L);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
195 lua_pushstring(L, DBI_ERR_DB_UNAVAILABLE);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
196 return 2;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
197 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
198
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
199 /*
22
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
200 * quoted = connection:quote(str)
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
201 */
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
202 static int connection_quote(lua_State *L) {
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
203 luaL_error(L, DBI_ERR_NOT_IMPLEMENTED, DBD_DB2_CONNECTION, "quote");
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
204 return 0;
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
205 }
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
206
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
207 /*
14
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
208 * success = connection:rollback()
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
209 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
210 static int connection_rollback(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
211 connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
212 int err = 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
213
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
214 if (conn->db2) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
215 err = rollback(conn);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
216 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
217
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
218 lua_pushboolean(L, !err);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
219 return 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
220 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
221
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
222 /*
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
223 * __gc
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
224 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
225 static int connection_gc(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
226 /* always close the connection */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
227 connection_close(L);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
228
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
229 return 0;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
230 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
231
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
232 int dbd_db2_connection(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
233 static const luaL_Reg connection_methods[] = {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
234 {"autocommit", connection_autocommit},
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
235 {"close", connection_close},
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
236 {"commit", connection_commit},
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
237 {"ping", connection_ping},
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
238 {"prepare", connection_prepare},
22
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
239 {"quote", connection_quote},
14
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
240 {"rollback", connection_rollback},
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
241 {NULL, NULL}
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
242 };
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
243
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
244 static const luaL_Reg connection_class_methods[] = {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
245 {"New", connection_new},
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
246 {NULL, NULL}
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
247 };
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
248
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
249 luaL_newmetatable(L, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
250 luaL_register(L, 0, connection_methods);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
251 lua_pushvalue(L,-1);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
252 lua_setfield(L, -2, "__index");
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
253
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
254 lua_pushcfunction(L, connection_gc);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
255 lua_setfield(L, -2, "__gc");
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
256
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
257 luaL_register(L, DBD_DB2_CONNECTION, connection_class_methods);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
258
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
259 return 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
260 }

mercurial