xref: /PHP-7.1/ext/pdo_dblib/php_pdo_dblib_int.h (revision ccd4716e)
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