dbd/db2/connection.c

Tue, 01 Sep 2009 13:15:02 +0000

author
nrich@ii.net
date
Tue, 01 Sep 2009 13:15:02 +0000
changeset 32
03ed0ca09837
parent 26
cf847efefdb5
permissions
-rw-r--r--

Add __tostring method to connection and statement objects.

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;
26
cf847efefdb5 Bugfix - fix allocation bugs
nrich@ii.net
parents: 24
diff changeset
132 SQLRETURN rc = SQL_SUCCESS;
14
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
133
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
134 if (conn->db2) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
135 rollback(conn);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
136
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
137 /* disconnect from the database */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
138 rc = SQLDisconnect(conn->db2);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
139
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
140 /* free connection handle */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
141 rc = SQLFreeHandle(SQL_HANDLE_DBC, conn->db2);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
142
26
cf847efefdb5 Bugfix - fix allocation bugs
nrich@ii.net
parents: 24
diff changeset
143 conn->db2 = 0;
cf847efefdb5 Bugfix - fix allocation bugs
nrich@ii.net
parents: 24
diff changeset
144 }
cf847efefdb5 Bugfix - fix allocation bugs
nrich@ii.net
parents: 24
diff changeset
145
cf847efefdb5 Bugfix - fix allocation bugs
nrich@ii.net
parents: 24
diff changeset
146 if (conn->env) {
14
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
147 /* free environment handle */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
148 rc = SQLFreeHandle(SQL_HANDLE_ENV, conn->env);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
149 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
150
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
151 lua_pushboolean(L, disconnect);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
152 return 1;
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 /*
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
156 * success = connection:commit()
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
157 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
158 static int connection_commit(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
159 connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
160 int err = 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
161
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
162 if (conn->db2) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
163 err = commit(conn);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
164 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
165
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
166 lua_pushboolean(L, !err);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
167 return 1;
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 /*
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
171 * ok = connection:ping()
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
172 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
173 static int connection_ping(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
174 connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
175 int ok = 0;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
176
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
177 if (conn->db2) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
178 ok = 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
179 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
180
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
181 lua_pushboolean(L, ok);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
182 return 1;
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 /*
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
186 * statement = connection:prepare(sql_string)
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
187 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
188 static int connection_prepare(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
189 connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
190
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
191 if (conn->db2) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
192 return dbd_db2_statement_create(L, conn, luaL_checkstring(L, 2));
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
193 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
194
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
195 lua_pushnil(L);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
196 lua_pushstring(L, DBI_ERR_DB_UNAVAILABLE);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
197 return 2;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
198 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
199
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
200 /*
22
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
201 * quoted = connection:quote(str)
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
202 */
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
203 static int connection_quote(lua_State *L) {
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
204 luaL_error(L, DBI_ERR_NOT_IMPLEMENTED, DBD_DB2_CONNECTION, "quote");
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
205 return 0;
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
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
208 /*
14
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
209 * success = connection:rollback()
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
210 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
211 static int connection_rollback(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
212 connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
213 int err = 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
214
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
215 if (conn->db2) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
216 err = rollback(conn);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
217 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
218
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
219 lua_pushboolean(L, !err);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
220 return 1;
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 /*
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
224 * __gc
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
225 */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
226 static int connection_gc(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
227 /* always close the connection */
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
228 connection_close(L);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
229
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
230 return 0;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
231 }
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
232
32
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
233 /*
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
234 * __tostring
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
235 */
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
236 static int connection_tostring(lua_State *L) {
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
237 connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_DB2_CONNECTION);
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
238
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
239 lua_pushfstring(L, "%s: %p", DBD_DB2_CONNECTION, conn);
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
240
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
241 return 1;
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
242 }
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
243
14
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
244 int dbd_db2_connection(lua_State *L) {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
245 static const luaL_Reg connection_methods[] = {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
246 {"autocommit", connection_autocommit},
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
247 {"close", connection_close},
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
248 {"commit", connection_commit},
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
249 {"ping", connection_ping},
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
250 {"prepare", connection_prepare},
22
fd78e9cdc6e9 * Added the connection:quote() method
nrich@ii.net
parents: 16
diff changeset
251 {"quote", connection_quote},
14
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
252 {"rollback", connection_rollback},
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
253 {NULL, NULL}
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
254 };
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
255
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
256 static const luaL_Reg connection_class_methods[] = {
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
257 {"New", connection_new},
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
258 {NULL, NULL}
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
259 };
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
260
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
261 luaL_newmetatable(L, DBD_DB2_CONNECTION);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
262 luaL_register(L, 0, connection_methods);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
263 lua_pushvalue(L,-1);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
264 lua_setfield(L, -2, "__index");
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
265
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
266 lua_pushcfunction(L, connection_gc);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
267 lua_setfield(L, -2, "__gc");
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
268
32
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
269 lua_pushcfunction(L, connection_tostring);
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
270 lua_setfield(L, -2, "__tostring");
03ed0ca09837 Add __tostring method to connection and statement objects.
nrich@ii.net
parents: 26
diff changeset
271
14
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
272 luaL_register(L, DBD_DB2_CONNECTION, connection_class_methods);
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
273
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
274 return 1;
98192b7d4e89 Add DB2 driver module.
nrich@ii.net
parents:
diff changeset
275 }

mercurial