xref: /PHP-5.5/ext/mssql/php_mssql.h (revision 73c1be26)
1 /*
2    +----------------------------------------------------------------------+
3    | PHP Version 5                                                        |
4    +----------------------------------------------------------------------+
5    | Copyright (c) 1997-2015 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: Frank M. Kromann <frank@kromann.info>                        |
16    +----------------------------------------------------------------------+
17  */
18 
19 
20 /* $Id$ */
21 
22 #ifndef PHP_MSSQL_H
23 #define PHP_MSSQL_H
24 
25 
26 #if HAVE_MSSQL
27 #define MSDBLIB
28 
29 /* FreeTDS checks for PHP_MSSQL_API for avoid type redefinition */
30 #ifdef HAVE_FREETDS
31 #define PHP_MSSQL_API
32 #endif
33 
34 #include <sqlfront.h>
35 #include <sqldb.h>
36 
37 typedef short TDS_SHORT;
38 #ifdef HAVE_FREETDS
39 #define MSSQL_VERSION "FreeTDS"
40 #define SQLTEXT SYBTEXT
41 #define SQLCHAR SYBCHAR
42 #define SQLVARCHAR SYBVARCHAR
43 #define SQLINT1 SYBINT1
44 #define SQLINT2 SYBINT2
45 #define SQLINT4 SYBINT4
46 #define SQLINTN SYBINTN
47 #define SQLBIT SYBBIT
48 #define SQLFLT4 SYBREAL
49 #define SQLFLT8 SYBFLT8
50 #define SQLFLTN SYBFLTN
51 #define SQLDECIMAL SYBDECIMAL
52 #define SQLNUMERIC SYBNUMERIC
53 #define SQLDATETIME SYBDATETIME
54 #define SQLDATETIM4 SYBDATETIME4
55 #define SQLDATETIMN SYBDATETIMN
56 #define SQLMONEY SYBMONEY
57 #define SQLMONEY4 SYBMONEY4
58 #define SQLMONEYN SYBMONEYN
59 #define SQLIMAGE SYBIMAGE
60 #define SQLBINARY SYBBINARY
61 #define SQLVARBINARY SYBVARBINARY
62 #ifdef SQLUNIQUE /* FreeTSD 0.61+ */
63 #define SQLUNIQUE SYBUNIQUE
64 #endif
65 #define DBERRHANDLE(a, b) dberrhandle(b)
66 #define DBMSGHANDLE(a, b) dbmsghandle(b)
67 #define DBSETOPT(a, b, c) dbsetopt(a, b, c, -1)
68 #define NO_MORE_RPC_RESULTS 3
69 #ifndef dbfreelogin
70 #define dbfreelogin dbloginfree
71 #endif
72 #define dbrpcexec dbrpcsend
73 typedef unsigned char	*LPBYTE;
74 typedef float           DBFLT4;
75 #else
76 #define MSSQL_VERSION "7.0"
77 #define DBERRHANDLE(a, b) dbprocerrhandle(a, b)
78 #define DBMSGHANDLE(a, b) dbprocmsghandle(a, b)
79 #define EHANDLEFUNC DBERRHANDLE_PROC
80 #define MHANDLEFUNC DBMSGHANDLE_PROC
81 #define DBSETOPT(a, b, c) dbsetopt(a, b, c)
82 #endif
83 
84 #define coltype(j) dbcoltype(mssql_ptr->link,j)
85 #define intcol(i) ((int) *(DBINT *) dbdata(mssql_ptr->link,i))
86 #define smallintcol(i) ((int) *(DBSMALLINT *) dbdata(mssql_ptr->link,i))
87 #define tinyintcol(i) ((int) *(DBTINYINT *) dbdata(mssql_ptr->link,i))
88 #define anyintcol(j) (coltype(j)==SQLINT4?intcol(j):(coltype(j)==SQLINT2?smallintcol(j):tinyintcol(j)))
89 #define charcol(i) ((DBCHAR *) dbdata(mssql_ptr->link,i))
90 #define floatcol4(i) (*(DBFLT4 *) dbdata(mssql_ptr->link,i))
91 #define floatcol8(i) (*(DBFLT8 *) dbdata(mssql_ptr->link,i))
92 
93 #ifdef ZTS
94 #include "TSRM.h"
95 #endif
96 
97 extern zend_module_entry mssql_module_entry;
98 #define mssql_module_ptr &mssql_module_entry
99 
100 PHP_MINIT_FUNCTION(mssql);
101 PHP_MSHUTDOWN_FUNCTION(mssql);
102 PHP_RINIT_FUNCTION(mssql);
103 PHP_RSHUTDOWN_FUNCTION(mssql);
104 PHP_MINFO_FUNCTION(mssql);
105 
106 PHP_FUNCTION(mssql_connect);
107 PHP_FUNCTION(mssql_pconnect);
108 PHP_FUNCTION(mssql_close);
109 PHP_FUNCTION(mssql_select_db);
110 PHP_FUNCTION(mssql_query);
111 PHP_FUNCTION(mssql_fetch_batch);
112 PHP_FUNCTION(mssql_rows_affected);
113 PHP_FUNCTION(mssql_free_result);
114 PHP_FUNCTION(mssql_get_last_message);
115 PHP_FUNCTION(mssql_num_rows);
116 PHP_FUNCTION(mssql_num_fields);
117 PHP_FUNCTION(mssql_fetch_field);
118 PHP_FUNCTION(mssql_fetch_row);
119 PHP_FUNCTION(mssql_fetch_array);
120 PHP_FUNCTION(mssql_fetch_assoc);
121 PHP_FUNCTION(mssql_fetch_object);
122 PHP_FUNCTION(mssql_field_length);
123 PHP_FUNCTION(mssql_field_name);
124 PHP_FUNCTION(mssql_field_type);
125 PHP_FUNCTION(mssql_data_seek);
126 PHP_FUNCTION(mssql_field_seek);
127 PHP_FUNCTION(mssql_result);
128 PHP_FUNCTION(mssql_next_result);
129 PHP_FUNCTION(mssql_min_error_severity);
130 PHP_FUNCTION(mssql_min_message_severity);
131 PHP_FUNCTION(mssql_init);
132 PHP_FUNCTION(mssql_bind);
133 PHP_FUNCTION(mssql_execute);
134 PHP_FUNCTION(mssql_free_statement);
135 PHP_FUNCTION(mssql_guid_string);
136 
137 typedef struct mssql_link {
138 	LOGINREC *login;
139 	DBPROCESS *link;
140 	int valid;
141 } mssql_link;
142 
143 typedef struct mssql_statement {
144 	int id;
145 	mssql_link *link;
146 	HashTable *binds;
147 	int executed;
148 } mssql_statement;
149 
150 typedef struct {
151 
152 	zval *zval;
153 	/* TODO: more data for special types (BLOBS, NUMERIC...) */
154 } mssql_bind;
155 
156 ZEND_BEGIN_MODULE_GLOBALS(mssql)
157 	long default_link;
158 	long num_links,num_persistent;
159 	long max_links,max_persistent;
160 	zend_bool allow_persistent;
161 	char *appname;
162 	char *server_message;
163 #ifdef HAVE_FREETDS
164 	char *charset;
165 #endif
166 	long min_error_severity, min_message_severity;
167 	long cfg_min_error_severity, cfg_min_message_severity;
168 	long connect_timeout, timeout;
169 	zend_bool compatibility_mode;
170 	void (*get_column_content)(mssql_link *mssql_ptr,int offset,zval *result,int column_type  TSRMLS_DC);
171 	long textsize, textlimit, batchsize;
172 	zend_bool datetimeconvert;
173 	HashTable *resource_list, *resource_plist;
174 	zend_bool secure_connection;
175 	long max_procs;
176 ZEND_END_MODULE_GLOBALS(mssql)
177 
178 #define MSSQL_ROWS_BLOCK 128
179 
180 typedef struct mssql_field {
181 	char *name,*column_source;
182 	long max_length;
183 	int numeric;
184 	int type;
185 } mssql_field;
186 
187 typedef struct mssql_result {
188 	zval **data;
189 	mssql_field *fields;
190 	mssql_link *mssql_ptr;
191 	mssql_statement * statement;
192 	int batchsize;
193 	int lastresult;
194 	int blocks_initialized;
195 	int cur_row,cur_field;
196 	int num_rows,num_fields,have_fields;
197 } mssql_result;
198 
199 
200 #ifdef ZTS
201 # define MS_SQL_G(v) TSRMG(mssql_globals_id, zend_mssql_globals *, v)
202 #else
203 # define MS_SQL_G(v)	(mssql_globals.v)
204 #endif
205 
206 #else
207 
208 #define mssql_module_ptr NULL
209 
210 #endif /* HAVE_MSSQL */
211 
212 #define phpext_mssql_ptr mssql_module_ptr
213 
214 #endif /* PHP_MSSQL_H */
215