FreeTDS API
ctlib.h
1 /* FreeTDS - Library of routines accessing Sybase and Microsoft databases
2  * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Brian Bruns
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19 
20 #ifndef _ctlib_h_
21 #define _ctlib_h_
22 
23 #include <freetds/tds.h>
24 #include <freetds/convert.h>
25 #include <freetds/utils/string.h>
26 
27 /*
28  * Internal (not part of the exposed API) prototypes and such.
29  */
30 
31 #include <freetds/pushvis.h>
32 
33 #ifdef __cplusplus
34 extern "C"
35 {
36 #if 0
37 }
38 #endif
39 #endif
40 
41 /*
42  * internal types
43  */
44 struct _cs_config
45 {
46  short cs_expose_formats;
47 };
48 
49 /* Code changed for error handling */
50 /* Code changes starts here - CT_DIAG - 01 */
51 
52 /* This structure is used in CT_DIAG */
53 
55 {
56  CS_CLIENTMSG *clientmsg;
57  struct cs_diag_msg_client *next;
58 };
59 
61 {
62  CS_SERVERMSG *servermsg;
63  struct cs_diag_msg_svr *next;
64 };
65 
66 /* Code changes ends here - CT_DIAG - 01 */
67 
69 {
70  CS_CLIENTMSG *msg;
71  struct cs_diag_msg *next;
72 };
73 
75 {
76  CS_INT date_convert_fmt;
77  CS_INT cs_errhandletype;
78  CS_INT cs_diag_msglimit;
79 
80  /* added for storing the maximum messages limit CT_DIAG */
81  /* code changes starts here - CT_DIAG - 02 */
82 
83  CS_INT cs_diag_msglimit_client;
84  CS_INT cs_diag_msglimit_server;
85  CS_INT cs_diag_msglimit_total;
86  struct cs_diag_msg_client *clientstore;
87  struct cs_diag_msg_svr *svrstore;
88 
89  /* code changes ends here - CT_DIAG - 02 */
90 
91  struct cs_diag_msg *msgstore;
92  CS_CSLIBMSG_FUNC _cslibmsg_cb;
93  CS_CLIENTMSG_FUNC _clientmsg_cb;
94  CS_SERVERMSG_FUNC _servermsg_cb;
95  /* code changes start here - CS_CONFIG - 01*/
96  void *userdata;
97  int userdata_len;
98  /* code changes end here - CS_CONFIG - 01*/
99  TDSCONTEXT *tds_ctx;
100  CS_CONFIG config;
103 };
104 
105 /*
106  * internal typedefs
107  */
108 typedef struct _ct_colinfo
109 {
110  TDS_SMALLINT *indicator;
111 }
112 CT_COLINFO;
113 
114 typedef struct _cs_dynamic CS_DYNAMIC;
115 
117 {
118  CS_CONTEXT *ctx;
121  CS_CLIENTMSG_FUNC _clientmsg_cb;
122  CS_SERVERMSG_FUNC _servermsg_cb;
123  void *userdata;
124  int userdata_len;
125  CS_LOCALE *locale;
126  CS_COMMAND *cmds;
127  CS_DYNAMIC *dynlist;
128  char *server_addr;
129  bool network_auth;
130 };
131 
132 /*
133  * Formerly CSREMOTE_PROC_PARAM, this structure can be used in other
134  * places, too.
135  */
136 
137 typedef struct _cs_param
138 {
139  struct _cs_param *next;
140  char *name;
141  int status;
142  int datatype;
143  CS_INT maxlen;
144  CS_INT scale;
145  CS_INT precision;
146  CS_INT *datalen;
147  CS_SMALLINT *ind;
148  CS_BYTE *value;
149  int param_by_value;
150  CS_INT datalen_value;
151  CS_SMALLINT indicator_value;
152 } CS_PARAM;
153 
154 /*
155  * Code added for RPC functionality - SUHA
156  * RPC Code changes starts here
157  */
158 
160 
161 typedef struct _csremote_proc
162 {
163  char *name;
164  CS_SMALLINT options;
165  CSREMOTE_PROC_PARAM *param_list;
166 } CSREMOTE_PROC;
167 
168 /*
169  * Structure CS_COMMAND changed for RPC functionality -SUHA
170  * Added CSREMOTE_PROC *rpc to CS_COMMAND structure
171  */
172 
173 typedef CS_PARAM CS_DYNAMIC_PARAM;
174 
176 {
177  struct _cs_dynamic *next;
178  char *id;
179  char *stmt;
180  CS_DYNAMIC_PARAM *param_list;
181  TDSDYNAMIC *tdsdyn;
182 };
183 
184 /* specific FreeTDS commands */
185 #define CS_DYNAMIC_CMD 160
186 #define CS_CUR_CMD 161
187 
188 /* values for cs_command.results_state */
189 
190 #define _CS_RES_NONE -1
191 #define _CS_RES_INIT 0
192 #define _CS_RES_RESULTSET_EMPTY 1
193 #define _CS_RES_RESULTSET_ROWS 2
194 #define _CS_RES_STATUS 3
195 #define _CS_RES_CMD_DONE 4
196 #define _CS_RES_CMD_SUCCEED 5
197 #define _CS_RES_END_RESULTS 6
198 #define _CS_RES_DESCRIBE_RESULT 7
199 
200 /* values for cs_command.command_state */
201 
202 #define _CS_COMMAND_IDLE 0
203 #define _CS_COMMAND_BUILDING 1
204 #define _CS_COMMAND_READY 2
205 #define _CS_COMMAND_SENT 3
206 
207 /* values for cs_command.cancel_state */
208 #define _CS_CANCEL_NOCANCEL 0
209 #define _CS_CANCEL_PENDING 1
210 
212 {
213  struct _cs_command *next;
214  CS_INT command_state;
215  CS_INT results_state;
216  CS_INT cancel_state;
217  CS_INT cursor_state;
218  CS_CONNECTION *con;
219  CS_INT command_type;
220  CS_CHAR *query;
221  short dynamic_cmd;
222  CS_DYNAMIC *dyn;
223  int row_prefetched;
224  int curr_result_type;
225  int bind_count;
226  int get_data_item;
227  int get_data_bytes_returned;
228  CS_IODESC *iodesc;
229  CS_INT send_data_started;
230  CSREMOTE_PROC *rpc;
231  CS_PARAM *input_params;
232  CS_INT client_cursor_id;
233  TDSCURSOR *cursor;
234  void *userdata;
235  int userdata_len;
236 };
237 
239 {
240  TDSBCPINFO bcpinfo;
241 };
242 
243 
244 #define _CS_ERRHAND_INLINE 1
245 #define _CS_ERRHAND_CB 2
246 
248 {
249  char *language;
250  char *charset;
251  char *time;
252  char *collate;
253 };
254 
255 /* internal defines for cursor processing */
256 
257 #define _CS_CURS_TYPE_UNACTIONED 0
258 #define _CS_CURS_TYPE_REQUESTED 1
259 #define _CS_CURS_TYPE_SENT 2
260 
261 /*
262  * internal prototypes
263  */
264 TDSRET _ct_handle_server_message(const TDSCONTEXT * ctxptr, TDSSOCKET * tdsptr, TDSMESSAGE * msgptr);
265 int _ct_handle_client_message(const TDSCONTEXT * ctxptr, TDSSOCKET * tdsptr, TDSMESSAGE * msgptr);
266 TDS_SERVER_TYPE _ct_get_server_type(TDSSOCKET *tds, int datatype);
267 int _ct_bind_data(CS_CONTEXT *ctx, TDSRESULTINFO * resinfo, TDSRESULTINFO *bindinfo, CS_INT offset);
268 int _ct_get_client_type(const TDSCOLUMN *col, bool describe);
269 void _ctclient_msg(CS_CONNECTION * con, const char *funcname, int layer, int origin, int severity, int number,
270  const char *fmt, ...);
271 CS_INT _ct_diag_clearmsg(CS_CONTEXT * context, CS_INT type);
272 void _cs_locale_free(CS_LOCALE *locale);
273 CS_LOCALE *_cs_locale_copy(CS_LOCALE *orig);
274 int _cs_locale_copy_inplace(CS_LOCALE *new_locale, CS_LOCALE *orig);
275 
276 int _cs_convert_not_client(CS_CONTEXT *ctx, const TDSCOLUMN *curcol, CONV_RESULT *convert_buffer, unsigned char **p_src);
277 
278 #ifdef __cplusplus
279 #if 0
280 {
281 #endif
282 }
283 #endif
284 
285 #include <freetds/popvis.h>
286 
287 #endif
tds_dynamic
Holds information for a dynamic (also called prepared) query.
Definition: tds.h:977
_cs_blkdesc
Definition: ctlib.h:239
_cs_command
Definition: ctlib.h:212
tds.h
Main include file for libtds.
_ct_colinfo
Definition: ctlib.h:109
tds_cursor
Holds informations about a cursor.
Definition: tds.h:937
_cs_dynamic
Definition: ctlib.h:176
_cs_context::login_timeout
int login_timeout
not used unless positive
Definition: ctlib.h:101
_cs_config
Definition: ctlib.h:45
conv_result
Definition: convert.h:34
_cs_param
Definition: ctlib.h:138
_cs_context
Definition: ctlib.h:75
_cs_context::query_timeout
int query_timeout
not used unless positive
Definition: ctlib.h:102
cs_diag_msg_svr
Definition: ctlib.h:61
_cs_servermsg
Definition: cstypes.h:191
tds_message
Definition: tds.h:876
_cs_connection
Definition: ctlib.h:117
tds_column
Metadata about columns in regular and compute rows.
Definition: tds.h:689
tds_result_info
Hold information for any results.
Definition: tds.h:769
cs_diag_msg_client
Definition: ctlib.h:55
_csremote_proc
Definition: ctlib.h:162
tds_bcpinfo
Definition: tds.h:1661
tds_socket
Information for a server connection.
Definition: tds.h:1163
cs_diag_msg
Definition: ctlib.h:69
_cs_locale
Definition: ctlib.h:248
_cs_iodesc
Definition: cstypes.h:97
tds_context
Definition: tds.h:1029
tds_login
Definition: tds.h:517
_cs_clientmsg
Definition: cstypes.h:177