~ubuntu-branches/ubuntu/lucid/php5/lucid

« back to all changes in this revision

Viewing changes to ext/mysqlnd/mysqlnd_structs.h

  • Committer: Bazaar Package Importer
  • Author(s): Chuck Short
  • Date: 2010-03-16 09:09:50 UTC
  • mfrom: (1.1.18 upstream) (0.3.10 sid)
  • Revision ID: james.westby@ubuntu.com-20100316090950-e36m0pzranoixifd
Tags: 5.3.2-1ubuntu1
* Merge from debian unstable: 
  - debian/control:
    * Dropped firebird2.1-dev, libc-client-dev, libmcrypt-dev as it is in universe.
    * Dropped libmysqlclient15-dev, build against mysql 5.1.
    * Dropped libcurl-dev not in the archive.
    * Suggest php5-suhosin rather than recommends.
    * Dropped php5-imap, php5-interbase, php5-mcrypt since we have versions already in
      universe.
    * Dropped libonig-dev and libqgdbm since its in universe. (will be re-added in lucid+1)
    * Dropped locales-all.
  - modulelist: Drop imap, interbase, and mcrypt.
  - debian/rules:
    * Dropped building of mcrypt, imap, and interbase.
    * Install apport hook for php5.
  - Dropped debian/patches/libedit_is_editline.patch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
  +----------------------------------------------------------------------+
19
19
*/
20
20
 
21
 
/* $Id: mysqlnd_structs.h 289630 2009-10-14 13:51:25Z johannes $ */
 
21
/* $Id: mysqlnd_structs.h 294543 2010-02-04 20:28:55Z johannes $ */
22
22
 
23
23
#ifndef MYSQLND_STRUCTS_H
24
24
#define MYSQLND_STRUCTS_H
48
48
        uint64_t                        app;
49
49
        MYSQLND_MEMORY_POOL *pool;
50
50
        zend_uchar                      *ptr;
51
 
        unsigned int                            size;
 
51
        unsigned int            size;
52
52
        void                            (*resize_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int size TSRMLS_DC);
53
53
        void                            (*free_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk, zend_bool cache_it TSRMLS_DC);
54
54
        zend_bool                       from_pool;
96
96
        unsigned int    server_status;
97
97
        uint64_t                affected_rows;
98
98
        uint64_t                last_insert_id;
99
 
} mysqlnd_upsert_status;
 
99
} MYSQLND_UPSERT_STATUS;
100
100
 
101
101
 
102
102
typedef struct st_mysqlnd_error_info
104
104
        char error[MYSQLND_ERRMSG_SIZE+1];
105
105
        char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
106
106
        unsigned int error_no;
107
 
} mysqlnd_error_info;
108
 
 
109
 
 
110
 
typedef struct st_mysqlnd_zval_pcache                   MYSQLND_ZVAL_PCACHE;
111
 
typedef struct st_mysqlnd_thread_zval_pcache    MYSQLND_THD_ZVAL_PCACHE;
112
 
typedef struct st_mysqlnd_qcache                                MYSQLND_QCACHE;
 
107
} MYSQLND_ERROR_INFO;
113
108
 
114
109
 
115
110
typedef struct st_mysqlnd_infile_info
146
141
        void    *userdata;
147
142
} MYSQLND_INFILE;
148
143
 
149
 
typedef struct st_mysqlnd_option
 
144
typedef struct st_mysqlnd_options
150
145
{
151
 
        /* timeouts */
152
 
        unsigned int            timeout_connect;
153
 
        unsigned int            timeout_read;
154
 
        unsigned int            timeout_write;
155
 
 
156
146
        ulong           flags;
157
147
 
158
148
        /* init commands - we need to send them to server directly after connect */
179
169
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
180
170
        zend_bool       int_and_float_native;
181
171
#endif
 
172
} MYSQLND_OPTIONS;
 
173
 
 
174
typedef struct st_mysqlnd_net_options
 
175
{
 
176
        /* timeouts */
 
177
        unsigned int timeout_connect;
 
178
        unsigned int timeout_read;
 
179
        unsigned int timeout_write;
 
180
 
182
181
        unsigned int net_read_buffer_size;
183
 
} MYSQLND_OPTION;
 
182
} MYSQLND_NET_OPTIONS;
184
183
 
185
184
 
186
185
typedef struct st_mysqlnd_connection MYSQLND;
 
186
typedef struct st_mysqlnd_net   MYSQLND_NET;
 
187
typedef struct st_mysqlnd_protocol      MYSQLND_PROTOCOL;
187
188
typedef struct st_mysqlnd_res   MYSQLND_RES;
188
189
typedef char**                                  MYSQLND_ROW_C;          /* return data as array of strings */
189
190
typedef struct st_mysqlnd_stmt  MYSQLND_STMT;
195
196
 
196
197
typedef struct st_mysqlnd_result_metadata MYSQLND_RES_METADATA;
197
198
typedef struct st_mysqlnd_buffered_result MYSQLND_RES_BUFFERED;
198
 
typedef struct st_mysqlnd_background_buffered_result MYSQLND_RES_BG_BUFFERED;
199
199
typedef struct st_mysqlnd_unbuffered_result MYSQLND_RES_UNBUFFERED;
200
200
 
201
201
typedef struct st_mysqlnd_debug MYSQLND_DEBUG;
208
208
                                                                                                        zend_bool *fetched_anything
209
209
                                                                                                        TSRMLS_DC);
210
210
 
211
 
typedef struct st_mysqlnd_stats
 
211
typedef struct st_mysqlnd_stats MYSQLND_STATS;
 
212
 
 
213
typedef void (*mysqlnd_stat_trigger)(MYSQLND_STATS * stats, enum_mysqlnd_collected_stats stat, int64_t change TSRMLS_DC);
 
214
 
 
215
struct st_mysqlnd_stats
212
216
{
213
 
        uint64_t        values[STAT_LAST];
 
217
        uint64_t                                *values;
 
218
        mysqlnd_stat_trigger    *triggers;
 
219
        size_t                                  count;
 
220
        zend_bool                               in_trigger;
214
221
#ifdef ZTS
215
222
        MUTEX_T LOCK_access;
216
223
#endif
217
 
} MYSQLND_STATS;
218
 
 
219
 
 
220
 
typedef struct st_mysqlnd_net
221
 
{
222
 
        php_stream              *stream;
223
 
        /* sequence for simple checking of correct packets */
224
 
        zend_uchar              packet_no;
225
 
 
226
 
#ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
227
 
        zend_uchar              last_command;
228
 
#endif
229
 
 
230
 
        /* cmd buffer */
231
 
        MYSQLND_CMD_BUFFER      cmd_buffer;
232
 
} MYSQLND_NET;
 
224
};
 
225
 
 
226
 
 
227
typedef struct st_mysqlnd_read_buffer {
 
228
        zend_uchar      * data;
 
229
        size_t          offset;
 
230
        size_t          size;
 
231
        size_t          len;
 
232
        zend_bool       (*is_empty)(struct st_mysqlnd_read_buffer *);
 
233
        void            (*read)(struct st_mysqlnd_read_buffer *, size_t count, zend_uchar * dest);
 
234
        size_t          (*bytes_left)(struct st_mysqlnd_read_buffer *);
 
235
        void            (*free_buffer)(struct st_mysqlnd_read_buffer ** TSRMLS_DC);
 
236
} MYSQLND_READ_BUFFER;
 
237
 
 
238
 
 
239
struct st_mysqlnd_net_methods
 
240
{
 
241
        enum_func_status        (*connect)(MYSQLND_NET * net, const char * const scheme, size_t scheme_len, zend_bool persistent, char **errstr, int * errcode TSRMLS_DC);
 
242
        size_t                          (*send)(MYSQLND * const conn, char * const buf, size_t count TSRMLS_DC);
 
243
        size_t                          (*receive)(MYSQLND * conn, zend_uchar * buffer, size_t count TSRMLS_DC);
 
244
        enum_func_status        (*set_client_option)(MYSQLND_NET * const net, enum_mysqlnd_option option, const char * const value TSRMLS_DC);
 
245
        enum_func_status        (*network_read)(MYSQLND * conn, zend_uchar * buffer, size_t count TSRMLS_DC);
 
246
        size_t                          (*network_write)(MYSQLND * const conn, const zend_uchar * const buf, size_t count TSRMLS_DC);
 
247
        enum_func_status        (*decode)(zend_uchar * uncompressed_data, size_t uncompressed_data_len, const zend_uchar * const compressed_data, size_t compressed_data_len TSRMLS_DC);
 
248
        enum_func_status        (*encode)(zend_uchar * compress_buffer, size_t compress_buffer_len, const zend_uchar * const uncompressed_data, size_t uncompressed_data_len TSRMLS_DC);
 
249
        size_t                          (*consume_uneaten_data)(MYSQLND_NET * const net, enum php_mysqlnd_server_command cmd TSRMLS_DC);
 
250
        void                            (*free_contents)(MYSQLND_NET * net TSRMLS_DC);
 
251
};
 
252
 
 
253
 
 
254
struct st_mysqlnd_packet_greet;
 
255
struct st_mysqlnd_packet_greet;
 
256
struct st_mysqlnd_packet_auth;
 
257
struct st_mysqlnd_packet_ok;
 
258
struct st_mysqlnd_packet_command;
 
259
struct st_mysqlnd_packet_eof;
 
260
struct st_mysqlnd_packet_rset_header;
 
261
struct st_mysqlnd_packet_res_field;
 
262
struct st_mysqlnd_packet_row;
 
263
struct st_mysqlnd_packet_stats;
 
264
struct st_mysqlnd_packet_prepare_response;
 
265
struct st_mysqlnd_packet_chg_user_resp;
 
266
 
 
267
struct st_mysqlnd_protocol_methods
 
268
{
 
269
        struct st_mysqlnd_packet_greet *                (*get_greet_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
 
270
        struct st_mysqlnd_packet_auth *                 (*get_auth_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
 
271
        struct st_mysqlnd_packet_ok *                   (*get_ok_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
 
272
        struct st_mysqlnd_packet_command *              (*get_command_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
 
273
        struct st_mysqlnd_packet_eof *                  (*get_eof_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
 
274
        struct st_mysqlnd_packet_rset_header *  (*get_rset_header_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
 
275
        struct st_mysqlnd_packet_res_field *    (*get_result_field_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
 
276
        struct st_mysqlnd_packet_row *                  (*get_row_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
 
277
        struct st_mysqlnd_packet_stats *                (*get_stats_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
 
278
        struct st_mysqlnd_packet_prepare_response *(*get_prepare_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
 
279
        struct st_mysqlnd_packet_chg_user_resp*(*get_change_user_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
 
280
};
233
281
 
234
282
 
235
283
struct st_mysqlnd_conn_methods
236
284
{
 
285
        void                            (*init)(MYSQLND * conn TSRMLS_DC);
 
286
        enum_func_status        (*connect)(MYSQLND *conn, const char *host, const char * user, const char * passwd, unsigned int passwd_len, const char * db, unsigned int db_len, unsigned int port, const char * socket, unsigned int mysql_flags TSRMLS_DC);
237
287
        ulong                           (*escape_string)(const MYSQLND * const conn, char *newstr, const char *escapestr, size_t escapestr_len TSRMLS_DC);
238
288
        enum_func_status        (*set_charset)(MYSQLND * const conn, const char * const charset TSRMLS_DC);
239
289
        enum_func_status        (*query)(MYSQLND *conn, const char *query, unsigned int query_len TSRMLS_DC);
241
291
        enum_func_status        (*reap_query)(MYSQLND *conn TSRMLS_DC);
242
292
        MYSQLND_RES *           (*use_result)(MYSQLND * const conn TSRMLS_DC);
243
293
        MYSQLND_RES *           (*store_result)(MYSQLND * const conn TSRMLS_DC);
244
 
        MYSQLND_RES *           (*background_store_result)(MYSQLND * const conn TSRMLS_DC);
245
294
        enum_func_status        (*next_result)(MYSQLND * const conn TSRMLS_DC);
246
295
        zend_bool                       (*more_results)(const MYSQLND * const conn TSRMLS_DC);
247
296
 
254
303
        enum_func_status        (*kill_connection)(MYSQLND *conn, unsigned int pid TSRMLS_DC);
255
304
        enum_func_status        (*select_db)(MYSQLND * const conn, const char * const db, unsigned int db_len TSRMLS_DC);
256
305
        enum_func_status        (*server_dump_debug_information)(MYSQLND * const conn TSRMLS_DC);
257
 
        enum_func_status        (*change_user)(MYSQLND * const conn, const char * user, const char * passwd, const char * db TSRMLS_DC);
 
306
        enum_func_status        (*change_user)(MYSQLND * const conn, const char * user, const char * passwd, const char * db, zend_bool silent TSRMLS_DC);
258
307
 
259
 
        unsigned int            (*get_error_no)(const MYSQLND * const conn);
260
 
        const char *            (*get_error_str)(const MYSQLND * const conn);
261
 
        const char *            (*get_sqlstate)(const MYSQLND * const conn);
262
 
        uint64_t                        (*get_thread_id)(const MYSQLND * const conn);
 
308
        unsigned int            (*get_error_no)(const MYSQLND * const conn TSRMLS_DC);
 
309
        const char *            (*get_error_str)(const MYSQLND * const conn TSRMLS_DC);
 
310
        const char *            (*get_sqlstate)(const MYSQLND * const conn TSRMLS_DC);
 
311
        uint64_t                        (*get_thread_id)(const MYSQLND * const conn TSRMLS_DC);
263
312
        void                            (*get_statistics)(const MYSQLND * const conn, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
264
313
 
265
 
        unsigned long           (*get_server_version)(const MYSQLND * const conn);
266
 
        const char *            (*get_server_information)(const MYSQLND * const conn);
 
314
        unsigned long           (*get_server_version)(const MYSQLND * const conn TSRMLS_DC);
 
315
        const char *            (*get_server_information)(const MYSQLND * const conn TSRMLS_DC);
267
316
        enum_func_status        (*get_server_statistics)(MYSQLND *conn, char **message, unsigned int * message_len TSRMLS_DC);
268
 
        const char *            (*get_host_information)(const MYSQLND * const conn);
269
 
        unsigned int            (*get_protocol_information)(const MYSQLND * const conn);
270
 
        const char *            (*get_last_message)(const MYSQLND * const conn);
271
 
        const char *            (*charset_name)(const MYSQLND * const conn);
 
317
        const char *            (*get_host_information)(const MYSQLND * const conn TSRMLS_DC);
 
318
        unsigned int            (*get_protocol_information)(const MYSQLND * const conn TSRMLS_DC);
 
319
        const char *            (*get_last_message)(const MYSQLND * const conn TSRMLS_DC);
 
320
        const char *            (*charset_name)(const MYSQLND * const conn TSRMLS_DC);
272
321
        MYSQLND_RES *           (*list_fields)(MYSQLND *conn, const char *table, const char *achtung_wild TSRMLS_DC);
273
322
        MYSQLND_RES *           (*list_method)(MYSQLND *conn, const char *query, const char *achtung_wild, char *par1 TSRMLS_DC);
274
323
 
275
 
        uint64_t                        (*get_last_insert_id)(const MYSQLND * const conn);
276
 
        uint64_t                        (*get_affected_rows)(const MYSQLND * const conn);
277
 
        unsigned int            (*get_warning_count)(const MYSQLND * const conn);
 
324
        uint64_t                        (*get_last_insert_id)(const MYSQLND * const conn TSRMLS_DC);
 
325
        uint64_t                        (*get_affected_rows)(const MYSQLND * const conn TSRMLS_DC);
 
326
        unsigned int            (*get_warning_count)(const MYSQLND * const conn TSRMLS_DC);
278
327
 
279
 
        unsigned int            (*get_field_count)(const MYSQLND * const conn);
 
328
        unsigned int            (*get_field_count)(const MYSQLND * const conn TSRMLS_DC);
280
329
 
281
330
        enum_func_status        (*set_server_option)(MYSQLND * const conn, enum_mysqlnd_server_option option TSRMLS_DC);
282
331
        enum_func_status        (*set_client_option)(MYSQLND * const conn, enum_mysqlnd_option option, const char * const value TSRMLS_DC);
285
334
        enum_func_status        (*close)(MYSQLND *conn, enum_connection_close_type close_type TSRMLS_DC);
286
335
        void                            (*dtor)(MYSQLND *conn TSRMLS_DC);       /* private */
287
336
 
 
337
        enum_func_status        (*query_read_result_set_header)(MYSQLND *conn, MYSQLND_STMT *stmt TSRMLS_DC);
 
338
 
288
339
        MYSQLND *                       (*get_reference)(MYSQLND * const conn TSRMLS_DC);
289
340
        enum_func_status        (*free_reference)(MYSQLND * const conn TSRMLS_DC);
290
341
        enum mysqlnd_connection_state (*get_state)(MYSQLND * const conn TSRMLS_DC);
291
342
        void                            (*set_state)(MYSQLND * const conn, enum mysqlnd_connection_state new_state TSRMLS_DC);
 
343
 
 
344
        enum_func_status        (*simple_command)(MYSQLND *conn, enum php_mysqlnd_server_command command, const char * const arg, size_t arg_len, enum mysqlnd_packet_type ok_packet, zend_bool silent, zend_bool ignore_upsert_status TSRMLS_DC);
 
345
        enum_func_status        (*simple_command_handle_response)(MYSQLND *conn, enum mysqlnd_packet_type ok_packet, zend_bool silent, enum php_mysqlnd_server_command command, zend_bool ignore_upsert_status TSRMLS_DC);
 
346
 
 
347
        enum_func_status        (*restart_psession)(MYSQLND *conn TSRMLS_DC);
 
348
        enum_func_status        (*end_psession)(MYSQLND *conn TSRMLS_DC);
292
349
};
293
350
 
294
351
 
300
357
 
301
358
        MYSQLND_RES *           (*use_result)(MYSQLND_RES * const result, zend_bool ps_protocol TSRMLS_DC);
302
359
        MYSQLND_RES *           (*store_result)(MYSQLND_RES * result, MYSQLND * const conn, zend_bool ps TSRMLS_DC);
303
 
        MYSQLND_RES *           (*background_store_result)(MYSQLND_RES * result, MYSQLND * const conn, zend_bool ps TSRMLS_DC);
304
360
        void                            (*fetch_into)(MYSQLND_RES *result, unsigned int flags, zval *return_value, enum_mysqlnd_extension ext TSRMLS_DC ZEND_FILE_LINE_DC);
305
361
        MYSQLND_ROW_C           (*fetch_row_c)(MYSQLND_RES *result TSRMLS_DC);
306
362
        void                            (*fetch_all)(MYSQLND_RES *result, unsigned int flags, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
307
363
        void                            (*fetch_field_data)(MYSQLND_RES *result, unsigned int offset, zval *return_value TSRMLS_DC);
308
 
        uint64_t                        (*num_rows)(const MYSQLND_RES * const result);
309
 
        unsigned int            (*num_fields)(const MYSQLND_RES * const result);
 
364
        uint64_t                        (*num_rows)(const MYSQLND_RES * const result TSRMLS_DC);
 
365
        unsigned int            (*num_fields)(const MYSQLND_RES * const result TSRMLS_DC);
310
366
        enum_func_status        (*skip_result)(MYSQLND_RES * const result TSRMLS_DC);
311
367
        enum_func_status        (*seek_data)(MYSQLND_RES * result, uint64_t row TSRMLS_DC);
312
 
        MYSQLND_FIELD_OFFSET (*seek_field)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET field_offset);
313
 
        MYSQLND_FIELD_OFFSET (*field_tell)(const MYSQLND_RES * const result);
 
368
        MYSQLND_FIELD_OFFSET (*seek_field)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET field_offset TSRMLS_DC);
 
369
        MYSQLND_FIELD_OFFSET (*field_tell)(const MYSQLND_RES * const result TSRMLS_DC);
314
370
        const MYSQLND_FIELD *(*fetch_field)(MYSQLND_RES * const result TSRMLS_DC);
315
371
        const MYSQLND_FIELD *(*fetch_field_direct)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC);
316
372
        const MYSQLND_FIELD *(*fetch_fields)(MYSQLND_RES * const result TSRMLS_DC);
317
373
 
318
 
        enum_func_status        (*read_result_metadata)(MYSQLND_RES *result, MYSQLND *conn TSRMLS_DC);
319
 
        unsigned long *         (*fetch_lengths)(MYSQLND_RES * const result);
 
374
        enum_func_status        (*read_result_metadata)(MYSQLND_RES *result, MYSQLND * conn TSRMLS_DC);
 
375
        unsigned long *         (*fetch_lengths)(MYSQLND_RES * const result TSRMLS_DC);
 
376
        enum_func_status        (*store_result_fetch_data)(MYSQLND * const conn, MYSQLND_RES *result, MYSQLND_RES_METADATA *meta, zend_bool binary_protocol, zend_bool to_cache TSRMLS_DC);
 
377
        void                            (*initialize_result_set_rest)(MYSQLND_RES * const result TSRMLS_DC);
 
378
 
320
379
        void                            (*free_result_buffers)(MYSQLND_RES * result TSRMLS_DC); /* private */
321
380
        enum_func_status        (*free_result)(MYSQLND_RES * result, zend_bool implicit TSRMLS_DC);
322
 
        void                            (*free_result_internal)(MYSQLND_RES *result TSRMLS_DC);
323
 
        void                            (*free_result_contents)(MYSQLND_RES *result TSRMLS_DC);
 
381
        void                            (*free_result_internal)(MYSQLND_RES *result TSRMLS_DC);
 
382
        void                            (*free_result_contents)(MYSQLND_RES *result TSRMLS_DC);
 
383
        void                            (*free_buffered_data)(MYSQLND_RES *result TSRMLS_DC);
 
384
        void                            (*unbuffered_free_last_data)(MYSQLND_RES *result TSRMLS_DC);
324
385
 
325
 
        /* for decoding - binary or text protocol */    
326
 
        void                            (*row_decoder)(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval ** fields, unsigned int field_count, MYSQLND_FIELD *fields_metadata, MYSQLND *conn TSRMLS_DC);
 
386
        /* for decoding - binary or text protocol */
 
387
        void                            (*row_decoder)(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval ** fields,
 
388
                                                                        unsigned int field_count, MYSQLND_FIELD *fields_metadata,
 
389
                                                                        zend_bool persistent,
 
390
                                                                        zend_bool as_unicode, zend_bool as_int_or_float,
 
391
                                                                        MYSQLND_STATS * stats TSRMLS_DC);
327
392
};
328
393
 
329
394
 
332
397
        const MYSQLND_FIELD *   (*fetch_field)(MYSQLND_RES_METADATA * const meta TSRMLS_DC);
333
398
        const MYSQLND_FIELD *   (*fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC);
334
399
        const MYSQLND_FIELD *   (*fetch_fields)(MYSQLND_RES_METADATA * const meta TSRMLS_DC);
335
 
        MYSQLND_FIELD_OFFSET    (*field_tell)(const MYSQLND_RES_METADATA * const meta);
 
400
        MYSQLND_FIELD_OFFSET    (*field_tell)(const MYSQLND_RES_METADATA * const meta TSRMLS_DC);
336
401
        enum_func_status                (*read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND *conn TSRMLS_DC);
337
402
        MYSQLND_RES_METADATA *  (*clone_metadata)(const MYSQLND_RES_METADATA * const meta, zend_bool persistent TSRMLS_DC);
338
403
        void                                    (*free_metadata)(MYSQLND_RES_METADATA *meta, zend_bool persistent TSRMLS_DC);
345
410
        enum_func_status        (*execute)(MYSQLND_STMT * const stmt TSRMLS_DC);
346
411
        MYSQLND_RES *           (*use_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
347
412
        MYSQLND_RES *           (*store_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
348
 
        MYSQLND_RES *           (*background_store_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
349
413
        MYSQLND_RES *           (*get_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
350
414
        zend_bool                       (*more_results)(const MYSQLND_STMT * const stmt TSRMLS_DC);
351
415
        enum_func_status        (*next_result)(MYSQLND_STMT * const stmt TSRMLS_DC);
364
428
        enum_func_status        (*bind_result)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND * const result_bind TSRMLS_DC);
365
429
        enum_func_status        (*bind_one_result)(MYSQLND_STMT * const stmt, unsigned int param_no TSRMLS_DC);
366
430
        void                            (*set_result_bind_dtor)(MYSQLND_STMT * const stmt, void (*result_bind_dtor)(MYSQLND_RESULT_BIND * TSRMLS_DC) TSRMLS_DC);
367
 
        enum_func_status        (*send_long_data)(MYSQLND_STMT * const stmt, unsigned int param_num,
368
 
                                                                                  const char * const data, unsigned long length TSRMLS_DC);
369
 
        MYSQLND_RES *           (*get_parameter_metadata)(MYSQLND_STMT * const stmt);
 
431
        enum_func_status        (*send_long_data)(MYSQLND_STMT * const stmt, unsigned int param_num, const char * const data, unsigned long length TSRMLS_DC);
 
432
        MYSQLND_RES *           (*get_parameter_metadata)(MYSQLND_STMT * const stmt TSRMLS_DC);
370
433
        MYSQLND_RES *           (*get_result_metadata)(MYSQLND_STMT * const stmt TSRMLS_DC);
371
434
 
372
 
        uint64_t                        (*get_last_insert_id)(const MYSQLND_STMT * const stmt);
373
 
        uint64_t                        (*get_affected_rows)(const MYSQLND_STMT * const stmt);
374
 
        uint64_t                        (*get_num_rows)(const MYSQLND_STMT * const stmt);
375
 
 
376
 
        unsigned int            (*get_param_count)(const MYSQLND_STMT * const stmt);
377
 
        unsigned int            (*get_field_count)(const MYSQLND_STMT * const stmt);
378
 
        unsigned int            (*get_warning_count)(const MYSQLND_STMT * const stmt);
379
 
 
380
 
        unsigned int            (*get_error_no)(const MYSQLND_STMT * const stmt);
381
 
        const char *            (*get_error_str)(const MYSQLND_STMT * const stmt);
382
 
        const char *            (*get_sqlstate)(const MYSQLND_STMT * const stmt);
 
435
        uint64_t                        (*get_last_insert_id)(const MYSQLND_STMT * const stmt TSRMLS_DC);
 
436
        uint64_t                        (*get_affected_rows)(const MYSQLND_STMT * const stmt TSRMLS_DC);
 
437
        uint64_t                        (*get_num_rows)(const MYSQLND_STMT * const stmt TSRMLS_DC);
 
438
 
 
439
        unsigned int            (*get_param_count)(const MYSQLND_STMT * const stmt TSRMLS_DC);
 
440
        unsigned int            (*get_field_count)(const MYSQLND_STMT * const stmt TSRMLS_DC);
 
441
        unsigned int            (*get_warning_count)(const MYSQLND_STMT * const stmt TSRMLS_DC);
 
442
 
 
443
        unsigned int            (*get_error_no)(const MYSQLND_STMT * const stmt TSRMLS_DC);
 
444
        const char *            (*get_error_str)(const MYSQLND_STMT * const stmt TSRMLS_DC);
 
445
        const char *            (*get_sqlstate)(const MYSQLND_STMT * const stmt TSRMLS_DC);
383
446
 
384
447
        enum_func_status        (*get_attribute)(const MYSQLND_STMT * const stmt, enum mysqlnd_stmt_attr attr_type, void * const value TSRMLS_DC);
385
448
        enum_func_status        (*set_attribute)(MYSQLND_STMT * const stmt, enum mysqlnd_stmt_attr attr_type, const void * const value TSRMLS_DC);
386
449
};
387
450
 
388
451
 
 
452
struct st_mysqlnd_net
 
453
{
 
454
        php_stream                      *stream;
 
455
        struct st_mysqlnd_net_methods m;
 
456
 
 
457
        /* sequence for simple checking of correct packets */
 
458
        zend_uchar                      packet_no;
 
459
        zend_bool                       compressed;
 
460
        zend_uchar                      compressed_envelope_packet_no;
 
461
#ifdef MYSQLND_COMPRESSION_ENABLED
 
462
        MYSQLND_READ_BUFFER     * uncompressed_data;
 
463
#endif
 
464
#ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
 
465
        zend_uchar                      last_command;
 
466
#endif
 
467
        /* cmd buffer */
 
468
        MYSQLND_CMD_BUFFER      cmd_buffer;
 
469
 
 
470
        MYSQLND_NET_OPTIONS options;
 
471
 
 
472
        zend_bool                       persistent;
 
473
};
 
474
 
 
475
 
 
476
struct st_mysqlnd_protocol
 
477
{
 
478
        struct st_mysqlnd_protocol_methods m;
 
479
        zend_bool persistent;
 
480
};
 
481
 
 
482
 
389
483
struct st_mysqlnd_connection
390
484
{
391
485
/* Operation related */
392
 
        MYSQLND_NET             net;
 
486
        MYSQLND_NET             * net;
 
487
        MYSQLND_PROTOCOL * protocol;
393
488
 
394
489
/* Information related */
395
490
        char                    *host;
 
491
        unsigned int    host_len;
396
492
        char                    *unix_socket;
 
493
        unsigned int    unix_socket_len;
397
494
        char                    *user;
 
495
        unsigned int    user_len;
398
496
        char                    *passwd;
399
 
        unsigned int    *passwd_len;
 
497
        unsigned int    passwd_len;
400
498
        char                    *scheme;
 
499
        unsigned int    scheme_len;
401
500
        uint64_t                thread_id;
402
501
        char                    *server_version;
403
502
        char                    *host_info;
404
503
        unsigned char   *scramble;
405
504
        const MYSQLND_CHARSET *charset;
406
505
        const MYSQLND_CHARSET *greet_charset;
 
506
        char                    *connect_or_select_db;
 
507
        unsigned int    connect_or_select_db_len;
407
508
        MYSQLND_INFILE  infile;
408
509
        unsigned int    protocol_version;
409
510
        unsigned long   max_packet_size;
412
513
        unsigned long   server_capabilities;
413
514
 
414
515
        /* For UPSERT queries */
415
 
        mysqlnd_upsert_status upsert_status;
 
516
        MYSQLND_UPSERT_STATUS upsert_status;
416
517
        char                    *last_message;
417
518
        unsigned int    last_message_len;
418
519
 
419
520
        /* If error packet, we use these */
420
 
        mysqlnd_error_info      error_info;
 
521
        MYSQLND_ERROR_INFO      error_info;
421
522
 
422
523
        /*
423
524
          To prevent queries during unbuffered fetches. Also to
439
540
 
440
541
        /* Temporal storage for mysql_query */
441
542
        unsigned int    field_count;
442
 
        
 
543
 
443
544
        /* persistent connection */
444
545
        zend_bool               persistent;
445
546
 
446
547
        /* options */
447
 
        MYSQLND_OPTION  options;
448
 
 
449
 
        /* zval cache */
450
 
        MYSQLND_THD_ZVAL_PCACHE *zval_cache;
451
 
 
452
 
        /* qcache */
453
 
        MYSQLND_QCACHE  *qcache;
454
 
 
455
 
        MYSQLND_MEMORY_POOL * result_set_memory_pool;
 
548
        MYSQLND_OPTIONS options;
456
549
 
457
550
        /* stats */
458
 
        MYSQLND_STATS   stats;
459
 
 
460
 
#ifdef MYSQLND_THREADED
461
 
        MUTEX_T                 LOCK_state;
462
 
 
463
 
        pthread_cond_t  COND_work_done;
464
 
 
465
 
        pthread_mutex_t LOCK_work;
466
 
        pthread_cond_t  COND_work;
467
 
        pthread_cond_t  COND_thread_ended;
468
 
        zend_bool               thread_is_running;
469
 
        zend_bool               thread_killed;
470
 
        void ***                tsrm_ls;
471
 
#endif
472
 
 
 
551
        MYSQLND_STATS   * stats;
473
552
 
474
553
        struct st_mysqlnd_conn_methods *m;
475
554
};
476
555
 
477
 
typedef struct st_php_mysql_packet_row php_mysql_packet_row;
478
 
 
479
556
 
480
557
struct mysqlnd_field_hash_key
481
558
{
484
561
#if PHP_MAJOR_VERSION >= 6
485
562
        zstr                    ustr;
486
563
        unsigned int    ulen;
487
 
#endif  
 
564
#endif
488
565
};
489
566
 
490
567
 
502
579
};
503
580
 
504
581
 
505
 
struct st_mysqlnd_background_buffered_result
506
 
{
507
 
        zval                    ***data;
508
 
        uint64_t                data_size;
509
 
        zval                    ***data_cursor;
510
 
        MYSQLND_MEMORY_POOL_CHUNK **row_buffers;
511
 
        uint64_t                row_count;
512
 
        uint64_t                initialized_rows;
513
 
        zend_bool               persistent;
514
 
 
515
 
        MYSQLND_QCACHE  *qcache;
516
 
        unsigned int    references;
517
 
 
518
 
        zend_bool               decode_in_foreground;
519
 
 
520
 
#ifdef ZTS
521
 
        zend_bool               bg_fetch_finished;
522
 
        MUTEX_T                 LOCK;
523
 
#endif
524
 
 
525
 
        mysqlnd_error_info              error_info;
526
 
        mysqlnd_upsert_status   upsert_status;
527
 
};
528
 
 
529
 
 
530
582
struct st_mysqlnd_buffered_result
531
583
{
532
584
        zval                            **data;
536
588
        uint64_t                        initialized_rows;
537
589
        zend_bool                       persistent;
538
590
 
539
 
        MYSQLND_QCACHE          *qcache;
540
591
        unsigned int            references;
541
592
 
542
 
        mysqlnd_error_info      error_info;
 
593
        MYSQLND_ERROR_INFO      error_info;
543
594
};
544
595
 
545
596
 
567
618
 
568
619
        /* To be used with store_result() - both normal and PS */
569
620
        MYSQLND_RES_BUFFERED            *stored_data;
570
 
        MYSQLND_RES_BG_BUFFERED         *bg_stored_data;
571
621
        MYSQLND_RES_UNBUFFERED          *unbuf;
572
622
 
573
623
        /*
574
624
          Column lengths of current row - both buffered and unbuffered.
575
 
          For buffered results it duplicates the data found in **data 
 
625
          For buffered results it duplicates the data found in **data
576
626
        */
577
627
        unsigned long                   *lengths;
578
628
 
579
 
        php_mysql_packet_row    *row_packet;
 
629
        struct st_mysqlnd_packet_row * row_packet;
580
630
 
581
 
        /* zval cache */
582
 
        MYSQLND_THD_ZVAL_PCACHE *zval_cache;
 
631
        MYSQLND_MEMORY_POOL * result_set_memory_pool;
583
632
};
584
633
 
585
634
 
612
661
        MYSQLND_RESULT_BIND                     *result_bind;
613
662
        zend_bool                                       result_zvals_separated_once;
614
663
 
615
 
        mysqlnd_upsert_status           upsert_status;
 
664
        MYSQLND_UPSERT_STATUS           upsert_status;
616
665
 
617
 
        mysqlnd_error_info                      error_info;
 
666
        MYSQLND_ERROR_INFO                      error_info;
618
667
 
619
668
        zend_bool                                       update_max_length;
620
669
        unsigned long                           prefetch_rows;