00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _sql_h_
00021 #define _sql_h_
00022
00023 #include <tds.h>
00024
00025 #ifdef UNIXODBC
00026 #include <sql.h>
00027 #include <sqlext.h>
00028 #include <odbcinst.h>
00029 #elif defined(TDS_NO_DM)
00030 #include <sql.h>
00031 #include <sqlext.h>
00032 #else
00033 #include <isql.h>
00034 #include <isqlext.h>
00035 #ifdef HAVE_IODBCINST_H
00036 #include <iodbcinst.h>
00037 #endif
00038 #endif
00039
00040 #ifndef SQLULEN
00041 #define SQLULEN SQLUINTEGER
00042 #endif
00043 #ifndef SQLLEN
00044 #define SQLLEN SQLINTEGER
00045 #endif
00046
00047 #ifdef __cplusplus
00048 extern "C"
00049 {
00050 #if 0
00051 }
00052 #endif
00053 #endif
00054
00055 static char rcsid_sql_h[] = "$Id: tdsodbc.h,v 1.63.2.1 2004/03/06 13:51:28 freddy77 Exp $";
00056 static void *no_unused_sql_h_warn[] = { rcsid_sql_h, no_unused_sql_h_warn };
00057
00058 struct _sql_error
00059 {
00060 const char *msg;
00061 char state2[6];
00062 char state3[6];
00063 TDS_UINT native;
00064 char *server;
00065 int linenum;
00066 int msgstate;
00067 };
00068
00069 struct _sql_errors
00070 {
00071 SQLRETURN lastrc;
00072 int num_errors;
00073 struct _sql_error *errs;
00074 };
00075
00076 #if ENABLE_EXTRA_CHECKS
00077 void odbc_check_struct_extra(void *p);
00078
00079 #define ODBC_RETURN(handle, rc) \
00080 do { odbc_check_struct_extra(handle); return (handle->errs.lastrc = (rc)); } while(0)
00081 #else
00082 #define ODBC_RETURN(handle, rc) \
00083 do { return (handle->errs.lastrc = (rc)); } while(0)
00084 #endif
00085
00087 void odbc_errs_reset(struct _sql_errors *errs);
00088
00090 void odbc_errs_add(struct _sql_errors *errs, const char *sqlstate, const char *msg, const char *server);
00091
00093 void odbc_errs_add_rdbms(struct _sql_errors *errs, TDS_UINT native, const char *sqlstate, const char *msg, int linenum,
00094 int msgstate, const char *server);
00095
00096 struct _dheader
00097 {
00098 SQLSMALLINT sql_desc_alloc_type;
00099 SQLINTEGER sql_desc_bind_type;
00100 SQLUINTEGER sql_desc_array_size;
00101 SQLSMALLINT sql_desc_count;
00102 SQLUSMALLINT *sql_desc_array_status_ptr;
00103 SQLUINTEGER *sql_desc_rows_processed_ptr;
00104 SQLINTEGER *sql_desc_bind_offset_ptr;
00105 };
00106
00107 struct _drecord
00108 {
00109 SQLUINTEGER sql_desc_auto_unique_value;
00110 SQLCHAR *sql_desc_base_column_name;
00111 SQLCHAR *sql_desc_base_table_name;
00112 SQLINTEGER sql_desc_case_sensitive;
00113 SQLCHAR *sql_desc_catalog_name;
00114 SQLSMALLINT sql_desc_concise_type;
00115 SQLPOINTER sql_desc_data_ptr;
00116 SQLSMALLINT sql_desc_datetime_interval_code;
00117 SQLINTEGER sql_desc_datetime_interval_precision;
00118 SQLINTEGER sql_desc_display_size;
00119 SQLSMALLINT sql_desc_fixed_prec_scale;
00120 SQLINTEGER *sql_desc_indicator_ptr;
00121 SQLCHAR *sql_desc_label;
00122 SQLUINTEGER sql_desc_length;
00123 SQLCHAR *sql_desc_literal_prefix;
00124 SQLCHAR *sql_desc_literal_suffix;
00125 SQLCHAR *sql_desc_local_type_name;
00126 SQLCHAR *sql_desc_name;
00127 SQLSMALLINT sql_desc_nullable;
00128 SQLINTEGER sql_desc_num_prec_radix;
00129 SQLINTEGER sql_desc_octet_length;
00130 SQLINTEGER *sql_desc_octet_length_ptr;
00131 SQLSMALLINT sql_desc_parameter_type;
00132 SQLSMALLINT sql_desc_precision;
00133 SQLSMALLINT sql_desc_rowver;
00134 SQLSMALLINT sql_desc_scale;
00135 SQLCHAR *sql_desc_schema_name;
00136 SQLSMALLINT sql_desc_searchable;
00137 SQLCHAR *sql_desc_table_name;
00138 SQLSMALLINT sql_desc_type;
00139 SQLCHAR *sql_desc_type_name;
00140 SQLSMALLINT sql_desc_unnamed;
00141 SQLSMALLINT sql_desc_unsigned;
00142 SQLSMALLINT sql_desc_updatable;
00143 };
00144
00145 struct _hdesc
00146 {
00147 SQLSMALLINT htype;
00148 int type;
00149 SQLHDESC parent;
00150 struct _dheader header;
00151 struct _drecord *records;
00152 struct _sql_errors errs;
00153 };
00154
00155 typedef struct _hdesc TDS_DESC;
00156
00157 #define DESC_IRD 1
00158 #define DESC_IPD 2
00159 #define DESC_ARD 3
00160 #define DESC_APD 4
00161
00162 struct _heattr
00163 {
00164 SQLUINTEGER connection_pooling;
00165 SQLUINTEGER cp_match;
00166 SQLINTEGER odbc_version;
00167 SQLINTEGER output_nts;
00168 };
00169
00170 struct _hchk
00171 {
00172 SQLSMALLINT htype;
00173 };
00174
00175 struct _henv
00176 {
00177 SQLSMALLINT htype;
00178 TDSCONTEXT *tds_ctx;
00179 struct _sql_errors errs;
00180 struct _heattr attr;
00181 };
00182
00183 struct _hcattr
00184 {
00185 SQLUINTEGER access_mode;
00186 SQLUINTEGER async_enable;
00187 SQLUINTEGER auto_ipd;
00188 SQLUINTEGER autocommit;
00189 SQLUINTEGER connection_dead;
00190 SQLUINTEGER connection_timeout;
00191 DSTR current_catalog;
00192 SQLUINTEGER login_timeout;
00193 SQLUINTEGER metadata_id;
00194 SQLUINTEGER odbc_cursors;
00195 SQLUINTEGER packet_size;
00196 SQLHWND quite_mode;
00197 DSTR translate_lib;
00198 SQLUINTEGER translate_option;
00199 SQLUINTEGER txn_isolation;
00200 #ifdef TDS_NO_DM
00201 SQLUINTEGER trace;
00202 DSTR tracefile;
00203 #endif
00204 };
00205
00206 #define TDS_MAX_APP_DESC 100
00207
00208 struct _hstmt;
00209 struct _hdbc
00210 {
00211 SQLSMALLINT htype;
00212 struct _henv *env;
00213 TDSSOCKET *tds_socket;
00214 DSTR dsn;
00215 DSTR server;
00217 struct _hstmt *current_statement;
00218 struct _sql_errors errs;
00219 struct _hcattr attr;
00220 TDS_DESC *uad[TDS_MAX_APP_DESC];
00221 };
00222
00223 struct _hsattr
00224 {
00225
00226
00227
00228 SQLUINTEGER async_enable;
00229 SQLUINTEGER concurrency;
00230 SQLUINTEGER cursor_scrollable;
00231 SQLUINTEGER cursor_sensitivity;
00232 SQLUINTEGER cursor_type;
00233 SQLUINTEGER enable_auto_ipd;
00234 SQLPOINTER fetch_bookmark_ptr;
00235 SQLUINTEGER keyset_size;
00236 SQLUINTEGER max_length;
00237 SQLUINTEGER max_rows;
00238 SQLUINTEGER metadata_id;
00239 SQLUINTEGER noscan;
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252 SQLUINTEGER query_timeout;
00253 SQLUINTEGER retrieve_data;
00254
00255
00256
00257
00258
00259
00260 SQLUINTEGER row_number;
00261
00262
00263
00264
00265
00266
00267 SQLUINTEGER simulate_cursor;
00268 SQLUINTEGER use_bookmarks;
00269
00270
00271
00272 };
00273
00274 struct _hstmt
00275 {
00276 SQLSMALLINT htype;
00277 struct _hdbc *dbc;
00278 char *query;
00279
00280 char *prepared_query;
00282
00284
00285
00286
00287 int prepared_query_is_func;
00288 int prepared_query_is_rpc;
00289
00290
00292 TDSPARAMINFO *params;
00294 int param_num;
00295
00297 unsigned int param_count;
00298 int row;
00300 int row_count;
00301
00302 TDSDYNAMIC *dyn;
00303 struct _sql_errors errs;
00304 TDS_DESC *ard, *ird, *apd, *ipd;
00305 TDS_DESC *orig_ard, *orig_apd;
00306 SQLUINTEGER sql_rowset_size;
00307 struct _hsattr attr;
00308 DSTR cursor_name;
00309 #ifdef TDS_NO_DM
00310 SQLINTEGER cursor_state;
00311 #define TDS_CURSOR_CLOSED 0
00312 #define TDS_CURSOR_OPEN 1
00313 #endif
00314 };
00315
00316 typedef struct _henv TDS_ENV;
00317 typedef struct _hdbc TDS_DBC;
00318 typedef struct _hstmt TDS_STMT;
00319 typedef struct _hchk TDS_CHK;
00320
00321 #define IS_HENV(x) (((TDS_CHK *)x)->htype == SQL_HANDLE_ENV)
00322 #define IS_HDBC(x) (((TDS_CHK *)x)->htype == SQL_HANDLE_DBC)
00323 #define IS_HSTMT(x) (((TDS_CHK *)x)->htype == SQL_HANDLE_STMT)
00324 #define IS_HDESC(x) (((TDS_CHK *)x)->htype == SQL_HANDLE_DESC)
00325
00326 TDS_DESC *desc_alloc(SQLHDESC parent, int desc_type, int alloc_type);
00327 SQLRETURN desc_free(TDS_DESC * desc);
00328 SQLRETURN desc_alloc_records(TDS_DESC * desc, unsigned count);
00329 SQLRETURN desc_copy(TDS_DESC * dest, TDS_DESC * src);
00330 SQLRETURN desc_free_records(TDS_DESC * desc);
00331
00332
00333 #ifdef __MINGW32__
00334 #if SQL_INTERVAL_YEAR == (100 + SQL_CODE_SECOND)
00335
00336 #undef SQL_INTERVAL_YEAR
00337 #undef SQL_INTERVAL_MONTH
00338 #undef SQL_INTERVAL_DAY
00339 #undef SQL_INTERVAL_HOUR
00340 #undef SQL_INTERVAL_MINUTE
00341 #undef SQL_INTERVAL_SECOND
00342 #undef SQL_INTERVAL_YEAR_TO_MONTH
00343 #undef SQL_INTERVAL_DAY_TO_HOUR
00344 #undef SQL_INTERVAL_DAY_TO_MINUTE
00345 #undef SQL_INTERVAL_DAY_TO_SECOND
00346 #undef SQL_INTERVAL_HOUR_TO_MINUTE
00347 #undef SQL_INTERVAL_HOUR_TO_SECOND
00348 #undef SQL_INTERVAL_MINUTE_TO_SECOND
00349
00350 #define SQL_INTERVAL_YEAR (100 + SQL_CODE_YEAR)
00351 #define SQL_INTERVAL_MONTH (100 + SQL_CODE_MONTH)
00352 #define SQL_INTERVAL_DAY (100 + SQL_CODE_DAY)
00353 #define SQL_INTERVAL_HOUR (100 + SQL_CODE_HOUR)
00354 #define SQL_INTERVAL_MINUTE (100 + SQL_CODE_MINUTE)
00355 #define SQL_INTERVAL_SECOND (100 + SQL_CODE_SECOND)
00356 #define SQL_INTERVAL_YEAR_TO_MONTH (100 + SQL_CODE_YEAR_TO_MONTH)
00357 #define SQL_INTERVAL_DAY_TO_HOUR (100 + SQL_CODE_DAY_TO_HOUR)
00358 #define SQL_INTERVAL_DAY_TO_MINUTE (100 + SQL_CODE_DAY_TO_MINUTE)
00359 #define SQL_INTERVAL_DAY_TO_SECOND (100 + SQL_CODE_DAY_TO_SECOND)
00360 #define SQL_INTERVAL_HOUR_TO_MINUTE (100 + SQL_CODE_HOUR_TO_MINUTE)
00361 #define SQL_INTERVAL_HOUR_TO_SECOND (100 + SQL_CODE_HOUR_TO_SECOND)
00362 #define SQL_INTERVAL_MINUTE_TO_SECOND (100 + SQL_CODE_MINUTE_TO_SECOND)
00363
00364 #endif
00365 #endif
00366
00367 #ifdef __cplusplus
00368 #if 0
00369 {
00370 #endif
00371 }
00372 #endif
00373
00374 #endif