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