~ubuntu-branches/ubuntu/hardy/php5/hardy-updates

« back to all changes in this revision

Viewing changes to ext/dbx/dbx_fbsql.c

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-10-09 03:14:32 UTC
  • Revision ID: james.westby@ubuntu.com-20051009031432-kspik3lobxstafv9
Tags: upstream-5.0.5
ImportĀ upstreamĀ versionĀ 5.0.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
   +----------------------------------------------------------------------+
 
3
   | PHP Version 5                                                        |
 
4
   +----------------------------------------------------------------------+
 
5
   | Copyright (c) 1997-2004 The PHP Group                                |
 
6
   +----------------------------------------------------------------------+
 
7
   | dbx module version 1.0                                               |
 
8
   +----------------------------------------------------------------------+
 
9
   | Copyright (c) 2001-2003 Guidance Rotterdam BV                        |
 
10
   +----------------------------------------------------------------------+
 
11
   | This source file is subject to version 3.0 of the PHP license,       |
 
12
   | that is bundled with this package in the file LICENSE, and is        |
 
13
   | available through the world-wide-web at the following url:           |
 
14
   | http://www.php.net/license/3_0.txt.                                  |
 
15
   | If you did not receive a copy of the PHP license and are unable to   |
 
16
   | obtain it through the world-wide-web, please send a note to          |
 
17
   | license@php.net so we can mail you a copy immediately.               |
 
18
   +----------------------------------------------------------------------+
 
19
   | Author : Marc Boeren         <marc@guidance.nl>                      |
 
20
   |          Frank M. Kromann    <frank@kromann.info>                    |
 
21
   +----------------------------------------------------------------------+
 
22
*/
 
23
 
 
24
/* $Id: dbx_fbsql.c,v 1.14 2004/01/08 08:15:09 andi Exp $ */
 
25
 
 
26
#include "dbx.h"
 
27
#include "dbx_fbsql.h"
 
28
 
 
29
#define FBSQL_ASSOC    1<<0
 
30
#define FBSQL_NUM      1<<1
 
31
 
 
32
int dbx_fbsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
 
33
{
 
34
        /* returns connection handle as resource on success or 0 as long on failure */
 
35
        int number_of_arguments=3;
 
36
        zval **arguments[3];
 
37
        zval *returned_zval=NULL;
 
38
        zval *select_db_zval=NULL;
 
39
 
 
40
        arguments[0]=host;
 
41
        arguments[1]=username;
 
42
        arguments[2]=password;
 
43
        dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_connect", &returned_zval, number_of_arguments, arguments);
 
44
        if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
 
45
                if (returned_zval) zval_ptr_dtor(&returned_zval);
 
46
                return 0;
 
47
        }
 
48
 
 
49
        number_of_arguments=2;
 
50
        arguments[0]=db;
 
51
        arguments[1]=&returned_zval;
 
52
        dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_select_db", &select_db_zval, number_of_arguments, arguments);
 
53
        if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
 
54
                if (select_db_zval) zval_ptr_dtor(&select_db_zval);
 
55
                /* also close connection */
 
56
                number_of_arguments=1;
 
57
                arguments[0]=&returned_zval;
 
58
                zend_list_addref(Z_LVAL_P(returned_zval));
 
59
                dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &select_db_zval, number_of_arguments, arguments);
 
60
                if (select_db_zval) zval_ptr_dtor(&select_db_zval);
 
61
                zval_ptr_dtor(&returned_zval);
 
62
                return 0;
 
63
        }
 
64
        zval_ptr_dtor(&select_db_zval);
 
65
 
 
66
        MOVE_RETURNED_TO_RV(rv, returned_zval);
 
67
        return 1;
 
68
}
 
69
 
 
70
int dbx_fbsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
 
71
{
 
72
        /* returns persistent connection handle as resource on success or 0 as long on failure */
 
73
        int number_of_arguments=3;
 
74
        zval **arguments[3];
 
75
        zval *returned_zval=NULL;
 
76
        zval *select_db_zval=NULL;
 
77
 
 
78
        arguments[0]=host;
 
79
        arguments[1]=username;
 
80
        arguments[2]=password;
 
81
        dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_pconnect", &returned_zval, number_of_arguments, arguments);
 
82
        if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
 
83
                if (returned_zval) zval_ptr_dtor(&returned_zval);
 
84
                return 0;
 
85
        }
 
86
 
 
87
        number_of_arguments=2;
 
88
        arguments[0]=db;
 
89
        arguments[1]=&returned_zval;
 
90
        dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_select_db", &select_db_zval, number_of_arguments, arguments);
 
91
        if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
 
92
                if (select_db_zval) zval_ptr_dtor(&select_db_zval);
 
93
                /* also close connection */
 
94
                number_of_arguments=1;
 
95
                arguments[0]=&returned_zval;
 
96
                zend_list_addref(Z_LVAL_P(returned_zval));
 
97
                dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &select_db_zval, number_of_arguments, arguments);
 
98
                if (select_db_zval) zval_ptr_dtor(&select_db_zval);
 
99
                zval_ptr_dtor(&returned_zval);
 
100
                return 0;
 
101
        }
 
102
        zval_ptr_dtor(&select_db_zval);
 
103
 
 
104
        MOVE_RETURNED_TO_RV(rv, returned_zval);
 
105
        return 1;
 
106
}
 
107
 
 
108
int dbx_fbsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
 
109
{
 
110
        /* returns 1 as long on success or 0 as long on failure */
 
111
        int number_of_arguments=1;
 
112
        zval **arguments[1];
 
113
        zval *returned_zval=NULL;
 
114
 
 
115
        arguments[0]=dbx_handle;
 
116
        dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &returned_zval, number_of_arguments, arguments);
 
117
        if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
 
118
                if (returned_zval) zval_ptr_dtor(&returned_zval);
 
119
                return 0;
 
120
        }
 
121
        MOVE_RETURNED_TO_RV(rv, returned_zval);
 
122
        return 1;
 
123
}
 
124
 
 
125
int dbx_fbsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
 
126
{
 
127
        /* returns 1 as long or a result identifier as resource on success  or 0 as long on failure */
 
128
        int number_of_arguments=3;
 
129
        zval **arguments[3];
 
130
        zval *returned_zval=NULL;
 
131
 
 
132
        arguments[0]=db_name;
 
133
        arguments[1]=sql_statement;
 
134
        arguments[2]=dbx_handle;
 
135
        dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_db_query", &returned_zval, number_of_arguments, arguments);
 
136
        /* fbsql_query returns a bool for success or failure, or a result_identifier for select statements */
 
137
        if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
 
138
                if (returned_zval) zval_ptr_dtor(&returned_zval);
 
139
                return 0;
 
140
        }
 
141
        MOVE_RETURNED_TO_RV(rv, returned_zval);
 
142
        return 1;
 
143
}
 
144
 
 
145
int dbx_fbsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
 
146
{
 
147
        /* returns column-count as long on success or 0 as long on failure */
 
148
        int number_of_arguments=1;
 
149
        zval **arguments[1];
 
150
        zval *returned_zval=NULL;
 
151
 
 
152
        arguments[0]=result_handle;
 
153
        dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_num_fields", &returned_zval, number_of_arguments, arguments);
 
154
        if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
 
155
                if (returned_zval) zval_ptr_dtor(&returned_zval);
 
156
                return 0;
 
157
        }
 
158
        MOVE_RETURNED_TO_RV(rv, returned_zval);
 
159
        return 1;
 
160
}
 
161
 
 
162
int dbx_fbsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
 
163
{
 
164
        /* returns column-name as string on success or 0 as long on failure */
 
165
        int number_of_arguments=2;
 
166
        zval **arguments[2];
 
167
        zval *zval_column_index;
 
168
        zval *returned_zval=NULL;
 
169
 
 
170
        MAKE_STD_ZVAL(zval_column_index);
 
171
        ZVAL_LONG(zval_column_index, column_index);
 
172
        arguments[0]=result_handle;
 
173
        arguments[1]=&zval_column_index;
 
174
        dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_field_name", &returned_zval, number_of_arguments, arguments);
 
175
        /* fbsql_field_name returns a string */
 
176
        if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
 
177
                if (returned_zval) zval_ptr_dtor(&returned_zval);
 
178
                FREE_ZVAL(zval_column_index);
 
179
                return 0;
 
180
        }
 
181
        FREE_ZVAL(zval_column_index);
 
182
        MOVE_RETURNED_TO_RV(rv, returned_zval);
 
183
        return 1;
 
184
}
 
185
 
 
186
int dbx_fbsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
 
187
{
 
188
        /* returns column-type as string on success or 0 as long on failure */
 
189
        int number_of_arguments=2;
 
190
        zval **arguments[2];
 
191
        zval *zval_column_index;
 
192
        zval *returned_zval=NULL;
 
193
 
 
194
        MAKE_STD_ZVAL(zval_column_index);
 
195
        ZVAL_LONG(zval_column_index, column_index);
 
196
        arguments[0]=result_handle;
 
197
        arguments[1]=&zval_column_index;
 
198
        dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_field_type", &returned_zval, number_of_arguments, arguments);
 
199
        /* fbsql_field_name returns a string */
 
200
        if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
 
201
                if (returned_zval) zval_ptr_dtor(&returned_zval);
 
202
                FREE_ZVAL(zval_column_index);
 
203
                return 0;
 
204
        }
 
205
        FREE_ZVAL(zval_column_index);
 
206
 
 
207
        MOVE_RETURNED_TO_RV(rv, returned_zval);
 
208
        return 1;
 
209
}
 
210
 
 
211
int dbx_fbsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
 
212
{
 
213
        /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
 
214
        int number_of_arguments=2;
 
215
        zval **arguments[2];
 
216
        zval *zval_resulttype=NULL;
 
217
        zval *returned_zval=NULL;
 
218
 
 
219
        MAKE_STD_ZVAL(zval_resulttype);
 
220
        ZVAL_LONG(zval_resulttype, FBSQL_NUM);
 
221
        arguments[0]=result_handle;
 
222
        arguments[1]=&zval_resulttype;
 
223
        dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_fetch_array", &returned_zval, number_of_arguments, arguments);
 
224
        if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
 
225
                if (returned_zval) zval_ptr_dtor(&returned_zval);
 
226
                FREE_ZVAL(zval_resulttype);
 
227
                return 0;
 
228
        }
 
229
        FREE_ZVAL(zval_resulttype);
 
230
        MOVE_RETURNED_TO_RV(rv, returned_zval);
 
231
        return 1;
 
232
}
 
233
 
 
234
int dbx_fbsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
 
235
{
 
236
        /* returns string */
 
237
        int number_of_arguments=1;
 
238
        zval **arguments[1];
 
239
        zval *returned_zval=NULL;
 
240
 
 
241
        arguments[0]=dbx_handle;
 
242
        if (!dbx_handle) number_of_arguments=0;
 
243
        dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_error", &returned_zval, number_of_arguments, arguments);
 
244
        if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
 
245
                if (returned_zval) zval_ptr_dtor(&returned_zval);
 
246
                return 0;
 
247
        }
 
248
        MOVE_RETURNED_TO_RV(rv, returned_zval);
 
249
        return 1;
 
250
}
 
251
 
 
252
int dbx_fbsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS)
 
253
{
 
254
        /* returns escaped string */
 
255
        /* replace \ with \\ */
 
256
        /*         ' with '' */
 
257
        char * str;
 
258
        int len;
 
259
        char * tmpstr;
 
260
        int tmplen;
 
261
 
 
262
        if (Z_STRLEN_PP(string) == 0) {
 
263
                ZVAL_EMPTY_STRING(*rv);
 
264
                return 1;
 
265
        }
 
266
        tmpstr = estrdup(Z_STRVAL_PP(string));
 
267
        tmplen = Z_STRLEN_PP(string);
 
268
        /* php_str_to_str uses a smart_str that allocates memory */
 
269
        /* this memory must be freed or passed on to rv */
 
270
        str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len);
 
271
        efree(tmpstr);
 
272
 
 
273
        ZVAL_STRINGL(*rv, str, len, 0);
 
274
 
 
275
        return 1;
 
276
}
 
277
 
 
278
/*
 
279
 * Local variables:
 
280
 * tab-width: 4
 
281
 * c-basic-offset: 4
 
282
 * End:
 
283
 */