List:Commits« Previous MessageNext Message »
From:jschlueter Date:April 21 2008 1:38pm
Subject:PHP mysqlnd svn commit: r1499 - trunk/php5/ext/pdo_mysqlnd
View as plain text  
Author: jschlueter
Date: 2008-04-21 15:38:53 +0200 (Mon, 21 Apr 2008)
New Revision: 1499

Modified:
   trunk/php5/ext/pdo_mysqlnd/config.m4
   trunk/php5/ext/pdo_mysqlnd/mysql_driver.c
   trunk/php5/ext/pdo_mysqlnd/mysql_statement.c
   trunk/php5/ext/pdo_mysqlnd/php_pdo_mysql_int.h
Log:
- libmysql compatibility php_pdo_mysql_int.h

Modified: trunk/php5/ext/pdo_mysqlnd/config.m4
===================================================================
--- trunk/php5/ext/pdo_mysqlnd/config.m4	2008-04-18 09:43:33 UTC (rev 1498)
+++ trunk/php5/ext/pdo_mysqlnd/config.m4	2008-04-21 13:38:53 UTC (rev 1499)
@@ -2,12 +2,136 @@
 dnl $Id: config.m4,v 1.25.2.7.2.6 2007/07/31 13:02:00 jani Exp $
 dnl
 
-PHP_ARG_WITH(pdo-mysqlnd, for MySQL support for PDO via mysqlnd,
-[  --with-pdo-mysqlnd          PDO: MySQL support via mysqlnd.])
+if test "$PHP_PDO" != "no"; then
 
+AC_DEFUN([PDO_MYSQLND_LIB_CHK], [
+  str="$PDO_MYSQLND_DIR/$1/libmysqlclient*"
+  for j in `echo $str`; do
+    if test -r $j; then
+      PDO_MYSQLND_LIB_DIR=$PDO_MYSQLND_DIR/$1
+      break 2
+    fi
+  done
+])
+
+PHP_ARG_WITH(pdo-mysqlnd, for MySQL support for PDO,
+[  --with-pdo-mysqlnd[=DIR]    PDO: MySQL support. DIR is the MySQL base directory])
+
+if test -z "$PHP_ZLIB_DIR"; then
+  PHP_ARG_WITH(zlib-dir, for the location of libz,
+  [  --with-zlib-dir[=DIR]       PDO_MySQL: Set the path to libz install prefix], no, no)
+fi
+
 if test "$PHP_PDO_MYSQLND" != "no"; then
-  PHP_MYSQLND_ENABLED=yes
+  AC_DEFINE(HAVE_MYSQL, 1, [Whether you have MySQL])
 
+  AC_MSG_CHECKING([for mysql_config])
+
+  if test -f $PHP_PDO_MYSQLND && test -x $PHP_PDO_MYSQLND ; then
+    PDO_MYSQLND_CONFIG=$PHP_PDO_MYSQLND
+  elif test "$PHP_PDO_MYSQLND" != "yes"; then
+    if test -d "$PHP_PDO_MYSQLND" ; then
+      if test -x "$PHP_PDO_MYSQLND/bin/mysql_config" ; then
+        PDO_MYSQLND_CONFIG="$PHP_PDO_MYSQLND/bin/mysql_config"
+      else
+        PDO_MYSQLND_DIR="$PHP_PDO_MYSQLND"
+      fi
+    else
+      AC_MSG_RESULT([$PHP_PDO_MYSQLND is not a directory])
+      AC_MSG_ERROR([can not find mysql under the "$PHP_PDO_MYSQLND" that you specified])
+    fi
+  else
+    for i in /usr/local /usr ; do
+      if test -x "$i/bin/mysql_config" ; then
+        PDO_MYSQLND_CONFIG="$i/bin/mysql_config"
+        break;
+      fi
+      if test -r $i/include/mysql/mysql.h || test -r $i/include/mysql.h ; then
+        PDO_MYSQLND_DIR="$i"
+        break;
+      fi
+    done
+  fi
+
+  if test -n "$PDO_MYSQLND_CONFIG" && test -x "$PDO_MYSQLND_CONFIG" ; then
+    AC_MSG_RESULT($PDO_MYSQLND_CONFIG)
+    if test "x$SED" = "x"; then
+      AC_PATH_PROG(SED, sed)
+    fi
+    if test "$enable_maintainer_zts" = "yes"; then
+      PDO_MYSQLND_LIBNAME=mysqlclient_r
+      PDO_MYSQLND_LIBS=`$PDO_MYSQLND_CONFIG --libs_r | $SED -e "s/'//g"`
+    else
+      PDO_MYSQLND_LIBNAME=mysqlclient
+      PDO_MYSQLND_LIBS=`$PDO_MYSQLND_CONFIG --libs | $SED -e "s/'//g"`
+    fi
+    PDO_MYSQLND_INCLUDE=`$PDO_MYSQLND_CONFIG --cflags | $SED -e "s/'//g"`
+    PDO_MYSQLND_SOCKET=`$PDO_MYSQLND_CONFIG --socket` 
+  elif test -z "$PDO_MYSQLND_DIR"; then
+    AC_MSG_RESULT([not found])
+    AC_MSG_ERROR([Cannot find MySQL header files under $PDO_MYSQLND_DIR])
+  else
+    AC_MSG_RESULT([not found])
+    AC_MSG_CHECKING([for mysql install under $PDO_MYSQL_DIR])
+    if test -r $PDO_MYSQLND_DIR/include/mysql; then
+      PDO_MYSQLND_INC_DIR=$PDO_MYSQLND_DIR/include/mysql
+    else
+      PDO_MYSQLND_INC_DIR=$PDO_MYSQLND_DIR/include
+    fi
+    if test -r $PDO_MYSQLND_DIR/$PHP_LIBDIR/mysql; then
+      PDO_MYSQLND_LIB_DIR=$PDO_MYSQLND_DIR/$PHP_LIBDIR/mysql
+    else
+      PDO_MYSQLND_LIB_DIR=$PDO_MYSQLND_DIR/$PHP_LIBDIR
+    fi
+
+    if test -r "$PDO_MYSQLND_LIB_DIR"; then
+      AC_MSG_RESULT([libs under $PDO_MYSQLND_LIB_DIR; seems promising])
+    else
+      AC_MSG_RESULT([can not find it])
+      AC_MSG_ERROR([Unable to find your mysql installation])
+    fi
+
+    PHP_ADD_LIBRARY_WITH_PATH($PDO_MYSQLND_LIBNAME, $PDO_MYSQL_LIB_DIR,
PDO_MYSQLND_SHARED_LIBADD)
+    PHP_ADD_INCLUDE($PDO_MYSQLND_INC_DIR)
+    PDO_MYSQL_INCLUDE=-I$PDO_MYSQLND_INC_DIR
+  fi
+
+  AC_DEFINE_UNQUOTED(PDO_MYSQL_UNIX_ADDR, "$PDO_MYSQLND_SOCKET", [ ])
+
+
+  PHP_CHECK_LIBRARY($PDO_MYSQLND_LIBNAME, mysql_query,
+  [
+    PHP_EVAL_INCLINE($PDO_MYSQLND_INCLUDE)
+    PHP_EVAL_LIBLINE($PDO_MYSQLND_LIBS, PDO_MYSQLND_SHARED_LIBADD)
+  ],[
+    if test "$PHP_ZLIB_DIR" != "no"; then
+      PHP_ADD_LIBRARY_WITH_PATH(z, $PHP_ZLIB_DIR, PDO_MYSQLND_SHARED_LIBADD)
+      PHP_CHECK_LIBRARY($PDO_MYSQLND_LIBNAME, mysql_query, [], [
+        AC_MSG_ERROR([PDO_MYSQLND configure failed. Please check config.log for more
information.])
+      ], [
+        -L$PHP_ZLIB_DIR/$PHP_LIBDIR -L$PDO_MYSQLND_LIB_DIR 
+      ])  
+      PDO_MYSQLND_LIBS="$PDO_MYSQL_LIBS -L$PHP_ZLIB_DIR/$PHP_LIBDIR -lz"
+    else
+      PHP_ADD_LIBRARY(z,, PDO_MYSQLND_SHARED_LIBADD)
+      PHP_CHECK_LIBRARY($PDO_MYSQLND_LIBNAME, mysql_query, [], [
+        AC_MSG_ERROR([Try adding --with-zlib-dir=<DIR>. Please check config.log for
more information.])
+      ], [
+        -L$PDO_MYSQLND_LIB_DIR
+      ])   
+      PDO_MYSQL_LIBS="$PDO_MYSQLND_LIBS -lz"
+    fi
+
+    PHP_EVAL_INCLINE($PDO_MYSQLND_INCLUDE)
+    PHP_EVAL_LIBLINE($PDO_MYSQLND_LIBS, PDO_MYSQLND_SHARED_LIBADD)
+  ],[
+    $PDO_MYSQLND_LIBS
+  ])
+  _SAVE_LIBS=$LIBS
+  LIBS="$LIBS $PDO_MYSQLND_LIBS"
+  AC_CHECK_FUNCS([mysql_commit mysql_stmt_prepare mysql_next_result mysql_sqlstate]) 
+  LIBS=$_SAVE_LIBS
+
   ifdef([PHP_CHECK_PDO_INCLUDES],
   [
     PHP_CHECK_PDO_INCLUDES
@@ -25,17 +149,16 @@
     AC_MSG_RESULT($pdo_inc_path)
   ])
 
-  AC_DEFINE([PDO_USE_MYSQLND], 1, [Whether pdo_mysql uses mysqlnd])
-
-  PHP_NEW_EXTENSION(pdo_mysqlnd, pdo_mysql.c mysql_driver.c mysql_statement.c,
$ext_shared,,-I$pdo_inc_path -I)
+  PHP_NEW_EXTENSION(pdo_mysqlnd, pdo_mysql.c mysql_driver.c mysql_statement.c,
$ext_shared,,-I$pdo_inc_path)
   ifdef([PHP_ADD_EXTENSION_DEP],
   [
-    PHP_ADD_EXTENSION_DEP(pdo_mysql, pdo)
-    PHP_ADD_EXTENSION_DEP(pdo_mysql, mysqlnd)
+    PHP_ADD_EXTENSION_DEP(pdo_mysqlnd, pdo)
   ])
-  PDO_MYSQLND_MODULE_TYPE=external
+  PDO_MYSQL_MODULE_TYPE=external
 
+  PHP_SUBST(PDO_MYSQLND_SHARED_LIBADD)
   PHP_SUBST_OLD(PDO_MYSQLND_MODULE_TYPE)
 fi
 
+fi
 dnl vim: se ts=2 sw=2 et:

Modified: trunk/php5/ext/pdo_mysqlnd/mysql_driver.c
===================================================================
--- trunk/php5/ext/pdo_mysqlnd/mysql_driver.c	2008-04-18 09:43:33 UTC (rev 1498)
+++ trunk/php5/ext/pdo_mysqlnd/mysql_driver.c	2008-04-21 13:38:53 UTC (rev 1499)
@@ -250,7 +250,7 @@
 		S->params = NULL;
 		S->params_given = 0;
 #else
-		S->params = ecalloc(S->num_params, sizeof(MYSQL_PARAM_BIND));
+		S->params = ecalloc(S->num_params, sizeof(MYSQL_BIND));
 		S->in_null = ecalloc(S->num_params, sizeof(my_bool));
 		S->in_length = ecalloc(S->num_params, sizeof(unsigned long));
 #endif

Modified: trunk/php5/ext/pdo_mysqlnd/mysql_statement.c
===================================================================
--- trunk/php5/ext/pdo_mysqlnd/mysql_statement.c	2008-04-18 09:43:33 UTC (rev 1498)
+++ trunk/php5/ext/pdo_mysqlnd/mysql_statement.c	2008-04-21 13:38:53 UTC (rev 1499)
@@ -311,7 +311,6 @@
 	pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
 	pdo_mysql_db_handle *H = S->H;
 	my_ulonglong row_count;
-	int ret;
 	PDO_DBG_ENTER("pdo_mysql_stmt_next_rowset");
 
 	/* ensure that we free any previous unfetched results */
@@ -325,35 +324,48 @@
 		S->result = NULL;
 	}
 
-	ret = mysql_next_result(H->server);
-
-	if (ret > 0) {
-		pdo_mysql_error_stmt(stmt);
-		PDO_DBG_RETURN(0);
-	} else if (ret < 0) {
-		/* No more results */
-		PDO_DBG_RETURN(0);
-	} else {
-		if (!H->buffered) {
-			S->result = mysql_use_result(H->server);
-			row_count = 0;
+#	if PDO_USE_MYSQLND
+	if (S->stmt) {
+		if (!mysqlnd_stmt_more_results(S->stmt)) {
+			PDO_DBG_RETURN(0);
 		} else {
-			S->result = mysql_store_result(H->server);
-			if ((my_ulonglong)-1 == (row_count = mysql_affected_rows(H->server))) {
-				pdo_mysql_error_stmt(stmt);
-				PDO_DBG_RETURN(0);
-			}
+			mysqlnd_stmt_next_result(S->stmt);
 		}
+	} else
+#	endif
+	{
+		int ret;
 
-		if (NULL == S->result) {
+		ret = mysql_next_result(H->server);
+
+		if (ret > 0) {
+			pdo_mysql_error_stmt(stmt);
 			PDO_DBG_RETURN(0);
+		} else if (ret < 0) {
+			/* No more results */
+			PDO_DBG_RETURN(0);
 		}
+	}
 
-		stmt->row_count = row_count;
-		stmt->column_count = (int) mysql_num_fields(S->result);
-		S->fields = mysql_fetch_fields(S->result);
-		PDO_DBG_RETURN(1);
+	if (!H->buffered) {
+		S->result = mysql_use_result(H->server);
+		row_count = 0;
+	} else {
+		S->result = mysql_store_result(H->server);
+		if ((my_ulonglong)-1 == (row_count = mysql_affected_rows(H->server))) {
+			pdo_mysql_error_stmt(stmt);
+			PDO_DBG_RETURN(0);
+		}
 	}
+
+	if (NULL == S->result) {
+		PDO_DBG_RETURN(0);
+	}
+
+	stmt->row_count = row_count;
+	stmt->column_count = (int) mysql_num_fields(S->result);
+	S->fields = mysql_fetch_fields(S->result);
+	PDO_DBG_RETURN(1);
 #else
 	strcpy(stmt->error_code, "HYC00");
 	PDO_DBG_RETURN(0);

Modified: trunk/php5/ext/pdo_mysqlnd/php_pdo_mysql_int.h
===================================================================
--- trunk/php5/ext/pdo_mysqlnd/php_pdo_mysql_int.h	2008-04-18 09:43:33 UTC (rev 1498)
+++ trunk/php5/ext/pdo_mysqlnd/php_pdo_mysql_int.h	2008-04-21 13:38:53 UTC (rev 1499)
@@ -30,6 +30,7 @@
 #	define PDO_MYSQL_PARAM_BIND MYSQLND_PARAM_BIND
 #else
 #	include <mysql.h>
+#	define PDO_MYSQL_PARAM_BIND MYSQL_BIND
 #endif
 
 #if defined(PDO_USE_MYSQLND) && PHP_DEBUG && !defined(PHP_WIN32)
@@ -114,8 +115,11 @@
 #endif
 	pdo_mysql_error_info einfo;
 #if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND
+#if PDO_USE_MYSQLND
 	MYSQLND_STMT 		*stmt;
-	
+#else
+	MYSQL_STMT		*stmt;
+#endif	
 	int num_params;
 	PDO_MYSQL_PARAM_BIND	*params;
 #ifndef PDO_USE_MYSQLND

Thread
PHP mysqlnd svn commit: r1499 - trunk/php5/ext/pdo_mysqlndjschlueter21 Apr