Annotation of embedaddon/php/ext/pdo_odbc/pdo_odbc.c, revision 1.1
1.1 ! misho 1: /*
! 2: +----------------------------------------------------------------------+
! 3: | PHP Version 5 |
! 4: +----------------------------------------------------------------------+
! 5: | Copyright (c) 1997-2012 The PHP Group |
! 6: +----------------------------------------------------------------------+
! 7: | This source file is subject to version 3.0 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_0.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: Wez Furlong <wez@php.net> |
! 16: +----------------------------------------------------------------------+
! 17: */
! 18:
! 19: /* $Id: pdo_odbc.c 321634 2012-01-01 13:15:04Z felipe $ */
! 20:
! 21: #ifdef HAVE_CONFIG_H
! 22: #include "config.h"
! 23: #endif
! 24:
! 25: #include "php.h"
! 26: #include "php_ini.h"
! 27: #include "ext/standard/info.h"
! 28: #include "pdo/php_pdo.h"
! 29: #include "pdo/php_pdo_driver.h"
! 30: #include "php_pdo_odbc.h"
! 31: #include "php_pdo_odbc_int.h"
! 32:
! 33: /* {{{ pdo_odbc_functions[] */
! 34: const function_entry pdo_odbc_functions[] = {
! 35: {NULL, NULL, NULL}
! 36: };
! 37: /* }}} */
! 38:
! 39: /* {{{ pdo_odbc_deps[] */
! 40: #if ZEND_MODULE_API_NO >= 20050922
! 41: static const zend_module_dep pdo_odbc_deps[] = {
! 42: ZEND_MOD_REQUIRED("pdo")
! 43: ZEND_MOD_END
! 44: };
! 45: #endif
! 46: /* }}} */
! 47:
! 48: /* {{{ pdo_odbc_module_entry */
! 49: zend_module_entry pdo_odbc_module_entry = {
! 50: #if ZEND_MODULE_API_NO >= 20050922
! 51: STANDARD_MODULE_HEADER_EX, NULL,
! 52: pdo_odbc_deps,
! 53: #else
! 54: STANDARD_MODULE_HEADER,
! 55: #endif
! 56: "PDO_ODBC",
! 57: pdo_odbc_functions,
! 58: PHP_MINIT(pdo_odbc),
! 59: PHP_MSHUTDOWN(pdo_odbc),
! 60: NULL,
! 61: NULL,
! 62: PHP_MINFO(pdo_odbc),
! 63: "1.0.1",
! 64: STANDARD_MODULE_PROPERTIES
! 65: };
! 66: /* }}} */
! 67:
! 68: #ifdef COMPILE_DL_PDO_ODBC
! 69: ZEND_GET_MODULE(pdo_odbc)
! 70: #endif
! 71:
! 72: #ifdef SQL_ATTR_CONNECTION_POOLING
! 73: SQLUINTEGER pdo_odbc_pool_on = SQL_CP_OFF;
! 74: SQLUINTEGER pdo_odbc_pool_mode = SQL_CP_ONE_PER_HENV;
! 75: #endif
! 76:
! 77: #if defined(DB2CLI_VER) && !defined(PHP_WIN32)
! 78: PHP_INI_BEGIN()
! 79: PHP_INI_ENTRY("pdo_odbc.db2_instance_name", NULL, PHP_INI_SYSTEM, NULL)
! 80: PHP_INI_END()
! 81:
! 82: #endif
! 83:
! 84: /* {{{ PHP_MINIT_FUNCTION */
! 85: PHP_MINIT_FUNCTION(pdo_odbc)
! 86: {
! 87: #ifdef SQL_ATTR_CONNECTION_POOLING
! 88: char *pooling_val = NULL;
! 89: #endif
! 90:
! 91: if (FAILURE == php_pdo_register_driver(&pdo_odbc_driver)) {
! 92: return FAILURE;
! 93: }
! 94:
! 95: #if defined(DB2CLI_VER) && !defined(PHP_WIN32)
! 96: REGISTER_INI_ENTRIES();
! 97: {
! 98: char *instance = INI_STR("pdo_odbc.db2_instance_name");
! 99: if (instance) {
! 100: char *env = malloc(sizeof("DB2INSTANCE=") + strlen(instance));
! 101: if (!env) {
! 102: return FAILURE;
! 103: }
! 104: strcpy(env, "DB2INSTANCE=");
! 105: strcat(env, instance);
! 106: putenv(env);
! 107: /* after this point, we can't free env without breaking the environment */
! 108: }
! 109: }
! 110: #endif
! 111:
! 112: #ifdef SQL_ATTR_CONNECTION_POOLING
! 113: /* ugh, we don't really like .ini stuff in PDO, but since ODBC connection
! 114: * pooling is process wide, we can't set it from within the scope of a
! 115: * request without affecting others, which goes against our isolated request
! 116: * policy. So, we use cfg_get_string here to check it this once.
! 117: * */
! 118: if (FAILURE == cfg_get_string("pdo_odbc.connection_pooling", &pooling_val) || pooling_val == NULL) {
! 119: pooling_val = "strict";
! 120: }
! 121: if (strcasecmp(pooling_val, "strict") == 0 || strcmp(pooling_val, "1") == 0) {
! 122: pdo_odbc_pool_on = SQL_CP_ONE_PER_HENV;
! 123: pdo_odbc_pool_mode = SQL_CP_STRICT_MATCH;
! 124: } else if (strcasecmp(pooling_val, "relaxed") == 0) {
! 125: pdo_odbc_pool_on = SQL_CP_ONE_PER_HENV;
! 126: pdo_odbc_pool_mode = SQL_CP_RELAXED_MATCH;
! 127: } else if (*pooling_val == '\0' || strcasecmp(pooling_val, "off") == 0) {
! 128: pdo_odbc_pool_on = SQL_CP_OFF;
! 129: } else {
! 130: php_error_docref(NULL TSRMLS_CC, E_ERROR, "Error in pdo_odbc.connection_pooling configuration. Value MUST be one of 'strict', 'relaxed' or 'off'");
! 131: return FAILURE;
! 132: }
! 133:
! 134: if (pdo_odbc_pool_on != SQL_CP_OFF) {
! 135: SQLSetEnvAttr(SQL_NULL_HANDLE, SQL_ATTR_CONNECTION_POOLING, (void*)pdo_odbc_pool_on, 0);
! 136: }
! 137: #endif
! 138:
! 139: REGISTER_PDO_CLASS_CONST_LONG("ODBC_ATTR_USE_CURSOR_LIBRARY", PDO_ODBC_ATTR_USE_CURSOR_LIBRARY);
! 140: REGISTER_PDO_CLASS_CONST_LONG("ODBC_ATTR_ASSUME_UTF8", PDO_ODBC_ATTR_ASSUME_UTF8);
! 141: REGISTER_PDO_CLASS_CONST_LONG("ODBC_SQL_USE_IF_NEEDED", SQL_CUR_USE_IF_NEEDED);
! 142: REGISTER_PDO_CLASS_CONST_LONG("ODBC_SQL_USE_DRIVER", SQL_CUR_USE_DRIVER);
! 143: REGISTER_PDO_CLASS_CONST_LONG("ODBC_SQL_USE_ODBC", SQL_CUR_USE_ODBC);
! 144:
! 145: return SUCCESS;
! 146: }
! 147: /* }}} */
! 148:
! 149: /* {{{ PHP_MSHUTDOWN_FUNCTION
! 150: */
! 151: PHP_MSHUTDOWN_FUNCTION(pdo_odbc)
! 152: {
! 153: #if defined(DB2CLI_VER) && !defined(PHP_WIN32)
! 154: UNREGISTER_INI_ENTRIES();
! 155: #endif
! 156: php_pdo_unregister_driver(&pdo_odbc_driver);
! 157: return SUCCESS;
! 158: }
! 159: /* }}} */
! 160:
! 161: /* {{{ PHP_MINFO_FUNCTION
! 162: */
! 163: PHP_MINFO_FUNCTION(pdo_odbc)
! 164: {
! 165: php_info_print_table_start();
! 166: php_info_print_table_header(2, "PDO Driver for ODBC (" PDO_ODBC_TYPE ")" , "enabled");
! 167: #ifdef SQL_ATTR_CONNECTION_POOLING
! 168: php_info_print_table_row(2, "ODBC Connection Pooling", pdo_odbc_pool_on == SQL_CP_OFF ?
! 169: "Disabled" : (pdo_odbc_pool_mode == SQL_CP_STRICT_MATCH ? "Enabled, strict matching" : "Enabled, relaxed matching"));
! 170: #else
! 171: php_info_print_table_row(2, "ODBC Connection Pooling", "Not supported in this build");
! 172: #endif
! 173: php_info_print_table_end();
! 174:
! 175: #if defined(DB2CLI_VER) && !defined(PHP_WIN32)
! 176: DISPLAY_INI_ENTRIES();
! 177: #endif
! 178: }
! 179: /* }}} */
! 180:
! 181: /*
! 182: * Local variables:
! 183: * tab-width: 4
! 184: * c-basic-offset: 4
! 185: * End:
! 186: * vim600: noet sw=4 ts=4 fdm=marker
! 187: * vim<600: noet sw=4 ts=4
! 188: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>