List:Commits« Previous MessageNext Message »
From:ahristov Date:April 17 2007 2:34pm
Subject:PHP mysqlnd svn commit: r330 - branches/qcache/mysqlnd
View as plain text  
Author: ahristov
Date: 2007-04-17 16:34:38 +0200 (Tue, 17 Apr 2007)
New Revision: 330

Removed:
   branches/qcache/mysqlnd/mysqlnd_qcache.h
Modified:
   branches/qcache/mysqlnd/mysqlnd.c
   branches/qcache/mysqlnd/mysqlnd.h
   branches/qcache/mysqlnd/mysqlnd_priv.h
   branches/qcache/mysqlnd/mysqlnd_qcache.c
   branches/qcache/mysqlnd/mysqlnd_wireprotocol.c
   branches/qcache/mysqlnd/mysqlnd_wireprotocol.h
Log:
Merged last trunk changes into the branch


Modified: branches/qcache/mysqlnd/mysqlnd.c
===================================================================
--- branches/qcache/mysqlnd/mysqlnd.c	2007-04-17 14:11:29 UTC (rev 329)
+++ branches/qcache/mysqlnd/mysqlnd.c	2007-04-17 14:34:38 UTC (rev 330)
@@ -196,7 +196,6 @@
 		mysqlnd_qcache_free_cache_reference(&set->qcache);
 	}
 	pefree(set, set->persistent);
-	result->data		= NULL;
 }
 /* }}} */
 
@@ -205,14 +204,13 @@
 void mysqlnd_internal_free_result_buffers(MYSQLND_RES *result TSRMLS_DC)
 {
 
-	if (!result->data) {
+	if (result->unbuf) {
 		mysqlnd_unbuffered_free_last_data(result TSRMLS_CC);
-		if (result->unbuf) {
-			efree(result->unbuf);
-			result->unbuf = NULL;
-		}
-	} else {
+		efree(result->unbuf);
+		result->unbuf = NULL;
+	} else if (result->data) {
 		mysqlnd_free_buffered_data(result TSRMLS_CC);
+		result->data = NULL;
 	}
 
 	if (result->lengths) {
@@ -224,7 +222,6 @@
 
 
 /* {{{ mysqlnd_internal_free_result_metadata */
-static
 void mysqlnd_internal_free_result_metadata(MYSQLND_RES_METADATA *meta, zend_bool
persistent TSRMLS_DC)
 {
 	int i;
@@ -281,6 +278,7 @@
 
 	if (result->zval_cache) {
 		mysqlnd_palloc_free_cache_reference(&result->zval_cache);
+		result->zval_cache = NULL;
 	}
 }
 /* }}} */
@@ -525,11 +523,11 @@
 		case CONN_READY:
 			break;
 		case CONN_QUIT_SENT:
-			SET_CLIENT_ERROR(conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE,
mysqlnd_server_gone); 
-			return FAIL;	
+			SET_CLIENT_ERROR(conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE,
mysqlnd_server_gone);
+			return FAIL;
 		default:
 			SET_CLIENT_ERROR(conn->error_info, CR_COMMANDS_OUT_OF_SYNC, UNKNOWN_SQLSTATE,
-							 mysqlnd_out_of_sync); 
+							 mysqlnd_out_of_sync);
 			return FAIL;
 	}
 
@@ -549,7 +547,7 @@
 		if (!silent) {
 			php_error(E_WARNING, "Error while sending %s packet",
mysqlnd_command_to_text[command]);
 		}
-		SET_CLIENT_ERROR(conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE,
mysqlnd_server_gone); 
+		SET_CLIENT_ERROR(conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE,
mysqlnd_server_gone);
 		ret = FAIL;
 	} else if (ok_packet != PROT_LAST) {
 		ret = mysqlnd_simple_command_handle_response(conn, ok_packet, silent, command
TSRMLS_CC);
@@ -601,7 +599,8 @@
 						 unsigned int port,
 						 char *socket,
 						 unsigned int mysql_flags,
-						 MYSQLND_ZVAL_PCACHE *zval_cache TSRMLS_DC)
+						 MYSQLND_ZVAL_PCACHE *zval_cache
+						 TSRMLS_DC)
 {
 	char *transport = NULL, *errstr = NULL;
 	int transport_len, errcode = 0;
@@ -1195,18 +1194,21 @@
 static enum_func_status
 _mysqlnd_query(MYSQLND *conn, const char *query, unsigned int query_len TSRMLS_DC)
 {
+	enum_func_status ret;
 
 	if (PASS != mysqlnd_simple_command(conn, COM_QUERY, query, query_len,
 									   PROT_LAST /* we will handle the OK packet*/,
 									   FALSE TSRMLS_CC)) {
-		return FAIL;		
+		return FAIL;
 	}
 
 	/*
 	  Here read the result set. We don't do it in simple_command because it need
 	  information from the ok packet. We will fetch it ourselves.
 	*/
-	return mysqlnd_query_read_result_set_header(conn, NULL TSRMLS_CC);
+	ret = mysqlnd_query_read_result_set_header(conn, NULL TSRMLS_CC);
+
+	return ret;
 }
 /* }}} */
 
@@ -1527,7 +1529,7 @@
 	if (!conn->current_result) {
 		return NULL;
 	}
-	
+
 	/* Nothing to store for UPSERT/LOAD DATA*/
 	if (conn->last_query_type != QUERY_SELECT || conn->state != CONN_FETCHING_DATA) {
 		SET_CLIENT_ERROR(conn->error_info, CR_COMMANDS_OUT_OF_SYNC, UNKNOWN_SQLSTATE,
@@ -1540,6 +1542,7 @@
 	result = conn->current_result;
 	conn->current_result = NULL;
 
+	result->conn			= NULL;	/* store result does not reference  the connection */
 	result->type			= MYSQLND_RES_NORMAL;
 	result->m.fetch_row		= result->m.fetch_row_normal_buffered;
 	result->m.fetch_lengths	= mysqlnd_fetch_lengths_buffered;
@@ -1550,10 +1553,9 @@
 
 	/* Create room for 'next_extend' rows */
 
-	result->conn 		= NULL;	/* store result does not reference  the connection */
-	result->data 				= pecalloc(1, sizeof(MYSQLND_RES_BUFFERED), to_cache);
-	result->data->data 		  	= pemalloc(next_extend * sizeof(zval **), to_cache);
-	result->data->row_buffers 	= pemalloc(next_extend * sizeof(zend_uchar *),
to_cache);
+	result->data				= pecalloc(1, sizeof(MYSQLND_RES_BUFFERED), to_cache);
+	result->data->data			= pemalloc(next_extend * sizeof(zval **), to_cache);
+	result->data->row_buffers	= pemalloc(next_extend * sizeof(zend_uchar *),
to_cache);
 	result->data->persistent	= to_cache;
 	result->data->qcache		= to_cache?
mysqlnd_qcache_get_cache_reference(conn->qcache):NULL;
 	result->data->references	= 1;
@@ -1751,12 +1753,12 @@
 	const char 	*newstr_e = newstr + 2 * escapestr_len;
 	const char 	*end = escapestr + escapestr_len;
 	zend_bool	escape_overflow = FALSE;
-	
+
 	for (;escapestr < end; escapestr++) {
-		uint len;
 		/* check unicode characters */
 		if (conn->charset->char_maxlen > 1 &&
conn->charset->mb_charlen(*escapestr) > 1) {
-			len = conn->charset->mb_valid(escapestr, end);
+			uint len = conn->charset->mb_valid(escapestr, end);
+
 			/* check possible overflow */
 			if ((newstr + len) > newstr_e) {
 				escape_overflow = TRUE;
@@ -1804,12 +1806,11 @@
 	zend_bool	escape_overflow = FALSE;
 	
 	for (;escapestr < end; escapestr++) {
-		uint len;
 		char	esc = '\0';
 
 		/* check unicode characters */
 		if (conn->charset->char_maxlen > 1 &&
conn->charset->mb_charlen(*escapestr) > 1) {
-			len = conn->charset->mb_valid(escapestr, end);
+			uint len = conn->charset->mb_valid(escapestr, end);
 
 			/* check possible overflow */
 			if ((newstr + len) > newstr_e) {
@@ -1864,6 +1865,7 @@
 		}
 	}
 	*newstr = '\0';
+
 	if (escape_overflow) {
 		return (ulong)~0;
 	}
@@ -2490,7 +2492,7 @@
 		case MYSQL_REPORT_DATA_TRUNCATION:
 		case MYSQL_OPT_SSL_VERIFY_SERVER_CERT:
 			/* currently not supported. Todo!! */
-			break;	
+			break;
 		case MYSQL_SET_CHARSET_DIR:
 		case MYSQL_SET_CHARSET_NAME:
 		case MYSQL_OPT_RECONNECT:

Modified: branches/qcache/mysqlnd/mysqlnd.h
===================================================================
--- branches/qcache/mysqlnd/mysqlnd.h	2007-04-17 14:11:29 UTC (rev 329)
+++ branches/qcache/mysqlnd/mysqlnd.h	2007-04-17 14:34:38 UTC (rev 330)
@@ -585,7 +585,7 @@
 	MYSQLND_FIELD *		(*fetch_field)(MYSQLND_RES * const result);
 	MYSQLND_FIELD *		(*fetch_field_direct)(const MYSQLND_RES * const result,
MYSQLND_FIELD_OFFSET fieldnr);
 
-	unsigned long *	(*fetch_lengths)(MYSQLND_RES * const result);
+	unsigned long *		(*fetch_lengths)(MYSQLND_RES * const result);
 	void				(*free_result_buffers)(MYSQLND_RES * result TSRMLS_DC);	/* private */
 	enum_func_status	(*free_result)(MYSQLND_RES * result, zend_bool implicit TSRMLS_DC);
 
@@ -751,23 +751,23 @@
 	unsigned int			field_count;
 
 	/* For metadata functions */
-	MYSQLND_RES_METADATA * meta;
+	MYSQLND_RES_METADATA	*meta;
 
 	/* To be used with store_result() - both normal and PS */
-	MYSQLND_RES_BUFFERED * data;
+	MYSQLND_RES_BUFFERED	*data;
 
-	MYSQLND_RES_UNBUFFERED * unbuf;
+	MYSQLND_RES_UNBUFFERED	*unbuf;
 
 	/*
 	  Column lengths of current row - both buffered and unbuffered.
 	  For buffered results it duplicates the data found in **data 
 	*/
-	unsigned long		*lengths;
+	unsigned long			*lengths;
 
 	php_mysql_packet_row	*row_packet;	/* Unused for PS */
 
 	/* zval cache */
-	MYSQLND_ZVAL_PCACHE	*zval_cache;
+	MYSQLND_ZVAL_PCACHE		*zval_cache;
 
 	struct st_mysqlnd_res_methods m;
 };
@@ -822,10 +822,10 @@
 
 
 /* Library related */
-PHPAPI void		mysqlnd_library_init();
-PHPAPI void 	mysqlnd_library_end();
-PHPAPI void 	mysqlnd_restart_psession(MYSQLND *conn);
-PHPAPI void 	mysqlnd_end_psession(MYSQLND *conn);
+PHPAPI void mysqlnd_library_init();
+PHPAPI void mysqlnd_library_end();
+PHPAPI void mysqlnd_restart_psession(MYSQLND *conn);
+PHPAPI void mysqlnd_end_psession(MYSQLND *conn);
 #define mysqlnd_thread_safe()	TRUE
 
 const MYSQLND_CHARSET * mysqlnd_find_charset_nr(uint charsetno);
@@ -841,7 +841,8 @@
 						  unsigned int port,
 						  char *socket,
 						  unsigned int mysql_flags,
-						  MYSQLND_ZVAL_PCACHE *zval_cache TSRMLS_DC);
+						  MYSQLND_ZVAL_PCACHE *zval_cache
+						  TSRMLS_DC);
 #define mysqlnd_change_user(conn, user, passwd, db)		(conn)->m->change_user((conn),
(user), (passwd), (db) TSRMLS_CC)
 
 
@@ -963,8 +964,8 @@
 const char *		mysqlnd_field_type_name(enum mysqlnd_field_types field_type);
 
 /* LOAD DATA LOCAL */
-PHPAPI void			mysqlnd_local_infile_default(MYSQLND *conn);
-PHPAPI void 		mysqlnd_set_local_infile_handler(MYSQLND * const conn, const char * const
funcname);
+PHPAPI void mysqlnd_local_infile_default(MYSQLND *conn);
+PHPAPI void mysqlnd_set_local_infile_handler(MYSQLND * const conn, const char * const
funcname);
 
 /* Simple commands */
 #define mysqlnd_autocommit(conn, mode)		(conn)->m->query((conn),(mode) ? "SET
AUTOCOMMIT=1":"SET AUTOCOMMIT=0", 16 TSRMLS_CC)
@@ -1008,7 +1009,9 @@
 #define mysqlnd_stmt_attr_set(stmt, attr, value)	(stmt)->m->set_attribute((stmt),
(attr), (value))
 
 
-PHPAPI enum_func_status	mysqlnd_stmt_fetch(MYSQLND_STMT * const stmt, zend_bool * const
fetched_anything TSRMLS_DC);
+PHPAPI enum_func_status		mysqlnd_stmt_fetch(MYSQLND_STMT * const stmt,
+											   zend_bool * const fetched_anything
+											   TSRMLS_DC);
 
 
 
@@ -1054,7 +1057,7 @@
 PHPAPI void				mysqlnd_qcache_stats(const MYSQLND_QCACHE * const cache, zval
*return_value);
 MYSQLND_RES * 		mysqlnd_qcache_get(MYSQLND_QCACHE * const cache, const char * query,
 									   size_t query_len);
-void 				mysqlnd_qcache_put(MYSQLND_QCACHE * const cache, char * query, size_t query_len,
+void				mysqlnd_qcache_put(MYSQLND_QCACHE * const cache, char * query, size_t query_len,
 									   MYSQLND_RES_BUFFERED * const result, MYSQLND_RES_METADATA * const meta);
 
 #endif	/* MYSQLND_H */

Modified: branches/qcache/mysqlnd/mysqlnd_priv.h
===================================================================
--- branches/qcache/mysqlnd/mysqlnd_priv.h	2007-04-17 14:11:29 UTC (rev 329)
+++ branches/qcache/mysqlnd/mysqlnd_priv.h	2007-04-17 14:34:38 UTC (rev 330)
@@ -163,6 +163,9 @@
 void mysqlnd_internal_free_result(MYSQLND_RES *result TSRMLS_DC);
 
 
+void mysqlnd_internal_free_result_metadata(MYSQLND_RES_METADATA *meta, zend_bool
persistent TSRMLS_DC);
+
+
 enum_func_status mysqlnd_handle_local_infile(MYSQLND *conn, const char *filename,
zend_bool *is_warning TSRMLS_DC);
 
 

Modified: branches/qcache/mysqlnd/mysqlnd_qcache.c
===================================================================
--- branches/qcache/mysqlnd/mysqlnd_qcache.c	2007-04-17 14:11:29 UTC (rev 329)
+++ branches/qcache/mysqlnd/mysqlnd_qcache.c	2007-04-17 14:34:38 UTC (rev 330)
@@ -23,7 +23,6 @@
 #include "mysqlnd.h"
 #include "mysqlnd_priv.h"
 #include "mysqlnd_statistics.h"
-#include "mysqlnd_qcache.h"
 
 #define MYSQLND_SILENT
 

Deleted: branches/qcache/mysqlnd/mysqlnd_qcache.h
===================================================================
--- branches/qcache/mysqlnd/mysqlnd_qcache.h	2007-04-17 14:11:29 UTC (rev 329)
+++ branches/qcache/mysqlnd/mysqlnd_qcache.h	2007-04-17 14:34:38 UTC (rev 330)
@@ -1,21 +0,0 @@
-/*
-  +----------------------------------------------------------------------+
-  | 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 $ */

Modified: branches/qcache/mysqlnd/mysqlnd_wireprotocol.c
===================================================================
--- branches/qcache/mysqlnd/mysqlnd_wireprotocol.c	2007-04-17 14:11:29 UTC (rev 329)
+++ branches/qcache/mysqlnd/mysqlnd_wireprotocol.c	2007-04-17 14:34:38 UTC (rev 330)
@@ -717,8 +717,8 @@
 	}
 }
 /* }}} */
-	
 
+
 /* {{{ php_mysqlnd_eof_read */
 static enum_func_status
 php_mysqlnd_eof_read(void *_packet, MYSQLND *conn TSRMLS_DC)
@@ -1070,7 +1070,7 @@
 
 static enum_func_status
 php_mysqlnd_read_row_ex(MYSQLND *conn, zend_uchar **buf, int buf_size,
-						size_t *data_size TSRMLS_DC)
+						size_t *data_size, zend_bool persistent_alloc TSRMLS_DC)
 {
 	enum_func_status ret = PASS;
 	mysqlnd_packet_header header;
@@ -1101,7 +1101,7 @@
 			  We need a trailing \0 for the last string, in case of text-mode,
 			  to be able to implement read-only variables.
 			*/
-			p = new_buf = emalloc(header.size + 1);
+			p = new_buf = pemalloc(header.size + 1, persistent_alloc);
 			net->stream->chunk_size = header.size;
 		} else if (!first_iteration) {
 			/* Empty packet after MYSQLND_MAX_PACKET_SIZE packet. That's ok, break */
@@ -1115,7 +1115,7 @@
 			  We need a trailing \0 for the last string, in case of text-mode,
 			  to be able to implement read-only variables.
 			*/
-			new_buf = erealloc(new_buf, *data_size + 1);
+			new_buf = perealloc(new_buf, *data_size + 1, persistent_alloc);
 			/* The position could have changed, recalculate */
 			p = new_buf + (*data_size - header.size);
 		}
@@ -1318,8 +1318,10 @@
 	size_t old_chunk_size = net->stream->chunk_size;
 	php_mysql_packet_row *packet= (php_mysql_packet_row *) _packet;
 
-
-	if (FAIL == (ret = php_mysqlnd_read_row_ex(conn, &packet->row_buffer, 0,
&data_size TSRMLS_CC))) {
+	ret = php_mysqlnd_read_row_ex(conn, &packet->row_buffer, 0, &data_size,
+								  packet->persistent_alloc
+								  TSRMLS_CC);
+	if (FAIL == ret) {
 		goto end;
 	}
 
@@ -1365,7 +1367,8 @@
 				  but mostly like old-API unbuffered and thus will populate this array with
 				  value.
 				*/
-				packet->fields = (zval **) emalloc(packet->field_count * sizeof(zval *));
+				packet->fields = (zval **) pemalloc(packet->field_count * sizeof(zval *),
+													packet->persistent_alloc);
 			}
 
 			if (packet->binary_protocol) {
@@ -1391,7 +1394,7 @@
 {
 	php_mysql_packet_row *p= (php_mysql_packet_row *) _packet;
 	if (p->row_buffer) {
-		efree(p->row_buffer);
+		pefree(p->row_buffer, p->persistent_alloc);
 		p->row_buffer = NULL;
 	}
 	/*

Modified: branches/qcache/mysqlnd/mysqlnd_wireprotocol.h
===================================================================
--- branches/qcache/mysqlnd/mysqlnd_wireprotocol.h	2007-04-17 14:11:29 UTC (rev 329)
+++ branches/qcache/mysqlnd/mysqlnd_wireprotocol.h	2007-04-17 14:34:38 UTC (rev 330)
@@ -257,6 +257,7 @@
 
 	zend_bool		skip_extraction;
 	zend_bool		binary_protocol;
+	zend_bool		persistent_alloc;
 	MYSQLND_FIELD	*fields_metadata;
 
 	/* If error packet, we use these */

Thread
PHP mysqlnd svn commit: r330 - branches/qcache/mysqlndahristov17 Apr