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>