List:Commits« Previous MessageNext Message »
From:ahristov Date:February 23 2007 5:43pm
Subject:PHP mysqlnd svn commit: r63 - trunk/ext/mysqli/mysqlnd
View as plain text  
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/mysqlndahristov23 Feb