Author: ahristov
Date: 2007-02-23 17:43:47 +0100 (Fri, 23 Feb 2007)
New Revision: 63
Added:
trunk/ext/mysqli/mysqlnd/mysqlnd_palloc.h
trunk/ext/mysqli/mysqlnd/mysqlnd_statistics.h
trunk/ext/mysqli/mysqlnd/mysqlnd_wireprotocol.h
Modified:
trunk/ext/mysqli/mysqlnd/mysqlnd.c
trunk/ext/mysqli/mysqlnd/mysqlnd.h
trunk/ext/mysqli/mysqlnd/mysqlnd_alloc.c
trunk/ext/mysqli/mysqlnd/mysqlnd_loaddata.c
trunk/ext/mysqli/mysqlnd/mysqlnd_palloc.c
trunk/ext/mysqli/mysqlnd/mysqlnd_priv.h
trunk/ext/mysqli/mysqlnd/mysqlnd_ps.c
trunk/ext/mysqli/mysqlnd/mysqlnd_ps_codec.c
trunk/ext/mysqli/mysqlnd/mysqlnd_statistics.c
trunk/ext/mysqli/mysqlnd/mysqlnd_wireprotocol.c
Log:
Reorganise mysqlnd_priv.h . It grew too big and unmanaged,
like a waste-bin. Time for clean up came.
Modified: trunk/ext/mysqli/mysqlnd/mysqlnd.c
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd.c 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd.c 2007-02-23 16:43:47 UTC (rev 63)
@@ -21,6 +21,7 @@
/* $Id: header,v 1.17 2006/01/01 13:09:48 sniper Exp $ */
#include "php.h"
#include "mysqlnd.h"
+#include "mysqlnd_wireprotocol.h"
#include "mysqlnd_priv.h"
#include "mysqlnd_statistics.h"
@@ -86,6 +87,7 @@
/* {{{ php_mysqlnd_free_field_metadata */
+static
void php_mysqlnd_free_field_metadata(MYSQLND_FIELD *meta)
{
if (meta) {
@@ -1088,7 +1090,7 @@
/* {{{ mysqlnd_fetch_row_unbuffered */
-enum_func_status
+static enum_func_status
mysqlnd_fetch_row_unbuffered(MYSQLND_RES *result, void *param, unsigned int flags,
zend_bool *fetched_anything TSRMLS_DC)
{
Modified: trunk/ext/mysqli/mysqlnd/mysqlnd.h
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd.h 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd.h 2007-02-23 16:43:47 UTC (rev 63)
@@ -338,7 +338,6 @@
} mysqlnd_error_info;
-typedef struct st_mysqlnd_zval_cache MYSQLND_ZVAL_CACHE;
typedef struct st_mysqlnd_zval_pcache MYSQLND_ZVAL_PCACHE;
Modified: trunk/ext/mysqli/mysqlnd/mysqlnd_alloc.c
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_alloc.c 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_alloc.c 2007-02-23 16:43:47 UTC (rev 63)
@@ -23,6 +23,7 @@
#include "php.h"
#include "mysqlnd.h"
#include "mysqlnd_priv.h"
+#include "mysqlnd_palloc.h"
#define MYSQLND_SILENT
Modified: trunk/ext/mysqli/mysqlnd/mysqlnd_loaddata.c
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_loaddata.c 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_loaddata.c 2007-02-23 16:43:47 UTC (rev 63)
@@ -21,8 +21,15 @@
#include "php.h"
#include "php_globals.h"
#include "mysqlnd.h"
+#include "mysqlnd_wireprotocol.h"
#include "mysqlnd_priv.h"
+enum_func_status mysqlnd_simple_command_handle_response(MYSQLND *conn,
+ enum php_mysql_packet_type ok_packet,
+ zend_bool silent, enum php_mysqlnd_server_command command
+ TSRMLS_DC);
+
+
#define ALLOC_CALLBACK_ARGS(a, b, c)\
if (c) {\
a = (zval ***)safe_emalloc(c, sizeof(zval **), 0);\
Modified: trunk/ext/mysqli/mysqlnd/mysqlnd_palloc.c
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_palloc.c 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_palloc.c 2007-02-23 16:43:47 UTC (rev 63)
@@ -22,6 +22,7 @@
#include "php.h"
#include "mysqlnd.h"
#include "mysqlnd_priv.h"
+#include "mysqlnd_palloc.h"
#define MYSQLND_SILENT
Added: trunk/ext/mysqli/mysqlnd/mysqlnd_palloc.h
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_palloc.h 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_palloc.h 2007-02-23 16:43:47 UTC (rev 63)
@@ -0,0 +1,78 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 6 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 2006-2007 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@stripped so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Georg Richter <georg@stripped> |
+ | Andrey Hristov <andrey@stripped> |
+ | Ulf Wendel <uwendel@stripped> |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id: header,v 1.17 2006/01/01 13:09:48 sniper Exp $ */
+#ifndef MYSQLND_PALLOC_H
+#define MYSQLND_PALLOC_H
+
+/* Session caching allocator */
+struct st_mysqlnd_zval_list {
+ zval **ptr_line;
+ zval **last_added;
+};
+
+typedef struct st_mysqlnd_zval_cache MYSQLND_ZVAL_CACHE;
+
+struct st_mysqlnd_zval_cache {
+ struct st_mysqlnd_zval_list *free_list;
+ unsigned int free_items;
+ unsigned int max_items;
+ unsigned int references;
+ unsigned long get_hits;
+ unsigned long get_misses;
+ unsigned long put_hits;
+ unsigned long put_full_misses;
+ unsigned long put_refcount_misses;
+};
+
+
+/* Persistent caching allocator */
+typedef struct st_mysqlnd_zval {
+ /* Should be first */
+ zval zv;
+ zend_bool ze_alloced;
+} mysqlnd_zval;
+
+
+typedef struct st_mysqlnd_ndzval_list {
+ mysqlnd_zval **ptr_line;
+ mysqlnd_zval **last_added;
+} mysqlnd_ndzval_list;
+
+
+struct st_mysqlnd_zval_pcache {
+ mysqlnd_zval *block;
+ mysqlnd_zval *last_in_block;
+ mysqlnd_ndzval_list *free_list;
+ unsigned int free_items;
+ unsigned int max_items;
+ unsigned int references;
+
+ unsigned long get_hits;
+ unsigned long get_misses;
+ unsigned long put_hits;
+ unsigned long put_misses;
+#ifdef ZTS
+ MUTEX_T LOCK_access;
+#endif
+};
+
+
+#endif /* MYSQLND_PALLOC_H */
Modified: trunk/ext/mysqli/mysqlnd/mysqlnd_priv.h
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_priv.h 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_priv.h 2007-02-23 16:43:47 UTC (rev 63)
@@ -35,9 +35,6 @@
}
-typedef zend_uchar mysqlnd_1b;
-typedef zend_ushort mysqlnd_2b;
-typedef zend_uint mysqlnd_4b;
#define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */
@@ -79,34 +76,7 @@
#define MAX_CHARSET_LEN 32
-#define MYSQLND_HEADER_SIZE 4
-#define MYSQLND_NULL_LENGTH (unsigned long) ~0
-
-
-/* Packet handling */
-#define PACKET_INIT(packet, enum_type, c_type) \
- { \
- packet = (c_type) ecalloc(1, packet_methods[enum_type].struct_size); \
- ((c_type) (packet))->header.m = &packet_methods[enum_type]; \
- }
-#define PACKET_WRITE(packet, conn) ((packet)->header.m->write_to_net((packet),
(conn) TSRMLS_CC))
-#define PACKET_READ(packet, conn) ((packet)->header.m->read_from_net((packet),
(conn) TSRMLS_CC))
-#define PACKET_FREE(packet) \
- do { \
- ((packet)->header.m->free_mem((packet), FALSE)); \
- } while (0);
-
-#define PACKET_INIT_ALLOCA(packet, enum_type) \
- { \
- memset(&(packet), 0, packet_methods[enum_type].struct_size); \
- (packet).header.m = &packet_methods[enum_type]; \
- }
-#define PACKET_WRITE_ALLOCA(packet, conn) PACKET_WRITE(&(packet), (conn))
-#define PACKET_READ_ALLOCA(packet, conn) PACKET_READ(&(packet), (conn))
-#define PACKET_FREE_ALLOCA(packet) (packet.header.m->free_mem(&(packet), TRUE))
-
-
/* Error handling */
#define SET_NEW_MESSAGE(buf, buf_len, message, len) \
{\
@@ -138,120 +108,8 @@
-/* Enums */
-enum php_mysql_packet_type
-{
- PROT_GREET_PACKET= 0,
- PROT_AUTH_PACKET,
- PROT_OK_PACKET,
- PROT_EOF_PACKET,
- PROT_CMD_PACKET,
- PROT_RSET_HEADER_PACKET,
- PROT_RSET_FLD_PACKET,
- PROT_ROW_PACKET,
- PROT_STATS_PACKET,
- PROT_PREPARE_RESP_PACKET,
- PROT_CHG_USER_PACKET,
- PROT_LAST, /* should always be last */
-};
-enum php_mysqlnd_server_command
-{
- COM_SLEEP = 0,
- COM_QUIT,
- COM_INIT_DB,
- COM_QUERY,
- COM_FIELD_LIST,
- COM_CREATE_DB,
- COM_DROP_DB,
- COM_REFRESH,
- COM_SHUTDOWN,
- COM_STATISTICS,
- COM_PROCESS_INFO,
- COM_CONNECT,
- COM_PROCESS_KILL,
- COM_DEBUG,
- COM_PING,
- COM_TIME,
- COM_DELAYED_INSERT,
- COM_CHANGE_USER,
- COM_BINLOG_DUMP,
- COM_TABLE_DUMP,
- COM_CONNECT_OUT,
- COM_REGISTER_SLAVE,
- COM_STMT_PREPARE,
- COM_STMT_EXECUTE,
- COM_STMT_SEND_LONG_DATA,
- COM_STMT_CLOSE,
- COM_STMT_RESET,
- COM_SET_OPTION,
- COM_STMT_FETCH,
- COM_DAEMON,
- COM_END
-};
-
-
-typedef struct st_mysqlnd_string
-{
- char *s;
- size_t l;
-} MYSQLND_STRING;
-
-
-/* Session caching allocator */
-struct st_mysqlnd_zval_list {
- zval **ptr_line;
- zval **last_added;
-};
-
-
-struct st_mysqlnd_zval_cache {
- struct st_mysqlnd_zval_list *free_list;
- unsigned int free_items;
- unsigned int max_items;
- unsigned int references;
- unsigned long get_hits;
- unsigned long get_misses;
- unsigned long put_hits;
- unsigned long put_full_misses;
- unsigned long put_refcount_misses;
-};
-
-
-/* Persistent caching allocator */
-typedef struct st_mysqlnd_zval {
- /* Should be first */
- zval zv;
- zend_bool ze_alloced;
-} mysqlnd_zval;
-
-
-typedef struct st_mysqlnd_ndzval_list {
- mysqlnd_zval **ptr_line;
- mysqlnd_zval **last_added;
-} mysqlnd_ndzval_list;
-
-
-struct st_mysqlnd_zval_pcache {
- mysqlnd_zval *block;
- mysqlnd_zval *last_in_block;
- mysqlnd_ndzval_list *free_list;
- unsigned int free_items;
- unsigned int max_items;
- unsigned int references;
-
- unsigned long get_hits;
- unsigned long get_misses;
- unsigned long put_hits;
- unsigned long put_misses;
-#ifdef ZTS
- MUTEX_T LOCK_access;
-#endif
-};
-
-
-
/* PS stuff */
typedef void (*ps_field_fetch_func)(zval *zv, const MYSQLND_FIELD * const field,
uint pack_len, zend_uchar **row TSRMLS_DC);
@@ -265,212 +123,11 @@
extern struct st_mysqlnd_perm_bind fetch_functions[MYSQL_TYPE_LAST + 1];
-/* Low-level extraction functionality */
-typedef struct st_mysqlnd_packet_methods {
- size_t struct_size;
- enum_func_status (*read_from_net)(void *packet, MYSQLND *conn TSRMLS_DC);
- size_t (*write_to_net)(void *packet, MYSQLND *conn TSRMLS_DC);
- void (*free_mem)(void *packet, zend_bool alloca);
-} mysqlnd_packet_methods;
-extern mysqlnd_packet_methods packet_methods[];
-
-
-typedef struct st_mysqlnd_packet_header {
- size_t size;
- zend_uchar packet_no;
- mysqlnd_packet_methods *m;
-} mysqlnd_packet_header;
-
-
-/* Server greets the client */
-typedef struct st_php_mysql_packet_greet {
- mysqlnd_packet_header header;
- mysqlnd_1b protocol_version;
- char *server_version;
- mysqlnd_4b thread_id;
- zend_uchar scramble_buf[SCRAMBLE_LENGTH];
- /* 1 byte pad */
- mysqlnd_2b server_capabilities;
- mysqlnd_1b charset_no;
- mysqlnd_2b server_status;
- /* 13 byte pad*/
- zend_bool pre41;
- /* If error packet, we use these */
- char error[MYSQLND_ERRMSG_SIZE+1];
- char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
- unsigned int error_no;
-} php_mysql_packet_greet;
-
-
-/* Client authenticates */
-typedef struct st_php_mysql_packet_auth {
- mysqlnd_packet_header header;
- mysqlnd_4b client_flags;
- uint32 max_packet_size;
- mysqlnd_1b charset_no;
- /* 23 byte pad */
- char *user;
- /* 8 byte scramble */
- char *db;
- /* 12 byte scramble */
-
- /* Here the packet ends. This is user supplied data */
- char *password;
- /* +1 for \0 because of scramble() */
- unsigned char *server_scramble_buf;
- size_t db_len;
-} php_mysql_packet_auth;
-
-
-
-/* OK packet */
-typedef struct st_php_mysql_packet_ok {
- mysqlnd_packet_header header;
- mysqlnd_1b field_count; /* always 0x0 */
- mynd_ulonglong affected_rows;
- mynd_ulonglong last_insert_id;
- mysqlnd_2b server_status;
- mysqlnd_2b warning_count;
- char *message;
- size_t message_len;
- /* If error packet, we use these */
- char error[MYSQLND_ERRMSG_SIZE+1];
- char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
- unsigned int error_no;
-} php_mysql_packet_ok;
-
-
-/* Command packet */
-typedef struct st_php_mysql_packet_command {
- mysqlnd_packet_header header;
- enum php_mysqlnd_server_command command;
- const char *argument;
- size_t arg_len;
-} php_mysql_packet_command;
-
-
-/* EOF packet */
-typedef struct st_php_mysql_packet_eof {
- mysqlnd_packet_header header;
- mysqlnd_1b field_count; /* 0xFE */
- mysqlnd_2b warning_count;
- mysqlnd_2b server_status;
-} php_mysql_packet_eof;
-/* EOF packet */
-
-
-/* Result Set header*/
-typedef struct st_php_mysql_packet_rset_header {
- mysqlnd_packet_header header;
- /*
- 0x00 => ok
- ~0 => LOAD DATA LOCAL
- error_no != 0 => error
- others => result set -> Read res_field packets up to field_count
- */
- unsigned long field_count;
- /*
- These are filled if no SELECT query. For SELECT warning_count
- and server status are in the last row packet, the EOF packet.
- */
- mysqlnd_2b warning_count;
- mysqlnd_2b server_status;
- unsigned long long affected_rows;
- unsigned long long last_insert_id;
- /* This is for both LOAD DATA or info, when no result set */
- char *info_or_local_file;
- size_t info_or_local_file_len;
- /* If error packet, we use these */
- mysqlnd_error_info error_info;
-} php_mysql_packet_rset_header;
-
-
-/* Result set field packet */
-typedef struct st_php_mysql_packet_res_field {
- mysqlnd_packet_header header;
- MYSQLND_FIELD *metadata;
- /* For table definitions, empty for result sets */
- zend_bool skip_parsing;
-} php_mysql_packet_res_field;
-
-
-/* Row packet */
-struct st_php_mysql_packet_row {
- mysqlnd_packet_header header;
- zval **fields;
- mysqlnd_4b field_count;
- zend_bool eof;
- /*
- These are, of course, only for SELECT in the EOF packet,
- which is detected by this packet
- */
- mysqlnd_2b warning_count;
- mysqlnd_2b server_status;
-
- zend_uchar *row_buffer;
-
- zend_bool skip_extraction;
- zend_bool binary_protocol;
- MYSQLND_FIELD *fields_metadata;
-};
-
-
-/* Statistics packet */
-typedef struct st_php_mysql_packet_stats {
- mysqlnd_packet_header header;
- char *message;
- /* message_len is not part of the packet*/
- size_t message_len;
-} php_mysql_packet_stats;
-
-
-/* COM_PREPARE response packet */
-typedef struct st_php_mysql_packet_prepare_response {
- mysqlnd_packet_header header;
- /* also known as field_count 0x00=OK , 0xFF=error */
- unsigned char error_code;
- unsigned long stmt_id;
- unsigned int field_count;
- unsigned int param_count;
- unsigned int warning_count;
-
- /* present in case of error */
- mysqlnd_error_info error_info;
-} php_mysql_packet_prepare_response;
-
-
-/* Statistics packet */
-typedef struct st_php_mysql_packet_chg_user_resp {
- mysqlnd_packet_header header;
- mysqlnd_4b field_count;
-
- /* message_len is not part of the packet*/
- mysqlnd_2b server_capabilities;
- /* If error packet, we use these */
- mysqlnd_error_info error_info;
-} php_mysql_packet_chg_user_resp;
-
-
extern const char * mysqlnd_out_of_sync;
-
-void php_mysqlnd_free_field_metadata(MYSQLND_FIELD *meta);
-void php_mysqlnd_scramble(unsigned char *buffer, const unsigned char *scramble,
- const unsigned char *password);
-unsigned long php_mysqlnd_net_field_length(zend_uchar **packet);
-zend_uchar *php_mysqlnd_net_store_length(zend_uchar *packet, mynd_ulonglong length);
-
enum_func_status mysqlnd_read_result_metadata(MYSQLND *conn, MYSQLND_RES *result
TSRMLS_DC);
-enum_func_status mysqlnd_simple_command(MYSQLND *conn, enum php_mysqlnd_server_command
command,
- const char * const arg, size_t arg_len,
- enum php_mysql_packet_type ok_packet,
- zend_bool silent TSRMLS_DC);
-enum_func_status mysqlnd_simple_command_handle_response(MYSQLND *conn,
- enum php_mysql_packet_type ok_packet,
- zend_bool silent, enum php_mysqlnd_server_command command
- TSRMLS_DC);
MYSQLND_RES *mysqlnd_result_init(unsigned int field_count, MYSQLND_ZVAL_PCACHE
*cache);
void mysqlnd_unbuffered_free_last_data(MYSQLND_RES *result);
@@ -478,8 +135,6 @@
void mysqlnd_internal_free_result_buffers(MYSQLND_RES *result);
void mysqlnd_internal_free_stmt_content(MYSQLND_STMT *stmt TSRMLS_DC);
void mysqlnd_internal_free_result(MYSQLND_RES *result TSRMLS_DC);
-size_t mysqlnd_stream_write(MYSQLND *conn, char * const buf, size_t count TSRMLS_DC);
-size_t mysqlnd_stream_write_w_header(MYSQLND *conn, char * const buf, size_t count
TSRMLS_DC);
enum_func_status mysqlnd_handle_local_infile(MYSQLND *conn, const char *filename
TSRMLS_DC);
@@ -491,12 +146,7 @@
size_t *buf_len, unsigned int null_byte_offset);
enum_func_status mysqlnd_query_read_result_set_header(MYSQLND *conn, MYSQLND_STMT *stmt
TSRMLS_DC);
-enum_func_status mysqlnd_fetch_row_unbuffered(MYSQLND_RES *result, void *param, unsigned
int flags,
- zend_bool *fetched_anything TSRMLS_DC);
-zend_uchar* mysqlnd_stmt_execute_generate_request(MYSQLND_STMT *stmt, size_t
*request_len,
- zend_bool *free_buffer);
-
int mysqlnd_set_sock_no_delay(php_stream *stream);
#endif /* MYSQLND_PRIV_H */
Modified: trunk/ext/mysqli/mysqlnd/mysqlnd_ps.c
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_ps.c 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_ps.c 2007-02-23 16:43:47 UTC (rev 63)
@@ -21,6 +21,7 @@
/* $Id: header,v 1.17 2006/01/01 13:09:48 sniper Exp $ */
#include "php.h"
#include "mysqlnd.h"
+#include "mysqlnd_wireprotocol.h"
#include "mysqlnd_priv.h"
#include "mysqlnd_statistics.h"
@@ -28,8 +29,17 @@
#define MYSQLND_SILENT
+/* Exported by mysqlnd.c */
+enum_func_status mysqlnd_simple_command(MYSQLND *conn, enum php_mysqlnd_server_command
command,
+ const char * const arg, size_t arg_len,
+ enum php_mysql_packet_type ok_packet,
+ zend_bool silent TSRMLS_DC);
+/* Exported by mysqlnd_ps_codec.c */
+zend_uchar* mysqlnd_stmt_execute_generate_request(MYSQLND_STMT *stmt, size_t
*request_len,
+ zend_bool *free_buffer);
+
MYSQLND_RES *mysqlnd_stmt_use_result(MYSQLND_STMT *stmt TSRMLS_DC);
enum_func_status mysqlnd_fetch_stmt_row_buffered(MYSQLND_RES *result, void *param,
@@ -468,7 +478,7 @@
/* }}} */
-/* {{{ mysqlnd_fetch_row_unbuffered */
+/* {{{ mysqlnd_stmt_fetch_row_unbuffered */
enum_func_status
mysqlnd_stmt_fetch_row_unbuffered(MYSQLND_RES *result, void *param, unsigned int flags,
zend_bool *fetched_anything TSRMLS_DC)
Modified: trunk/ext/mysqli/mysqlnd/mysqlnd_ps_codec.c
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_ps_codec.c 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_ps_codec.c 2007-02-23 16:43:47 UTC (rev 63)
@@ -21,6 +21,7 @@
/* $Id: header,v 1.17 2006/01/01 13:09:48 sniper Exp $ */
#include "php.h"
#include "mysqlnd.h"
+#include "mysqlnd_wireprotocol.h"
#include "mysqlnd_priv.h"
Modified: trunk/ext/mysqli/mysqlnd/mysqlnd_statistics.c
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_statistics.c 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_statistics.c 2007-02-23 16:43:47 UTC (rev 63)
@@ -25,6 +25,13 @@
#include "mysqlnd_statistics.h"
+typedef struct st_mysqlnd_string
+{
+ char *s;
+ size_t l;
+} MYSQLND_STRING;
+
+
#define STR_W_LEN(str) str, (sizeof(str) - 1)
/* {{{ mysqlnd_stats_values_names
Added: trunk/ext/mysqli/mysqlnd/mysqlnd_statistics.h
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_statistics.h 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_statistics.h 2007-02-23 16:43:47 UTC (rev 63)
@@ -0,0 +1,129 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 6 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 2006-2007 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@stripped so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Georg Richter <georg@stripped> |
+ | Andrey Hristov <andrey@stripped> |
+ | Ulf Wendel <uwendel@stripped> |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id: header,v 1.17 2006/01/01 13:09:48 sniper Exp $ */
+
+#ifndef MYSQLND_STATISTICS_H
+#define MYSQLND_STATISTICS_H
+
+
+extern MYSQLND_STATS *mysqlnd_global_stats;
+
+#ifdef ZTS
+
+#define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \
+ { \
+ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
+ mysqlnd_global_stats->values[statistic]++; \
+ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \
+ \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic]++; \
+ } \
+ }
+
+#define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) \
+ { \
+ my_uint64 v = (value); \
+ \
+ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
+ mysqlnd_global_stats->values[statistic]+= v; \
+ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \
+ \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic]+= v; \
+ } \
+ }
+
+#define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2,
value2, statistic3, value3) \
+ { \
+ my_uint64 v1 = (value1); \
+ my_uint64 v2 = (value2); \
+ my_uint64 v3 = (value3); \
+ \
+ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \
+ mysqlnd_global_stats->values[statistic1]+= v1; \
+ mysqlnd_global_stats->values[statistic2]+= v2; \
+ mysqlnd_global_stats->values[statistic3]+= v3; \
+ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \
+ \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic1]+= v1; \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic2]+= v2; \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic3]+= v3; \
+ } \
+ }
+
+
+#else /* NON-ZTS */
+
+#define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \
+ { \
+ mysqlnd_global_stats->values[statistic]++; \
+ \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic]++; \
+ } \
+ }
+
+#define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) \
+ { \
+ my_uint64 v = (value); \
+ \
+ mysqlnd_global_stats->values[statistic]+= v; \
+ \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic]+= v; \
+ } \
+ }
+
+#define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2,
value2, statistic3, value3) \
+ { \
+ my_uint64 v1 = (value1); \
+ my_uint64 v2 = (value2); \
+ my_uint64 v3 = (value3); \
+ \
+ mysqlnd_global_stats->values[statistic1]+= v1; \
+ mysqlnd_global_stats->values[statistic2]+= v2; \
+ mysqlnd_global_stats->values[statistic3]+= v3; \
+ \
+ if ((conn_stats)) { \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic1]+= v1; \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic2]+= v2; \
+ ((MYSQLND_STATS *) conn_stats)->values[statistic3]+= v3; \
+ } \
+ }
+
+#endif
+
+
+void _mysqlnd_get_connection_stats(MYSQLND *conn, zval *return_value TSRMLS_DC
ZEND_FILE_LINE_DC);
+
+#endif /* MYSQLND_STATISTICS_H */
+
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: noet sw=4 ts=4 fdm=marker
+ * vim<600: noet sw=4 ts=4
+ */
Modified: trunk/ext/mysqli/mysqlnd/mysqlnd_wireprotocol.c
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_wireprotocol.c 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_wireprotocol.c 2007-02-23 16:43:47 UTC (rev 63)
@@ -21,7 +21,9 @@
#include "php_globals.h"
#include "mysqlnd.h"
#include "mysqlnd_priv.h"
+#include "mysqlnd_wireprotocol.h"
#include "mysqlnd_statistics.h"
+#include "mysqlnd_palloc.h"
#include "ext/standard/sha1.h"
#include "php_network.h"
#include <netinet/tcp.h>
Added: trunk/ext/mysqli/mysqlnd/mysqlnd_wireprotocol.h
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_wireprotocol.h 2007-02-23 15:53:14 UTC (rev 62)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_wireprotocol.h 2007-02-23 16:43:47 UTC (rev 63)
@@ -0,0 +1,304 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 6 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 2006-2007 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@stripped so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Georg Richter <georg@stripped> |
+ | Andrey Hristov <andrey@stripped> |
+ | Ulf Wendel <uwendel@stripped> |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id: header,v 1.17 2006/01/01 13:09:48 sniper Exp $ */
+
+#ifndef MYSQLND_WIREPROTOCOL_H
+#define MYSQLND_WIREPROTOCOL_H
+
+#define MYSQLND_HEADER_SIZE 4
+
+#define MYSQLND_NULL_LENGTH (unsigned long) ~0
+
+typedef zend_uchar mysqlnd_1b;
+typedef zend_ushort mysqlnd_2b;
+typedef zend_uint mysqlnd_4b;
+
+
+/* Packet handling */
+#define PACKET_INIT(packet, enum_type, c_type) \
+ { \
+ packet = (c_type) ecalloc(1, packet_methods[enum_type].struct_size); \
+ ((c_type) (packet))->header.m = &packet_methods[enum_type]; \
+ }
+#define PACKET_WRITE(packet, conn) ((packet)->header.m->write_to_net((packet),
(conn) TSRMLS_CC))
+#define PACKET_READ(packet, conn) ((packet)->header.m->read_from_net((packet),
(conn) TSRMLS_CC))
+#define PACKET_FREE(packet) \
+ do { \
+ ((packet)->header.m->free_mem((packet), FALSE)); \
+ } while (0);
+
+#define PACKET_INIT_ALLOCA(packet, enum_type) \
+ { \
+ memset(&(packet), 0, packet_methods[enum_type].struct_size); \
+ (packet).header.m = &packet_methods[enum_type]; \
+ }
+#define PACKET_WRITE_ALLOCA(packet, conn) PACKET_WRITE(&(packet), (conn))
+#define PACKET_READ_ALLOCA(packet, conn) PACKET_READ(&(packet), (conn))
+#define PACKET_FREE_ALLOCA(packet) (packet.header.m->free_mem(&(packet), TRUE))
+
+/* Enums */
+enum php_mysql_packet_type
+{
+ PROT_GREET_PACKET= 0,
+ PROT_AUTH_PACKET,
+ PROT_OK_PACKET,
+ PROT_EOF_PACKET,
+ PROT_CMD_PACKET,
+ PROT_RSET_HEADER_PACKET,
+ PROT_RSET_FLD_PACKET,
+ PROT_ROW_PACKET,
+ PROT_STATS_PACKET,
+ PROT_PREPARE_RESP_PACKET,
+ PROT_CHG_USER_PACKET,
+ PROT_LAST, /* should always be last */
+};
+
+
+enum php_mysqlnd_server_command
+{
+ COM_SLEEP = 0,
+ COM_QUIT,
+ COM_INIT_DB,
+ COM_QUERY,
+ COM_FIELD_LIST,
+ COM_CREATE_DB,
+ COM_DROP_DB,
+ COM_REFRESH,
+ COM_SHUTDOWN,
+ COM_STATISTICS,
+ COM_PROCESS_INFO,
+ COM_CONNECT,
+ COM_PROCESS_KILL,
+ COM_DEBUG,
+ COM_PING,
+ COM_TIME,
+ COM_DELAYED_INSERT,
+ COM_CHANGE_USER,
+ COM_BINLOG_DUMP,
+ COM_TABLE_DUMP,
+ COM_CONNECT_OUT,
+ COM_REGISTER_SLAVE,
+ COM_STMT_PREPARE,
+ COM_STMT_EXECUTE,
+ COM_STMT_SEND_LONG_DATA,
+ COM_STMT_CLOSE,
+ COM_STMT_RESET,
+ COM_SET_OPTION,
+ COM_STMT_FETCH,
+ COM_DAEMON,
+ COM_END
+};
+
+/* Low-level extraction functionality */
+typedef struct st_mysqlnd_packet_methods {
+ size_t struct_size;
+ enum_func_status (*read_from_net)(void *packet, MYSQLND *conn TSRMLS_DC);
+ size_t (*write_to_net)(void *packet, MYSQLND *conn TSRMLS_DC);
+ void (*free_mem)(void *packet, zend_bool alloca);
+} mysqlnd_packet_methods;
+
+extern mysqlnd_packet_methods packet_methods[];
+
+
+typedef struct st_mysqlnd_packet_header {
+ size_t size;
+ zend_uchar packet_no;
+ mysqlnd_packet_methods *m;
+} mysqlnd_packet_header;
+
+/* Server greets the client */
+typedef struct st_php_mysql_packet_greet {
+ mysqlnd_packet_header header;
+ mysqlnd_1b protocol_version;
+ char *server_version;
+ mysqlnd_4b thread_id;
+ zend_uchar scramble_buf[SCRAMBLE_LENGTH];
+ /* 1 byte pad */
+ mysqlnd_2b server_capabilities;
+ mysqlnd_1b charset_no;
+ mysqlnd_2b server_status;
+ /* 13 byte pad*/
+ zend_bool pre41;
+ /* If error packet, we use these */
+ char error[MYSQLND_ERRMSG_SIZE+1];
+ char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
+ unsigned int error_no;
+} php_mysql_packet_greet;
+
+
+/* Client authenticates */
+typedef struct st_php_mysql_packet_auth {
+ mysqlnd_packet_header header;
+ mysqlnd_4b client_flags;
+ uint32 max_packet_size;
+ mysqlnd_1b charset_no;
+ /* 23 byte pad */
+ char *user;
+ /* 8 byte scramble */
+ char *db;
+ /* 12 byte scramble */
+
+ /* Here the packet ends. This is user supplied data */
+ char *password;
+ /* +1 for \0 because of scramble() */
+ unsigned char *server_scramble_buf;
+ size_t db_len;
+} php_mysql_packet_auth;
+
+/* OK packet */
+typedef struct st_php_mysql_packet_ok {
+ mysqlnd_packet_header header;
+ mysqlnd_1b field_count; /* always 0x0 */
+ mynd_ulonglong affected_rows;
+ mynd_ulonglong last_insert_id;
+ mysqlnd_2b server_status;
+ mysqlnd_2b warning_count;
+ char *message;
+ size_t message_len;
+ /* If error packet, we use these */
+ char error[MYSQLND_ERRMSG_SIZE+1];
+ char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
+ unsigned int error_no;
+} php_mysql_packet_ok;
+
+
+/* Command packet */
+typedef struct st_php_mysql_packet_command {
+ mysqlnd_packet_header header;
+ enum php_mysqlnd_server_command command;
+ const char *argument;
+ size_t arg_len;
+} php_mysql_packet_command;
+
+
+/* EOF packet */
+typedef struct st_php_mysql_packet_eof {
+ mysqlnd_packet_header header;
+ mysqlnd_1b field_count; /* 0xFE */
+ mysqlnd_2b warning_count;
+ mysqlnd_2b server_status;
+} php_mysql_packet_eof;
+/* EOF packet */
+
+
+/* Result Set header*/
+typedef struct st_php_mysql_packet_rset_header {
+ mysqlnd_packet_header header;
+ /*
+ 0x00 => ok
+ ~0 => LOAD DATA LOCAL
+ error_no != 0 => error
+ others => result set -> Read res_field packets up to field_count
+ */
+ unsigned long field_count;
+ /*
+ These are filled if no SELECT query. For SELECT warning_count
+ and server status are in the last row packet, the EOF packet.
+ */
+ mysqlnd_2b warning_count;
+ mysqlnd_2b server_status;
+ unsigned long long affected_rows;
+ unsigned long long last_insert_id;
+ /* This is for both LOAD DATA or info, when no result set */
+ char *info_or_local_file;
+ size_t info_or_local_file_len;
+ /* If error packet, we use these */
+ mysqlnd_error_info error_info;
+} php_mysql_packet_rset_header;
+
+
+/* Result set field packet */
+typedef struct st_php_mysql_packet_res_field {
+ mysqlnd_packet_header header;
+ MYSQLND_FIELD *metadata;
+ /* For table definitions, empty for result sets */
+ zend_bool skip_parsing;
+} php_mysql_packet_res_field;
+
+
+/* Row packet */
+struct st_php_mysql_packet_row {
+ mysqlnd_packet_header header;
+ zval **fields;
+ mysqlnd_4b field_count;
+ zend_bool eof;
+ /*
+ These are, of course, only for SELECT in the EOF packet,
+ which is detected by this packet
+ */
+ mysqlnd_2b warning_count;
+ mysqlnd_2b server_status;
+
+ zend_uchar *row_buffer;
+
+ zend_bool skip_extraction;
+ zend_bool binary_protocol;
+ MYSQLND_FIELD *fields_metadata;
+};
+
+
+/* Statistics packet */
+typedef struct st_php_mysql_packet_stats {
+ mysqlnd_packet_header header;
+ char *message;
+ /* message_len is not part of the packet*/
+ size_t message_len;
+} php_mysql_packet_stats;
+
+
+/* COM_PREPARE response packet */
+typedef struct st_php_mysql_packet_prepare_response {
+ mysqlnd_packet_header header;
+ /* also known as field_count 0x00=OK , 0xFF=error */
+ unsigned char error_code;
+ unsigned long stmt_id;
+ unsigned int field_count;
+ unsigned int param_count;
+ unsigned int warning_count;
+
+ /* present in case of error */
+ mysqlnd_error_info error_info;
+} php_mysql_packet_prepare_response;
+
+
+/* Statistics packet */
+typedef struct st_php_mysql_packet_chg_user_resp {
+ mysqlnd_packet_header header;
+ mysqlnd_4b field_count;
+
+ /* message_len is not part of the packet*/
+ mysqlnd_2b server_capabilities;
+ /* If error packet, we use these */
+ mysqlnd_error_info error_info;
+} php_mysql_packet_chg_user_resp;
+
+
+size_t mysqlnd_stream_write(MYSQLND *conn, char * const buf, size_t count TSRMLS_DC);
+size_t mysqlnd_stream_write_w_header(MYSQLND *conn, char * const buf, size_t count
TSRMLS_DC);
+
+
+void php_mysqlnd_scramble(unsigned char *buffer, const unsigned char *scramble,
+ const unsigned char *password);
+
+unsigned long php_mysqlnd_net_field_length(zend_uchar **packet);
+zend_uchar *php_mysqlnd_net_store_length(zend_uchar *packet, mynd_ulonglong length);
+
+#endif /* MYSQLND_WIREPROTOCOL_H */
| Thread |
|---|
| • PHP mysqlnd svn commit: r63 - trunk/ext/mysqli/mysqlnd | ahristov | 23 Feb |