From 41de805a9d43ed9a6dbe351e5ed1aa1f52cb9641 Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Sun, 5 Mar 2006 17:18:01 +0000 Subject: [PATCH] MFH: Fixed bug #36572 (Added PDO::MYSQL_ATTR_DIRECT_QUERY constant that show be set when executing internal queries such as "show master status" via MySQL). Added missing constant for MAX_BUFFER_SIZE. --- NEWS | 3 +++ ext/pdo_mysql/mysql_driver.c | 9 ++++++++- ext/pdo_mysql/pdo_mysql.c | 2 ++ ext/pdo_mysql/php_pdo_mysql_int.h | 2 ++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 2d123abd65..95f28fa59a 100644 --- a/NEWS +++ b/NEWS @@ -42,6 +42,9 @@ PHP NEWS - Fixed bug #36599 (DATE_W3C format constant incorrect). (Derick) - Fixed bug #36575 (SOAP: Incorrect complex type instantiation with hierarchies). (Dmitry) +- Fixed bug #36572 (Added PDO::MYSQL_ATTR_DIRECT_QUERY constant that show be + set when executing internal queries such as "show master status" via MySQL). + (Ilia) - Fixed bug #36510 (strtotime() fails to parse date strings with tabs). (Ilia, Derick) - Fixed bug #36459 (Incorrect adding PHPSESSID to links, which contains \r\n). diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c index 500cf072ed..318fb15473 100755 --- a/ext/pdo_mysql/mysql_driver.c +++ b/ext/pdo_mysql/mysql_driver.c @@ -169,6 +169,10 @@ static int mysql_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, stmt->driver_data = S; stmt->methods = &mysql_stmt_methods; + if (H->emulate_prepare) { + goto end; + } + /* TODO: add runtime check to determine if the server we are talking to supports * prepared statements; if it doesn't, we should set stmt->supports_placeholders * to PDO_PLACEHOLDER_NONE, and have the rest of the code look at S->stmt to @@ -230,6 +234,7 @@ static int mysql_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, fallback: #endif +end: stmt->supports_placeholders = PDO_PLACEHOLDER_NONE; return 1; @@ -312,7 +317,9 @@ static int pdo_mysql_set_attribute(pdo_dbh_t *dbh, long attr, zval *val TSRMLS_D case PDO_MYSQL_ATTR_USE_BUFFERED_QUERY: ((pdo_mysql_db_handle *)dbh->driver_data)->buffered = Z_BVAL_P(val); return 1; - + case PDO_MYSQL_ATTR_DIRECT_QUERY: + ((pdo_mysql_db_handle *)dbh->driver_data)->emulate_prepare = Z_BVAL_P(val); + return 1; default: return 0; } diff --git a/ext/pdo_mysql/pdo_mysql.c b/ext/pdo_mysql/pdo_mysql.c index 59c48b9449..a3d4c12c09 100755 --- a/ext/pdo_mysql/pdo_mysql.c +++ b/ext/pdo_mysql/pdo_mysql.c @@ -80,6 +80,8 @@ PHP_MINIT_FUNCTION(pdo_mysql) REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_INIT_COMMAND", (long)PDO_MYSQL_ATTR_INIT_COMMAND); 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", (long)PDO_MYSQL_ATTR_MAX_BUFFER_SIZE); + REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_DIRECT_QUERY", (long)PDO_MYSQL_ATTR_DIRECT_QUERY); return php_pdo_register_driver(&pdo_mysql_driver); } diff --git a/ext/pdo_mysql/php_pdo_mysql_int.h b/ext/pdo_mysql/php_pdo_mysql_int.h index 85af4731dd..0ae9486c0a 100755 --- a/ext/pdo_mysql/php_pdo_mysql_int.h +++ b/ext/pdo_mysql/php_pdo_mysql_int.h @@ -37,6 +37,7 @@ typedef struct { unsigned attached:1; unsigned buffered:1; + unsigned emulate_prepare:1; unsigned _reserved:31; unsigned long max_buffer_size; @@ -84,5 +85,6 @@ enum { PDO_MYSQL_ATTR_READ_DEFAULT_FILE, PDO_MYSQL_ATTR_READ_DEFAULT_GROUP, PDO_MYSQL_ATTR_MAX_BUFFER_SIZE, + PDO_MYSQL_ATTR_DIRECT_QUERY, }; #endif -- 2.50.1