summaryrefslogtreecommitdiff
path: root/ext/pdo_mysql
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pdo_mysql')
-rwxr-xr-xext/pdo_mysql/config.m418
-rw-r--r--ext/pdo_mysql/config.w322
-rw-r--r--ext/pdo_mysql/mysql_driver.c245
-rw-r--r--ext/pdo_mysql/mysql_statement.c182
-rw-r--r--ext/pdo_mysql/pdo_mysql.c68
-rw-r--r--ext/pdo_mysql/php_pdo_mysql.h5
-rw-r--r--ext/pdo_mysql/php_pdo_mysql_int.h58
-rw-r--r--ext/pdo_mysql/php_pdo_mysql_sqlstate.h430
-rw-r--r--ext/pdo_mysql/tests/bug54929.phpt2
-rw-r--r--ext/pdo_mysql/tests/bug63176.phpt4
-rw-r--r--ext/pdo_mysql/tests/bug70272.phpt31
-rw-r--r--ext/pdo_mysql/tests/bug70862.phpt46
-rw-r--r--ext/pdo_mysql/tests/bug_37445.phpt5
-rw-r--r--ext/pdo_mysql/tests/config.inc2
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql___construct.phpt7
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt7
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql___construct_uri-win32.phpt79
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql___construct_uri.phpt7
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt6
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt2
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt3
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt5
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt5
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt5
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt2
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt6
26 files changed, 733 insertions, 499 deletions
diff --git a/ext/pdo_mysql/config.m4 b/ext/pdo_mysql/config.m4
index f237f413be..c165fb6b51 100755
--- a/ext/pdo_mysql/config.m4
+++ b/ext/pdo_mysql/config.m4
@@ -13,6 +13,18 @@ if test -z "$PHP_ZLIB_DIR"; then
fi
if test "$PHP_PDO_MYSQL" != "no"; then
+ dnl This depends on ext/mysqli/config.m4 providing the
+ dnl PHP_MYSQL_SOCKET_SEARCH macro and --with-mysql-sock configure option.
+ AC_MSG_CHECKING([for MySQL UNIX socket location])
+ if test "$PHP_MYSQL_SOCK" != "no" && test "$PHP_MYSQL_SOCK" != "yes"; then
+ MYSQL_SOCK=$PHP_MYSQL_SOCK
+ AC_DEFINE_UNQUOTED(PHP_MYSQL_UNIX_SOCK_ADDR, "$MYSQL_SOCK", [ ])
+ AC_MSG_RESULT([$MYSQL_SOCK])
+ elif test "$PHP_MYSQL_SOCK" = "yes"; then
+ PHP_MYSQL_SOCKET_SEARCH
+ else
+ AC_MSG_RESULT([no])
+ fi
if test "$PHP_PDO" = "no" && test "$ext_shared" = "no"; then
AC_MSG_ERROR([PDO is not enabled! Add --enable-pdo to your configure line.])
@@ -130,8 +142,8 @@ if test "$PHP_PDO_MYSQL" != "no"; then
pdo_cv_inc_path=$abs_srcdir/ext
elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
pdo_cv_inc_path=$abs_srcdir/ext
- elif test -f $prefix/include/php/ext/pdo/php_pdo_driver.h; then
- pdo_cv_inc_path=$prefix/include/php/ext
+ elif test -f $phpincludedir/ext/pdo/php_pdo_driver.h; then
+ pdo_cv_inc_path=$phpincludedir/ext
else
AC_MSG_ERROR([Cannot find php_pdo_driver.h.])
fi
@@ -144,7 +156,7 @@ if test "$PHP_PDO_MYSQL" != "no"; then
fi
dnl fix after renaming to pdo_mysql
- PHP_NEW_EXTENSION(pdo_mysql, pdo_mysql.c mysql_driver.c mysql_statement.c, $ext_shared,,-I$pdo_cv_inc_path -I)
+ PHP_NEW_EXTENSION(pdo_mysql, pdo_mysql.c mysql_driver.c mysql_statement.c, $ext_shared,,-I$pdo_cv_inc_path -I -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
ifdef([PHP_ADD_EXTENSION_DEP],
[
PHP_ADD_EXTENSION_DEP(pdo_mysql, pdo)
diff --git a/ext/pdo_mysql/config.w32 b/ext/pdo_mysql/config.w32
index da085dc569..f150916b2a 100644
--- a/ext/pdo_mysql/config.w32
+++ b/ext/pdo_mysql/config.w32
@@ -12,7 +12,7 @@ if (PHP_PDO_MYSQL != "no") {
} else {
if (CHECK_LIB("libmysql.lib", "pdo_mysql", PHP_PDO_MYSQL) &&
CHECK_HEADER_ADD_INCLUDE("mysql.h", "CFLAGS_PDO_MYSQL", PHP_PHP_BUILD + "\\include\\mysql;" + PHP_PDO_MYSQL)) {
- EXTENSION("pdo_mysql", "pdo_mysql.c mysql_driver.c mysql_statement.c");
+ EXTENSION("pdo_mysql", "pdo_mysql.c mysql_driver.c mysql_statement.c", null, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
} else {
WARNING("pdo_mysql not enabled; libraries and headers not found");
}
diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c
index e82fdf46db..f09bc05314 100644
--- a/ext/pdo_mysql/mysql_driver.c
+++ b/ext/pdo_mysql/mysql_driver.c
@@ -1,6 +1,6 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 5 |
+ | PHP Version 7 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2016 The PHP Group |
+----------------------------------------------------------------------+
@@ -43,10 +43,10 @@
#endif
/* {{{ _pdo_mysql_error */
-int _pdo_mysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int line TSRMLS_DC)
+int _pdo_mysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int line)
{
pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
- pdo_error_type *pdo_err;
+ pdo_error_type *pdo_err;
pdo_mysql_error_info *einfo;
pdo_mysql_stmt *S = NULL;
@@ -105,7 +105,7 @@ int _pdo_mysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int lin
if (!dbh->methods) {
PDO_DBG_INF("Throwing exception");
- zend_throw_exception_ex(php_pdo_get_exception(), einfo->errcode TSRMLS_CC, "SQLSTATE[%s] [%d] %s",
+ zend_throw_exception_ex(php_pdo_get_exception(), einfo->errcode, "SQLSTATE[%s] [%d] %s",
*pdo_err, einfo->errcode, einfo->errmsg);
}
@@ -114,7 +114,7 @@ int _pdo_mysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int lin
/* }}} */
/* {{{ pdo_mysql_fetch_error_func */
-static int pdo_mysql_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info TSRMLS_DC)
+static int pdo_mysql_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info)
{
pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
pdo_mysql_error_info *einfo = &H->einfo;
@@ -130,7 +130,7 @@ static int pdo_mysql_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *in
if (einfo->errcode) {
add_next_index_long(info, einfo->errcode);
- add_next_index_string(info, einfo->errmsg, 1);
+ add_next_index_string(info, einfo->errmsg);
}
PDO_DBG_RETURN(1);
@@ -138,20 +138,18 @@ static int pdo_mysql_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *in
/* }}} */
/* {{{ mysql_handle_closer */
-static int mysql_handle_closer(pdo_dbh_t *dbh TSRMLS_DC)
+static int mysql_handle_closer(pdo_dbh_t *dbh)
{
pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
-
+
PDO_DBG_ENTER("mysql_handle_closer");
PDO_DBG_INF_FMT("dbh=%p", dbh);
if (H) {
if (H->server) {
mysql_close(H->server);
- H->server = NULL;
}
if (H->einfo.errmsg) {
pefree(H->einfo.errmsg, dbh->is_persistent);
- H->einfo.errmsg = NULL;
}
pefree(H, dbh->is_persistent);
dbh->driver_data = NULL;
@@ -161,18 +159,18 @@ static int mysql_handle_closer(pdo_dbh_t *dbh TSRMLS_DC)
/* }}} */
/* {{{ mysql_handle_preparer */
-static int mysql_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, pdo_stmt_t *stmt, zval *driver_options TSRMLS_DC)
+static int mysql_handle_preparer(pdo_dbh_t *dbh, const char *sql, size_t sql_len, pdo_stmt_t *stmt, zval *driver_options)
{
pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
pdo_mysql_stmt *S = ecalloc(1, sizeof(pdo_mysql_stmt));
char *nsql = NULL;
- int nsql_len = 0;
+ size_t nsql_len = 0;
int ret;
int server_version;
-
+
PDO_DBG_ENTER("mysql_handle_preparer");
PDO_DBG_INF_FMT("dbh=%p", dbh);
- PDO_DBG_INF_FMT("sql=%.*s", sql_len, sql);
+ PDO_DBG_INF_FMT("sql=%.*s", (int)sql_len, sql);
S->H = H;
stmt->driver_data = S;
@@ -187,7 +185,7 @@ static int mysql_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len,
goto fallback;
}
stmt->supports_placeholders = PDO_PLACEHOLDER_POSITIONAL;
- ret = pdo_parse_params(stmt, (char*)sql, sql_len, &nsql, &nsql_len TSRMLS_CC);
+ ret = pdo_parse_params(stmt, (char*)sql, sql_len, &nsql, &nsql_len);
if (ret == 1) {
/* query was rewritten */
@@ -206,7 +204,7 @@ static int mysql_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len,
}
PDO_DBG_RETURN(0);
}
-
+
if (mysql_stmt_prepare(S->stmt, sql, sql_len)) {
/* TODO: might need to pull statement specific info here? */
/* if the query isn't supported by the protocol, fallback to emulation */
@@ -235,30 +233,30 @@ static int mysql_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len,
#else
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));
+ S->in_length = ecalloc(S->num_params, sizeof(zend_ulong));
#endif
}
dbh->alloc_own_columns = 1;
- S->max_length = pdo_attr_lval(driver_options, PDO_ATTR_MAX_COLUMN_LEN, 0 TSRMLS_CC);
+ S->max_length = pdo_attr_lval(driver_options, PDO_ATTR_MAX_COLUMN_LEN, 0);
PDO_DBG_RETURN(1);
fallback:
end:
stmt->supports_placeholders = PDO_PLACEHOLDER_NONE;
-
+
PDO_DBG_RETURN(1);
}
/* }}} */
/* {{{ mysql_handle_doer */
-static long mysql_handle_doer(pdo_dbh_t *dbh, const char *sql, long sql_len TSRMLS_DC)
+static zend_long mysql_handle_doer(pdo_dbh_t *dbh, const char *sql, size_t sql_len)
{
pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
PDO_DBG_ENTER("mysql_handle_doer");
PDO_DBG_INF_FMT("dbh=%p", dbh);
- PDO_DBG_INF_FMT("sql=%.*s", sql_len, sql);
+ PDO_DBG_INF_FMT("sql=%.*s", (int)sql_len, sql);
if (mysql_real_query(H->server, sql, sql_len)) {
pdo_mysql_error(dbh);
@@ -288,10 +286,10 @@ static long mysql_handle_doer(pdo_dbh_t *dbh, const char *sql, long sql_len TSRM
/* }}} */
/* {{{ pdo_mysql_last_insert_id */
-static char *pdo_mysql_last_insert_id(pdo_dbh_t *dbh, const char *name, unsigned int *len TSRMLS_DC)
+static char *pdo_mysql_last_insert_id(pdo_dbh_t *dbh, const char *name, size_t *len)
{
pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
- char *id = php_pdo_int64_to_str(mysql_insert_id(H->server) TSRMLS_CC);
+ char *id = php_pdo_int64_to_str(mysql_insert_id(H->server));
PDO_DBG_ENTER("pdo_mysql_last_insert_id");
*len = strlen(id);
PDO_DBG_RETURN(id);
@@ -299,58 +297,58 @@ static char *pdo_mysql_last_insert_id(pdo_dbh_t *dbh, const char *name, unsigned
/* }}} */
/* {{{ mysql_handle_quoter */
-static int mysql_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, int unquotedlen, char **quoted, int *quotedlen, enum pdo_param_type paramtype TSRMLS_DC)
+static int mysql_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, size_t unquotedlen, char **quoted, size_t *quotedlen, enum pdo_param_type paramtype )
{
pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
PDO_DBG_ENTER("mysql_handle_quoter");
PDO_DBG_INF_FMT("dbh=%p", dbh);
- PDO_DBG_INF_FMT("unquoted=%.*s", unquotedlen, unquoted);
+ PDO_DBG_INF_FMT("unquoted=%.*s", (int)unquotedlen, unquoted);
*quoted = safe_emalloc(2, unquotedlen, 3);
*quotedlen = mysql_real_escape_string(H->server, *quoted + 1, unquoted, unquotedlen);
(*quoted)[0] =(*quoted)[++*quotedlen] = '\'';
(*quoted)[++*quotedlen] = '\0';
- PDO_DBG_INF_FMT("quoted=%.*s", *quotedlen, *quoted);
+ PDO_DBG_INF_FMT("quoted=%.*s", (int)*quotedlen, *quoted);
PDO_DBG_RETURN(1);
}
/* }}} */
/* {{{ mysql_handle_begin */
-static int mysql_handle_begin(pdo_dbh_t *dbh TSRMLS_DC)
+static int mysql_handle_begin(pdo_dbh_t *dbh)
{
PDO_DBG_ENTER("mysql_handle_quoter");
PDO_DBG_INF_FMT("dbh=%p", dbh);
- PDO_DBG_RETURN(0 <= mysql_handle_doer(dbh, ZEND_STRL("START TRANSACTION") TSRMLS_CC));
+ PDO_DBG_RETURN(0 <= mysql_handle_doer(dbh, ZEND_STRL("START TRANSACTION")));
}
/* }}} */
/* {{{ mysql_handle_commit */
-static int mysql_handle_commit(pdo_dbh_t *dbh TSRMLS_DC)
+static int mysql_handle_commit(pdo_dbh_t *dbh)
{
PDO_DBG_ENTER("mysql_handle_commit");
PDO_DBG_INF_FMT("dbh=%p", dbh);
#if MYSQL_VERSION_ID >= 40100 || defined(PDO_USE_MYSQLND)
PDO_DBG_RETURN(0 <= mysql_commit(((pdo_mysql_db_handle *)dbh->driver_data)->server));
#else
- PDO_DBG_RETURN(0 <= mysql_handle_doer(dbh, ZEND_STRL("COMMIT") TSRMLS_CC));
+ PDO_DBG_RETURN(0 <= mysql_handle_doer(dbh, ZEND_STRL("COMMIT")));
#endif
}
/* }}} */
/* {{{ mysql_handle_rollback */
-static int mysql_handle_rollback(pdo_dbh_t *dbh TSRMLS_DC)
+static int mysql_handle_rollback(pdo_dbh_t *dbh)
{
PDO_DBG_ENTER("mysql_handle_rollback");
PDO_DBG_INF_FMT("dbh=%p", dbh);
#if MYSQL_VERSION_ID >= 40100 || defined(PDO_USE_MYSQLND)
PDO_DBG_RETURN(0 <= mysql_rollback(((pdo_mysql_db_handle *)dbh->driver_data)->server));
#else
- PDO_DBG_RETURN(0 <= mysql_handle_doer(dbh, ZEND_STRL("ROLLBACK") TSRMLS_CC));
+ PDO_DBG_RETURN(0 <= mysql_handle_doer(dbh, ZEND_STRL("ROLLBACK")));
#endif
}
/* }}} */
/* {{{ mysql_handle_autocommit */
-static inline int mysql_handle_autocommit(pdo_dbh_t *dbh TSRMLS_DC)
+static inline int mysql_handle_autocommit(pdo_dbh_t *dbh)
{
PDO_DBG_ENTER("mysql_handle_autocommit");
PDO_DBG_INF_FMT("dbh=%p", dbh);
@@ -359,49 +357,51 @@ static inline int mysql_handle_autocommit(pdo_dbh_t *dbh TSRMLS_DC)
PDO_DBG_RETURN(0 <= mysql_autocommit(((pdo_mysql_db_handle *)dbh->driver_data)->server, dbh->auto_commit));
#else
if (dbh->auto_commit) {
- PDO_DBG_RETURN(0 <= mysql_handle_doer(dbh, ZEND_STRL("SET AUTOCOMMIT=1") TSRMLS_CC));
+ PDO_DBG_RETURN(0 <= mysql_handle_doer(dbh, ZEND_STRL("SET AUTOCOMMIT=1")));
} else {
- PDO_DBG_RETURN(0 <= mysql_handle_doer(dbh, ZEND_STRL("SET AUTOCOMMIT=0") TSRMLS_CC));
+ PDO_DBG_RETURN(0 <= mysql_handle_doer(dbh, ZEND_STRL("SET AUTOCOMMIT=0")));
}
#endif
}
/* }}} */
/* {{{ pdo_mysql_set_attribute */
-static int pdo_mysql_set_attribute(pdo_dbh_t *dbh, long attr, zval *val TSRMLS_DC)
+static int pdo_mysql_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val)
{
+ zend_long lval = zval_get_long(val);
+ zend_bool bval = lval? 1 : 0;
PDO_DBG_ENTER("pdo_mysql_set_attribute");
PDO_DBG_INF_FMT("dbh=%p", dbh);
PDO_DBG_INF_FMT("attr=%l", attr);
switch (attr) {
- case PDO_ATTR_AUTOCOMMIT:
- convert_to_boolean(val);
-
- /* ignore if the new value equals the old one */
- if (dbh->auto_commit ^ Z_BVAL_P(val)) {
- dbh->auto_commit = Z_BVAL_P(val);
- mysql_handle_autocommit(dbh TSRMLS_CC);
+ case PDO_ATTR_AUTOCOMMIT:
+ /* ignore if the new value equals the old one */
+ if (dbh->auto_commit ^ bval) {
+ dbh->auto_commit = bval;
+ mysql_handle_autocommit(dbh);
}
PDO_DBG_RETURN(1);
case PDO_MYSQL_ATTR_USE_BUFFERED_QUERY:
- ((pdo_mysql_db_handle *)dbh->driver_data)->buffered = Z_BVAL_P(val);
+ /* ignore if the new value equals the old one */
+ ((pdo_mysql_db_handle *)dbh->driver_data)->buffered = bval;
PDO_DBG_RETURN(1);
case PDO_MYSQL_ATTR_DIRECT_QUERY:
case PDO_ATTR_EMULATE_PREPARES:
- ((pdo_mysql_db_handle *)dbh->driver_data)->emulate_prepare = Z_BVAL_P(val);
+ /* ignore if the new value equals the old one */
+ ((pdo_mysql_db_handle *)dbh->driver_data)->emulate_prepare = bval;
PDO_DBG_RETURN(1);
case PDO_ATTR_FETCH_TABLE_NAMES:
- ((pdo_mysql_db_handle *)dbh->driver_data)->fetch_table_names = Z_BVAL_P(val);
+ ((pdo_mysql_db_handle *)dbh->driver_data)->fetch_table_names = bval;
PDO_DBG_RETURN(1);
#ifndef PDO_USE_MYSQLND
case PDO_MYSQL_ATTR_MAX_BUFFER_SIZE:
- if (Z_LVAL_P(val) < 0) {
+ if (lval < 0) {
/* TODO: Johannes, can we throw a warning here? */
((pdo_mysql_db_handle *)dbh->driver_data)->max_buffer_size = 1024*1024;
PDO_DBG_INF_FMT("Adjusting invalid buffer size to =%l", ((pdo_mysql_db_handle *)dbh->driver_data)->max_buffer_size);
} else {
- ((pdo_mysql_db_handle *)dbh->driver_data)->max_buffer_size = Z_LVAL_P(val);
+ ((pdo_mysql_db_handle *)dbh->driver_data)->max_buffer_size = lval;
}
PDO_DBG_RETURN(1);
break;
@@ -414,7 +414,7 @@ static int pdo_mysql_set_attribute(pdo_dbh_t *dbh, long attr, zval *val TSRMLS_D
/* }}} */
/* {{{ pdo_mysql_get_attribute */
-static int pdo_mysql_get_attribute(pdo_dbh_t *dbh, long attr, zval *return_value TSRMLS_DC)
+static int pdo_mysql_get_attribute(pdo_dbh_t *dbh, zend_long attr, zval *return_value)
{
pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
@@ -423,26 +423,26 @@ static int pdo_mysql_get_attribute(pdo_dbh_t *dbh, long attr, zval *return_value
PDO_DBG_INF_FMT("attr=%l", attr);
switch (attr) {
case PDO_ATTR_CLIENT_VERSION:
- ZVAL_STRING(return_value, (char *)mysql_get_client_info(), 1);
+ ZVAL_STRING(return_value, (char *)mysql_get_client_info());
break;
case PDO_ATTR_SERVER_VERSION:
- ZVAL_STRING(return_value, (char *)mysql_get_server_info(H->server), 1);
+ ZVAL_STRING(return_value, (char *)mysql_get_server_info(H->server));
break;
case PDO_ATTR_CONNECTION_STATUS:
- ZVAL_STRING(return_value, (char *)mysql_get_host_info(H->server), 1);
+ ZVAL_STRING(return_value, (char *)mysql_get_host_info(H->server));
break;
case PDO_ATTR_SERVER_INFO: {
- char *tmp;
#if defined(PDO_USE_MYSQLND)
- unsigned int tmp_len;
+ zend_string *tmp;
- if (mysqlnd_stat(H->server, &tmp, &tmp_len) == PASS) {
- ZVAL_STRINGL(return_value, tmp, tmp_len, 0);
+ if (mysqlnd_stat(H->server, &tmp) == PASS) {
+ ZVAL_STR(return_value, tmp);
#else
+ char *tmp;
if ((tmp = (char *)mysql_stat(H->server))) {
- ZVAL_STRING(return_value, tmp, 1);
+ ZVAL_STRING(return_value, tmp);
#endif
} else {
pdo_mysql_error(dbh);
@@ -453,7 +453,7 @@ static int pdo_mysql_get_attribute(pdo_dbh_t *dbh, long attr, zval *return_value
case PDO_ATTR_AUTOCOMMIT:
ZVAL_LONG(return_value, dbh->auto_commit);
break;
-
+
case PDO_MYSQL_ATTR_USE_BUFFERED_QUERY:
ZVAL_LONG(return_value, H->buffered);
break;
@@ -470,7 +470,7 @@ static int pdo_mysql_get_attribute(pdo_dbh_t *dbh, long attr, zval *return_value
#endif
default:
- PDO_DBG_RETURN(0);
+ PDO_DBG_RETURN(0);
}
PDO_DBG_RETURN(1);
@@ -478,7 +478,7 @@ static int pdo_mysql_get_attribute(pdo_dbh_t *dbh, long attr, zval *return_value
/* }}} */
/* {{{ pdo_mysql_check_liveness */
-static int pdo_mysql_check_liveness(pdo_dbh_t *dbh TSRMLS_DC)
+static int pdo_mysql_check_liveness(pdo_dbh_t *dbh)
{
pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
#if MYSQL_VERSION_ID <= 32230
@@ -507,7 +507,7 @@ static int pdo_mysql_check_liveness(pdo_dbh_t *dbh TSRMLS_DC)
signal(SIGPIPE, handler);
#endif /* end mysql_ping() */
PDO_DBG_RETURN(SUCCESS);
-}
+}
/* }}} */
/* {{{ mysql_methods */
@@ -534,7 +534,7 @@ static struct pdo_dbh_methods mysql_methods = {
#endif
/* {{{ pdo_mysql_handle_factory */
-static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC)
+static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options)
{
pdo_mysql_db_handle *H;
int i, ret = 0;
@@ -554,14 +554,14 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
#endif
;
#if defined(PDO_USE_MYSQLND)
- int dbname_len = 0;
- int password_len = 0;
+ size_t dbname_len = 0;
+ size_t password_len = 0;
#endif
#ifdef CLIENT_MULTI_STATEMENTS
if (!driver_options) {
connect_opts |= CLIENT_MULTI_STATEMENTS;
- } else if (pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_MULTI_STATEMENTS, 1 TSRMLS_CC)) {
+ } else if (pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_MULTI_STATEMENTS, 1)) {
connect_opts |= CLIENT_MULTI_STATEMENTS;
}
#endif
@@ -586,7 +586,7 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
pdo_mysql_error(dbh);
goto cleanup;
}
-
+
dbh->driver_data = H;
#ifndef PDO_USE_MYSQLND
@@ -597,30 +597,30 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
/* handle MySQL options */
if (driver_options) {
- long connect_timeout = pdo_attr_lval(driver_options, PDO_ATTR_TIMEOUT, 30 TSRMLS_CC);
- long local_infile = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_LOCAL_INFILE, 0 TSRMLS_CC);
- char *init_cmd = NULL;
+ zend_long connect_timeout = pdo_attr_lval(driver_options, PDO_ATTR_TIMEOUT, 30);
+ zend_long local_infile = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_LOCAL_INFILE, 0);
+ zend_string *init_cmd = NULL;
#ifndef PDO_USE_MYSQLND
- char *default_file = NULL, *default_group = NULL;
+ zend_string *default_file = NULL, *default_group = NULL;
#endif
- long compress = 0;
- char *ssl_key = NULL, *ssl_cert = NULL, *ssl_ca = NULL, *ssl_capath = NULL, *ssl_cipher = NULL;
- H->buffered = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_USE_BUFFERED_QUERY, 1 TSRMLS_CC);
+ zend_long compress = 0;
+ zend_string *ssl_key = NULL, *ssl_cert = NULL, *ssl_ca = NULL, *ssl_capath = NULL, *ssl_cipher = NULL;
+ H->buffered = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_USE_BUFFERED_QUERY, 1);
H->emulate_prepare = pdo_attr_lval(driver_options,
- PDO_MYSQL_ATTR_DIRECT_QUERY, H->emulate_prepare TSRMLS_CC);
- H->emulate_prepare = pdo_attr_lval(driver_options,
- PDO_ATTR_EMULATE_PREPARES, H->emulate_prepare TSRMLS_CC);
+ PDO_MYSQL_ATTR_DIRECT_QUERY, H->emulate_prepare);
+ H->emulate_prepare = pdo_attr_lval(driver_options,
+ PDO_ATTR_EMULATE_PREPARES, H->emulate_prepare);
#ifndef PDO_USE_MYSQLND
- H->max_buffer_size = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_MAX_BUFFER_SIZE, H->max_buffer_size TSRMLS_CC);
+ H->max_buffer_size = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_MAX_BUFFER_SIZE, H->max_buffer_size);
#endif
- if (pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_FOUND_ROWS, 0 TSRMLS_CC)) {
+ if (pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_FOUND_ROWS, 0)) {
connect_opts |= CLIENT_FOUND_ROWS;
}
- if (pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_IGNORE_SPACE, 0 TSRMLS_CC)) {
+ if (pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_IGNORE_SPACE, 0)) {
connect_opts |= CLIENT_IGNORE_SPACE;
}
@@ -633,7 +633,7 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
#if PHP_API_VERSION < 20100412
if ((PG(open_basedir) && PG(open_basedir)[0] != '\0') || PG(safe_mode))
#else
- if (PG(open_basedir) && PG(open_basedir)[0] != '\0')
+ if (PG(open_basedir) && PG(open_basedir)[0] != '\0')
#endif
{
local_infile = 0;
@@ -651,41 +651,41 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
* mysqlnd doesn't support reconnect, thus we don't have "|| defined(PDO_USE_MYSQLND)"
*/
{
- long reconnect = 1;
+ zend_long reconnect = 1;
mysql_options(H->server, MYSQL_OPT_RECONNECT, (const char*)&reconnect);
}
#endif
- init_cmd = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_INIT_COMMAND, NULL TSRMLS_CC);
+ init_cmd = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_INIT_COMMAND, NULL);
if (init_cmd) {
- if (mysql_options(H->server, MYSQL_INIT_COMMAND, (const char *)init_cmd)) {
- str_efree(init_cmd);
+ if (mysql_options(H->server, MYSQL_INIT_COMMAND, (const char *)ZSTR_VAL(init_cmd))) {
+ zend_string_release(init_cmd);
pdo_mysql_error(dbh);
goto cleanup;
}
- str_efree(init_cmd);
+ zend_string_release(init_cmd);
}
-#ifndef PDO_USE_MYSQLND
- default_file = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_READ_DEFAULT_FILE, NULL TSRMLS_CC);
+#ifndef PDO_USE_MYSQLND
+ default_file = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_READ_DEFAULT_FILE, NULL);
if (default_file) {
- if (mysql_options(H->server, MYSQL_READ_DEFAULT_FILE, (const char *)default_file)) {
- str_efree(default_file);
+ if (mysql_options(H->server, MYSQL_READ_DEFAULT_FILE, (const char *)ZSTR_VAL(default_file))) {
+ zend_string_release(default_file);
pdo_mysql_error(dbh);
goto cleanup;
}
- str_efree(default_file);
+ zend_string_release(default_file);
}
-
- default_group= pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_READ_DEFAULT_GROUP, NULL TSRMLS_CC);
+
+ default_group = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_READ_DEFAULT_GROUP, NULL);
if (default_group) {
- if (mysql_options(H->server, MYSQL_READ_DEFAULT_GROUP, (const char *)default_group)) {
- str_efree(default_group);
+ if (mysql_options(H->server, MYSQL_READ_DEFAULT_GROUP, (const char *)ZSTR_VAL(default_group))) {
+ zend_string_release(default_group);
pdo_mysql_error(dbh);
goto cleanup;
}
- str_efree(default_group);
+ zend_string_release(default_group);
}
#endif
- compress = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_COMPRESS, 0 TSRMLS_CC);
+ compress = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_COMPRESS, 0);
if (compress) {
if (mysql_options(H->server, MYSQL_OPT_COMPRESS, 0)) {
pdo_mysql_error(dbh);
@@ -693,41 +693,46 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
}
}
- ssl_key = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_KEY, NULL TSRMLS_CC);
- ssl_cert = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_CERT, NULL TSRMLS_CC);
- ssl_ca = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_CA, NULL TSRMLS_CC);
- ssl_capath = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_CAPATH, NULL TSRMLS_CC);
- ssl_cipher = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_CIPHER, NULL TSRMLS_CC);
-
+ ssl_key = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_KEY, NULL);
+ ssl_cert = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_CERT, NULL);
+ ssl_ca = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_CA, NULL);
+ ssl_capath = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_CAPATH, NULL);
+ ssl_cipher = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_CIPHER, NULL);
+
if (ssl_key || ssl_cert || ssl_ca || ssl_capath || ssl_cipher) {
- mysql_ssl_set(H->server, ssl_key, ssl_cert, ssl_ca, ssl_capath, ssl_cipher);
+ mysql_ssl_set(H->server,
+ ssl_key? ZSTR_VAL(ssl_key) : NULL,
+ ssl_cert? ZSTR_VAL(ssl_cert) : NULL,
+ ssl_ca? ZSTR_VAL(ssl_ca) : NULL,
+ ssl_capath? ZSTR_VAL(ssl_capath) : NULL,
+ ssl_cipher? ZSTR_VAL(ssl_cipher) : NULL);
if (ssl_key) {
- str_efree(ssl_key);
+ zend_string_release(ssl_key);
}
if (ssl_cert) {
- str_efree(ssl_cert);
+ zend_string_release(ssl_cert);
}
if (ssl_ca) {
- str_efree(ssl_ca);
+ zend_string_release(ssl_ca);
}
if (ssl_capath) {
- str_efree(ssl_capath);
+ zend_string_release(ssl_capath);
}
if (ssl_cipher) {
- str_efree(ssl_cipher);
+ zend_string_release(ssl_cipher);
}
}
#if MYSQL_VERSION_ID > 50605 || defined(PDO_USE_MYSQLND)
{
- char *public_key = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SERVER_PUBLIC_KEY, NULL TSRMLS_CC);
+ zend_string *public_key = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SERVER_PUBLIC_KEY, NULL);
if (public_key) {
- if (mysql_options(H->server, MYSQL_SERVER_PUBLIC_KEY, public_key)) {
+ if (mysql_options(H->server, MYSQL_SERVER_PUBLIC_KEY, ZSTR_VAL(public_key))) {
pdo_mysql_error(dbh);
- str_efree(public_key);
+ zend_string_release(public_key);
goto cleanup;
}
- str_efree(public_key);
+ zend_string_release(public_key);
}
}
#endif
@@ -741,7 +746,7 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
#endif
dbname = vars[1].optval;
- host = vars[2].optval;
+ host = vars[2].optval;
if(vars[3].optval) {
port = atoi(vars[3].optval);
}
@@ -749,10 +754,10 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
#ifdef PHP_WIN32
if (vars[2].optval && !strcmp(".", vars[2].optval)) {
#else
- if (vars[2].optval && !strcmp("localhost", vars[2].optval)) {
+ if (vars[2].optval && !strcmp("localhost", vars[2].optval)) {
#endif
- unix_socket = vars[4].optval;
- }
+ unix_socket = vars[4].optval;
+ }
/* TODO: - Check zval cache + ZTS */
#ifdef PDO_USE_MYSQLND
@@ -765,7 +770,7 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
}
if (mysqlnd_connect(H->server, host, dbh->username, dbh->password, password_len, dbname, dbname_len,
- port, unix_socket, connect_opts, MYSQLND_CLIENT_NO_FLAG TSRMLS_CC) == NULL) {
+ port, unix_socket, connect_opts, MYSQLND_CLIENT_NO_FLAG) == NULL) {
#else
if (mysql_real_connect(H->server, host, dbh->username, dbh->password, dbname, port, unix_socket, connect_opts) == NULL) {
#endif
@@ -774,7 +779,7 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
}
if (!dbh->auto_commit) {
- mysql_handle_autocommit(dbh TSRMLS_CC);
+ mysql_handle_autocommit(dbh);
}
H->attached = 1;
@@ -784,14 +789,14 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
dbh->methods = &mysql_methods;
ret = 1;
-
+
cleanup:
for (i = 0; i < sizeof(vars)/sizeof(vars[0]); i++) {
if (vars[i].freeme) {
efree(vars[i].optval);
}
}
-
+
dbh->methods = &mysql_methods;
PDO_DBG_RETURN(ret);
diff --git a/ext/pdo_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c
index 1b8f37af20..4a2146dd16 100644
--- a/ext/pdo_mysql/mysql_statement.c
+++ b/ext/pdo_mysql/mysql_statement.c
@@ -1,6 +1,6 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 5 |
+ | PHP Version 7 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2016 The PHP Group |
+----------------------------------------------------------------------+
@@ -33,18 +33,18 @@
#include "php_pdo_mysql_int.h"
#ifdef PDO_USE_MYSQLND
-# define pdo_mysql_stmt_execute_prepared(stmt) pdo_mysql_stmt_execute_prepared_mysqlnd(stmt TSRMLS_CC)
+# define pdo_mysql_stmt_execute_prepared(stmt) pdo_mysql_stmt_execute_prepared_mysqlnd(stmt)
# define pdo_free_bound_result(res) zval_dtor(res.zv)
# define pdo_mysql_stmt_close(stmt) mysqlnd_stmt_close(stmt, 0)
#else
-# define pdo_mysql_stmt_execute_prepared(stmt) pdo_mysql_stmt_execute_prepared_libmysql(stmt TSRMLS_CC)
+# define pdo_mysql_stmt_execute_prepared(stmt) pdo_mysql_stmt_execute_prepared_libmysql(stmt)
# define pdo_free_bound_result(res) efree(res.buffer)
# define pdo_mysql_stmt_close(stmt) mysql_stmt_close(stmt)
#endif
-static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
+static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt) /* {{{ */
{
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
@@ -88,8 +88,9 @@ static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
}
#endif
-
- if (S->H->server) {
+ if (!Z_ISUNDEF(stmt->database_object_handle)
+ && IS_OBJ_VALID(EG(objects_store).object_buckets[Z_OBJ_HANDLE(stmt->database_object_handle)])
+ && (!(GC_FLAGS(Z_OBJ(stmt->database_object_handle)) & IS_OBJ_FREE_CALLED))) {
while (mysql_more_results(S->H->server)) {
MYSQL_RES *res;
if (mysql_next_result(S->H->server) != 0) {
@@ -114,18 +115,18 @@ static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
}
/* }}} */
-static void pdo_mysql_stmt_set_row_count(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
+static void pdo_mysql_stmt_set_row_count(pdo_stmt_t *stmt) /* {{{ */
{
- long row_count;
+ zend_long row_count;
pdo_mysql_stmt *S = stmt->driver_data;
- row_count = (long) mysql_stmt_affected_rows(S->stmt);
- if (row_count != (long)-1) {
+ row_count = (zend_long) mysql_stmt_affected_rows(S->stmt);
+ if (row_count != (zend_long)-1) {
stmt->row_count = row_count;
}
}
/* }}} */
-static int pdo_mysql_fill_stmt_from_result(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
+static int pdo_mysql_fill_stmt_from_result(pdo_stmt_t *stmt) /* {{{ */
{
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
pdo_mysql_db_handle *H = S->H;
@@ -146,12 +147,12 @@ static int pdo_mysql_fill_stmt_from_result(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
PDO_DBG_RETURN(0);
}
- stmt->row_count = (long) mysql_num_rows(S->result);
+ stmt->row_count = (zend_long) mysql_num_rows(S->result);
stmt->column_count = (int) mysql_num_fields(S->result);
S->fields = mysql_fetch_fields(S->result);
} else {
/* this was a DML or DDL query (INSERT, UPDATE, DELETE, ... */
- stmt->row_count = (long) row_count;
+ stmt->row_count = (zend_long) row_count;
}
PDO_DBG_RETURN(1);
@@ -159,7 +160,7 @@ static int pdo_mysql_fill_stmt_from_result(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
/* }}} */
#ifndef PDO_USE_MYSQLND
-static int pdo_mysql_stmt_execute_prepared_libmysql(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
+static int pdo_mysql_stmt_execute_prepared_libmysql(pdo_stmt_t *stmt) /* {{{ */
{
pdo_mysql_stmt *S = stmt->driver_data;
pdo_mysql_db_handle *H = S->H;
@@ -200,7 +201,7 @@ static int pdo_mysql_stmt_execute_prepared_libmysql(pdo_stmt_t *stmt TSRMLS_DC)
stmt->column_count = (int)mysql_num_fields(S->result);
S->bound_result = ecalloc(stmt->column_count, sizeof(MYSQL_BIND));
S->out_null = ecalloc(stmt->column_count, sizeof(my_bool));
- S->out_length = ecalloc(stmt->column_count, sizeof(unsigned long));
+ S->out_length = ecalloc(stmt->column_count, sizeof(zend_ulong));
/* summon memory to hold the row */
for (i = 0; i < stmt->column_count; i++) {
@@ -263,14 +264,14 @@ static int pdo_mysql_stmt_execute_prepared_libmysql(pdo_stmt_t *stmt TSRMLS_DC)
}
}
- pdo_mysql_stmt_set_row_count(stmt TSRMLS_CC);
+ pdo_mysql_stmt_set_row_count(stmt);
PDO_DBG_RETURN(1);
}
/* }}} */
#endif
#ifdef PDO_USE_MYSQLND
-static int pdo_mysql_stmt_execute_prepared_mysqlnd(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
+static int pdo_mysql_stmt_execute_prepared_mysqlnd(pdo_stmt_t *stmt) /* {{{ */
{
pdo_mysql_stmt *S = stmt->driver_data;
pdo_mysql_db_handle *H = S->H;
@@ -306,13 +307,13 @@ static int pdo_mysql_stmt_execute_prepared_mysqlnd(pdo_stmt_t *stmt TSRMLS_DC) /
}
}
- pdo_mysql_stmt_set_row_count(stmt TSRMLS_CC);
+ pdo_mysql_stmt_set_row_count(stmt);
PDO_DBG_RETURN(1);
}
/* }}} */
#endif
-static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
+static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt) /* {{{ */
{
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
pdo_mysql_db_handle *H = S->H;
@@ -334,15 +335,17 @@ static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
PDO_DBG_RETURN(0);
}
- PDO_DBG_RETURN(pdo_mysql_fill_stmt_from_result(stmt TSRMLS_CC));
+ PDO_DBG_RETURN(pdo_mysql_fill_stmt_from_result(stmt));
}
/* }}} */
-static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
+static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt) /* {{{ */
{
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
pdo_mysql_db_handle *H = S->H;
- long row_count;
+#if PDO_USE_MYSQLND
+ zend_long row_count;
+#endif
PDO_DBG_ENTER("pdo_mysql_stmt_next_rowset");
PDO_DBG_INF_FMT("stmt=%p", S->stmt);
@@ -391,8 +394,8 @@ static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
}
}
}
- row_count = (long) mysql_stmt_affected_rows(S->stmt);
- if (row_count != (long)-1) {
+ row_count = (zend_long) mysql_stmt_affected_rows(S->stmt);
+ if (row_count != (zend_long)-1) {
stmt->row_count = row_count;
}
PDO_DBG_RETURN(1);
@@ -402,7 +405,9 @@ static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
/* ensure that we free any previous unfetched results */
#ifndef PDO_USE_MYSQLND
if (S->stmt) {
- stmt->column_count = (int)mysql_num_fields(S->result);
+ if (S->result) {
+ stmt->column_count = (int)mysql_num_fields(S->result);
+ }
mysql_stmt_free_result(S->stmt);
}
#endif
@@ -413,21 +418,21 @@ static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
if (!mysql_more_results(H->server)) {
/* No more results */
- PDO_DBG_RETURN(0);
+ PDO_DBG_RETURN(0);
}
#if PDO_USE_MYSQLND
if (mysql_next_result(H->server) == FAIL) {
pdo_mysql_error_stmt(stmt);
PDO_DBG_RETURN(0);
} else {
- PDO_DBG_RETURN(pdo_mysql_fill_stmt_from_result(stmt TSRMLS_CC));
+ PDO_DBG_RETURN(pdo_mysql_fill_stmt_from_result(stmt));
}
#else
if (mysql_next_result(H->server) > 0) {
pdo_mysql_error_stmt(stmt);
PDO_DBG_RETURN(0);
} else {
- PDO_DBG_RETURN(pdo_mysql_fill_stmt_from_result(stmt TSRMLS_CC));
+ PDO_DBG_RETURN(pdo_mysql_fill_stmt_from_result(stmt));
}
#endif
}
@@ -446,8 +451,9 @@ static const char * const pdo_param_event_names[] =
};
-static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *param, enum pdo_param_event event_type TSRMLS_DC) /* {{{ */
+static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *param, enum pdo_param_event event_type) /* {{{ */
{
+ zval *parameter;
#ifndef PDO_USE_MYSQLND
PDO_MYSQL_PARAM_BIND *b;
#endif
@@ -483,17 +489,21 @@ static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_da
PDO_DBG_RETURN(0);
}
+ if (!Z_ISREF(param->parameter)) {
+ parameter = &param->parameter;
+ } else {
+ parameter = Z_REFVAL(param->parameter);
+ }
+
#if PDO_USE_MYSQLND
- if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_NULL ||
- Z_TYPE_P(param->parameter) == IS_NULL) {
- mysqlnd_stmt_bind_one_param(S->stmt, param->paramno, param->parameter, MYSQL_TYPE_NULL);
+ if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_NULL || (Z_TYPE_P(parameter) == IS_NULL)) {
+ mysqlnd_stmt_bind_one_param(S->stmt, param->paramno, parameter, MYSQL_TYPE_NULL);
PDO_DBG_RETURN(1);
}
#else
b = (PDO_MYSQL_PARAM_BIND*)param->driver_data;
*b->is_null = 0;
- if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_NULL ||
- Z_TYPE_P(param->parameter) == IS_NULL) {
+ if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_NULL || Z_TYPE_P(parameter) == IS_NULL) {
*b->is_null = 1;
b->buffer_type = MYSQL_TYPE_STRING;
b->buffer = NULL;
@@ -508,16 +518,20 @@ static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_da
PDO_DBG_RETURN(0);
case PDO_PARAM_LOB:
PDO_DBG_INF("PDO_PARAM_LOB");
- if (Z_TYPE_P(param->parameter) == IS_RESOURCE) {
- php_stream *stm;
- php_stream_from_zval_no_verify(stm, &param->parameter);
+ if (!Z_ISREF(param->parameter)) {
+ parameter = &param->parameter;
+ } else {
+ parameter = Z_REFVAL(param->parameter);
+ }
+ if (Z_TYPE_P(parameter) == IS_RESOURCE) {
+ php_stream *stm = NULL;
+ php_stream_from_zval_no_verify(stm, parameter);
if (stm) {
- SEPARATE_ZVAL_IF_NOT_REF(&param->parameter);
- Z_TYPE_P(param->parameter) = IS_STRING;
- Z_STRLEN_P(param->parameter) = php_stream_copy_to_mem(stm,
- &Z_STRVAL_P(param->parameter), PHP_STREAM_COPY_ALL, 0);
+ zend_string *mem = php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0);
+ zval_ptr_dtor(parameter);
+ ZVAL_STR(parameter, mem ? mem : ZSTR_EMPTY_ALLOC());
} else {
- pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource" TSRMLS_CC);
+ pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource");
return 0;
}
}
@@ -529,20 +543,25 @@ static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_da
#if PDO_USE_MYSQLND
/* Is it really correct to check the zval's type? - But well, that's what the old code below does, too */
- PDO_DBG_INF_FMT("param->parameter->type=%d", Z_TYPE_P(param->parameter));
- switch (Z_TYPE_P(param->parameter)) {
+ PDO_DBG_INF_FMT("param->parameter->type=%d", Z_TYPE(param->parameter));
+ if (!Z_ISREF(param->parameter)) {
+ parameter = &param->parameter;
+ } else {
+ parameter = Z_REFVAL(param->parameter);
+ }
+ switch (Z_TYPE_P(parameter)) {
case IS_STRING:
- mysqlnd_stmt_bind_one_param(S->stmt, param->paramno, param->parameter, MYSQL_TYPE_VAR_STRING);
+ mysqlnd_stmt_bind_one_param(S->stmt, param->paramno, parameter, MYSQL_TYPE_VAR_STRING);
break;
case IS_LONG:
-#if SIZEOF_LONG==8
- mysqlnd_stmt_bind_one_param(S->stmt, param->paramno, param->parameter, MYSQL_TYPE_LONGLONG);
-#elif SIZEOF_LONG==4
- mysqlnd_stmt_bind_one_param(S->stmt, param->paramno, param->parameter, MYSQL_TYPE_LONG);
+#if SIZEOF_ZEND_LONG==8
+ mysqlnd_stmt_bind_one_param(S->stmt, param->paramno, parameter, MYSQL_TYPE_LONGLONG);
+#elif SIZEOF_ZEND_LONG==4
+ mysqlnd_stmt_bind_one_param(S->stmt, param->paramno, parameter, MYSQL_TYPE_LONG);
#endif /* SIZEOF_LONG */
break;
case IS_DOUBLE:
- mysqlnd_stmt_bind_one_param(S->stmt, param->paramno, param->parameter, MYSQL_TYPE_DOUBLE);
+ mysqlnd_stmt_bind_one_param(S->stmt, param->paramno, parameter, MYSQL_TYPE_DOUBLE);
break;
default:
PDO_DBG_RETURN(0);
@@ -550,23 +569,28 @@ static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_da
PDO_DBG_RETURN(1);
#else
- PDO_DBG_INF_FMT("param->parameter->type=%d", Z_TYPE_P(param->parameter));
- switch (Z_TYPE_P(param->parameter)) {
+ PDO_DBG_INF_FMT("param->parameter->type=%d", Z_TYPE(param->parameter));
+ if (!Z_ISREF(param->parameter)) {
+ parameter = &param->parameter;
+ } else {
+ parameter = Z_REFVAL(param->parameter);
+ }
+ switch (Z_TYPE_P(parameter)) {
case IS_STRING:
b->buffer_type = MYSQL_TYPE_STRING;
- b->buffer = Z_STRVAL_P(param->parameter);
- b->buffer_length = Z_STRLEN_P(param->parameter);
- *b->length = Z_STRLEN_P(param->parameter);
+ b->buffer = Z_STRVAL_P(parameter);
+ b->buffer_length = Z_STRLEN_P(parameter);
+ *b->length = Z_STRLEN_P(parameter);
PDO_DBG_RETURN(1);
case IS_LONG:
b->buffer_type = MYSQL_TYPE_LONG;
- b->buffer = &Z_LVAL_P(param->parameter);
+ b->buffer = &Z_LVAL_P(parameter);
PDO_DBG_RETURN(1);
case IS_DOUBLE:
b->buffer_type = MYSQL_TYPE_DOUBLE;
- b->buffer = &Z_DVAL_P(param->parameter);
+ b->buffer = &Z_DVAL_P(parameter);
PDO_DBG_RETURN(1);
default:
@@ -587,7 +611,7 @@ static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_da
}
/* }}} */
-static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori, long offset TSRMLS_DC) /* {{{ */
+static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori, zend_long offset) /* {{{ */
{
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
#if PDO_USE_MYSQLND
@@ -651,7 +675,7 @@ static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori
}
/* }}} */
-static int pdo_mysql_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC) /* {{{ */
+static int pdo_mysql_stmt_describe(pdo_stmt_t *stmt, int colno) /* {{{ */
{
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
struct pdo_column_data *cols = stmt->columns;
@@ -675,15 +699,11 @@ static int pdo_mysql_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC) /* {{{
PDO_DBG_RETURN(1);
}
for (i = 0; i < stmt->column_count; i++) {
- int namelen;
if (S->H->fetch_table_names) {
- namelen = spprintf(&cols[i].name, 0, "%s.%s", S->fields[i].table, S->fields[i].name);
- cols[i].namelen = namelen;
+ cols[i].name = strpprintf(0, "%s.%s", S->fields[i].table, S->fields[i].name);
} else {
- namelen = strlen(S->fields[i].name);
- cols[i].namelen = namelen;
- cols[i].name = estrndup(S->fields[i].name, namelen);
+ cols[i].name = zend_string_init(S->fields[i].name, S->fields[i].name_length, 0);
}
cols[i].precision = S->fields[i].decimals;
@@ -702,7 +722,7 @@ static int pdo_mysql_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC) /* {{{
}
/* }}} */
-static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned long *len, int *caller_frees TSRMLS_DC) /* {{{ */
+static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, size_t *len, int *caller_frees) /* {{{ */
{
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
@@ -725,7 +745,7 @@ static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsig
}
#if PDO_USE_MYSQLND
if (S->stmt) {
- Z_ADDREF_P(S->stmt->data->result_bind[colno].zv);
+ Z_TRY_ADDREF(S->stmt->data->result_bind[colno].zv);
*ptr = (char*)&S->stmt->data->result_bind[colno].zv;
*len = sizeof(zval);
PDO_DBG_RETURN(1);
@@ -803,11 +823,11 @@ static char *type_to_name_native(int type) /* {{{ */
#undef PDO_MYSQL_NATIVE_TYPE_NAME
} /* }}} */
-static int pdo_mysql_stmt_col_meta(pdo_stmt_t *stmt, long colno, zval *return_value TSRMLS_DC) /* {{{ */
+static int pdo_mysql_stmt_col_meta(pdo_stmt_t *stmt, zend_long colno, zval *return_value) /* {{{ */
{
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
const MYSQL_FIELD *F;
- zval *flags;
+ zval flags;
char *str;
PDO_DBG_ENTER("pdo_mysql_stmt_col_meta");
@@ -821,32 +841,31 @@ static int pdo_mysql_stmt_col_meta(pdo_stmt_t *stmt, long colno, zval *return_va
}
array_init(return_value);
- MAKE_STD_ZVAL(flags);
- array_init(flags);
+ array_init(&flags);
F = S->fields + colno;
if (F->def) {
- add_assoc_string(return_value, "mysql:def", F->def, 1);
+ add_assoc_string(return_value, "mysql:def", F->def);
}
if (IS_NOT_NULL(F->flags)) {
- add_next_index_string(flags, "not_null", 1);
+ add_next_index_string(&flags, "not_null");
}
if (IS_PRI_KEY(F->flags)) {
- add_next_index_string(flags, "primary_key", 1);
+ add_next_index_string(&flags, "primary_key");
}
if (F->flags & MULTIPLE_KEY_FLAG) {
- add_next_index_string(flags, "multiple_key", 1);
+ add_next_index_string(&flags, "multiple_key");
}
if (F->flags & UNIQUE_KEY_FLAG) {
- add_next_index_string(flags, "unique_key", 1);
+ add_next_index_string(&flags, "unique_key");
}
if (IS_BLOB(F->flags)) {
- add_next_index_string(flags, "blob", 1);
+ add_next_index_string(&flags, "blob");
}
str = type_to_name_native(F->type);
if (str) {
- add_assoc_string(return_value, "native_type", str, 1);
+ add_assoc_string(return_value, "native_type", str);
}
#ifdef PDO_USE_MYSQLND
@@ -868,12 +887,13 @@ static int pdo_mysql_stmt_col_meta(pdo_stmt_t *stmt, long colno, zval *return_va
}
#endif
- add_assoc_zval(return_value, "flags", flags);
- add_assoc_string(return_value, "table", (char *) (F->table?F->table:""), 1);
+ add_assoc_zval(return_value, "flags", &flags);
+ add_assoc_string(return_value, "table", (char *) (F->table?F->table : ""));
+
PDO_DBG_RETURN(SUCCESS);
} /* }}} */
-static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
+static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *stmt) /* {{{ */
{
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
diff --git a/ext/pdo_mysql/pdo_mysql.c b/ext/pdo_mysql/pdo_mysql.c
index 643321830b..7ed1647d8a 100644
--- a/ext/pdo_mysql/pdo_mysql.c
+++ b/ext/pdo_mysql/pdo_mysql.c
@@ -1,6 +1,6 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 5 |
+ | PHP Version 7 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2016 The PHP Group |
+----------------------------------------------------------------------+
@@ -32,6 +32,9 @@
#include "php_pdo_mysql_int.h"
#ifdef COMPILE_DL_PDO_MYSQL
+#ifdef ZTS
+ZEND_TSRMLS_CACHE_DEFINE()
+#endif
ZEND_GET_MODULE(pdo_mysql)
#endif
@@ -42,7 +45,7 @@ ZEND_DECLARE_MODULE_GLOBALS(pdo_mysql)
With libmysql `mysql_config --socket` will fill PDO_MYSQL_UNIX_ADDR
and the user can use --with-mysql-sock=SOCKET which will fill
PDO_MYSQL_UNIX_ADDR. If both aren't set we're using mysqlnd and use
- /tmp/mysql.sock as default on *nix and NULL for Windows (default
+ /tmp/mysql.sock as default on *nix and NULL for Windows (default
named pipe name is set in mysqlnd).
*/
#ifndef PDO_MYSQL_UNIX_ADDR
@@ -59,18 +62,18 @@ ZEND_DECLARE_MODULE_GLOBALS(pdo_mysql)
#ifdef PDO_USE_MYSQLND
#include "ext/mysqlnd/mysqlnd_reverse_api.h"
-static MYSQLND * pdo_mysql_convert_zv_to_mysqlnd(zval * zv TSRMLS_DC)
+static MYSQLND * pdo_mysql_convert_zv_to_mysqlnd(zval * zv)
{
- if (Z_TYPE_P(zv) == IS_OBJECT && instanceof_function(Z_OBJCE_P(zv), php_pdo_get_dbh_ce() TSRMLS_CC)) {
- pdo_dbh_t * dbh = zend_object_store_get_object(zv TSRMLS_CC);
+ if (Z_TYPE_P(zv) == IS_OBJECT && instanceof_function(Z_OBJCE_P(zv), php_pdo_get_dbh_ce())) {
+ pdo_dbh_t * dbh = Z_PDO_DBH_P(zv);
if (!dbh) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to retrieve handle from object store");
+ php_error_docref(NULL, E_WARNING, "Failed to retrieve handle from object store");
return NULL;
}
if (dbh->driver != &pdo_mysql_driver) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Provided PDO instance is not using MySQL but %s", dbh->driver->driver_name);
+ php_error_docref(NULL, E_WARNING, "Provided PDO instance is not using MySQL but %s", dbh->driver->driver_name);
return NULL;
}
@@ -98,38 +101,38 @@ PHP_INI_BEGIN()
PHP_INI_END()
/* }}} */
-/* true global environment */
-
+/* true global environment */
+
/* {{{ PHP_MINIT_FUNCTION
*/
static PHP_MINIT_FUNCTION(pdo_mysql)
{
REGISTER_INI_ENTRIES();
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_USE_BUFFERED_QUERY", (long)PDO_MYSQL_ATTR_USE_BUFFERED_QUERY);
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_LOCAL_INFILE", (long)PDO_MYSQL_ATTR_LOCAL_INFILE);
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_INIT_COMMAND", (long)PDO_MYSQL_ATTR_INIT_COMMAND);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_USE_BUFFERED_QUERY", (zend_long)PDO_MYSQL_ATTR_USE_BUFFERED_QUERY);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_LOCAL_INFILE", (zend_long)PDO_MYSQL_ATTR_LOCAL_INFILE);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_INIT_COMMAND", (zend_long)PDO_MYSQL_ATTR_INIT_COMMAND);
#ifndef PDO_USE_MYSQLND
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_MAX_BUFFER_SIZE", (long)PDO_MYSQL_ATTR_MAX_BUFFER_SIZE);
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_READ_DEFAULT_FILE", (long)PDO_MYSQL_ATTR_READ_DEFAULT_FILE);
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_READ_DEFAULT_GROUP", (long)PDO_MYSQL_ATTR_READ_DEFAULT_GROUP);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_MAX_BUFFER_SIZE", (zend_long)PDO_MYSQL_ATTR_MAX_BUFFER_SIZE);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_READ_DEFAULT_FILE", (zend_long)PDO_MYSQL_ATTR_READ_DEFAULT_FILE);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_READ_DEFAULT_GROUP", (zend_long)PDO_MYSQL_ATTR_READ_DEFAULT_GROUP);
#endif
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_COMPRESS", (long)PDO_MYSQL_ATTR_COMPRESS);
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_DIRECT_QUERY", (long)PDO_MYSQL_ATTR_DIRECT_QUERY);
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_FOUND_ROWS", (long)PDO_MYSQL_ATTR_FOUND_ROWS);
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_IGNORE_SPACE", (long)PDO_MYSQL_ATTR_IGNORE_SPACE);
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_KEY", (long)PDO_MYSQL_ATTR_SSL_KEY);
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CERT", (long)PDO_MYSQL_ATTR_SSL_CERT);
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CA", (long)PDO_MYSQL_ATTR_SSL_CA);
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CAPATH", (long)PDO_MYSQL_ATTR_SSL_CAPATH);
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CIPHER", (long)PDO_MYSQL_ATTR_SSL_CIPHER);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_COMPRESS", (zend_long)PDO_MYSQL_ATTR_COMPRESS);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_DIRECT_QUERY", (zend_long)PDO_MYSQL_ATTR_DIRECT_QUERY);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_FOUND_ROWS", (zend_long)PDO_MYSQL_ATTR_FOUND_ROWS);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_IGNORE_SPACE", (zend_long)PDO_MYSQL_ATTR_IGNORE_SPACE);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_KEY", (zend_long)PDO_MYSQL_ATTR_SSL_KEY);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CERT", (zend_long)PDO_MYSQL_ATTR_SSL_CERT);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CA", (zend_long)PDO_MYSQL_ATTR_SSL_CA);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CAPATH", (zend_long)PDO_MYSQL_ATTR_SSL_CAPATH);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CIPHER", (zend_long)PDO_MYSQL_ATTR_SSL_CIPHER);
#if MYSQL_VERSION_ID > 50605 || defined(PDO_USE_MYSQLND)
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SERVER_PUBLIC_KEY", (long)PDO_MYSQL_ATTR_SERVER_PUBLIC_KEY);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SERVER_PUBLIC_KEY", (zend_long)PDO_MYSQL_ATTR_SERVER_PUBLIC_KEY);
#endif
- REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_MULTI_STATEMENTS", (long)PDO_MYSQL_ATTR_MULTI_STATEMENTS);
+ REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_MULTI_STATEMENTS", (zend_long)PDO_MYSQL_ATTR_MULTI_STATEMENTS);
#ifdef PDO_USE_MYSQLND
- mysqlnd_reverse_api_register_api(&pdo_mysql_reverse_api TSRMLS_CC);
+ mysqlnd_reverse_api_register_api(&pdo_mysql_reverse_api);
#endif
return php_pdo_register_driver(&pdo_mysql_driver);
@@ -171,16 +174,16 @@ static PHP_MINFO_FUNCTION(pdo_mysql)
/* {{{ PHP_RINIT_FUNCTION
*/
static PHP_RINIT_FUNCTION(pdo_mysql)
-{
+{
if (PDO_MYSQL_G(debug)) {
- MYSQLND_DEBUG *dbg = mysqlnd_debug_init(mysqlnd_debug_std_no_trace_funcs TSRMLS_CC);
+ MYSQLND_DEBUG *dbg = mysqlnd_debug_init(mysqlnd_debug_std_no_trace_funcs);
if (!dbg) {
return FAILURE;
}
dbg->m->set_mode(dbg, PDO_MYSQL_G(debug));
PDO_MYSQL_G(dbg) = dbg;
}
-
+
return SUCCESS;
}
/* }}} */
@@ -206,6 +209,9 @@ static PHP_RSHUTDOWN_FUNCTION(pdo_mysql)
*/
static PHP_GINIT_FUNCTION(pdo_mysql)
{
+#if defined(COMPILE_DL_PDO_MYSQL) && defined(ZTS)
+ZEND_TSRMLS_CACHE_UPDATE();
+#endif
#ifndef PHP_WIN32
pdo_mysql_globals->default_socket = NULL;
#endif
@@ -250,7 +256,7 @@ zend_module_entry pdo_mysql_module_entry = {
NULL,
#endif
PHP_MINFO(pdo_mysql),
- "1.0.2",
+ PHP_PDO_MYSQL_VERSION,
PHP_MODULE_GLOBALS(pdo_mysql),
PHP_GINIT(pdo_mysql),
NULL,
diff --git a/ext/pdo_mysql/php_pdo_mysql.h b/ext/pdo_mysql/php_pdo_mysql.h
index f299e18ba2..b922f76add 100644
--- a/ext/pdo_mysql/php_pdo_mysql.h
+++ b/ext/pdo_mysql/php_pdo_mysql.h
@@ -1,6 +1,6 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 5 |
+ | PHP Version 7 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2016 The PHP Group |
+----------------------------------------------------------------------+
@@ -24,6 +24,9 @@
extern zend_module_entry pdo_mysql_module_entry;
#define phpext_pdo_mysql_ptr &pdo_mysql_module_entry
+#include "php_version.h"
+#define PHP_PDO_MYSQL_VERSION PHP_VERSION
+
#ifdef PHP_WIN32
#define PHP_PDO_MYSQL_API __declspec(dllexport)
#else
diff --git a/ext/pdo_mysql/php_pdo_mysql_int.h b/ext/pdo_mysql/php_pdo_mysql_int.h
index 8427f43384..a4290fdaf3 100644
--- a/ext/pdo_mysql/php_pdo_mysql_int.h
+++ b/ext/pdo_mysql/php_pdo_mysql_int.h
@@ -1,6 +1,6 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 5 |
+ | PHP Version 7 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2016 The PHP Group |
+----------------------------------------------------------------------+
@@ -43,7 +43,12 @@
#define PDO_DBG_ERR(msg) do { if (dbg_skip_trace == FALSE) PDO_MYSQL_G(dbg)->m->log(PDO_MYSQL_G(dbg), __LINE__, __FILE__, -1, "error: ", (msg)); } while (0)
#define PDO_DBG_INF_FMT(...) do { if (dbg_skip_trace == FALSE) PDO_MYSQL_G(dbg)->m->log_va(PDO_MYSQL_G(dbg), __LINE__, __FILE__, -1, "info : ", __VA_ARGS__); } while (0)
#define PDO_DBG_ERR_FMT(...) do { if (dbg_skip_trace == FALSE) PDO_MYSQL_G(dbg)->m->log_va(PDO_MYSQL_G(dbg), __LINE__, __FILE__, -1, "error: ", __VA_ARGS__); } while (0)
-#define PDO_DBG_ENTER(func_name) zend_bool dbg_skip_trace = TRUE; if (PDO_MYSQL_G(dbg)) dbg_skip_trace = !PDO_MYSQL_G(dbg)->m->func_enter(PDO_MYSQL_G(dbg), __LINE__, __FILE__, func_name, strlen(func_name));
+#define PDO_DBG_ENTER(func_name) \
+ zend_bool dbg_skip_trace = TRUE; \
+ ((void) dbg_skip_trace); \
+ if (PDO_MYSQL_G(dbg)) \
+ dbg_skip_trace = !PDO_MYSQL_G(dbg)->m->func_enter(PDO_MYSQL_G(dbg), __LINE__, __FILE__, func_name, strlen(func_name));
+
#define PDO_DBG_RETURN(value) do { if (PDO_MYSQL_G(dbg)) PDO_MYSQL_G(dbg)->m->func_leave(PDO_MYSQL_G(dbg), __LINE__, __FILE__, 0); return (value); } while (0)
#define PDO_DBG_VOID_RETURN do { if (PDO_MYSQL_G(dbg)) PDO_MYSQL_G(dbg)->m->func_leave(PDO_MYSQL_G(dbg), __LINE__, __FILE__, 0); return; } while (0)
@@ -81,11 +86,10 @@ ZEND_BEGIN_MODULE_GLOBALS(pdo_mysql)
ZEND_END_MODULE_GLOBALS(pdo_mysql)
ZEND_EXTERN_MODULE_GLOBALS(pdo_mysql)
+#define PDO_MYSQL_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(pdo_mysql, v)
-#ifdef ZTS
-#define PDO_MYSQL_G(v) TSRMG(pdo_mysql_globals_id, zend_pdo_mysql_globals *, v)
-#else
-#define PDO_MYSQL_G(v) (pdo_mysql_globals.v)
+#if defined(ZTS) && defined(COMPILE_DL_PDO_MYSQL)
+ZEND_TSRMLS_CACHE_EXTERN()
#endif
@@ -104,9 +108,9 @@ typedef struct {
unsigned buffered:1;
unsigned emulate_prepare:1;
unsigned fetch_table_names:1;
- unsigned _reserved:31;
+ unsigned _reserved:31;
#if !PDO_USE_MYSQLND
- unsigned long max_buffer_size;
+ zend_ulong max_buffer_size;
#endif
pdo_mysql_error_info einfo;
@@ -118,38 +122,38 @@ typedef struct {
typedef struct {
pdo_mysql_db_handle *H;
- MYSQL_RES *result;
- const MYSQL_FIELD *fields;
- MYSQL_ROW current_data;
+ MYSQL_RES *result;
+ const MYSQL_FIELD *fields;
+ MYSQL_ROW current_data;
#if PDO_USE_MYSQLND
- unsigned long *current_lengths;
+ zend_ulong *current_lengths;
#else
- long *current_lengths;
+ zend_long *current_lengths;
#endif
- pdo_mysql_error_info einfo;
+ pdo_mysql_error_info einfo;
#if PDO_USE_MYSQLND
- MYSQLND_STMT *stmt;
+ MYSQLND_STMT *stmt;
#else
- MYSQL_STMT *stmt;
-#endif
- int num_params;
+ MYSQL_STMT *stmt;
+#endif
+ int num_params;
PDO_MYSQL_PARAM_BIND *params;
#ifndef PDO_USE_MYSQLND
- my_bool *in_null;
- unsigned long *in_length;
+ my_bool *in_null;
+ zend_ulong *in_length;
#endif
PDO_MYSQL_PARAM_BIND *bound_result;
- my_bool *out_null;
- unsigned long *out_length;
- unsigned int params_given;
- unsigned max_length:1;
+ my_bool *out_null;
+ zend_ulong *out_length;
+ unsigned int params_given;
+ unsigned max_length:1;
} pdo_mysql_stmt;
extern pdo_driver_t pdo_mysql_driver;
-extern int _pdo_mysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int line TSRMLS_DC);
-#define pdo_mysql_error(s) _pdo_mysql_error(s, NULL, __FILE__, __LINE__ TSRMLS_CC)
-#define pdo_mysql_error_stmt(s) _pdo_mysql_error(stmt->dbh, stmt, __FILE__, __LINE__ TSRMLS_CC)
+extern int _pdo_mysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int line);
+#define pdo_mysql_error(s) _pdo_mysql_error(s, NULL, __FILE__, __LINE__)
+#define pdo_mysql_error_stmt(s) _pdo_mysql_error(stmt->dbh, stmt, __FILE__, __LINE__)
extern struct pdo_stmt_methods mysql_stmt_methods;
diff --git a/ext/pdo_mysql/php_pdo_mysql_sqlstate.h b/ext/pdo_mysql/php_pdo_mysql_sqlstate.h
index 70fc95ef74..8f8ccc0116 100644
--- a/ext/pdo_mysql/php_pdo_mysql_sqlstate.h
+++ b/ext/pdo_mysql/php_pdo_mysql_sqlstate.h
@@ -1,646 +1,646 @@
/* DO NOT EDIT THIS FILE!!! It is auto generated by get_error_codes.php */
-#ifdef ER_DUP_KEY
+#ifdef ER_DUP_KEY
case ER_DUP_KEY : return "23000";
#endif
-#ifdef ER_OUTOFMEMORY
+#ifdef ER_OUTOFMEMORY
case ER_OUTOFMEMORY : return "HY001";
#endif
-#ifdef ER_OUT_OF_SORTMEMORY
+#ifdef ER_OUT_OF_SORTMEMORY
case ER_OUT_OF_SORTMEMORY : return "HY001";
#endif
-#ifdef ER_CON_COUNT_ERROR
+#ifdef ER_CON_COUNT_ERROR
case ER_CON_COUNT_ERROR : return "08004";
#endif
-#ifdef ER_BAD_HOST_ERROR
+#ifdef ER_BAD_HOST_ERROR
case ER_BAD_HOST_ERROR : return "08S01";
#endif
-#ifdef ER_HANDSHAKE_ERROR
+#ifdef ER_HANDSHAKE_ERROR
case ER_HANDSHAKE_ERROR : return "08S01";
#endif
-#ifdef ER_DBACCESS_DENIED_ERROR
+#ifdef ER_DBACCESS_DENIED_ERROR
case ER_DBACCESS_DENIED_ERROR : return "42000";
#endif
-#ifdef ER_ACCESS_DENIED_ERROR
+#ifdef ER_ACCESS_DENIED_ERROR
case ER_ACCESS_DENIED_ERROR : return "28000";
#endif
-#ifdef ER_NO_DB_ERROR
+#ifdef ER_NO_DB_ERROR
case ER_NO_DB_ERROR : return "3D000";
#endif
-#ifdef ER_UNKNOWN_COM_ERROR
+#ifdef ER_UNKNOWN_COM_ERROR
case ER_UNKNOWN_COM_ERROR : return "08S01";
#endif
-#ifdef ER_BAD_NULL_ERROR
+#ifdef ER_BAD_NULL_ERROR
case ER_BAD_NULL_ERROR : return "23000";
#endif
-#ifdef ER_BAD_DB_ERROR
+#ifdef ER_BAD_DB_ERROR
case ER_BAD_DB_ERROR : return "42000";
#endif
-#ifdef ER_TABLE_EXISTS_ERROR
+#ifdef ER_TABLE_EXISTS_ERROR
case ER_TABLE_EXISTS_ERROR : return "42S01";
#endif
-#ifdef ER_BAD_TABLE_ERROR
+#ifdef ER_BAD_TABLE_ERROR
case ER_BAD_TABLE_ERROR : return "42S02";
#endif
-#ifdef ER_NON_UNIQ_ERROR
+#ifdef ER_NON_UNIQ_ERROR
case ER_NON_UNIQ_ERROR : return "23000";
#endif
-#ifdef ER_SERVER_SHUTDOWN
+#ifdef ER_SERVER_SHUTDOWN
case ER_SERVER_SHUTDOWN : return "08S01";
#endif
-#ifdef ER_BAD_FIELD_ERROR
+#ifdef ER_BAD_FIELD_ERROR
case ER_BAD_FIELD_ERROR : return "42S22";
#endif
-#ifdef ER_WRONG_FIELD_WITH_GROUP
+#ifdef ER_WRONG_FIELD_WITH_GROUP
case ER_WRONG_FIELD_WITH_GROUP : return "42000";
#endif
-#ifdef ER_WRONG_GROUP_FIELD
+#ifdef ER_WRONG_GROUP_FIELD
case ER_WRONG_GROUP_FIELD : return "42000";
#endif
-#ifdef ER_WRONG_SUM_SELECT
+#ifdef ER_WRONG_SUM_SELECT
case ER_WRONG_SUM_SELECT : return "42000";
#endif
-#ifdef ER_WRONG_VALUE_COUNT
+#ifdef ER_WRONG_VALUE_COUNT
case ER_WRONG_VALUE_COUNT : return "21S01";
#endif
-#ifdef ER_TOO_LONG_IDENT
+#ifdef ER_TOO_LONG_IDENT
case ER_TOO_LONG_IDENT : return "42000";
#endif
-#ifdef ER_DUP_FIELDNAME
+#ifdef ER_DUP_FIELDNAME
case ER_DUP_FIELDNAME : return "42S21";
#endif
-#ifdef ER_DUP_KEYNAME
+#ifdef ER_DUP_KEYNAME
case ER_DUP_KEYNAME : return "42000";
#endif
-#ifdef ER_DUP_ENTRY
+#ifdef ER_DUP_ENTRY
case ER_DUP_ENTRY : return "23000";
#endif
-#ifdef ER_WRONG_FIELD_SPEC
+#ifdef ER_WRONG_FIELD_SPEC
case ER_WRONG_FIELD_SPEC : return "42000";
#endif
-#ifdef ER_PARSE_ERROR
+#ifdef ER_PARSE_ERROR
case ER_PARSE_ERROR : return "42000";
#endif
-#ifdef ER_EMPTY_QUERY
+#ifdef ER_EMPTY_QUERY
case ER_EMPTY_QUERY : return "42000";
#endif
-#ifdef ER_NONUNIQ_TABLE
+#ifdef ER_NONUNIQ_TABLE
case ER_NONUNIQ_TABLE : return "42000";
#endif
-#ifdef ER_INVALID_DEFAULT
+#ifdef ER_INVALID_DEFAULT
case ER_INVALID_DEFAULT : return "42000";
#endif
-#ifdef ER_MULTIPLE_PRI_KEY
+#ifdef ER_MULTIPLE_PRI_KEY
case ER_MULTIPLE_PRI_KEY : return "42000";
#endif
-#ifdef ER_TOO_MANY_KEYS
+#ifdef ER_TOO_MANY_KEYS
case ER_TOO_MANY_KEYS : return "42000";
#endif
-#ifdef ER_TOO_MANY_KEY_PARTS
+#ifdef ER_TOO_MANY_KEY_PARTS
case ER_TOO_MANY_KEY_PARTS : return "42000";
#endif
-#ifdef ER_TOO_LONG_KEY
+#ifdef ER_TOO_LONG_KEY
case ER_TOO_LONG_KEY : return "42000";
#endif
-#ifdef ER_KEY_COLUMN_DOES_NOT_EXITS
+#ifdef ER_KEY_COLUMN_DOES_NOT_EXITS
case ER_KEY_COLUMN_DOES_NOT_EXITS : return "42000";
#endif
-#ifdef ER_BLOB_USED_AS_KEY
+#ifdef ER_BLOB_USED_AS_KEY
case ER_BLOB_USED_AS_KEY : return "42000";
#endif
-#ifdef ER_TOO_BIG_FIELDLENGTH
+#ifdef ER_TOO_BIG_FIELDLENGTH
case ER_TOO_BIG_FIELDLENGTH : return "42000";
#endif
-#ifdef ER_WRONG_AUTO_KEY
+#ifdef ER_WRONG_AUTO_KEY
case ER_WRONG_AUTO_KEY : return "42000";
#endif
-#ifdef ER_FORCING_CLOSE
+#ifdef ER_FORCING_CLOSE
case ER_FORCING_CLOSE : return "08S01";
#endif
-#ifdef ER_IPSOCK_ERROR
+#ifdef ER_IPSOCK_ERROR
case ER_IPSOCK_ERROR : return "08S01";
#endif
-#ifdef ER_NO_SUCH_INDEX
+#ifdef ER_NO_SUCH_INDEX
case ER_NO_SUCH_INDEX : return "42S12";
#endif
-#ifdef ER_WRONG_FIELD_TERMINATORS
+#ifdef ER_WRONG_FIELD_TERMINATORS
case ER_WRONG_FIELD_TERMINATORS : return "42000";
#endif
-#ifdef ER_BLOBS_AND_NO_TERMINATED
+#ifdef ER_BLOBS_AND_NO_TERMINATED
case ER_BLOBS_AND_NO_TERMINATED : return "42000";
#endif
-#ifdef ER_CANT_REMOVE_ALL_FIELDS
+#ifdef ER_CANT_REMOVE_ALL_FIELDS
case ER_CANT_REMOVE_ALL_FIELDS : return "42000";
#endif
-#ifdef ER_CANT_DROP_FIELD_OR_KEY
+#ifdef ER_CANT_DROP_FIELD_OR_KEY
case ER_CANT_DROP_FIELD_OR_KEY : return "42000";
#endif
-#ifdef ER_BLOB_CANT_HAVE_DEFAULT
+#ifdef ER_BLOB_CANT_HAVE_DEFAULT
case ER_BLOB_CANT_HAVE_DEFAULT : return "42000";
#endif
-#ifdef ER_WRONG_DB_NAME
+#ifdef ER_WRONG_DB_NAME
case ER_WRONG_DB_NAME : return "42000";
#endif
-#ifdef ER_WRONG_TABLE_NAME
+#ifdef ER_WRONG_TABLE_NAME
case ER_WRONG_TABLE_NAME : return "42000";
#endif
-#ifdef ER_TOO_BIG_SELECT
+#ifdef ER_TOO_BIG_SELECT
case ER_TOO_BIG_SELECT : return "42000";
#endif
-#ifdef ER_UNKNOWN_PROCEDURE
+#ifdef ER_UNKNOWN_PROCEDURE
case ER_UNKNOWN_PROCEDURE : return "42000";
#endif
-#ifdef ER_WRONG_PARAMCOUNT_TO_PROCEDURE
+#ifdef ER_WRONG_PARAMCOUNT_TO_PROCEDURE
case ER_WRONG_PARAMCOUNT_TO_PROCEDURE : return "42000";
#endif
-#ifdef ER_UNKNOWN_TABLE
+#ifdef ER_UNKNOWN_TABLE
case ER_UNKNOWN_TABLE : return "42S02";
#endif
-#ifdef ER_FIELD_SPECIFIED_TWICE
+#ifdef ER_FIELD_SPECIFIED_TWICE
case ER_FIELD_SPECIFIED_TWICE : return "42000";
#endif
-#ifdef ER_UNSUPPORTED_EXTENSION
+#ifdef ER_UNSUPPORTED_EXTENSION
case ER_UNSUPPORTED_EXTENSION : return "42000";
#endif
-#ifdef ER_TABLE_MUST_HAVE_COLUMNS
+#ifdef ER_TABLE_MUST_HAVE_COLUMNS
case ER_TABLE_MUST_HAVE_COLUMNS : return "42000";
#endif
-#ifdef ER_UNKNOWN_CHARACTER_SET
+#ifdef ER_UNKNOWN_CHARACTER_SET
case ER_UNKNOWN_CHARACTER_SET : return "42000";
#endif
-#ifdef ER_TOO_BIG_ROWSIZE
+#ifdef ER_TOO_BIG_ROWSIZE
case ER_TOO_BIG_ROWSIZE : return "42000";
#endif
-#ifdef ER_WRONG_OUTER_JOIN
+#ifdef ER_WRONG_OUTER_JOIN
case ER_WRONG_OUTER_JOIN : return "42000";
#endif
-#ifdef ER_NULL_COLUMN_IN_INDEX
+#ifdef ER_NULL_COLUMN_IN_INDEX
case ER_NULL_COLUMN_IN_INDEX : return "42000";
#endif
-#ifdef ER_PASSWORD_ANONYMOUS_USER
+#ifdef ER_PASSWORD_ANONYMOUS_USER
case ER_PASSWORD_ANONYMOUS_USER : return "42000";
#endif
-#ifdef ER_PASSWORD_NOT_ALLOWED
+#ifdef ER_PASSWORD_NOT_ALLOWED
case ER_PASSWORD_NOT_ALLOWED : return "42000";
#endif
-#ifdef ER_PASSWORD_NO_MATCH
+#ifdef ER_PASSWORD_NO_MATCH
case ER_PASSWORD_NO_MATCH : return "42000";
#endif
-#ifdef ER_WRONG_VALUE_COUNT_ON_ROW
+#ifdef ER_WRONG_VALUE_COUNT_ON_ROW
case ER_WRONG_VALUE_COUNT_ON_ROW : return "21S01";
#endif
-#ifdef ER_INVALID_USE_OF_NULL
+#ifdef ER_INVALID_USE_OF_NULL
case ER_INVALID_USE_OF_NULL : return "22004";
#endif
-#ifdef ER_REGEXP_ERROR
+#ifdef ER_REGEXP_ERROR
case ER_REGEXP_ERROR : return "42000";
#endif
-#ifdef ER_MIX_OF_GROUP_FUNC_AND_FIELDS
+#ifdef ER_MIX_OF_GROUP_FUNC_AND_FIELDS
case ER_MIX_OF_GROUP_FUNC_AND_FIELDS : return "42000";
#endif
-#ifdef ER_NONEXISTING_GRANT
+#ifdef ER_NONEXISTING_GRANT
case ER_NONEXISTING_GRANT : return "42000";
#endif
-#ifdef ER_TABLEACCESS_DENIED_ERROR
+#ifdef ER_TABLEACCESS_DENIED_ERROR
case ER_TABLEACCESS_DENIED_ERROR : return "42000";
#endif
-#ifdef ER_COLUMNACCESS_DENIED_ERROR
+#ifdef ER_COLUMNACCESS_DENIED_ERROR
case ER_COLUMNACCESS_DENIED_ERROR : return "42000";
#endif
-#ifdef ER_ILLEGAL_GRANT_FOR_TABLE
+#ifdef ER_ILLEGAL_GRANT_FOR_TABLE
case ER_ILLEGAL_GRANT_FOR_TABLE : return "42000";
#endif
-#ifdef ER_GRANT_WRONG_HOST_OR_USER
+#ifdef ER_GRANT_WRONG_HOST_OR_USER
case ER_GRANT_WRONG_HOST_OR_USER : return "42000";
#endif
-#ifdef ER_NO_SUCH_TABLE
+#ifdef ER_NO_SUCH_TABLE
case ER_NO_SUCH_TABLE : return "42S02";
#endif
-#ifdef ER_NONEXISTING_TABLE_GRANT
+#ifdef ER_NONEXISTING_TABLE_GRANT
case ER_NONEXISTING_TABLE_GRANT : return "42000";
#endif
-#ifdef ER_NOT_ALLOWED_COMMAND
+#ifdef ER_NOT_ALLOWED_COMMAND
case ER_NOT_ALLOWED_COMMAND : return "42000";
#endif
-#ifdef ER_SYNTAX_ERROR
+#ifdef ER_SYNTAX_ERROR
case ER_SYNTAX_ERROR : return "42000";
#endif
-#ifdef ER_ABORTING_CONNECTION
+#ifdef ER_ABORTING_CONNECTION
case ER_ABORTING_CONNECTION : return "08S01";
#endif
-#ifdef ER_NET_PACKET_TOO_LARGE
+#ifdef ER_NET_PACKET_TOO_LARGE
case ER_NET_PACKET_TOO_LARGE : return "08S01";
#endif
-#ifdef ER_NET_READ_ERROR_FROM_PIPE
+#ifdef ER_NET_READ_ERROR_FROM_PIPE
case ER_NET_READ_ERROR_FROM_PIPE : return "08S01";
#endif
-#ifdef ER_NET_FCNTL_ERROR
+#ifdef ER_NET_FCNTL_ERROR
case ER_NET_FCNTL_ERROR : return "08S01";
#endif
-#ifdef ER_NET_PACKETS_OUT_OF_ORDER
+#ifdef ER_NET_PACKETS_OUT_OF_ORDER
case ER_NET_PACKETS_OUT_OF_ORDER : return "08S01";
#endif
-#ifdef ER_NET_UNCOMPRESS_ERROR
+#ifdef ER_NET_UNCOMPRESS_ERROR
case ER_NET_UNCOMPRESS_ERROR : return "08S01";
#endif
-#ifdef ER_NET_READ_ERROR
+#ifdef ER_NET_READ_ERROR
case ER_NET_READ_ERROR : return "08S01";
#endif
-#ifdef ER_NET_READ_INTERRUPTED
+#ifdef ER_NET_READ_INTERRUPTED
case ER_NET_READ_INTERRUPTED : return "08S01";
#endif
-#ifdef ER_NET_ERROR_ON_WRITE
+#ifdef ER_NET_ERROR_ON_WRITE
case ER_NET_ERROR_ON_WRITE : return "08S01";
#endif
-#ifdef ER_NET_WRITE_INTERRUPTED
+#ifdef ER_NET_WRITE_INTERRUPTED
case ER_NET_WRITE_INTERRUPTED : return "08S01";
#endif
-#ifdef ER_TOO_LONG_STRING
+#ifdef ER_TOO_LONG_STRING
case ER_TOO_LONG_STRING : return "42000";
#endif
-#ifdef ER_TABLE_CANT_HANDLE_BLOB
+#ifdef ER_TABLE_CANT_HANDLE_BLOB
case ER_TABLE_CANT_HANDLE_BLOB : return "42000";
#endif
-#ifdef ER_TABLE_CANT_HANDLE_AUTO_INCREMENT
+#ifdef ER_TABLE_CANT_HANDLE_AUTO_INCREMENT
case ER_TABLE_CANT_HANDLE_AUTO_INCREMENT : return "42000";
#endif
-#ifdef ER_WRONG_COLUMN_NAME
+#ifdef ER_WRONG_COLUMN_NAME
case ER_WRONG_COLUMN_NAME : return "42000";
#endif
-#ifdef ER_WRONG_KEY_COLUMN
+#ifdef ER_WRONG_KEY_COLUMN
case ER_WRONG_KEY_COLUMN : return "42000";
#endif
-#ifdef ER_DUP_UNIQUE
+#ifdef ER_DUP_UNIQUE
case ER_DUP_UNIQUE : return "23000";
#endif
-#ifdef ER_BLOB_KEY_WITHOUT_LENGTH
+#ifdef ER_BLOB_KEY_WITHOUT_LENGTH
case ER_BLOB_KEY_WITHOUT_LENGTH : return "42000";
#endif
-#ifdef ER_PRIMARY_CANT_HAVE_NULL
+#ifdef ER_PRIMARY_CANT_HAVE_NULL
case ER_PRIMARY_CANT_HAVE_NULL : return "42000";
#endif
-#ifdef ER_TOO_MANY_ROWS
+#ifdef ER_TOO_MANY_ROWS
case ER_TOO_MANY_ROWS : return "42000";
#endif
-#ifdef ER_REQUIRES_PRIMARY_KEY
+#ifdef ER_REQUIRES_PRIMARY_KEY
case ER_REQUIRES_PRIMARY_KEY : return "42000";
#endif
-#ifdef ER_KEY_DOES_NOT_EXITS
+#ifdef ER_KEY_DOES_NOT_EXITS
case ER_KEY_DOES_NOT_EXITS : return "42000";
#endif
-#ifdef ER_CHECK_NO_SUCH_TABLE
+#ifdef ER_CHECK_NO_SUCH_TABLE
case ER_CHECK_NO_SUCH_TABLE : return "42000";
#endif
-#ifdef ER_CHECK_NOT_IMPLEMENTED
+#ifdef ER_CHECK_NOT_IMPLEMENTED
case ER_CHECK_NOT_IMPLEMENTED : return "42000";
#endif
-#ifdef ER_CANT_DO_THIS_DURING_AN_TRANSACTION
+#ifdef ER_CANT_DO_THIS_DURING_AN_TRANSACTION
case ER_CANT_DO_THIS_DURING_AN_TRANSACTION : return "25000";
#endif
-#ifdef ER_NEW_ABORTING_CONNECTION
+#ifdef ER_NEW_ABORTING_CONNECTION
case ER_NEW_ABORTING_CONNECTION : return "08S01";
#endif
-#ifdef ER_MASTER_NET_READ
+#ifdef ER_MASTER_NET_READ
case ER_MASTER_NET_READ : return "08S01";
#endif
-#ifdef ER_MASTER_NET_WRITE
+#ifdef ER_MASTER_NET_WRITE
case ER_MASTER_NET_WRITE : return "08S01";
#endif
-#ifdef ER_TOO_MANY_USER_CONNECTIONS
+#ifdef ER_TOO_MANY_USER_CONNECTIONS
case ER_TOO_MANY_USER_CONNECTIONS : return "42000";
#endif
-#ifdef ER_READ_ONLY_TRANSACTION
+#ifdef ER_READ_ONLY_TRANSACTION
case ER_READ_ONLY_TRANSACTION : return "25000";
#endif
-#ifdef ER_NO_PERMISSION_TO_CREATE_USER
+#ifdef ER_NO_PERMISSION_TO_CREATE_USER
case ER_NO_PERMISSION_TO_CREATE_USER : return "42000";
#endif
-#ifdef ER_LOCK_DEADLOCK
+#ifdef ER_LOCK_DEADLOCK
case ER_LOCK_DEADLOCK : return "40001";
#endif
-#ifdef ER_NO_REFERENCED_ROW
+#ifdef ER_NO_REFERENCED_ROW
case ER_NO_REFERENCED_ROW : return "23000";
#endif
-#ifdef ER_ROW_IS_REFERENCED
+#ifdef ER_ROW_IS_REFERENCED
case ER_ROW_IS_REFERENCED : return "23000";
#endif
-#ifdef ER_CONNECT_TO_MASTER
+#ifdef ER_CONNECT_TO_MASTER
case ER_CONNECT_TO_MASTER : return "08S01";
#endif
-#ifdef ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT
+#ifdef ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT
case ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT : return "21000";
#endif
-#ifdef ER_USER_LIMIT_REACHED
+#ifdef ER_USER_LIMIT_REACHED
case ER_USER_LIMIT_REACHED : return "42000";
#endif
-#ifdef ER_SPECIFIC_ACCESS_DENIED_ERROR
+#ifdef ER_SPECIFIC_ACCESS_DENIED_ERROR
case ER_SPECIFIC_ACCESS_DENIED_ERROR : return "42000";
#endif
-#ifdef ER_NO_DEFAULT
+#ifdef ER_NO_DEFAULT
case ER_NO_DEFAULT : return "42000";
#endif
-#ifdef ER_WRONG_VALUE_FOR_VAR
+#ifdef ER_WRONG_VALUE_FOR_VAR
case ER_WRONG_VALUE_FOR_VAR : return "42000";
#endif
-#ifdef ER_WRONG_TYPE_FOR_VAR
+#ifdef ER_WRONG_TYPE_FOR_VAR
case ER_WRONG_TYPE_FOR_VAR : return "42000";
#endif
-#ifdef ER_CANT_USE_OPTION_HERE
+#ifdef ER_CANT_USE_OPTION_HERE
case ER_CANT_USE_OPTION_HERE : return "42000";
#endif
-#ifdef ER_NOT_SUPPORTED_YET
+#ifdef ER_NOT_SUPPORTED_YET
case ER_NOT_SUPPORTED_YET : return "42000";
#endif
-#ifdef ER_WRONG_FK_DEF
+#ifdef ER_WRONG_FK_DEF
case ER_WRONG_FK_DEF : return "42000";
#endif
-#ifdef ER_OPERAND_COLUMNS
+#ifdef ER_OPERAND_COLUMNS
case ER_OPERAND_COLUMNS : return "21000";
#endif
-#ifdef ER_SUBQUERY_NO_1_ROW
+#ifdef ER_SUBQUERY_NO_1_ROW
case ER_SUBQUERY_NO_1_ROW : return "21000";
#endif
-#ifdef ER_ILLEGAL_REFERENCE
+#ifdef ER_ILLEGAL_REFERENCE
case ER_ILLEGAL_REFERENCE : return "42S22";
#endif
-#ifdef ER_DERIVED_MUST_HAVE_ALIAS
+#ifdef ER_DERIVED_MUST_HAVE_ALIAS
case ER_DERIVED_MUST_HAVE_ALIAS : return "42000";
#endif
-#ifdef ER_SELECT_REDUCED
+#ifdef ER_SELECT_REDUCED
case ER_SELECT_REDUCED : return "01000";
#endif
-#ifdef ER_TABLENAME_NOT_ALLOWED_HERE
+#ifdef ER_TABLENAME_NOT_ALLOWED_HERE
case ER_TABLENAME_NOT_ALLOWED_HERE : return "42000";
#endif
-#ifdef ER_NOT_SUPPORTED_AUTH_MODE
+#ifdef ER_NOT_SUPPORTED_AUTH_MODE
case ER_NOT_SUPPORTED_AUTH_MODE : return "08004";
#endif
-#ifdef ER_SPATIAL_CANT_HAVE_NULL
+#ifdef ER_SPATIAL_CANT_HAVE_NULL
case ER_SPATIAL_CANT_HAVE_NULL : return "42000";
#endif
-#ifdef ER_COLLATION_CHARSET_MISMATCH
+#ifdef ER_COLLATION_CHARSET_MISMATCH
case ER_COLLATION_CHARSET_MISMATCH : return "42000";
#endif
-#ifdef ER_WARN_TOO_FEW_RECORDS
+#ifdef ER_WARN_TOO_FEW_RECORDS
case ER_WARN_TOO_FEW_RECORDS : return "01000";
#endif
-#ifdef ER_WARN_TOO_MANY_RECORDS
+#ifdef ER_WARN_TOO_MANY_RECORDS
case ER_WARN_TOO_MANY_RECORDS : return "01000";
#endif
-#ifdef ER_WARN_NULL_TO_NOTNULL
+#ifdef ER_WARN_NULL_TO_NOTNULL
case ER_WARN_NULL_TO_NOTNULL : return "22004";
#endif
-#ifdef ER_WARN_DATA_OUT_OF_RANGE
+#ifdef ER_WARN_DATA_OUT_OF_RANGE
case ER_WARN_DATA_OUT_OF_RANGE : return "22003";
#endif
-#ifdef ER_WRONG_NAME_FOR_INDEX
+#ifdef ER_WRONG_NAME_FOR_INDEX
case ER_WRONG_NAME_FOR_INDEX : return "42000";
#endif
-#ifdef ER_WRONG_NAME_FOR_CATALOG
+#ifdef ER_WRONG_NAME_FOR_CATALOG
case ER_WRONG_NAME_FOR_CATALOG : return "42000";
#endif
-#ifdef ER_UNKNOWN_STORAGE_ENGINE
+#ifdef ER_UNKNOWN_STORAGE_ENGINE
case ER_UNKNOWN_STORAGE_ENGINE : return "42000";
#endif
-#ifdef ER_TRUNCATED_WRONG_VALUE
+#ifdef ER_TRUNCATED_WRONG_VALUE
case ER_TRUNCATED_WRONG_VALUE : return "22007";
#endif
-#ifdef ER_SP_NO_RECURSIVE_CREATE
+#ifdef ER_SP_NO_RECURSIVE_CREATE
case ER_SP_NO_RECURSIVE_CREATE : return "2F003";
#endif
-#ifdef ER_SP_ALREADY_EXISTS
+#ifdef ER_SP_ALREADY_EXISTS
case ER_SP_ALREADY_EXISTS : return "42000";
#endif
-#ifdef ER_SP_DOES_NOT_EXIST
+#ifdef ER_SP_DOES_NOT_EXIST
case ER_SP_DOES_NOT_EXIST : return "42000";
#endif
-#ifdef ER_SP_LILABEL_MISMATCH
+#ifdef ER_SP_LILABEL_MISMATCH
case ER_SP_LILABEL_MISMATCH : return "42000";
#endif
-#ifdef ER_SP_LABEL_REDEFINE
+#ifdef ER_SP_LABEL_REDEFINE
case ER_SP_LABEL_REDEFINE : return "42000";
#endif
-#ifdef ER_SP_LABEL_MISMATCH
+#ifdef ER_SP_LABEL_MISMATCH
case ER_SP_LABEL_MISMATCH : return "42000";
#endif
-#ifdef ER_SP_UNINIT_VAR
+#ifdef ER_SP_UNINIT_VAR
case ER_SP_UNINIT_VAR : return "01000";
#endif
-#ifdef ER_SP_BADSELECT
+#ifdef ER_SP_BADSELECT
case ER_SP_BADSELECT : return "0A000";
#endif
-#ifdef ER_SP_BADRETURN
+#ifdef ER_SP_BADRETURN
case ER_SP_BADRETURN : return "42000";
#endif
-#ifdef ER_SP_BADSTATEMENT
+#ifdef ER_SP_BADSTATEMENT
case ER_SP_BADSTATEMENT : return "0A000";
#endif
-#ifdef ER_UPDATE_LOG_DEPRECATED_IGNORED
+#ifdef ER_UPDATE_LOG_DEPRECATED_IGNORED
case ER_UPDATE_LOG_DEPRECATED_IGNORED : return "42000";
#endif
-#ifdef ER_UPDATE_LOG_DEPRECATED_TRANSLATED
+#ifdef ER_UPDATE_LOG_DEPRECATED_TRANSLATED
case ER_UPDATE_LOG_DEPRECATED_TRANSLATED : return "42000";
#endif
-#ifdef ER_QUERY_INTERRUPTED
+#ifdef ER_QUERY_INTERRUPTED
case ER_QUERY_INTERRUPTED : return "70100";
#endif
-#ifdef ER_SP_WRONG_NO_OF_ARGS
+#ifdef ER_SP_WRONG_NO_OF_ARGS
case ER_SP_WRONG_NO_OF_ARGS : return "42000";
#endif
-#ifdef ER_SP_COND_MISMATCH
+#ifdef ER_SP_COND_MISMATCH
case ER_SP_COND_MISMATCH : return "42000";
#endif
-#ifdef ER_SP_NORETURN
+#ifdef ER_SP_NORETURN
case ER_SP_NORETURN : return "42000";
#endif
-#ifdef ER_SP_NORETURNEND
+#ifdef ER_SP_NORETURNEND
case ER_SP_NORETURNEND : return "2F005";
#endif
-#ifdef ER_SP_BAD_CURSOR_QUERY
+#ifdef ER_SP_BAD_CURSOR_QUERY
case ER_SP_BAD_CURSOR_QUERY : return "42000";
#endif
-#ifdef ER_SP_BAD_CURSOR_SELECT
+#ifdef ER_SP_BAD_CURSOR_SELECT
case ER_SP_BAD_CURSOR_SELECT : return "42000";
#endif
-#ifdef ER_SP_CURSOR_MISMATCH
+#ifdef ER_SP_CURSOR_MISMATCH
case ER_SP_CURSOR_MISMATCH : return "42000";
#endif
-#ifdef ER_SP_CURSOR_ALREADY_OPEN
+#ifdef ER_SP_CURSOR_ALREADY_OPEN
case ER_SP_CURSOR_ALREADY_OPEN : return "24000";
#endif
-#ifdef ER_SP_CURSOR_NOT_OPEN
+#ifdef ER_SP_CURSOR_NOT_OPEN
case ER_SP_CURSOR_NOT_OPEN : return "24000";
#endif
-#ifdef ER_SP_UNDECLARED_VAR
+#ifdef ER_SP_UNDECLARED_VAR
case ER_SP_UNDECLARED_VAR : return "42000";
#endif
-#ifdef ER_SP_FETCH_NO_DATA
+#ifdef ER_SP_FETCH_NO_DATA
case ER_SP_FETCH_NO_DATA : return "02000";
#endif
-#ifdef ER_SP_DUP_PARAM
+#ifdef ER_SP_DUP_PARAM
case ER_SP_DUP_PARAM : return "42000";
#endif
-#ifdef ER_SP_DUP_VAR
+#ifdef ER_SP_DUP_VAR
case ER_SP_DUP_VAR : return "42000";
#endif
-#ifdef ER_SP_DUP_COND
+#ifdef ER_SP_DUP_COND
case ER_SP_DUP_COND : return "42000";
#endif
-#ifdef ER_SP_DUP_CURS
+#ifdef ER_SP_DUP_CURS
case ER_SP_DUP_CURS : return "42000";
#endif
-#ifdef ER_SP_SUBSELECT_NYI
+#ifdef ER_SP_SUBSELECT_NYI
case ER_SP_SUBSELECT_NYI : return "0A000";
#endif
-#ifdef ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
+#ifdef ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
case ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG : return "0A000";
#endif
-#ifdef ER_SP_VARCOND_AFTER_CURSHNDLR
+#ifdef ER_SP_VARCOND_AFTER_CURSHNDLR
case ER_SP_VARCOND_AFTER_CURSHNDLR : return "42000";
#endif
-#ifdef ER_SP_CURSOR_AFTER_HANDLER
+#ifdef ER_SP_CURSOR_AFTER_HANDLER
case ER_SP_CURSOR_AFTER_HANDLER : return "42000";
#endif
-#ifdef ER_SP_CASE_NOT_FOUND
+#ifdef ER_SP_CASE_NOT_FOUND
case ER_SP_CASE_NOT_FOUND : return "20000";
#endif
-#ifdef ER_DIVISION_BY_ZERO
+#ifdef ER_DIVISION_BY_ZERO
case ER_DIVISION_BY_ZERO : return "22012";
#endif
-#ifdef ER_ILLEGAL_VALUE_FOR_TYPE
+#ifdef ER_ILLEGAL_VALUE_FOR_TYPE
case ER_ILLEGAL_VALUE_FOR_TYPE : return "22007";
#endif
-#ifdef ER_PROCACCESS_DENIED_ERROR
+#ifdef ER_PROCACCESS_DENIED_ERROR
case ER_PROCACCESS_DENIED_ERROR : return "42000";
#endif
-#ifdef ER_XAER_NOTA
+#ifdef ER_XAER_NOTA
case ER_XAER_NOTA : return "XAE04";
#endif
-#ifdef ER_XAER_INVAL
+#ifdef ER_XAER_INVAL
case ER_XAER_INVAL : return "XAE05";
#endif
-#ifdef ER_XAER_RMFAIL
+#ifdef ER_XAER_RMFAIL
case ER_XAER_RMFAIL : return "XAE07";
#endif
-#ifdef ER_XAER_OUTSIDE
+#ifdef ER_XAER_OUTSIDE
case ER_XAER_OUTSIDE : return "XAE09";
#endif
-#ifdef ER_XAER_RMERR
+#ifdef ER_XAER_RMERR
case ER_XAER_RMERR : return "XAE03";
#endif
-#ifdef ER_XA_RBROLLBACK
+#ifdef ER_XA_RBROLLBACK
case ER_XA_RBROLLBACK : return "XA100";
#endif
-#ifdef ER_NONEXISTING_PROC_GRANT
+#ifdef ER_NONEXISTING_PROC_GRANT
case ER_NONEXISTING_PROC_GRANT : return "42000";
#endif
-#ifdef ER_DATA_TOO_LONG
+#ifdef ER_DATA_TOO_LONG
case ER_DATA_TOO_LONG : return "22001";
#endif
-#ifdef ER_SP_BAD_SQLSTATE
+#ifdef ER_SP_BAD_SQLSTATE
case ER_SP_BAD_SQLSTATE : return "42000";
#endif
-#ifdef ER_CANT_CREATE_USER_WITH_GRANT
+#ifdef ER_CANT_CREATE_USER_WITH_GRANT
case ER_CANT_CREATE_USER_WITH_GRANT : return "42000";
#endif
-#ifdef ER_SP_DUP_HANDLER
+#ifdef ER_SP_DUP_HANDLER
case ER_SP_DUP_HANDLER : return "42000";
#endif
-#ifdef ER_SP_NOT_VAR_ARG
+#ifdef ER_SP_NOT_VAR_ARG
case ER_SP_NOT_VAR_ARG : return "42000";
#endif
-#ifdef ER_SP_NO_RETSET
+#ifdef ER_SP_NO_RETSET
case ER_SP_NO_RETSET : return "0A000";
#endif
-#ifdef ER_CANT_CREATE_GEOMETRY_OBJECT
+#ifdef ER_CANT_CREATE_GEOMETRY_OBJECT
case ER_CANT_CREATE_GEOMETRY_OBJECT : return "22003";
#endif
-#ifdef ER_TOO_BIG_SCALE
+#ifdef ER_TOO_BIG_SCALE
case ER_TOO_BIG_SCALE : return "42000";
#endif
-#ifdef ER_TOO_BIG_PRECISION
+#ifdef ER_TOO_BIG_PRECISION
case ER_TOO_BIG_PRECISION : return "42000";
#endif
-#ifdef ER_M_BIGGER_THAN_D
+#ifdef ER_M_BIGGER_THAN_D
case ER_M_BIGGER_THAN_D : return "42000";
#endif
-#ifdef ER_TOO_LONG_BODY
+#ifdef ER_TOO_LONG_BODY
case ER_TOO_LONG_BODY : return "42000";
#endif
-#ifdef ER_TOO_BIG_DISPLAYWIDTH
+#ifdef ER_TOO_BIG_DISPLAYWIDTH
case ER_TOO_BIG_DISPLAYWIDTH : return "42000";
#endif
-#ifdef ER_XAER_DUPID
+#ifdef ER_XAER_DUPID
case ER_XAER_DUPID : return "XAE08";
#endif
-#ifdef ER_DATETIME_FUNCTION_OVERFLOW
+#ifdef ER_DATETIME_FUNCTION_OVERFLOW
case ER_DATETIME_FUNCTION_OVERFLOW : return "22008";
#endif
-#ifdef ER_ROW_IS_REFERENCED_2
+#ifdef ER_ROW_IS_REFERENCED_2
case ER_ROW_IS_REFERENCED_2 : return "23000";
#endif
-#ifdef ER_NO_REFERENCED_ROW_2
+#ifdef ER_NO_REFERENCED_ROW_2
case ER_NO_REFERENCED_ROW_2 : return "23000";
#endif
-#ifdef ER_SP_BAD_VAR_SHADOW
+#ifdef ER_SP_BAD_VAR_SHADOW
case ER_SP_BAD_VAR_SHADOW : return "42000";
#endif
-#ifdef ER_SP_WRONG_NAME
+#ifdef ER_SP_WRONG_NAME
case ER_SP_WRONG_NAME : return "42000";
#endif
-#ifdef ER_SP_NO_AGGREGATE
+#ifdef ER_SP_NO_AGGREGATE
case ER_SP_NO_AGGREGATE : return "42000";
#endif
-#ifdef ER_MAX_PREPARED_STMT_COUNT_REACHED
+#ifdef ER_MAX_PREPARED_STMT_COUNT_REACHED
case ER_MAX_PREPARED_STMT_COUNT_REACHED : return "42000";
#endif
-#ifdef ER_NON_GROUPING_FIELD_USED
+#ifdef ER_NON_GROUPING_FIELD_USED
case ER_NON_GROUPING_FIELD_USED : return "42000";
#endif
-#ifdef ER_FOREIGN_DUPLICATE_KEY
+#ifdef ER_FOREIGN_DUPLICATE_KEY
case ER_FOREIGN_DUPLICATE_KEY : return "23000";
#endif
-#ifdef ER_CANT_CHANGE_TX_ISOLATION
+#ifdef ER_CANT_CHANGE_TX_ISOLATION
case ER_CANT_CHANGE_TX_ISOLATION : return "25001";
#endif
-#ifdef ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
+#ifdef ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
case ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT : return "42000";
#endif
-#ifdef ER_WRONG_PARAMETERS_TO_NATIVE_FCT
+#ifdef ER_WRONG_PARAMETERS_TO_NATIVE_FCT
case ER_WRONG_PARAMETERS_TO_NATIVE_FCT : return "42000";
#endif
-#ifdef ER_WRONG_PARAMETERS_TO_STORED_FCT
+#ifdef ER_WRONG_PARAMETERS_TO_STORED_FCT
case ER_WRONG_PARAMETERS_TO_STORED_FCT : return "42000";
#endif
-#ifdef ER_DUP_ENTRY_WITH_KEY_NAME
+#ifdef ER_DUP_ENTRY_WITH_KEY_NAME
case ER_DUP_ENTRY_WITH_KEY_NAME : return "23000";
#endif
-#ifdef ER_XA_RBTIMEOUT
+#ifdef ER_XA_RBTIMEOUT
case ER_XA_RBTIMEOUT : return "XA106";
#endif
-#ifdef ER_XA_RBDEADLOCK
+#ifdef ER_XA_RBDEADLOCK
case ER_XA_RBDEADLOCK : return "XA102";
#endif
-#ifdef ER_FUNC_INEXISTENT_NAME_COLLISION
+#ifdef ER_FUNC_INEXISTENT_NAME_COLLISION
case ER_FUNC_INEXISTENT_NAME_COLLISION : return "42000";
#endif
-#ifdef ER_DUP_SIGNAL_SET
+#ifdef ER_DUP_SIGNAL_SET
case ER_DUP_SIGNAL_SET : return "42000";
#endif
-#ifdef ER_SIGNAL_WARN
+#ifdef ER_SIGNAL_WARN
case ER_SIGNAL_WARN : return "01000";
#endif
-#ifdef ER_SIGNAL_NOT_FOUND
+#ifdef ER_SIGNAL_NOT_FOUND
case ER_SIGNAL_NOT_FOUND : return "02000";
#endif
-#ifdef ER_SIGNAL_EXCEPTION
+#ifdef ER_SIGNAL_EXCEPTION
case ER_SIGNAL_EXCEPTION : return "HY000";
#endif
-#ifdef ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER
+#ifdef ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER
case ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER : return "0K000";
#endif
-#ifdef ER_SPATIAL_MUST_HAVE_GEOM_COL
+#ifdef ER_SPATIAL_MUST_HAVE_GEOM_COL
case ER_SPATIAL_MUST_HAVE_GEOM_COL : return "42000";
#endif
-#ifdef ER_DATA_OUT_OF_RANGE
+#ifdef ER_DATA_OUT_OF_RANGE
case ER_DATA_OUT_OF_RANGE : return "22003";
#endif
diff --git a/ext/pdo_mysql/tests/bug54929.phpt b/ext/pdo_mysql/tests/bug54929.phpt
index 84b9e7d04f..0a111d8935 100644
--- a/ext/pdo_mysql/tests/bug54929.phpt
+++ b/ext/pdo_mysql/tests/bug54929.phpt
@@ -54,7 +54,7 @@ array(3) {
[1]=>
int(1064)
[2]=>
- string(149) "You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near '--'' at line 1"
+ string(%d) "You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near '--'' at line 1"
}
array(1) {
["f1"]=>
diff --git a/ext/pdo_mysql/tests/bug63176.phpt b/ext/pdo_mysql/tests/bug63176.phpt
index ee928c093d..c5be644450 100644
--- a/ext/pdo_mysql/tests/bug63176.phpt
+++ b/ext/pdo_mysql/tests/bug63176.phpt
@@ -47,8 +47,8 @@ object(ModelA)#%d (1) {
}
object(ModelA)#%d (1) {
["db"]=>
- object(PDO2)#%d (1) {
- ["transLevel":protected]=>
+ object(PDO3)#%d (1) {
+ ["tomato":protected]=>
NULL
}
}
diff --git a/ext/pdo_mysql/tests/bug70272.phpt b/ext/pdo_mysql/tests/bug70272.phpt
new file mode 100644
index 0000000000..cd9b9d7da2
--- /dev/null
+++ b/ext/pdo_mysql/tests/bug70272.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Bug #70272 (Segfault in pdo_mysql)
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+?>
+--INI--
+report_memleaks=off
+--FILE--
+<?php
+$a = new Stdclass();
+$a->a = &$a;
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+
+$dummy = new StdClass();
+
+$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+$dummy = NULL;
+
+$a->c = $db;
+$a->b = $db->prepare("select 1");
+$a->d = $db->prepare("select 2");
+$a->e = $db->prepare("select 3");
+$a->f = $db->prepare("select 4");
+gc_disable();
+?>
+okey
+--EXPECT--
+okey
diff --git a/ext/pdo_mysql/tests/bug70862.phpt b/ext/pdo_mysql/tests/bug70862.phpt
new file mode 100644
index 0000000000..4a3a618854
--- /dev/null
+++ b/ext/pdo_mysql/tests/bug70862.phpt
@@ -0,0 +1,46 @@
+--TEST--
+MySQL Prepared Statements and BLOBs
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+?>
+--FILE--
+<?php
+ require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+ $db = MySQLPDOTest::factory();
+
+ $db->exec('DROP TABLE IF EXISTS test');
+ $db->exec(sprintf('CREATE TABLE test(id INT, label BLOB)'));
+
+ $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
+ $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
+
+ class HelloWrapper {
+ public function stream_open() { return true; }
+ public function stream_eof() { return true; }
+ public function stream_read() { return NULL; }
+ public function stream_stat() { return array(); }
+ }
+ stream_wrapper_register("hello", "HelloWrapper");
+
+ $f = fopen("hello://there", "r");
+
+ $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (1, :para)');
+ $stmt->bindParam(":para", $f, PDO::PARAM_LOB);
+ $stmt->execute();
+
+ var_dump($f);
+
+ print "done!";
+?>
+--CLEAN--
+<?php
+require dirname(__FILE__) . '/mysql_pdo_test.inc';
+$db = MySQLPDOTest::factory();
+$db->exec('DROP TABLE IF EXISTS test');
+?>
+--EXPECTF--
+string(0) ""
+done!
diff --git a/ext/pdo_mysql/tests/bug_37445.phpt b/ext/pdo_mysql/tests/bug_37445.phpt
index 8e915332d4..c9400717b4 100644
--- a/ext/pdo_mysql/tests/bug_37445.phpt
+++ b/ext/pdo_mysql/tests/bug_37445.phpt
@@ -17,4 +17,7 @@ $stmt = $db->prepare("SELECT 1");
$stmt->bindParam(':a', 'b');
?>
--EXPECTF--
-Fatal error: Cannot pass parameter 2 by reference in %sbug_37445.php on line %d
+Fatal error: Uncaught Error: Cannot pass parameter 2 by reference in %sbug_37445.php:%d
+Stack trace:
+#0 {main}
+ thrown in %sbug_37445.php on line %d
diff --git a/ext/pdo_mysql/tests/config.inc b/ext/pdo_mysql/tests/config.inc
index 2530442c0e..f5ea020b78 100644
--- a/ext/pdo_mysql/tests/config.inc
+++ b/ext/pdo_mysql/tests/config.inc
@@ -49,4 +49,4 @@ if (!function_exists('sys_get_temp_dir')) {
return FALSE;
}
}
-?> \ No newline at end of file
+?>
diff --git a/ext/pdo_mysql/tests/pdo_mysql___construct.phpt b/ext/pdo_mysql/tests/pdo_mysql___construct.phpt
index 0cabfe6aa3..219678c671 100644
--- a/ext/pdo_mysql/tests/pdo_mysql___construct.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql___construct.phpt
@@ -28,8 +28,11 @@ MySQLPDOTest::skip();
try {
- if (NULL !== ($db = @new PDO()))
- printf("[001] Too few parameters\n");
+ try {
+ if (NULL !== ($db = @new PDO()))
+ printf("[001] Too few parameters\n");
+ } catch (TypeError $ex) {
+ }
print tryandcatch(2, '$db = new PDO(chr(0));');
print tryandcatch(3, '$db = new PDO("a" . chr(0) . "b");');
diff --git a/ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt b/ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt
index 8cd028fc53..62051d7ae2 100644
--- a/ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt
@@ -67,8 +67,11 @@ MySQLPDOTest::skip();
PDO::MYSQL_ATTR_INIT_COMMAND => '',
);
- if (NULL !== ($db = @new PDO($dsn, $user, $pass, 'wrong type')))
- printf("[001] Expecting NULL got %s/%s\n", gettype($db), $db);
+ try {
+ if (NULL !== ($db = @new PDO($dsn, $user, $pass, 'wrong type')))
+ printf("[001] Expecting NULL got %s/%s\n", gettype($db), $db);
+ } catch (TypeError $e) {
+ }
if (!is_object($db = new PDO($dsn, $user, $pass, array())))
printf("[002] Expecting object got %s/%s¸\n", gettype($db), $db);
diff --git a/ext/pdo_mysql/tests/pdo_mysql___construct_uri-win32.phpt b/ext/pdo_mysql/tests/pdo_mysql___construct_uri-win32.phpt
new file mode 100644
index 0000000000..b4609b1629
--- /dev/null
+++ b/ext/pdo_mysql/tests/pdo_mysql___construct_uri-win32.phpt
@@ -0,0 +1,79 @@
+--TEST--
+MySQL PDO->__construct() - URI
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip only for Windows');
+}
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+?>
+--FILE--
+<?php
+ require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+
+ try {
+
+ if ($tmp = MySQLPDOTest::getTempDir()) {
+
+ $file = $tmp . DIRECTORY_SEPARATOR . 'pdomuri.tst';
+ $dsn = MySQLPDOTest::getDSN();
+ $user = PDO_MYSQL_TEST_USER;
+ $pass = PDO_MYSQL_TEST_PASS;
+ $uri = sprintf('uri:file:%s', $file);
+
+ if ($fp = @fopen($file, 'w')) {
+ // ok, great we can create a file with a DSN in it
+ fwrite($fp, $dsn);
+ fclose($fp);
+ clearstatcache();
+ assert(file_exists($file));
+ try {
+ $db = new PDO($uri, $user, $pass);
+ } catch (PDOException $e) {
+ printf("[002] URI=%s, DSN=%s, File=%s (%d bytes, '%s'), %s\n",
+ $uri, $dsn,
+ $file, filesize($file), file_get_contents($file),
+ $e->getMessage());
+ }
+ unlink($file);
+ }
+
+ if ($fp = @fopen($file, 'w')) {
+ fwrite($fp, sprintf('mysql:dbname=letshopeinvalid;%s%s',
+ chr(0), $dsn));
+ fclose($fp);
+ clearstatcache();
+ assert(file_exists($file));
+ try {
+ $db = new PDO($uri, $user, $pass);
+ } catch (PDOException $e) {
+ printf("[003] URI=%s, DSN=%s, File=%s (%d bytes, '%s'), chr(0) test, %s\n",
+ $uri, $dsn,
+ $file, filesize($file), file_get_contents($file),
+ $e->getMessage());
+ }
+ unlink($file);
+ }
+
+ }
+
+ /* TODO: safe mode */
+
+ } catch (PDOException $e) {
+ printf("[001] %s, [%s] %s\n",
+ $e->getMessage(),
+ (is_object($db)) ? $db->errorCode() : 'n/a',
+ (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a');
+ }
+
+ print "done!";
+?>
+--EXPECTF--
+Warning: PDO::__construct(file:%spdomuri.tst): failed to open stream: Invalid argument in %s on line %d
+[002] URI=uri:file:%spdomuri.tst, DSN=mysql%sdbname=%s, File=%spdomuri.tst (%d bytes, 'mysql%sdbname=%s'), invalid data source URI
+
+Warning: PDO::__construct(file:%spdomuri.tst): failed to open stream: Invalid argument in %s on line %d
+[003] URI=uri:file:%spdomuri.tst, DSN=mysql%sdbname=%s, File=%spdomuri.tst (%d bytes, 'mysql%sdbname=letshopeinvalid%s'), chr(0) test, invalid data source URI
+done!
diff --git a/ext/pdo_mysql/tests/pdo_mysql___construct_uri.phpt b/ext/pdo_mysql/tests/pdo_mysql___construct_uri.phpt
index 7e92ff2e9a..0b1cf3fe65 100644
--- a/ext/pdo_mysql/tests/pdo_mysql___construct_uri.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql___construct_uri.phpt
@@ -2,6 +2,9 @@
MySQL PDO->__construct() - URI
--SKIPIF--
<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip not for Windows');
+}
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
MySQLPDOTest::skip();
@@ -68,9 +71,9 @@ MySQLPDOTest::skip();
print "done!";
?>
--EXPECTF--
-Warning: PDO::__construct(%s
+Warning: PDO::__construct(file:/tmp/pdomuri.tst): failed to open stream: No such file or directory in %s on line %d
[002] URI=uri:file:%spdomuri.tst, DSN=mysql%sdbname=%s, File=%spdomuri.tst (%d bytes, 'mysql%sdbname=%s'), invalid data source URI
-Warning: PDO::__construct(%s
+Warning: PDO::__construct(file:/tmp/pdomuri.tst): failed to open stream: No such file or directory in %s on line %d
[003] URI=uri:file:%spdomuri.tst, DSN=mysql%sdbname=%s, File=%spdomuri.tst (%d bytes, 'mysql%sdbname=letshopeinvalid%s'), chr(0) test, invalid data source URI
done!
diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt
index 631a918dd0..fb336ba627 100644
--- a/ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt
@@ -152,4 +152,8 @@ array(1) {
}
}
-Fatal error: Cannot instantiate abstract class mystatement6 in %s on line %d \ No newline at end of file
+Fatal error: Uncaught Error: Cannot instantiate abstract class mystatement6 in %s:%d
+Stack trace:
+#0 %s(%d): PDO->query('SELECT id, labe...')
+#1 {main}
+ thrown in %s on line %d \ No newline at end of file
diff --git a/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt b/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt
index 22d36183cb..fb7e9a9d0a 100644
--- a/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt
@@ -30,4 +30,4 @@ MySQLPDOTest::skip();
}
?>
--EXPECTF--
-done! \ No newline at end of file
+done!
diff --git a/ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt b/ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt
index c992d3acf9..49bd5551ac 100644
--- a/ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt
@@ -102,5 +102,4 @@ require dirname(__FILE__) . '/mysql_pdo_test.inc';
MySQLPDOTest::dropTestTable();
?>
--EXPECTF--
-[001] Call to PDO::setAttribute(int attribute, mixed value) has changed the type of value from integer to boolean, test will not work properly
-done! \ No newline at end of file
+done!
diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt
index 224684b878..140359afc1 100644
--- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt
@@ -93,4 +93,7 @@ array(1) {
Warning: PDO::prepare(): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'unknown_column' in 'field list' in %s on line %d
-Fatal error: Call to a member function execute() on boolean in %s on line %d
+Fatal error: Uncaught Error: Call to a member function execute() on boolean in %s:%d
+Stack trace:
+#0 {main}
+ thrown in %s on line %d
diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt
index b7b0ab6294..ad710dcc15 100644
--- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt
@@ -36,4 +36,7 @@ Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number: mixed named
Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number in %s on line %d
-Fatal error: Call to a member function execute() on boolean in %s on line %d
+Fatal error: Uncaught Error: Call to a member function execute() on boolean in %s:%d
+Stack trace:
+#0 {main}
+ thrown in %s on line %d
diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt
index c16ce5dd1c..0e27b0119c 100644
--- a/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt
@@ -56,4 +56,7 @@ Testing native PS...
Warning: PDO::prepare(): SQLSTATE[42S02]: Base table or view not found: 1146 Table '%s.ihopeitdoesnotexist' doesn't exist in %s on line %d
-Fatal error: Call to a member function execute() on boolean in %s on line %d
+Fatal error: Uncaught Error: Call to a member function execute() on boolean in %s:%d
+Stack trace:
+#0 {main}
+ thrown in %s on line %d
diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt
index d2097f1162..72b53156a2 100644
--- a/ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt
@@ -38,7 +38,7 @@ try {
if (false !== ($tmp = @$stmt->getColumnMeta(-1)))
printf("[004] Expecting false got %s\n", var_export($tmp, true));
- // Warning: PDOStatement::getColumnMeta() expects parameter 1 to be long, array given in
+ // Warning: PDOStatement::getColumnMeta() expects parameter 1 to be integer, array given in
if (false !== ($tmp = @$stmt->getColumnMeta(array())))
printf("[005] Expecting false got %s\n", var_export($tmp, true));
diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt
index 52ecc912d4..db92e40a93 100644
--- a/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt
@@ -99,4 +99,8 @@ Native Prepared Statements...
Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near '%SSELECT label FROM test ORDER BY id ASC LIMIT 1' at line %d in %s on line %d
-Fatal error: Call to a member function errorInfo() on boolean in %s on line %d
+Fatal error: Uncaught Error: Call to a member function errorInfo() on boolean in %s:%d
+Stack trace:
+#0 %s(%d): mysql_stmt_multiquery_wrong_usage(Object(PDO))
+#1 {main}
+ thrown in %s on line %d \ No newline at end of file