File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / pdo_mysql / pdo_mysql.c
Revision 1.1.1.4 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 14 08:02:28 2013 UTC (10 years, 9 months ago) by misho
Branches: php, MAIN
CVS tags: v5_4_29p0, v5_4_20p0, v5_4_20, HEAD
v 5.4.20

    1: /*
    2:   +----------------------------------------------------------------------+
    3:   | PHP Version 5                                                        |
    4:   +----------------------------------------------------------------------+
    5:   | Copyright (c) 1997-2013 The PHP Group                                |
    6:   +----------------------------------------------------------------------+
    7:   | This source file is subject to version 3.01 of the PHP license,      |
    8:   | that is bundled with this package in the file LICENSE, and is        |
    9:   | available through the world-wide-web at the following url:           |
   10:   | http://www.php.net/license/3_01.txt                                  |
   11:   | If you did not receive a copy of the PHP license and are unable to   |
   12:   | obtain it through the world-wide-web, please send a note to          |
   13:   | license@php.net so we can mail you a copy immediately.               |
   14:   +----------------------------------------------------------------------+
   15:   | Author: George Schlossnagle <george@omniti.com>                      |
   16:   |         Johannes Schlueter <johannes@mysql.com>                      |
   17:   +----------------------------------------------------------------------+
   18: */
   19: 
   20: /* $Id: pdo_mysql.c,v 1.1.1.4 2013/10/14 08:02:28 misho Exp $ */
   21: 
   22: #ifdef HAVE_CONFIG_H
   23: #include "config.h"
   24: #endif
   25: 
   26: #include "php.h"
   27: #include "php_ini.h"
   28: #include "ext/standard/info.h"
   29: #include "pdo/php_pdo.h"
   30: #include "pdo/php_pdo_driver.h"
   31: #include "php_pdo_mysql.h"
   32: #include "php_pdo_mysql_int.h"
   33: 
   34: #ifdef COMPILE_DL_PDO_MYSQL
   35: ZEND_GET_MODULE(pdo_mysql)
   36: #endif
   37: 
   38: ZEND_DECLARE_MODULE_GLOBALS(pdo_mysql)
   39: 
   40: /*
   41:  The default socket location is sometimes defined by configure.
   42:  With libmysql `mysql_config --socket` will fill PDO_MYSQL_UNIX_ADDR
   43:  and the user can use --with-mysql-sock=SOCKET which will fill
   44:  PDO_MYSQL_UNIX_ADDR. If both aren't set we're using mysqlnd and use
   45:  /tmp/mysql.sock as default on *nix and NULL for Windows (default 
   46:  named pipe name is set in mysqlnd).
   47: */
   48: #ifndef PDO_MYSQL_UNIX_ADDR
   49: # ifdef PHP_MYSQL_UNIX_SOCK_ADDR
   50: #  define PDO_MYSQL_UNIX_ADDR PHP_MYSQL_UNIX_SOCK_ADDR
   51: # else
   52: #  if !PHP_WIN32
   53: #   define PDO_MYSQL_UNIX_ADDR "/tmp/mysql.sock"
   54: #  else
   55: #   define PDO_MYSQL_UNIX_ADDR NULL
   56: #  endif
   57: # endif
   58: #endif
   59: 
   60: #ifdef PDO_USE_MYSQLND
   61: #include "ext/mysqlnd/mysqlnd_reverse_api.h"
   62: static MYSQLND * pdo_mysql_convert_zv_to_mysqlnd(zval * zv TSRMLS_DC)
   63: {
   64: 	if (Z_TYPE_P(zv) == IS_OBJECT && instanceof_function(Z_OBJCE_P(zv), php_pdo_get_dbh_ce() TSRMLS_CC)) {
   65: 		pdo_dbh_t * dbh = zend_object_store_get_object(zv TSRMLS_CC);
   66: 
   67: 		if (!dbh || dbh->driver != &pdo_mysql_driver) {
   68: 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Provided PDO instance is not using MySQL but %s", dbh->driver->driver_name);
   69: 			return NULL;
   70: 		}
   71: 
   72: 		return ((pdo_mysql_db_handle *)dbh->driver_data)->server;
   73: 	}
   74: 	return NULL;
   75: }
   76: 
   77: static MYSQLND_REVERSE_API pdo_mysql_reverse_api = {
   78: 	&pdo_mysql_module_entry,
   79: 	pdo_mysql_convert_zv_to_mysqlnd
   80: };
   81: #endif
   82: 
   83: 
   84: /* {{{ PHP_INI_BEGIN
   85: */
   86: PHP_INI_BEGIN()
   87: #ifndef PHP_WIN32
   88: 	STD_PHP_INI_ENTRY("pdo_mysql.default_socket", PDO_MYSQL_UNIX_ADDR, PHP_INI_SYSTEM, OnUpdateStringUnempty, default_socket, zend_pdo_mysql_globals, pdo_mysql_globals)
   89: #endif
   90: #if PDO_DBG_ENABLED
   91: 	STD_PHP_INI_ENTRY("pdo_mysql.debug",	NULL, PHP_INI_SYSTEM, OnUpdateString, debug, zend_pdo_mysql_globals, pdo_mysql_globals)
   92: #endif
   93: PHP_INI_END()
   94: /* }}} */
   95: 
   96: /* true global environment */		
   97: 		
   98: /* {{{ PHP_MINIT_FUNCTION
   99:  */
  100: static PHP_MINIT_FUNCTION(pdo_mysql)
  101: {
  102: 	REGISTER_INI_ENTRIES();
  103: 
  104: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_USE_BUFFERED_QUERY", (long)PDO_MYSQL_ATTR_USE_BUFFERED_QUERY);
  105: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_LOCAL_INFILE", (long)PDO_MYSQL_ATTR_LOCAL_INFILE);	
  106: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_INIT_COMMAND", (long)PDO_MYSQL_ATTR_INIT_COMMAND);
  107: #ifndef PDO_USE_MYSQLND
  108: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_MAX_BUFFER_SIZE", (long)PDO_MYSQL_ATTR_MAX_BUFFER_SIZE);
  109: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_READ_DEFAULT_FILE", (long)PDO_MYSQL_ATTR_READ_DEFAULT_FILE);
  110: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_READ_DEFAULT_GROUP", (long)PDO_MYSQL_ATTR_READ_DEFAULT_GROUP);
  111: #endif
  112: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_COMPRESS", (long)PDO_MYSQL_ATTR_COMPRESS);
  113: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_DIRECT_QUERY", (long)PDO_MYSQL_ATTR_DIRECT_QUERY);
  114: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_FOUND_ROWS", (long)PDO_MYSQL_ATTR_FOUND_ROWS);
  115: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_IGNORE_SPACE", (long)PDO_MYSQL_ATTR_IGNORE_SPACE);
  116: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_KEY", (long)PDO_MYSQL_ATTR_SSL_KEY);
  117: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CERT", (long)PDO_MYSQL_ATTR_SSL_CERT);
  118: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CA", (long)PDO_MYSQL_ATTR_SSL_CA);
  119: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CAPATH", (long)PDO_MYSQL_ATTR_SSL_CAPATH);
  120: 	REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CIPHER", (long)PDO_MYSQL_ATTR_SSL_CIPHER);
  121: 
  122: #ifdef PDO_USE_MYSQLND
  123: 	mysqlnd_reverse_api_register_api(&pdo_mysql_reverse_api TSRMLS_CC);
  124: #endif
  125: 
  126: 	return php_pdo_register_driver(&pdo_mysql_driver);
  127: }
  128: /* }}} */
  129: 
  130: /* {{{ PHP_MSHUTDOWN_FUNCTION
  131:  */
  132: static PHP_MSHUTDOWN_FUNCTION(pdo_mysql)
  133: {
  134: 	php_pdo_unregister_driver(&pdo_mysql_driver);
  135: #if PDO_USE_MYSQLND
  136: 	UNREGISTER_INI_ENTRIES();
  137: #endif
  138: 
  139: 	return SUCCESS;
  140: }
  141: /* }}} */
  142: 
  143: /* {{{ PHP_MINFO_FUNCTION
  144:  */
  145: static PHP_MINFO_FUNCTION(pdo_mysql)
  146: {
  147: 	php_info_print_table_start();
  148: 
  149: 	php_info_print_table_header(2, "PDO Driver for MySQL", "enabled");
  150: 	php_info_print_table_row(2, "Client API version", mysql_get_client_info());
  151: 
  152: 	php_info_print_table_end();
  153: 
  154: #ifndef PHP_WIN32
  155: 	DISPLAY_INI_ENTRIES();
  156: #endif
  157: }
  158: /* }}} */
  159: 
  160: 
  161: #if PDO_USE_MYSQLND && PDO_DBG_ENABLED
  162: /* {{{ PHP_RINIT_FUNCTION
  163:  */
  164: static PHP_RINIT_FUNCTION(pdo_mysql)
  165: {	
  166: 	if (PDO_MYSQL_G(debug)) {
  167: 		MYSQLND_DEBUG *dbg = mysqlnd_debug_init(mysqlnd_debug_std_no_trace_funcs TSRMLS_CC);
  168: 		if (!dbg) {
  169: 			return FAILURE;
  170: 		}
  171: 		dbg->m->set_mode(dbg, PDO_MYSQL_G(debug));
  172: 		PDO_MYSQL_G(dbg) = dbg;
  173: 	}
  174: 	
  175: 	return SUCCESS;
  176: }
  177: /* }}} */
  178: 
  179: /* {{{ PHP_RSHUTDOWN_FUNCTION
  180:  */
  181: static PHP_RSHUTDOWN_FUNCTION(pdo_mysql)
  182: {
  183: 	MYSQLND_DEBUG *dbg = PDO_MYSQL_G(dbg);
  184: 	PDO_DBG_ENTER("RSHUTDOWN");
  185: 	if (dbg) {
  186: 		dbg->m->close(dbg);
  187: 		dbg->m->free_handle(dbg);
  188: 		PDO_MYSQL_G(dbg) = NULL;
  189: 	}
  190: 
  191: 	return SUCCESS;
  192: }
  193: /* }}} */
  194: #endif
  195: 
  196: /* {{{ PHP_GINIT_FUNCTION
  197:  */
  198: static PHP_GINIT_FUNCTION(pdo_mysql)
  199: {
  200: #ifndef PHP_WIN32
  201: 	pdo_mysql_globals->default_socket = NULL;
  202: #endif
  203: #if PDO_DBG_ENABLED
  204: 	pdo_mysql_globals->debug = NULL;	/* The actual string */
  205: 	pdo_mysql_globals->dbg = NULL;	/* The DBG object*/
  206: #endif
  207: }
  208: /* }}} */
  209: 
  210: /* {{{ pdo_mysql_functions[] */
  211: const zend_function_entry pdo_mysql_functions[] = {
  212: 	PHP_FE_END
  213: };
  214: /* }}} */
  215: 
  216: /* {{{ pdo_mysql_deps[] */
  217: #if ZEND_MODULE_API_NO >= 20050922
  218: static const zend_module_dep pdo_mysql_deps[] = {
  219: 	ZEND_MOD_REQUIRED("pdo")
  220: #ifdef PDO_USE_MYSQLND
  221: 	ZEND_MOD_REQUIRED("mysqlnd")
  222: #endif
  223: 	ZEND_MOD_END
  224: };
  225: #endif
  226: /* }}} */
  227: 
  228: /* {{{ pdo_mysql_module_entry */
  229: zend_module_entry pdo_mysql_module_entry = {
  230: 	STANDARD_MODULE_HEADER_EX, NULL,
  231: 	pdo_mysql_deps,
  232: 	"pdo_mysql",
  233: 	pdo_mysql_functions,
  234: 	PHP_MINIT(pdo_mysql),
  235: 	PHP_MSHUTDOWN(pdo_mysql),
  236: #if PDO_USE_MYSQLND && PDO_DBG_ENABLED
  237: 	PHP_RINIT(pdo_mysql),
  238: 	PHP_RSHUTDOWN(pdo_mysql),
  239: #else
  240: 	NULL,
  241: 	NULL,
  242: #endif
  243: 	PHP_MINFO(pdo_mysql),
  244: 	"1.0.2",
  245: 	PHP_MODULE_GLOBALS(pdo_mysql),
  246: 	PHP_GINIT(pdo_mysql),
  247: 	NULL,
  248: 	NULL,
  249: 	STANDARD_MODULE_PROPERTIES_EX
  250: };
  251: /* }}} */
  252: 
  253: 
  254: /*
  255:  * Local variables:
  256:  * tab-width: 4
  257:  * c-basic-offset: 4
  258:  * End:
  259:  * vim600: noet sw=4 ts=4 fdm=marker
  260:  * vim<600: noet sw=4 ts=4
  261:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>