00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _dblib_h_
00021 #define _dblib_h_
00022
00023 #if defined(__GNUC__) && __GNUC__ >= 4 && !defined(__MINGW32__)
00024 #pragma GCC visibility push(hidden)
00025 #endif
00026
00027 #ifdef __cplusplus
00028 extern "C"
00029 {
00030 #if 0
00031 }
00032 #endif
00033 #endif
00034
00035
00036
00037 typedef enum tag_DB_RESULT_STATE {
00038 _DB_RES_INIT
00039 , _DB_RES_RESULTSET_EMPTY
00040 , _DB_RES_RESULTSET_ROWS
00041 , _DB_RES_NEXT_RESULT
00042 , _DB_RES_NO_MORE_RESULTS
00043 , _DB_RES_SUCCEED
00044 } DB_RESULT_STATE;
00045
00046 struct tds_dblib_loginrec
00047 {
00048 TDSLOGIN *tds_login;
00049 };
00050
00051 struct dblib_buffer_row;
00052
00053 typedef struct tag_DBPROC_ROWBUF
00054 {
00055 int received;
00056 int head;
00057 int tail;
00058 int current;
00059 int capacity;
00060 struct dblib_buffer_row *rows;
00061 } DBPROC_ROWBUF;
00062
00063 typedef struct
00064 {
00065 int host_column;
00066 int datatype;
00067 int prefix_len;
00068 DBINT column_len;
00069 BYTE *terminator;
00070 int term_len;
00071 int tab_colnum;
00072 int column_error;
00073 BCPCOLDATA *bcp_column_data;
00074 } BCP_HOSTCOLINFO;
00075
00076 typedef struct
00077 {
00078 TDS_CHAR *hostfile;
00079 TDS_CHAR *errorfile;
00080 FILE *bcp_errfileptr;
00081 TDS_INT host_colcount;
00082 BCP_HOSTCOLINFO **host_columns;
00083 TDS_INT firstrow;
00084 TDS_INT lastrow;
00085 TDS_INT maxerrs;
00086 TDS_INT batch;
00087 } BCP_HOSTFILEINFO;
00088
00089
00090
00091 typedef struct _DBREMOTE_PROC_PARAM
00092 {
00093 struct _DBREMOTE_PROC_PARAM *next;
00094
00095 char *name;
00096 BYTE status;
00097 int type;
00098 DBINT maxlen;
00099 DBINT datalen;
00100 BYTE *value;
00101 } DBREMOTE_PROC_PARAM;
00102
00103 typedef struct _DBREMOTE_PROC
00104 {
00105 struct _DBREMOTE_PROC *next;
00106
00107 char *name;
00108 DBSMALLINT options;
00109 DBREMOTE_PROC_PARAM *param_list;
00110 } DBREMOTE_PROC;
00111
00112 #define MAXOPTTEXT 32
00113
00114 struct dboption
00115 {
00116 char text[MAXOPTTEXT];
00117 DBSTRING *param;
00118 DBBOOL factive;
00119 };
00120 typedef struct dboption DBOPTION;
00121
00122 typedef struct _null_representation
00123 {
00124 const BYTE *bindval;
00125 size_t len;
00126 } NULLREP;
00127
00128 struct tds_dblib_dbprocess
00129 {
00130 TDSSOCKET *tds_socket;
00131
00132 TDS_INT row_type;
00133 DBPROC_ROWBUF row_buf;
00134
00135 int noautofree;
00136 int more_results;
00137 DB_RESULT_STATE dbresults_state;
00138 int dbresults_retcode;
00139 BYTE *user_data;
00140 unsigned char *dbbuf;
00141 int dbbufsz;
00142 int command_state;
00143 TDS_INT text_size;
00144 TDS_INT text_sent;
00145 DBTYPEINFO typeinfo;
00146 unsigned char avail_flag;
00147 DBOPTION *dbopts;
00148 DBSTRING *dboptcmd;
00149 BCP_HOSTFILEINFO *hostfileinfo;
00150 TDSBCPINFO *bcpinfo;
00151 DBREMOTE_PROC *rpc;
00152 DBUSMALLINT envchange_rcv;
00153 char dbcurdb[DBMAXNAME + 1];
00154 char servcharset[DBMAXNAME + 1];
00155 FILE *ftos;
00156 DB_DBCHKINTR_FUNC chkintr;
00157 DB_DBHNDLINTR_FUNC hndlintr;
00158
00160 int msdblib;
00161
00162 int ntimeouts;
00163
00165 NULLREP nullreps[MAXBINDTYPES];
00166 };
00167
00168
00169
00170
00171 int dbperror (DBPROCESS *dbproc, DBINT msgno, long errnum, ...);
00172 int _dblib_handle_info_message(const TDSCONTEXT * ctxptr, TDSSOCKET * tdsptr, TDSMESSAGE* msgptr);
00173 int _dblib_handle_err_message(const TDSCONTEXT * ctxptr, TDSSOCKET * tdsptr, TDSMESSAGE* msgptr);
00174 int _dblib_check_and_handle_interrupt(void * vdbproc);
00175
00176 void _dblib_setTDS_version(TDSLOGIN * tds_login, DBINT version);
00177
00178 DBINT _convert_char(int srctype, BYTE * src, int destype, BYTE * dest, DBINT destlen);
00179 DBINT _convert_intn(int srctype, BYTE * src, int destype, BYTE * dest, DBINT destlen);
00180
00181 RETCODE _bcp_clear_storage(DBPROCESS * dbproc);
00182 RETCODE _bcp_get_prog_data(DBPROCESS * dbproc);
00183
00184 extern MHANDLEFUNC _dblib_msg_handler;
00185 extern EHANDLEFUNC _dblib_err_handler;
00186
00187 #define CHECK_PARAMETER(x, msg, ret) if (!(x)) { dbperror(dbproc, (msg), 0); return ret; }
00188 #define CHECK_DBPROC() CHECK_PARAMETER(dbproc, SYBENULL, FAIL)
00189 #define CHECK_NULP(x, func, param_num, ret) if (!(x)) { dbperror(dbproc, SYBENULP, 0, func, (int) param_num); return ret; }
00190 #define CHECK_PARAMETER_NOPROC(x, msg) if (!(x)) { dbperror(NULL, (msg), 0); return FAIL; }
00191 #define DBPERROR_RETURN(x, msg) if (x) { dbperror(dbproc, (msg), 0); return FAIL; }
00192 #define DBPERROR_RETURN3(x, msg, a, b, c) if (x) { dbperror(dbproc, (msg), 0, a, b, c); return FAIL; }
00193
00194
00195 #ifdef __cplusplus
00196 #if 0
00197 {
00198 #endif
00199 }
00200 #endif
00201
00202 #if defined(__GNUC__) && __GNUC__ >= 4 && !defined(__MINGW32__)
00203 #pragma GCC visibility pop
00204 #endif
00205
00206 #endif