summaryrefslogtreecommitdiff
path: root/ext/pdo_mysql/pdo_mysql.c
diff options
context:
space:
mode:
authorMark A. Hershberger <mah@debian.(none)>2009-03-25 19:39:21 -0400
committerMark A. Hershberger <mah@debian.(none)>2009-03-25 19:39:21 -0400
commit6821b67124604da690c5e9276d5370d679c63ac8 (patch)
treebefb4ca2520eb577950cef6cb76d10b914cbf67a /ext/pdo_mysql/pdo_mysql.c
parentcd0b49c72aee33b3e44a9c589fcd93b9e1c7a64f (diff)
downloadphp-6821b67124604da690c5e9276d5370d679c63ac8.tar.gz
Imported Upstream version 5.3.0RC1upstream/5.3.0_RC1upstream/5.3.0RC1
Diffstat (limited to 'ext/pdo_mysql/pdo_mysql.c')
-rwxr-xr-xext/pdo_mysql/pdo_mysql.c223
1 files changed, 183 insertions, 40 deletions
diff --git a/ext/pdo_mysql/pdo_mysql.c b/ext/pdo_mysql/pdo_mysql.c
index 8218de6fb..b5875e0a5 100755
--- a/ext/pdo_mysql/pdo_mysql.c
+++ b/ext/pdo_mysql/pdo_mysql.c
@@ -13,10 +13,11 @@
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: George Schlossnagle <george@omniti.com> |
+ | Johannes Schlueter <johannes@mysql.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_mysql.c,v 1.8.2.13.2.3 2008/12/31 11:17:42 sebastian Exp $ */
+/* $Id: pdo_mysql.c,v 1.8.2.13.2.1.2.8 2008/12/31 11:15:41 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -30,82 +31,224 @@
#include "php_pdo_mysql.h"
#include "php_pdo_mysql_int.h"
-/* {{{ pdo_mysql_functions[] */
-zend_function_entry pdo_mysql_functions[] = {
- {NULL, NULL, NULL}
-};
-/* }}} */
+#ifdef COMPILE_DL_PDO_MYSQL
+ZEND_GET_MODULE(pdo_mysql)
+#endif
-/* {{{ pdo_mysql_functions[] */
-#if ZEND_MODULE_API_NO >= 20050922
-static zend_module_dep pdo_mysql_deps[] = {
- ZEND_MOD_REQUIRED("pdo")
- {NULL, NULL, NULL}
-};
+#if PDO_USE_MYSQLND
+ZEND_DECLARE_MODULE_GLOBALS(pdo_mysql);
+
+#ifndef PHP_WIN32
+# ifndef PDO_MYSQL_UNIX_ADDR
+# define PDO_MYSQL_UNIX_ADDR "/tmp/mysql.sock"
+# endif
#endif
-/* }}} */
-/* {{{ pdo_mysql_module_entry */
-zend_module_entry pdo_mysql_module_entry = {
-#if ZEND_MODULE_API_NO >= 20050922
- STANDARD_MODULE_HEADER_EX, NULL,
- pdo_mysql_deps,
-#else
- STANDARD_MODULE_HEADER,
+
+/* {{{ PHP_INI_BEGIN
+*/
+PHP_INI_BEGIN()
+#ifndef PHP_WIN32
+ STD_PHP_INI_ENTRY("pdo_mysql.default_socket", PDO_MYSQL_UNIX_ADDR, PHP_INI_SYSTEM, OnUpdateString, default_socket, zend_pdo_mysql_globals, pdo_mysql_globals)
#endif
- "pdo_mysql",
- pdo_mysql_functions,
- PHP_MINIT(pdo_mysql),
- PHP_MSHUTDOWN(pdo_mysql),
- NULL,
- NULL,
- PHP_MINFO(pdo_mysql),
- "1.0.2",
- STANDARD_MODULE_PROPERTIES
-};
+#if PDO_DBG_ENABLED
+ STD_PHP_INI_ENTRY("pdo_mysql.debug", NULL, PHP_INI_SYSTEM, OnUpdateString, debug, zend_pdo_mysql_globals, pdo_mysql_globals)
+#endif
+ STD_PHP_INI_ENTRY("pdo_mysql.cache_size", "2000", PHP_INI_SYSTEM, OnUpdateLong, cache_size, zend_pdo_mysql_globals, pdo_mysql_globals)
+PHP_INI_END()
/* }}} */
-
-#ifdef COMPILE_DL_PDO_MYSQL
-ZEND_GET_MODULE(pdo_mysql)
#endif
/* true global environment */
-
+#ifdef PDO_USE_MYSQLND
+static MYSQLND_ZVAL_PCACHE *pdo_mysqlnd_zval_cache;
+#endif
+
+
/* {{{ PHP_MINIT_FUNCTION
*/
-PHP_MINIT_FUNCTION(pdo_mysql)
+static PHP_MINIT_FUNCTION(pdo_mysql)
{
+#if PDO_USE_MYSQLND
+ REGISTER_INI_ENTRIES();
+#endif
+
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_LOCAL_INFILE", (long)PDO_MYSQL_ATTR_LOCAL_INFILE);
+#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_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_COMPRESS", (long)PDO_MYSQL_ATTR_COMPRESS);
+#endif
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);
+#ifdef PDO_USE_MYSQLND
+ pdo_mysqlnd_zval_cache = mysqlnd_palloc_init_cache(PDO_MYSQL_G(cache_size));
+#endif
+
return php_pdo_register_driver(&pdo_mysql_driver);
}
/* }}} */
/* {{{ PHP_MSHUTDOWN_FUNCTION
*/
-PHP_MSHUTDOWN_FUNCTION(pdo_mysql)
+static PHP_MSHUTDOWN_FUNCTION(pdo_mysql)
{
php_pdo_unregister_driver(&pdo_mysql_driver);
+#if PDO_USE_MYSQLND
+ mysqlnd_palloc_free_cache(pdo_mysqlnd_zval_cache);
+ UNREGISTER_INI_ENTRIES();
+#endif
+
return SUCCESS;
}
/* }}} */
/* {{{ PHP_MINFO_FUNCTION
*/
-PHP_MINFO_FUNCTION(pdo_mysql)
+static PHP_MINFO_FUNCTION(pdo_mysql)
{
php_info_print_table_start();
- php_info_print_table_header(2, "PDO Driver for MySQL, client library version", mysql_get_client_info());
+
+ php_info_print_table_header(2, "PDO Driver for MySQL", "enabled");
+ php_info_print_table_row(2, "Client API version", mysql_get_client_info());
+
+#ifdef PDO_USE_MYSQLND
+ {
+ zval values;
+
+ php_info_print_table_header(2, "Persistent cache", pdo_mysqlnd_zval_cache ? "enabled":"disabled");
+
+ if (pdo_mysqlnd_zval_cache) {
+ /* Now report cache status */
+ mysqlnd_palloc_stats(pdo_mysqlnd_zval_cache, &values);
+ mysqlnd_minfo_print_hash(&values);
+ zval_dtor(&values);
+ }
+ }
+#endif
php_info_print_table_end();
+
+#ifdef PDO_USE_MYSQLND
+ DISPLAY_INI_ENTRIES();
+#endif
+}
+/* }}} */
+
+
+#if PDO_USE_MYSQLND
+/* {{{ PHP_RINIT_FUNCTION
+ */
+static PHP_RINIT_FUNCTION(pdo_mysql)
+{
+ PDO_MYSQL_G(mysqlnd_thd_zval_cache) = mysqlnd_palloc_rinit(pdo_mysqlnd_zval_cache);
+
+#if PDO_DBG_ENABLED
+ if (PDO_MYSQL_G(debug)) {
+ MYSQLND_DEBUG *dbg = mysqlnd_debug_init(TSRMLS_C);
+ if (!dbg) {
+ return FAILURE;
+ }
+ dbg->m->set_mode(dbg, PDO_MYSQL_G(debug));
+ PDO_MYSQL_G(dbg) = dbg;
+ }
+#endif
+
+ return SUCCESS;
}
/* }}} */
+
+/* {{{ PHP_RSHUTDOWN_FUNCTION
+ */
+static PHP_RSHUTDOWN_FUNCTION(pdo_mysql)
+{
+ mysqlnd_palloc_rshutdown(PDO_MYSQL_G(mysqlnd_thd_zval_cache));
+
+#if PDO_DBG_ENABLED
+ MYSQLND_DEBUG *dbg = PDO_MYSQL_G(dbg);
+ PDO_DBG_ENTER("RSHUTDOWN");
+ if (dbg) {
+ dbg->m->close(dbg);
+ dbg->m->free_handle(dbg);
+ PDO_MYSQL_G(dbg) = NULL;
+ }
+#endif
+ return SUCCESS;
+}
+/* }}} */
+
+
+/* {{{ PHP_GINIT_FUNCTION
+ */
+static PHP_GINIT_FUNCTION(pdo_mysql)
+{
+ pdo_mysql_globals->mysqlnd_thd_zval_cache = NULL; /* zval cache */
+ pdo_mysql_globals->cache_size = 0;
+#ifndef PHP_WIN32
+ pdo_mysql_globals->default_socket = NULL;
+#endif
+#if PDO_DBG_ENABLED
+ pdo_mysql_globals->debug = NULL; /* The actual string */
+ pdo_mysql_globals->dbg = NULL; /* The DBG object*/
+#endif
+}
+/* }}} */
+#endif
+
+
+/* {{{ pdo_mysql_functions[] */
+const zend_function_entry pdo_mysql_functions[] = {
+ {NULL, NULL, NULL}
+};
+/* }}} */
+
+/* {{{ pdo_mysql_deps[] */
+#if ZEND_MODULE_API_NO >= 20050922
+static const zend_module_dep pdo_mysql_deps[] = {
+ ZEND_MOD_REQUIRED("pdo")
+#ifdef PDO_USE_MYSQLND
+ ZEND_MOD_REQUIRED("mysqlnd")
+#endif
+ {NULL, NULL, NULL}
+};
+#endif
+/* }}} */
+
+/* {{{ pdo_mysql_module_entry */
+zend_module_entry pdo_mysql_module_entry = {
+ STANDARD_MODULE_HEADER_EX, NULL,
+ pdo_mysql_deps,
+ "pdo_mysql",
+ pdo_mysql_functions,
+ PHP_MINIT(pdo_mysql),
+ PHP_MSHUTDOWN(pdo_mysql),
+#if PDO_USE_MYSQLND
+ PHP_RINIT(pdo_mysql),
+ PHP_RSHUTDOWN(pdo_mysql),
+#else
+ NULL,
+ NULL,
+#endif
+ PHP_MINFO(pdo_mysql),
+ "1.0.2",
+#if PDO_USE_MYSQLND
+ PHP_MODULE_GLOBALS(pdo_mysql),
+ PHP_GINIT(pdo_mysql),
+ NULL,
+ NULL,
+ STANDARD_MODULE_PROPERTIES_EX
+#else
+ STANDARD_MODULE_PROPERTIES
+#endif
+};
+/* }}} */
+
+
/*
* Local variables:
* tab-width: 4