1 /* 2 +----------------------------------------------------------------------+ 3 | PHP Version 7 | 4 +----------------------------------------------------------------------+ 5 | Copyright (c) 1997-2018 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: Wez Furlong <wez@php.net> | 16 | Frank M. Kromann <frank@kromann.info> | 17 +----------------------------------------------------------------------+ 18 */ 19 20 /* $Id$ */ 21 22 #ifndef PHP_PDO_DBLIB_INT_H 23 #define PHP_PDO_DBLIB_INT_H 24 25 #ifndef PDO_DBLIB_FLAVOUR 26 # define PDO_DBLIB_FLAVOUR "Generic DB-lib" 27 #endif 28 29 #if PHP_DBLIB_IS_MSSQL 30 # include <sqlfront.h> 31 # include <sqldb.h> 32 33 # define DBERRHANDLE(a, b) dbprocerrhandle(a, b) 34 # define DBMSGHANDLE(a, b) dbprocmsghandle(a, b) 35 # define EHANDLEFUNC DBERRHANDLE_PROC 36 # define MHANDLEFUNC DBMSGHANDLE_PROC 37 # define DBSETOPT(a, b, c) dbsetopt(a, b, c) 38 # define SYBESMSG SQLESMSG 39 # define SYBESEOF SQLESEOF 40 # define SYBEFCON SQLECONN /* SQLEFCON does not exist in MS SQL Server. */ 41 # define SYBEMEM SQLEMEM 42 # define SYBEPWD SQLEPWD 43 44 #else 45 # include <sybfront.h> 46 # include <sybdb.h> 47 # include <syberror.h> 48 49 /* alias some types */ 50 # define SQLTEXT SYBTEXT 51 # define SQLCHAR SYBCHAR 52 # define SQLVARCHAR SYBVARCHAR 53 # define SQLINT1 SYBINT1 54 # define SQLINT2 SYBINT2 55 # define SQLINT4 SYBINT4 56 # define SQLINTN SYBINTN 57 # define SQLBIT SYBBIT 58 # define SQLFLT4 SYBREAL 59 # define SQLFLT8 SYBFLT8 60 # define SQLFLTN SYBFLTN 61 # define SQLDECIMAL SYBDECIMAL 62 # define SQLNUMERIC SYBNUMERIC 63 # define SQLDATETIME SYBDATETIME 64 # define SQLDATETIM4 SYBDATETIME4 65 # define SQLDATETIMN SYBDATETIMN 66 # define SQLMONEY SYBMONEY 67 # define SQLMONEY4 SYBMONEY4 68 # define SQLMONEYN SYBMONEYN 69 # define SQLIMAGE SYBIMAGE 70 # define SQLBINARY SYBBINARY 71 # define SQLVARBINARY SYBVARBINARY 72 # ifdef SYBUNIQUE 73 # define SQLUNIQUE SYBUNIQUE 74 #else 75 # define SQLUNIQUE 36 /* FreeTDS Hack */ 76 # endif 77 78 # define DBERRHANDLE(a, b) dberrhandle(b) 79 # define DBMSGHANDLE(a, b) dbmsghandle(b) 80 # define DBSETOPT(a, b, c) dbsetopt(a, b, c, -1) 81 # define NO_MORE_RPC_RESULTS 3 82 # define dbfreelogin dbloginfree 83 # define dbrpcexec dbrpcsend 84 85 typedef short TDS_SHORT; 86 # ifndef PHP_WIN32 87 typedef unsigned char *LPBYTE; 88 # endif 89 typedef float DBFLT4; 90 #endif 91 92 int pdo_dblib_error_handler(DBPROCESS *dbproc, int severity, int dberr, 93 int oserr, char *dberrstr, char *oserrstr); 94 95 int pdo_dblib_msg_handler(DBPROCESS *dbproc, DBINT msgno, int msgstate, 96 int severity, char *msgtext, char *srvname, char *procname, DBUSMALLINT line); 97 98 extern pdo_driver_t pdo_dblib_driver; 99 extern struct pdo_stmt_methods dblib_stmt_methods; 100 101 typedef struct { 102 int severity; 103 int oserr; 104 int dberr; 105 char *oserrstr; 106 char *dberrstr; 107 char *sqlstate; 108 char *lastmsg; 109 } pdo_dblib_err; 110 111 void pdo_dblib_err_dtor(pdo_dblib_err *err); 112 113 typedef struct { 114 LOGINREC *login; 115 DBPROCESS *link; 116 117 pdo_dblib_err err; 118 unsigned stringify_uniqueidentifier:1; 119 } pdo_dblib_db_handle; 120 121 typedef struct { 122 pdo_dblib_db_handle *H; 123 pdo_dblib_err err; 124 unsigned int computed_column_name_count; 125 } pdo_dblib_stmt; 126 127 typedef struct { 128 const char* key; 129 int value; 130 } pdo_dblib_keyval; 131 132 133 ZEND_BEGIN_MODULE_GLOBALS(dblib) 134 pdo_dblib_err err; 135 char sqlstate[6]; 136 ZEND_END_MODULE_GLOBALS(dblib) 137 138 #ifdef ZTS 139 # define DBLIB_G(v) TSRMG(dblib_globals_id, zend_dblib_globals *, v) 140 #else 141 # define DBLIB_G(v) (dblib_globals.v) 142 #endif 143 144 ZEND_EXTERN_MODULE_GLOBALS(dblib) 145 146 enum { 147 PDO_DBLIB_ATTR_CONNECTION_TIMEOUT = PDO_ATTR_DRIVER_SPECIFIC, 148 PDO_DBLIB_ATTR_QUERY_TIMEOUT, 149 PDO_DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER, 150 }; 151 152 #endif 153