List:Commits« Previous MessageNext Message »
From:ahristov Date:March 26 2007 4:50pm
Subject:PHP mysqlnd svn commit: r258 - trunk/ext/mysqli/mysqlnd
View as plain text  
Author: ahristov
Date: 2007-03-26 16:50:48 +0200 (Mon, 26 Mar 2007)
New Revision: 258

Modified:
   trunk/ext/mysqli/mysqlnd/mysqlnd.c
   trunk/ext/mysqli/mysqlnd/mysqlnd_loaddata.c
   trunk/ext/mysqli/mysqlnd/mysqlnd_priv.h
Log:
Fix Mantis #330.

When the file wasn't found, we didn't eat the OK packet, after
the empty packet we sent. Also the function was returning error,
which was triggering of changing connection state to CONN_QUIT_SET.
Introduced a flag - is_warning to distinguish this situation.


Modified: trunk/ext/mysqli/mysqlnd/mysqlnd.c
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd.c	2007-03-23 18:16:30 UTC (rev 257)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd.c	2007-03-26 14:50:48 UTC (rev 258)
@@ -1039,13 +1039,15 @@
 		conn->error_info.error_no = 0;
 
 		switch (rset_header.field_count) {
-			case MYSQLND_NULL_LENGTH:	/* LOAD DATA LOCAL INFILE */
+			case MYSQLND_NULL_LENGTH: {	/* LOAD DATA LOCAL INFILE */
+				zend_bool is_warning;
 				conn->last_query_type = QUERY_LOAD_LOCAL;
-				ret = mysqlnd_handle_local_infile(conn, rset_header.info_or_local_file TSRMLS_CC);
+				ret = mysqlnd_handle_local_infile(conn, rset_header.info_or_local_file,
&is_warning TSRMLS_CC);
 
-				conn->state = (ret == PASS)? CONN_READY:CONN_QUIT_SENT;
+				conn->state = (ret == PASS || is_warning == TRUE)? CONN_READY:CONN_QUIT_SENT;
 				MYSQLND_INC_CONN_STATISTIC(&conn->stats, STAT_NON_RSET_QUERY);
 				break;
+			}
 			case 0:				/* UPSERT		*/
 				conn->last_query_type = QUERY_UPSERT;
 				conn->field_count = rset_header.field_count;
@@ -2329,7 +2331,6 @@
 	size_t user_len;
 	enum_func_status ret;
 	php_mysql_packet_chg_user_resp chg_user_resp;
-	size_t buf_len = MYSQLND_MAX_ALLOWED_USER_LEN + 1 + SCRAMBLE_LENGTH +
MYSQLND_MAX_ALLOWED_DB_LEN + 1;
 	char buffer[MYSQLND_MAX_ALLOWED_USER_LEN + 1 + SCRAMBLE_LENGTH +
MYSQLND_MAX_ALLOWED_DB_LEN + 1];
 	char *p = buffer;
 

Modified: trunk/ext/mysqli/mysqlnd/mysqlnd_loaddata.c
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_loaddata.c	2007-03-23 18:16:30 UTC (rev 257)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_loaddata.c	2007-03-26 14:50:48 UTC (rev 258)
@@ -222,7 +222,7 @@
 
 /* {{{ mysqlnd_handle_local_infile */
 enum_func_status
-mysqlnd_handle_local_infile(MYSQLND *conn, const char *filename TSRMLS_DC)
+mysqlnd_handle_local_infile(MYSQLND *conn, const char *filename, zend_bool *is_warning
TSRMLS_DC)
 {
 	char				*buf;
 	char				empty_packet[MYSQLND_HEADER_SIZE];
@@ -242,9 +242,12 @@
 	infile = conn->infile;
 	/* allocate buffer for reading data */
 	buf = (char *)ecalloc(1, buflen);
+	
+	*is_warning = FALSE;
 
 	/* init handler: allocate read buffer and open file */
 	if (infile.local_infile_init(&info, (char *)filename, conn->infile.userdata
TSRMLS_CC)) {
+		*is_warning = TRUE;
 		/* error occured */
 		strcpy(conn->error_info.sqlstate, UNKNOWN_SQLSTATE);
 		conn->error_info.error_no =
@@ -285,13 +288,15 @@
 		goto infile_error;
 	}
 
+	result = PASS;
+
+infile_error:
 	/* get response from server and update upsert values */
 	if (FAIL == mysqlnd_simple_command_handle_response(conn, PROT_OK_PACKET, FALSE,
COM_QUERY TSRMLS_CC)) {
+		result = FAIL;
 		goto infile_error;
 	}
-	result = PASS;
 
-infile_error:
 	(*conn->infile.local_infile_end)(info TSRMLS_CC);
 	efree(buf);
 	return result;

Modified: trunk/ext/mysqli/mysqlnd/mysqlnd_priv.h
===================================================================
--- trunk/ext/mysqli/mysqlnd/mysqlnd_priv.h	2007-03-23 18:16:30 UTC (rev 257)
+++ trunk/ext/mysqli/mysqlnd/mysqlnd_priv.h	2007-03-26 14:50:48 UTC (rev 258)
@@ -162,7 +162,7 @@
 void mysqlnd_internal_free_result(MYSQLND_RES *result TSRMLS_DC);
 
 
-enum_func_status mysqlnd_handle_local_infile(MYSQLND *conn, const char *filename
TSRMLS_DC);
+enum_func_status mysqlnd_handle_local_infile(MYSQLND *conn, const char *filename,
zend_bool *is_warning TSRMLS_DC);
 
 
 void _mysqlnd_init_ps_subsystem();/* This one is private, mysqlnd_library_init() will
call it */

Thread
PHP mysqlnd svn commit: r258 - trunk/ext/mysqli/mysqlndahristov26 Mar