Annotation of embedaddon/php/ext/pdo_dblib/pdo_dblib.c, revision 1.1.1.3

1.1       misho       1: /*
                      2:   +----------------------------------------------------------------------+
                      3:   | PHP Version 5                                                        |
                      4:   +----------------------------------------------------------------------+
1.1.1.3 ! misho       5:   | Copyright (c) 1997-2013 The PHP Group                                |
1.1       misho       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: Wez Furlong <wez@php.net>                                    |
                     16:   |         Frank M. Kromann <frank@kromann.info>                        |
                     17:   +----------------------------------------------------------------------+
                     18: */
                     19: 
1.1.1.2   misho      20: /* $Id$ */
1.1       misho      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_dblib.h"
                     32: #include "php_pdo_dblib_int.h"
                     33: #include "zend_exceptions.h"
                     34: 
                     35: ZEND_DECLARE_MODULE_GLOBALS(dblib)
                     36: static PHP_GINIT_FUNCTION(dblib);
                     37: 
                     38: const zend_function_entry pdo_dblib_functions[] = {
                     39:        PHP_FE_END
                     40: };
                     41: 
                     42: #if ZEND_MODULE_API_NO >= 20050922
                     43: static const zend_module_dep pdo_dblib_deps[] = {
                     44:        ZEND_MOD_REQUIRED("pdo")
                     45:        ZEND_MOD_END
                     46: };
                     47: #endif
                     48: 
                     49: #if PDO_DBLIB_IS_MSSQL
                     50: zend_module_entry pdo_mssql_module_entry = {
                     51: #else
                     52: zend_module_entry pdo_dblib_module_entry = {
                     53: #endif
                     54: #if ZEND_MODULE_API_NO >= 20050922
                     55:        STANDARD_MODULE_HEADER_EX, NULL,
                     56:        pdo_dblib_deps,
                     57: #else
                     58:        STANDARD_MODULE_HEADER,
                     59: #endif
                     60: #if PDO_DBLIB_IS_MSSQL
                     61:        "pdo_mssql",
                     62: #elif defined(PHP_WIN32)
                     63:        "pdo_sybase",
                     64: #else
                     65:        "pdo_dblib",
                     66: #endif
                     67:        pdo_dblib_functions,
                     68:        PHP_MINIT(pdo_dblib),
                     69:        PHP_MSHUTDOWN(pdo_dblib),
                     70:        NULL,
                     71:        PHP_RSHUTDOWN(pdo_dblib),
                     72:        PHP_MINFO(pdo_dblib),
                     73:        "1.0.1",
                     74:        PHP_MODULE_GLOBALS(dblib),
                     75:        PHP_GINIT(dblib),
                     76:        NULL,
                     77:        NULL,
                     78:        STANDARD_MODULE_PROPERTIES_EX
                     79: };
                     80: 
                     81: #if defined(COMPILE_DL_PDO_DBLIB) || defined(COMPILE_DL_PDO_MSSQL)
                     82: #if PDO_DBLIB_IS_MSSQL
                     83: ZEND_GET_MODULE(pdo_mssql)
                     84: #else
                     85: ZEND_GET_MODULE(pdo_dblib)
                     86: #endif
                     87: #endif
                     88: 
                     89: int error_handler(DBPROCESS *dbproc, int severity, int dberr,
                     90:        int oserr, char *dberrstr, char *oserrstr)
                     91: {
                     92:        pdo_dblib_err *einfo;
                     93:        char *state = "HY000";
                     94:        TSRMLS_FETCH();
                     95: 
1.1.1.3 ! misho      96:        if(dbproc) {
        !            97:                einfo = (pdo_dblib_err*)dbgetuserdata(dbproc);
        !            98:                if (!einfo) einfo = &DBLIB_G(err);
        !            99:        } else {
        !           100:                einfo = &DBLIB_G(err);
        !           101:        }       
1.1       misho     102: 
                    103:        einfo->severity = severity;
                    104:        einfo->oserr = oserr;
                    105:        einfo->dberr = dberr;
                    106:        if (einfo->oserrstr) {
                    107:                efree(einfo->oserrstr);
                    108:        }
                    109:        if (einfo->dberrstr) {
                    110:                efree(einfo->dberrstr);
                    111:        }
                    112:        if (oserrstr) {
                    113:                einfo->oserrstr = estrdup(oserrstr);
                    114:        } else {
                    115:                einfo->oserrstr = NULL;
                    116:        }
                    117:        if (dberrstr) {
                    118:                einfo->dberrstr = estrdup(dberrstr);
                    119:        } else {
                    120:                einfo->dberrstr = NULL;
                    121:        }
                    122: 
                    123:        switch (dberr) {
                    124:                case SYBESEOF:
                    125:                case SYBEFCON:  state = "01002"; break;
                    126:                case SYBEMEM:   state = "HY001"; break;
                    127:                case SYBEPWD:   state = "28000"; break;
                    128:        }
                    129:        strcpy(einfo->sqlstate, state);
                    130: 
                    131: #if 0
                    132:        php_error_docref(NULL TSRMLS_CC, E_WARNING,
                    133:                "dblib error: %d %s (severity %d)",
                    134:                dberr, dberrstr, severity);     
                    135: #endif
                    136: 
                    137:        return INT_CANCEL;
                    138: }
                    139: 
                    140: int msg_handler(DBPROCESS *dbproc, DBINT msgno, int msgstate,
                    141:        int severity, char *msgtext, char *srvname, char *procname, DBUSMALLINT line)
                    142: {
                    143:        pdo_dblib_err *einfo;
                    144:        TSRMLS_FETCH();
                    145: 
                    146:        if (severity) {
                    147:                einfo = (pdo_dblib_err*)dbgetuserdata(dbproc);
                    148:                if (!einfo) {
                    149:                        einfo = &DBLIB_G(err);
                    150:                }
                    151: 
                    152:                if (einfo->lastmsg) {
                    153:                        efree(einfo->lastmsg);
                    154:                }
                    155: 
                    156:                einfo->lastmsg = estrdup(msgtext);
                    157:        }
                    158: 
                    159: #if 0
                    160:        php_error_docref(NULL TSRMLS_CC, E_WARNING, "dblib message: %s (severity %d)", msgtext, severity);
                    161: #endif
                    162: 
                    163:        return 0;
                    164: }
                    165: 
                    166: static PHP_GINIT_FUNCTION(dblib)
                    167: {
                    168:        memset(dblib_globals, 0, sizeof(*dblib_globals));
                    169:        dblib_globals->err.sqlstate = dblib_globals->sqlstate;
                    170: }
                    171: 
                    172: PHP_RSHUTDOWN_FUNCTION(pdo_dblib)
                    173: {
                    174:        if (DBLIB_G(err).oserrstr) {
                    175:                efree(DBLIB_G(err).oserrstr);
                    176:                DBLIB_G(err).oserrstr = NULL;
                    177:        }
                    178:        if (DBLIB_G(err).dberrstr) {
                    179:                efree(DBLIB_G(err).dberrstr);
                    180:                DBLIB_G(err).dberrstr = NULL;
                    181:        }
                    182:        if (DBLIB_G(err).lastmsg) {
                    183:                efree(DBLIB_G(err).lastmsg);
                    184:                DBLIB_G(err).lastmsg = NULL;
                    185:        }
                    186:        return SUCCESS;
                    187: }
                    188: 
                    189: PHP_MINIT_FUNCTION(pdo_dblib)
                    190: {
                    191:        if (FAIL == dbinit()) {
                    192:                return FAILURE;
                    193:        }
                    194:        
                    195:        if (FAILURE == php_pdo_register_driver(&pdo_dblib_driver)) {
                    196:                return FAILURE;
                    197:        }
                    198:        
                    199:        /* TODO: 
                    200:        
                    201:        dbsetifile()
                    202:        dbsetmaxprocs()
                    203:        dbsetlogintime()
                    204:        dbsettime()
                    205:        
                    206:         */
                    207: 
                    208: #if !PHP_DBLIB_IS_MSSQL
                    209:        dberrhandle(error_handler);
                    210:        dbmsghandle(msg_handler);
                    211: #endif
                    212: 
                    213:        return SUCCESS;
                    214: }
                    215: 
                    216: PHP_MSHUTDOWN_FUNCTION(pdo_dblib)
                    217: {
                    218:        php_pdo_unregister_driver(&pdo_dblib_driver);
                    219:        dbexit();
                    220:        return SUCCESS;
                    221: }
                    222: 
                    223: PHP_MINFO_FUNCTION(pdo_dblib)
                    224: {
                    225:        php_info_print_table_start();
                    226:        php_info_print_table_header(2, "PDO Driver for "
                    227: #if PDO_DBLIB_IS_MSSQL
                    228:                "MSSQL"
                    229: #elif defined(PHP_WIN32)
                    230:                "FreeTDS/Sybase/MSSQL"
                    231: #else
                    232:                "FreeTDS/Sybase"
                    233: #endif
                    234:                " DB-lib", "enabled");
                    235:        php_info_print_table_row(2, "Flavour", PDO_DBLIB_FLAVOUR);
                    236:        php_info_print_table_end();
                    237: }
                    238: 

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