Annotation of embedaddon/php/ext/pdo_odbc/pdo_odbc.c, revision 1.1.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>