dbd/oracle/statement.c

Sat, 06 Dec 2008 07:35:31 +0000

author
nrich@ii.net
date
Sat, 06 Dec 2008 07:35:31 +0000
changeset 18
b705ba343e94
parent 17
21c4feaeafe7
child 19
b5ec612be4da
permissions
-rw-r--r--

Misc changes.

17
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
1 #include "dbd_oracle.h"
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
2
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
3 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
4 * Converts SQLite types to Lua types
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
5 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
6 static lua_push_type_t oracle_to_lua_push(unsigned int oracle_type, int null) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
7 lua_push_type_t lua_type;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
8
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
9 if (null)
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
10 return LUA_PUSH_NIL;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
11
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
12 switch(oracle_type) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
13 case SQLT_NUM:
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
14 case SQLT_FLT:
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
15 lua_type = LUA_PUSH_NUMBER;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
16 break;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
17 case SQLT_INT:
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
18 lua_type = LUA_PUSH_INTEGER;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
19 break;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
20 default:
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
21 lua_type = LUA_PUSH_STRING;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
22 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
23
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
24 return lua_type;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
25 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
26
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
27 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
28 * success = statement:close()
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
29 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
30 int statement_close(lua_State *L) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
31 statement_t *statement = (statement_t *)luaL_checkudata(L, 1, DBD_ORACLE_STATEMENT);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
32 int ok = 0;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
33
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
34 if (statement->stmt) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
35 int rc;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
36
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
37 rc = OCIHandleFree((dvoid *)statement->stmt, OCI_HTYPE_STMT); /* Free handles */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
38
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
39 statement->stmt = NULL;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
40 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
41
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
42 lua_pushboolean(L, ok);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
43 return 1;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
44 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
45
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
46 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
47 * success,err = statement:execute(...)
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
48 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
49 int statement_execute(lua_State *L) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
50 int n = lua_gettop(L);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
51 statement_t *statement = (statement_t *)luaL_checkudata(L, 1, DBD_ORACLE_STATEMENT);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
52 int p;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
53 int errflag = 0;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
54 const char *errstr = NULL;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
55 int expected_params;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
56 int num_bind_params = n - 1;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
57 int num_columns;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
58 int rc;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
59
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
60 char errbuf[100];
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
61 int errcode;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
62
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
63 ub2 type;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
64
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
65 if (!statement->stmt) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
66 lua_pushboolean(L, 0);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
67 lua_pushstring(L, DBI_ERR_EXECUTE_INVALID);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
68 return 2;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
69 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
70
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
71 for (p = 2; p <= n; p++) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
72 int i = p - 1;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
73 int type = lua_type(L, p);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
74 char err[64];
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
75 const char *value;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
76
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
77 OCIBind *bnd = (OCIBind *)0;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
78
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
79 switch(type) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
80 case LUA_TNIL:
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
81 errflag = OCIBindByPos(
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
82 statement->stmt,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
83 &bnd,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
84 statement->conn->err,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
85 i,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
86 NULL,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
87 0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
88 SQLT_CHR,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
89 (dvoid *)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
90 (ub2 *)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
91 (ub2 *)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
92 (ub4)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
93 (ub4 *)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
94 OCI_DEFAULT);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
95 break;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
96 case LUA_TNUMBER:
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
97 case LUA_TSTRING:
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
98 case LUA_TBOOLEAN:
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
99 value = lua_tostring(L, p);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
100
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
101 errflag = OCIBindByPos(
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
102 statement->stmt,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
103 &bnd,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
104 statement->conn->err,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
105 i,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
106 value,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
107 strlen(value),
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
108 SQLT_CHR,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
109 (dvoid *)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
110 (ub2 *)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
111 (ub2 *)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
112 (ub4)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
113 (ub4 *)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
114 (ub4)OCI_DEFAULT);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
115 break;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
116 default:
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
117 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
118 * Unknown/unsupported value type
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
119 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
120 errflag = 1;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
121 snprintf(err, sizeof(err)-1, DBI_ERR_BINDING_TYPE_ERR, lua_typename(L, type));
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
122 errstr = err;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
123 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
124
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
125 if (errflag)
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
126 break;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
127 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
128
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
129 if (errflag) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
130 lua_pushboolean(L, 0);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
131 if (errstr)
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
132 lua_pushfstring(L, DBI_ERR_BINDING_PARAMS, errstr);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
133 else {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
134 OCIErrorGet((dvoid *)statement->conn->err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
135
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
136 lua_pushfstring(L, DBI_ERR_BINDING_PARAMS, errbuf);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
137 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
138
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
139 return 2;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
140 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
141
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
142 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
143 * statement type
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
144 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
145 rc = OCIAttrGet(
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
146 (dvoid *)statement->stmt,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
147 (ub4)OCI_HTYPE_STMT,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
148 (dvoid *)&type,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
149 (ub4 *)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
150 (ub4)OCI_ATTR_STMT_TYPE,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
151 statement->conn->err
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
152 );
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
153
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
154 if (rc) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
155 OCIErrorGet((dvoid *)statement->conn->err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
156
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
157 lua_pushboolean(L, 0);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
158 lua_pushfstring(L, "Error getting type: %s", errbuf);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
159
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
160 return 2;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
161 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
162
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
163 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
164 * execute statement
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
165 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
166 rc = OCIStmtExecute(
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
167 statement->conn->svc,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
168 statement->stmt,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
169 statement->conn->err,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
170 type == OCI_STMT_SELECT ? 0 : 1,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
171 (ub4)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
172 (CONST OCISnapshot *)NULL,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
173 (OCISnapshot *)NULL,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
174 statement->conn->autocommit ? OCI_COMMIT_ON_SUCCESS : OCI_DEFAULT
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
175 );
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
176
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
177 if (rc) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
178 OCIErrorGet((dvoid *)statement->conn->err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
179
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
180 lua_pushboolean(L, 0);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
181 lua_pushfstring(L, DBI_ERR_BINDING_PARAMS, errbuf);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
182
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
183 return 2;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
184 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
185
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
186 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
187 * get number of columns
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
188 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
189 rc = OCIAttrGet(
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
190 (dvoid *)statement->stmt,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
191 (ub4)OCI_HTYPE_STMT,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
192 (dvoid *)&num_columns,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
193 (ub4 *)0,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
194 (ub4)OCI_ATTR_PARAM_COUNT,
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
195 statement->conn->err
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
196 );
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
197
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
198 if (rc) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
199 OCIErrorGet((dvoid *)statement->conn->err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
200
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
201 lua_pushboolean(L, 0);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
202 lua_pushfstring(L, DBI_ERR_BINDING_PARAMS, errbuf);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
203
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
204 return 2;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
205 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
206
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
207 statement->num_columns = num_columns;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
208
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
209 lua_pushboolean(L, 1);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
210 return 1;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
211 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
212
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
213 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
214 * must be called after an execute
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
215 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
216 static int statement_fetch_impl(lua_State *L, statement_t *statement, int named_columns) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
217 int rc;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
218 sword status;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
219 int i;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
220 bindparams_t *bind;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
221
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
222 char errbuf[100];
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
223 int errcode;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
224
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
225 if (!statement->stmt) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
226 luaL_error(L, DBI_ERR_FETCH_INVALID);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
227 return 0;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
228 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
229
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
230 bind = (bindparams_t *)malloc(sizeof(bindparams_t) * statement->num_columns);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
231 memset(bind, 0, sizeof(bindparams_t) * statement->num_columns);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
232
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
233 for (i = 0; i < statement->num_columns; i++) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
234 rc = OCIParamGet(statement->stmt, OCI_HTYPE_STMT, statement->conn->err, (dvoid **)&bind[i].param, i+1);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
235 if (rc) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
236 OCIErrorGet((dvoid *)statement->conn->err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
237 luaL_error(L, "param get %s", errbuf);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
238 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
239
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
240 rc = OCIAttrGet(bind[i].param, OCI_DTYPE_PARAM, (dvoid *)&(bind[i].name), (ub4 *)&(bind[i].name_len), OCI_ATTR_NAME, statement->conn->err);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
241 if (rc) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
242 OCIErrorGet((dvoid *)statement->conn->err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
243 luaL_error(L, "name get %s", errbuf);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
244 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
245
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
246 rc = OCIAttrGet(bind[i].param, OCI_DTYPE_PARAM, (dvoid *)&(bind[i].data_type), (ub4 *)0, OCI_ATTR_DATA_TYPE, statement->conn->err);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
247 if (rc) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
248 OCIErrorGet((dvoid *)statement->conn->err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
249 luaL_error(L, "datatype get %s", errbuf);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
250 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
251
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
252 rc = OCIAttrGet(bind[i].param, OCI_DTYPE_PARAM, (dvoid *)&(bind[i].max_len), 0, OCI_ATTR_DATA_SIZE, statement->conn->err);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
253 if (rc) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
254 OCIErrorGet((dvoid *)statement->conn->err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
255 luaL_error(L, "datasize get %s", errbuf);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
256 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
257
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
258 bind[i].data = calloc(bind[i].max_len+1, sizeof(char));
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
259 rc = OCIDefineByPos(statement->stmt, &bind[i].define, statement->conn->err, (ub4)i+1, bind[i].data, bind[i].max_len, SQLT_STR, (dvoid *)&(bind[i].null), (ub2 *)0, (ub2 *)0, (ub4)OCI_DEFAULT);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
260 if (rc) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
261 OCIErrorGet((dvoid *)statement->conn->err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
262 luaL_error(L, "define by pos %s", errbuf);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
263 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
264 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
265
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
266 status = OCIStmtFetch(statement->stmt, statement->conn->err, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
267
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
268 if (status == OCI_NO_DATA) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
269 /* No more rows */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
270 lua_pushnil(L);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
271 return 1;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
272 } else if (status != OCI_SUCCESS) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
273 OCIErrorGet((dvoid *)statement->conn->err, (ub4)1, (text *)NULL, &errcode, errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
274 luaL_error(L, DBI_ERR_FETCH_FAILED, errbuf);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
275 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
276
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
277 if (statement->num_columns) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
278 int i;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
279 int d = 1;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
280
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
281 lua_newtable(L);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
282
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
283 for (i = 0; i < statement->num_columns; i++) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
284 lua_push_type_t lua_push = oracle_to_lua_push(bind[i].data_type, bind[i].null);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
285 const char *name = strlower(bind[i].name);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
286 const char *data = bind[i].data;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
287
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
288 if (lua_push == LUA_PUSH_NIL) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
289 if (named_columns) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
290 LUA_PUSH_ATTRIB_NIL(name);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
291 } else {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
292 LUA_PUSH_ARRAY_NIL(d);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
293 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
294 } else if (lua_push == LUA_PUSH_INTEGER) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
295 int val = atoi(data);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
296
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
297 if (named_columns) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
298 LUA_PUSH_ATTRIB_INT(name, val);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
299 } else {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
300 LUA_PUSH_ARRAY_INT(d, val);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
301 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
302 } else if (lua_push == LUA_PUSH_NUMBER) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
303 double val = strtod(data, NULL);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
304
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
305 if (named_columns) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
306 LUA_PUSH_ATTRIB_FLOAT(name, val);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
307 } else {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
308 LUA_PUSH_ARRAY_FLOAT(d, val);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
309 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
310 } else if (lua_push == LUA_PUSH_STRING) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
311 if (named_columns) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
312 LUA_PUSH_ATTRIB_STRING(name, data);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
313 } else {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
314 LUA_PUSH_ARRAY_STRING(d, data);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
315 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
316 } else if (lua_push == LUA_PUSH_BOOLEAN) {
18
b705ba343e94 Misc changes.
nrich@ii.net
parents: 17
diff changeset
317 int val = atoi(data);
17
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
318
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
319 if (named_columns) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
320 LUA_PUSH_ATTRIB_BOOL(name, val);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
321 } else {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
322 LUA_PUSH_ARRAY_BOOL(d, val);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
323 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
324 } else {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
325 luaL_error(L, DBI_ERR_UNKNOWN_PUSH);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
326 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
327 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
328 } else {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
329 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
330 * no columns returned by statement?
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
331 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
332 lua_pushnil(L);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
333 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
334
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
335 return 1;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
336 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
337
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
338 static int next_iterator(lua_State *L) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
339 statement_t *statement = (statement_t *)luaL_checkudata(L, lua_upvalueindex(1), DBD_ORACLE_STATEMENT);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
340 int named_columns = lua_toboolean(L, lua_upvalueindex(2));
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
341
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
342 return statement_fetch_impl(L, statement, named_columns);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
343 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
344
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
345 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
346 * table = statement:fetch(named_indexes)
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
347 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
348 static int statement_fetch(lua_State *L) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
349 statement_t *statement = (statement_t *)luaL_checkudata(L, 1, DBD_ORACLE_STATEMENT);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
350 int named_columns = lua_toboolean(L, 2);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
351
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
352 return statement_fetch_impl(L, statement, named_columns);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
353 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
354
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
355 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
356 * iterfunc = statement:rows(named_indexes)
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
357 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
358 static int statement_rows(lua_State *L) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
359 if (lua_gettop(L) == 1) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
360 lua_pushvalue(L, 1);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
361 lua_pushboolean(L, 0);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
362 } else {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
363 lua_pushvalue(L, 1);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
364 lua_pushboolean(L, lua_toboolean(L, 2));
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
365 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
366
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
367 lua_pushcclosure(L, next_iterator, 2);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
368 return 1;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
369 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
370
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
371 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
372 * __gc
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
373 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
374 static int statement_gc(lua_State *L) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
375 /* always free the handle */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
376 statement_close(L);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
377
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
378 return 0;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
379 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
380
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
381 int dbd_oracle_statement_create(lua_State *L, connection_t *conn, const char *sql_query) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
382 int rc;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
383 statement_t *statement = NULL;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
384 OCIStmt *stmt;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
385 char *new_sql;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
386
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
387 /*
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
388 * convert SQL string into a Oracle API compatible SQL statement
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
389 */
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
390 new_sql = replace_placeholders(L, ':', sql_query);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
391
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
392 rc = OCIHandleAlloc((dvoid *)conn->oracle, (dvoid **)&stmt, OCI_HTYPE_STMT, 0, (dvoid **)0);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
393 rc = OCIStmtPrepare(stmt, conn->err, new_sql, strlen(new_sql), (ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
394
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
395 free(new_sql);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
396
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
397 statement = (statement_t *)lua_newuserdata(L, sizeof(statement_t));
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
398 statement->conn = conn;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
399 statement->stmt = stmt;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
400 statement->num_columns = 0;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
401
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
402 luaL_getmetatable(L, DBD_ORACLE_STATEMENT);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
403 lua_setmetatable(L, -2);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
404
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
405 return 1;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
406 }
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
407
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
408 int dbd_oracle_statement(lua_State *L) {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
409 static const luaL_Reg statement_methods[] = {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
410 {"close", statement_close},
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
411 {"execute", statement_execute},
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
412 {"fetch", statement_fetch},
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
413 {"rows", statement_rows},
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
414 {NULL, NULL}
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
415 };
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
416
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
417 static const luaL_Reg statement_class_methods[] = {
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
418 {NULL, NULL}
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
419 };
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
420
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
421 luaL_newmetatable(L, DBD_ORACLE_STATEMENT);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
422 luaL_register(L, 0, statement_methods);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
423 lua_pushvalue(L,-1);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
424 lua_setfield(L, -2, "__index");
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
425
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
426 lua_pushcfunction(L, statement_gc);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
427 lua_setfield(L, -2, "__gc");
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
428
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
429 luaL_register(L, DBD_ORACLE_STATEMENT, statement_class_methods);
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
430
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
431 return 1;
21c4feaeafe7 Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
diff changeset
432 }

mercurial