00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _ctlib_h_
00021 #define _ctlib_h_
00022
00023
00024
00025
00026
00027 #if defined(__GNUC__) && __GNUC__ >= 4 && !defined(__MINGW32__)
00028 #pragma GCC visibility push(hidden)
00029 #endif
00030
00031 #ifdef __cplusplus
00032 extern "C"
00033 {
00034 #if 0
00035 }
00036 #endif
00037 #endif
00038
00039 static const char rcsid_ctlib_h[] = "$Id: ctlib.h,v 1.30 2010/10/05 08:36:36 freddy77 Exp $";
00040 static const void *const no_unused_ctlib_h_warn[] = { rcsid_ctlib_h, no_unused_ctlib_h_warn };
00041
00042 #include <tds.h>
00043
00044
00045
00046 struct _cs_config
00047 {
00048 short cs_expose_formats;
00049 };
00050
00051
00052
00053
00054
00055
00056 struct cs_diag_msg_client
00057 {
00058 CS_CLIENTMSG *clientmsg;
00059 struct cs_diag_msg_client *next;
00060 };
00061
00062 struct cs_diag_msg_svr
00063 {
00064 CS_SERVERMSG *servermsg;
00065 struct cs_diag_msg_svr *next;
00066 };
00067
00068
00069
00070 struct cs_diag_msg
00071 {
00072 CS_CLIENTMSG *msg;
00073 struct cs_diag_msg *next;
00074 };
00075
00076 struct _cs_context
00077 {
00078 CS_INT date_convert_fmt;
00079 CS_INT cs_errhandletype;
00080 CS_INT cs_diag_msglimit;
00081
00082
00083
00084
00085 CS_INT cs_diag_msglimit_client;
00086 CS_INT cs_diag_msglimit_server;
00087 CS_INT cs_diag_msglimit_total;
00088 struct cs_diag_msg_client *clientstore;
00089 struct cs_diag_msg_svr *svrstore;
00090
00091
00092
00093 struct cs_diag_msg *msgstore;
00094 CS_CSLIBMSG_FUNC _cslibmsg_cb;
00095 CS_CLIENTMSG_FUNC _clientmsg_cb;
00096 CS_SERVERMSG_FUNC _servermsg_cb;
00097
00098 void *userdata;
00099 int userdata_len;
00100
00101 TDSCONTEXT *tds_ctx;
00102 CS_CONFIG config;
00103 };
00104
00105
00106
00107
00108 typedef struct _ct_colinfo
00109 {
00110 TDS_SMALLINT *indicator;
00111 }
00112 CT_COLINFO;
00113
00114 typedef struct _cs_command_list CS_COMMAND_LIST;
00115 typedef struct _cs_dynamic CS_DYNAMIC_LIST;
00116 typedef struct _cs_dynamic CS_DYNAMIC;
00117
00118 struct _cs_connection
00119 {
00120 CS_CONTEXT *ctx;
00121 TDSLOGIN *tds_login;
00122 TDSSOCKET *tds_socket;
00123 CS_CLIENTMSG_FUNC _clientmsg_cb;
00124 CS_SERVERMSG_FUNC _servermsg_cb;
00125 void *userdata;
00126 int userdata_len;
00127 CS_LOCALE *locale;
00128 CS_COMMAND_LIST *cmds;
00129 CS_DYNAMIC_LIST *dynlist;
00130 char *server_addr;
00131 };
00132
00133
00134
00135
00136
00137
00138 typedef struct _cs_param
00139 {
00140 struct _cs_param *next;
00141 char *name;
00142 int status;
00143 int datatype;
00144 CS_INT maxlen;
00145 CS_INT scale;
00146 CS_INT precision;
00147 CS_INT *datalen;
00148 CS_SMALLINT *ind;
00149 CS_BYTE *value;
00150 int param_by_value;
00151 CS_INT datalen_value;
00152 CS_SMALLINT indicator_value;
00153 } CS_PARAM;
00154
00155
00156
00157
00158
00159
00160 typedef CS_PARAM CSREMOTE_PROC_PARAM;
00161
00162 typedef struct _csremote_proc
00163 {
00164 char *name;
00165 CS_SMALLINT options;
00166 CSREMOTE_PROC_PARAM *param_list;
00167 } CSREMOTE_PROC;
00168
00169
00170
00171
00172
00173
00174 typedef CS_PARAM CS_DYNAMIC_PARAM;
00175
00176 struct _cs_dynamic
00177 {
00178 char *id;
00179 char *stmt;
00180 CS_DYNAMIC_PARAM *param_list;
00181 struct _cs_dynamic *next;
00182 };
00183
00184
00185 #define CS_DYNAMIC_CMD 160
00186 #define CS_CUR_CMD 161
00187
00188
00189
00190 #define _CS_RES_NONE -1
00191 #define _CS_RES_INIT 0
00192 #define _CS_RES_RESULTSET_EMPTY 1
00193 #define _CS_RES_RESULTSET_ROWS 2
00194 #define _CS_RES_STATUS 3
00195 #define _CS_RES_CMD_DONE 4
00196 #define _CS_RES_CMD_SUCCEED 5
00197 #define _CS_RES_END_RESULTS 6
00198 #define _CS_RES_DESCRIBE_RESULT 7
00199
00200
00201
00202 #define _CS_COMMAND_IDLE 0
00203 #define _CS_COMMAND_BUILDING 1
00204 #define _CS_COMMAND_READY 2
00205 #define _CS_COMMAND_SENT 3
00206
00207
00208 #define _CS_CANCEL_NOCANCEL 0
00209 #define _CS_CANCEL_PENDING 1
00210
00211 struct _cs_command
00212 {
00213 CS_INT command_state;
00214 CS_INT results_state;
00215 CS_INT cancel_state;
00216 CS_INT cursor_state;
00217 CS_CONNECTION *con;
00218 CS_INT command_type;
00219 CS_CHAR *query;
00220 short dynamic_cmd;
00221 CS_DYNAMIC *dyn;
00222 int row_prefetched;
00223 int curr_result_type;
00224 int bind_count;
00225 int get_data_item;
00226 int get_data_bytes_returned;
00227 CS_IODESC *iodesc;
00228 CS_INT send_data_started;
00229 CSREMOTE_PROC *rpc;
00230 CS_PARAM *input_params;
00231 CS_INT client_cursor_id;
00232 TDSCURSOR *cursor;
00233 void *userdata;
00234 int userdata_len;
00235 };
00236
00237 struct _cs_command_list
00238 {
00239 struct _cs_command *cmd;
00240 struct _cs_command_list *next;
00241 };
00242
00243 struct _cs_blkdesc
00244 {
00245 CS_CONNECTION *con;
00246 TDSBCPINFO bcpinfo;
00247 };
00248
00249
00250 #define _CS_ERRHAND_INLINE 1
00251 #define _CS_ERRHAND_CB 2
00252
00253 struct _cs_locale
00254 {
00255 char *language;
00256 char *charset;
00257 char *time;
00258 char *collate;
00259 };
00260
00261
00262
00263 #define _CS_CURS_TYPE_UNACTIONED 0
00264 #define _CS_CURS_TYPE_REQUESTED 1
00265 #define _CS_CURS_TYPE_SENT 2
00266
00267
00268
00269
00270 int _ct_handle_server_message(const TDSCONTEXT * ctxptr, TDSSOCKET * tdsptr, TDSMESSAGE * msgptr);
00271 int _ct_handle_client_message(const TDSCONTEXT * ctxptr, TDSSOCKET * tdsptr, TDSMESSAGE * msgptr);
00272 int _ct_get_server_type(int datatype);
00273 int _ct_bind_data(CS_CONTEXT *ctx, TDSRESULTINFO * resinfo, TDSRESULTINFO *bindinfo, CS_INT offset);
00274 int _ct_get_client_type(TDSCOLUMN *col);
00275 void _ctclient_msg(CS_CONNECTION * con, const char *funcname, int layer, int origin, int severity, int number,
00276 const char *fmt, ...);
00277 CS_INT _ct_diag_clearmsg(CS_CONTEXT * context, CS_INT type);
00278 void _cs_locale_free(CS_LOCALE *locale);
00279 CS_LOCALE *_cs_locale_copy(CS_LOCALE *orig);
00280 int _cs_locale_copy_inplace(CS_LOCALE *new_locale, CS_LOCALE *orig);
00281
00282 #ifdef __cplusplus
00283 #if 0
00284 {
00285 #endif
00286 }
00287 #endif
00288
00289 #if defined(__GNUC__) && __GNUC__ >= 4 && !defined(__MINGW32__)
00290 #pragma GCC visibility pop
00291 #endif
00292
00293 #endif