00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 #ifndef _sql_h_
00022 #define _sql_h_
00023 
00024 #include "tds.h"
00025 
00026 #if defined(UNIXODBC) || defined(TDS_NO_DM)
00027 #include <sql.h>
00028 #include <sqlext.h>
00029 #ifdef UNIXODBC
00030 #include <odbcinst.h>
00031 #endif
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 HAVE_SQLLEN
00041 #ifndef SQLULEN
00042 #define SQLULEN SQLUINTEGER
00043 #endif
00044 #ifndef SQLLEN
00045 #define SQLLEN SQLINTEGER
00046 #endif
00047 #endif
00048 
00049 #ifndef HAVE_SQLSETPOSIROW
00050 #define SQLSETPOSIROW SQLUSMALLINT
00051 #endif
00052 
00053 #ifndef HAVE_SQLROWOFFSET
00054 #define SQLROWOFFSET SQLLEN
00055 #endif
00056 
00057 #ifndef HAVE_SQLROWSETSIZE
00058 #define SQLROWSETSIZE SQLULEN
00059 #endif
00060 
00061 #ifdef __cplusplus
00062 extern "C"
00063 {
00064 #if 0
00065 }
00066 #endif
00067 #endif
00068 
00069 
00070 
00071 #if defined(__GNUC__) && __GNUC__ >= 4 && !defined(__MINGW32__)
00072 #pragma GCC visibility push(hidden)
00073 #define ODBC_API SQL_API __attribute__((externally_visible))
00074 #else
00075 #define ODBC_API SQL_API
00076 #endif
00077 
00078 #if (defined(_WIN32) || defined(__CYGWIN__)) && defined(__GNUC__)
00079 #  define ODBC_PUBLIC __attribute__((dllexport))
00080 #else
00081 #  define ODBC_PUBLIC
00082 #endif
00083 
00084 #define ODBC_MAX(a,b) ( (a) > (b) ? (a) : (b) )
00085 #define ODBC_MIN(a,b) ( (a) < (b) ? (a) : (b) )
00086 
00087 struct _sql_error
00088 {
00089         const char *msg;
00090         char state2[6];
00091         char state3[6];
00092         TDS_UINT native;
00093         char *server;
00094         int linenum;
00095         int msgstate;
00096 };
00097 
00098 struct _sql_errors
00099 {
00100         struct _sql_error *errs;
00101         int num_errors;
00102         SQLRETURN lastrc;
00103         char ranked;
00104 };
00105 
00106 typedef struct _sql_errors TDS_ERRS;
00107 
00108 #if ENABLE_EXTRA_CHECKS
00109 void odbc_check_struct_extra(void *p);
00110 
00111 #define ODBC_RETURN(handle, rc) \
00112         do { odbc_check_struct_extra(handle); return (handle->errs.lastrc = (rc)); } while(0)
00113 #define ODBC_RETURN_(handle) \
00114         do { odbc_check_struct_extra(handle); return handle->errs.lastrc; } while(0)
00115 #else
00116 #define ODBC_RETURN(handle, rc) \
00117         do { return (handle->errs.lastrc = (rc)); } while(0)
00118 #define ODBC_RETURN_(handle) \
00119         do { return handle->errs.lastrc; } while(0)
00120 #endif
00121 
00123 void odbc_errs_reset(struct _sql_errors *errs);
00124 
00126 void odbc_errs_add(struct _sql_errors *errs, const char *sqlstate, const char *msg);
00127 
00129 void odbc_errs_add_rdbms(struct _sql_errors *errs, TDS_UINT native, const char *sqlstate, const char *msg, int linenum,
00130                          int msgstate, const char *server);
00131 
00132 struct _dheader
00133 {
00134         SQLSMALLINT sql_desc_alloc_type;
00135         SQLINTEGER sql_desc_bind_type;
00136         SQLULEN sql_desc_array_size;
00137         
00138         SQLSMALLINT sql_desc_count;
00139         SQLUSMALLINT *sql_desc_array_status_ptr;
00140         SQLULEN *sql_desc_rows_processed_ptr;
00141         SQLLEN *sql_desc_bind_offset_ptr;
00142 };
00143 
00144 struct _drecord
00145 {
00146         SQLUINTEGER sql_desc_auto_unique_value;
00147         DSTR sql_desc_base_column_name;
00148         DSTR sql_desc_base_table_name;
00149         SQLINTEGER sql_desc_case_sensitive;
00150         DSTR sql_desc_catalog_name;
00151         SQLSMALLINT sql_desc_concise_type;
00152         SQLPOINTER sql_desc_data_ptr;
00153         SQLSMALLINT sql_desc_datetime_interval_code;
00154         SQLINTEGER sql_desc_datetime_interval_precision;
00155         SQLLEN sql_desc_display_size;
00156         SQLSMALLINT sql_desc_fixed_prec_scale;
00157         SQLLEN *sql_desc_indicator_ptr;
00158         DSTR sql_desc_label;
00159         SQLULEN sql_desc_length;
00160         
00161         const char *sql_desc_literal_prefix;
00162         
00163         const char *sql_desc_literal_suffix;
00164         DSTR sql_desc_local_type_name;
00165         DSTR sql_desc_name;
00166         SQLSMALLINT sql_desc_nullable;
00167         SQLINTEGER sql_desc_num_prec_radix;
00168         SQLLEN sql_desc_octet_length;
00169         SQLLEN *sql_desc_octet_length_ptr;
00170         SQLSMALLINT sql_desc_parameter_type;
00171         SQLSMALLINT sql_desc_precision;
00172         SQLSMALLINT sql_desc_rowver;
00173         SQLSMALLINT sql_desc_scale;
00174         DSTR sql_desc_schema_name;
00175         SQLSMALLINT sql_desc_searchable;
00176         DSTR sql_desc_table_name;
00177         SQLSMALLINT sql_desc_type;
00178         
00179         const char *sql_desc_type_name;
00180         SQLSMALLINT sql_desc_unnamed;
00181         SQLSMALLINT sql_desc_unsigned;
00182         SQLSMALLINT sql_desc_updatable;
00183 };
00184 
00185 struct _hdesc
00186 {
00187         SQLSMALLINT htype;      
00188         struct _sql_errors errs;        
00189         int type;
00190         SQLHANDLE parent;
00191         struct _dheader header;
00192         struct _drecord *records;
00193 };
00194 
00195 typedef struct _hdesc TDS_DESC;
00196 
00197 #define DESC_IRD        1
00198 #define DESC_IPD        2
00199 #define DESC_ARD        3
00200 #define DESC_APD        4
00201 
00202 struct _heattr
00203 {
00204         SQLUINTEGER connection_pooling;
00205         SQLUINTEGER cp_match;
00206         SQLINTEGER odbc_version;
00207         SQLINTEGER output_nts;
00208 };
00209 
00210 struct _hchk
00211 {
00212         SQLSMALLINT htype;      
00213         struct _sql_errors errs;        
00214 };
00215 
00216 struct _henv
00217 {
00218         SQLSMALLINT htype;      
00219         struct _sql_errors errs;        
00220         TDSCONTEXT *tds_ctx;
00221         struct _heattr attr;
00222 };
00223 
00224 struct _hcattr
00225 {
00226         SQLUINTEGER access_mode;
00227         SQLUINTEGER async_enable;
00228         SQLUINTEGER auto_ipd;
00229         SQLUINTEGER autocommit;
00230         SQLUINTEGER connection_dead;
00231         SQLUINTEGER connection_timeout;
00232         DSTR current_catalog;
00233         SQLUINTEGER login_timeout;
00234         SQLUINTEGER metadata_id;
00235         SQLUINTEGER odbc_cursors;
00236         SQLUINTEGER packet_size;
00237         SQLHWND quite_mode;
00238         DSTR translate_lib;
00239         SQLUINTEGER translate_option;
00240         SQLUINTEGER txn_isolation;
00241         SQLUINTEGER cursor_type;
00242 #ifdef TDS_NO_DM
00243         SQLUINTEGER trace;
00244         DSTR tracefile;
00245 #endif
00246 };
00247 
00248 #define TDS_MAX_APP_DESC        100
00249 
00250 struct _hstmt;
00251 struct _hdbc
00252 {
00253         SQLSMALLINT htype;      
00254         struct _sql_errors errs;        
00255         struct _henv *env;
00256         TDSSOCKET *tds_socket;
00257         DSTR dsn;
00258         DSTR server;            
00259 #ifdef ENABLE_ODBC_WIDE
00260         DSTR original_charset;
00261         TDSICONV *mb_conv;
00262 #endif
00263 
00269         struct _hstmt *current_statement;
00271         struct _hstmt *stmt_list;
00272         struct _hcattr attr;
00274         TDS_DESC *uad[TDS_MAX_APP_DESC];
00276         unsigned int cursor_support;
00277         TDS_INT default_query_timeout;
00278 };
00279 
00280 struct _hsattr
00281 {
00282         
00283 
00284 
00285         SQLUINTEGER async_enable;
00286         SQLUINTEGER concurrency;
00287         SQLUINTEGER cursor_scrollable;
00288         SQLUINTEGER cursor_sensitivity;
00289         SQLUINTEGER cursor_type;
00290         SQLUINTEGER enable_auto_ipd;
00291         SQLPOINTER fetch_bookmark_ptr;
00292         SQLULEN keyset_size;
00293         SQLULEN max_length;
00294         SQLULEN max_rows;
00295         SQLUINTEGER metadata_id;
00296         SQLUINTEGER noscan;
00297         
00298         
00299         
00300         
00301         
00302         
00303         
00304         
00305         
00306         
00307         
00308         
00309         SQLUINTEGER query_timeout;
00310         SQLUINTEGER retrieve_data;
00311         
00312         
00313         
00314         
00315         
00316         
00317         SQLULEN row_number;
00318         
00319         
00320         
00321         
00322         
00323         
00324         SQLUINTEGER simulate_cursor;
00325         SQLUINTEGER use_bookmarks;
00326         
00327 
00328 
00329 };
00330 
00331 typedef enum
00332 {
00333         NOT_IN_ROW,
00334         IN_NORMAL_ROW,
00335         IN_COMPUTE_ROW,
00336         AFTER_COMPUTE_ROW,
00337         PRE_NORMAL_ROW
00338 } TDS_ODBC_ROW_STATUS;
00339 
00340 typedef enum
00341 {
00342         ODBC_SPECIAL_NONE = 0,
00343         ODBC_SPECIAL_GETTYPEINFO = 1,
00344         ODBC_SPECIAL_COLUMNS = 2,
00345         ODBC_SPECIAL_PROCEDURECOLUMNS = 3,
00346         ODBC_SPECIAL_SPECIALCOLUMNS = 4
00347 } TDS_ODBC_SPECIAL_ROWS;
00348 
00349 struct _hstmt
00350 {
00351         SQLSMALLINT htype;      
00352         struct _sql_errors errs;        
00353         struct _hdbc *dbc;
00355         char *query;
00356 
00358         struct _hstmt *next;
00360         struct _hstmt *prev;
00361 
00362         
00363         char *prepared_query;
00364         unsigned prepared_query_is_func:1;
00365         unsigned prepared_query_is_rpc:1;
00366         unsigned need_reprepare:1;
00367         unsigned param_data_called:1;
00368         
00369 
00371         TDSPARAMINFO *params;
00373         int param_num;
00375         char *prepared_pos;
00376 
00377         unsigned int curr_param_row, num_param_rows;
00378 
00380         unsigned int param_count;
00381         int row;
00383         TDS_INT8 row_count;
00385         TDS_ODBC_ROW_STATUS row_status;
00386         
00387         TDSDYNAMIC *dyn;
00388         TDS_DESC *ard, *ird, *apd, *ipd;
00389         TDS_DESC *orig_ard, *orig_apd;
00390         SQLULEN sql_rowset_size;
00391         struct _hsattr attr;
00392         DSTR cursor_name;       
00393         TDS_ODBC_SPECIAL_ROWS special_row;
00394         
00395         TDSCURSOR *cursor;
00396         unsigned char cancel_sent;
00397 };
00398 
00399 typedef struct _henv TDS_ENV;
00400 typedef struct _hdbc TDS_DBC;
00401 typedef struct _hstmt TDS_STMT;
00402 typedef struct _hchk TDS_CHK;
00403 
00404 #define IS_HENV(x) (((TDS_CHK *)x)->htype == SQL_HANDLE_ENV)
00405 #define IS_HDBC(x) (((TDS_CHK *)x)->htype == SQL_HANDLE_DBC)
00406 #define IS_HSTMT(x) (((TDS_CHK *)x)->htype == SQL_HANDLE_STMT)
00407 #define IS_HDESC(x) (((TDS_CHK *)x)->htype == SQL_HANDLE_DESC)
00408 
00409 
00410 #ifdef __MINGW32__
00411 #if SQL_INTERVAL_YEAR == (100 + SQL_CODE_SECOND)
00412 
00413 #undef SQL_INTERVAL_YEAR
00414 #undef SQL_INTERVAL_MONTH
00415 #undef SQL_INTERVAL_DAY
00416 #undef SQL_INTERVAL_HOUR
00417 #undef SQL_INTERVAL_MINUTE
00418 #undef SQL_INTERVAL_SECOND
00419 #undef SQL_INTERVAL_YEAR_TO_MONTH
00420 #undef SQL_INTERVAL_DAY_TO_HOUR
00421 #undef SQL_INTERVAL_DAY_TO_MINUTE
00422 #undef SQL_INTERVAL_DAY_TO_SECOND
00423 #undef SQL_INTERVAL_HOUR_TO_MINUTE
00424 #undef SQL_INTERVAL_HOUR_TO_SECOND
00425 #undef SQL_INTERVAL_MINUTE_TO_SECOND
00426 
00427 #define SQL_INTERVAL_YEAR                                       (100 + SQL_CODE_YEAR)
00428 #define SQL_INTERVAL_MONTH                                      (100 + SQL_CODE_MONTH)
00429 #define SQL_INTERVAL_DAY                                        (100 + SQL_CODE_DAY)
00430 #define SQL_INTERVAL_HOUR                                       (100 + SQL_CODE_HOUR)
00431 #define SQL_INTERVAL_MINUTE                                     (100 + SQL_CODE_MINUTE)
00432 #define SQL_INTERVAL_SECOND                     (100 + SQL_CODE_SECOND)
00433 #define SQL_INTERVAL_YEAR_TO_MONTH                      (100 + SQL_CODE_YEAR_TO_MONTH)
00434 #define SQL_INTERVAL_DAY_TO_HOUR                        (100 + SQL_CODE_DAY_TO_HOUR)
00435 #define SQL_INTERVAL_DAY_TO_MINUTE                      (100 + SQL_CODE_DAY_TO_MINUTE)
00436 #define SQL_INTERVAL_DAY_TO_SECOND                      (100 + SQL_CODE_DAY_TO_SECOND)
00437 #define SQL_INTERVAL_HOUR_TO_MINUTE                     (100 + SQL_CODE_HOUR_TO_MINUTE)
00438 #define SQL_INTERVAL_HOUR_TO_SECOND                     (100 + SQL_CODE_HOUR_TO_SECOND)
00439 #define SQL_INTERVAL_MINUTE_TO_SECOND           (100 + SQL_CODE_MINUTE_TO_SECOND)
00440 
00441 #endif
00442 #endif
00443 
00444 #ifdef _WIN32
00445 BOOL get_login_info(HWND hwndParent, TDSCONNECTION * connection);
00446 #endif
00447 
00448 #define ODBC_PARAM_LIST \
00449         ODBC_PARAM(Servername) \
00450         ODBC_PARAM(Server) \
00451         ODBC_PARAM(DSN) \
00452         ODBC_PARAM(UID) \
00453         ODBC_PARAM(PWD) \
00454         ODBC_PARAM(Address) \
00455         ODBC_PARAM(Port) \
00456         ODBC_PARAM(TDS_Version) \
00457         ODBC_PARAM(Language) \
00458         ODBC_PARAM(Database) \
00459         ODBC_PARAM(TextSize) \
00460         ODBC_PARAM(PacketSize) \
00461         ODBC_PARAM(ClientCharset) \
00462         ODBC_PARAM(DumpFile) \
00463         ODBC_PARAM(DumpFileAppend) \
00464         ODBC_PARAM(DebugFlags) \
00465         ODBC_PARAM(Encryption) \
00466         ODBC_PARAM(Trusted_Connection) \
00467         ODBC_PARAM(APP) \
00468         ODBC_PARAM(WSID) \
00469         ODBC_PARAM(UseNTLMv2)
00470 
00471 #define ODBC_PARAM(p) ODBC_PARAM_##p,
00472 enum {
00473         ODBC_PARAM_LIST
00474         ODBC_PARAM_SIZE
00475 };
00476 #undef ODBC_PARAM
00477 
00478 
00479 
00480 
00481 
00482 
00483 typedef struct {
00484         const char *p;
00485         size_t len;
00486 } TDS_PARSED_PARAM;
00487 
00495 int odbc_parse_connect_string(TDS_ERRS *errs, const char *connect_string, const char *connect_string_end, TDSCONNECTION * connection, TDS_PARSED_PARAM *parsed_params);
00496 int odbc_get_dsn_info(TDS_ERRS *errs, const char *DSN, TDSCONNECTION * connection);
00497 #ifdef _WIN32
00498 int odbc_build_connect_string(TDS_ERRS *errs, TDS_PARSED_PARAM *params, char **out);
00499 #endif
00500 
00501 
00502 
00503 
00504 SQLLEN odbc_tds2sql(TDS_STMT * stmt, TDSCOLUMN *curcol, int srctype, TDS_CHAR * src, TDS_UINT srclen, int desttype, TDS_CHAR * dest, SQLULEN destlen, const struct _drecord *drec_ixd);
00505 
00506 
00507 
00508 
00509 TDS_DESC *desc_alloc(SQLHANDLE parent, int desc_type, int alloc_type);
00510 SQLRETURN desc_free(TDS_DESC * desc);
00511 SQLRETURN desc_alloc_records(TDS_DESC * desc, unsigned count);
00512 SQLRETURN desc_copy(TDS_DESC * dest, TDS_DESC * src);
00513 SQLRETURN desc_free_records(TDS_DESC * desc);
00514 TDS_DBC *desc_get_dbc(TDS_DESC *desc);
00515 
00516 
00517 
00518 
00519 SQLRETURN _SQLRowCount(SQLHSTMT hstmt, SQLLEN FAR * pcrow);
00520 
00521 
00522 
00523 
00524 #if ENABLE_EXTRA_CHECKS
00525 
00526 #define CHECK_ENV_EXTRA(env) odbc_check_env_extra(env)
00527 #define CHECK_DBC_EXTRA(dbc) odbc_check_dbc_extra(dbc)
00528 #define CHECK_STMT_EXTRA(stmt) odbc_check_stmt_extra(stmt)
00529 #define CHECK_DESC_EXTRA(desc) odbc_check_desc_extra(desc)
00530 
00531 void odbc_check_env_extra(TDS_ENV * env);
00532 void odbc_check_dbc_extra(TDS_DBC * dbc);
00533 void odbc_check_stmt_extra(TDS_STMT * stmt);
00534 void odbc_check_desc_extra(TDS_DESC * desc);
00535 #else
00536 
00537 #define CHECK_ENV_EXTRA(env)
00538 #define CHECK_DBC_EXTRA(dbc)
00539 #define CHECK_STMT_EXTRA(stmt)
00540 #define CHECK_DESC_EXTRA(desc)
00541 #endif
00542 
00543 
00544 
00545 
00546 
00547 
00548 #undef _wide
00549 #undef _WIDE
00550 #ifdef ENABLE_ODBC_WIDE
00551 typedef union {
00552         char mb[1];
00553         SQLWCHAR wide[1];
00554 } ODBC_CHAR;
00555 # define _wide ,wide
00556 # define _wide0 ,0
00557 # define _WIDE ,int wide
00558 #else
00559 # define _wide
00560 # define _wide0
00561 # define _WIDE
00562 # define ODBC_CHAR SQLCHAR
00563 #endif
00564 int odbc_set_stmt_query(struct _hstmt *stmt, const ODBC_CHAR *sql, int sql_len _WIDE);
00565 int odbc_set_stmt_prepared_query(struct _hstmt *stmt, const ODBC_CHAR *sql, int sql_len _WIDE);
00566 void odbc_set_return_status(struct _hstmt *stmt, unsigned int n_row);
00567 void odbc_set_return_params(struct _hstmt *stmt, unsigned int n_row);
00568 
00569 SQLSMALLINT odbc_server_to_sql_type(int col_type, int col_size);
00570 int odbc_sql_to_c_type_default(int sql_type);
00571 int odbc_sql_to_server_type(TDSSOCKET * tds, int sql_type);
00572 int odbc_c_to_server_type(int c_type);
00573 
00574 void odbc_set_sql_type_info(TDSCOLUMN * col, struct _drecord *drec, SQLINTEGER odbc_ver);
00575 SQLINTEGER odbc_sql_to_displaysize(int sqltype, TDSCOLUMN *col);
00576 int odbc_get_string_size(int size, ODBC_CHAR * str _WIDE);
00577 void odbc_rdbms_version(TDSSOCKET * tds_socket, char *pversion_string);
00578 SQLINTEGER odbc_get_param_len(const struct _drecord *drec_axd, const struct _drecord *drec_ixd, const TDS_DESC* axd, unsigned int n_row);
00579 
00580 #ifdef ENABLE_ODBC_WIDE
00581 DSTR* odbc_dstr_copy_flag(TDS_DBC *dbc, DSTR *s, int size, ODBC_CHAR * str, int flag);
00582 #define odbc_dstr_copy(dbc, s, len, out) \
00583         odbc_dstr_copy_flag(dbc, s, len, sizeof((out)->mb) ? (out) : (out), wide)
00584 #define odbc_dstr_copy_oct(dbc, s, len, out) \
00585         odbc_dstr_copy_flag(dbc, s, len, out, wide|0x20)
00586 #else
00587 DSTR* odbc_dstr_copy(TDS_DBC *dbc, DSTR *s, int size, ODBC_CHAR * str);
00588 #define odbc_dstr_copy_oct odbc_dstr_copy
00589 #endif
00590 
00591 
00592 SQLRETURN odbc_set_string_flag(TDS_DBC *dbc, SQLPOINTER buffer, SQLINTEGER cbBuffer, void FAR * pcbBuffer, const char *s, int len, int flag);
00593 #ifdef ENABLE_ODBC_WIDE
00594 #define odbc_set_string(dbc, buf, buf_len, out_len, s, s_len) \
00595         odbc_set_string_flag(dbc, sizeof((buf)->mb) ? (buf) : (buf), buf_len, out_len, s, s_len, (wide) | (sizeof(*(out_len)) == sizeof(SQLSMALLINT)?0:0x10))
00596 #define odbc_set_string_oct(dbc, buf, buf_len, out_len, s, s_len) \
00597         odbc_set_string_flag(dbc, buf, buf_len, out_len, s, s_len, (wide) | (sizeof(*(out_len)) == sizeof(SQLSMALLINT)?0x20:0x30))
00598 #else
00599 #define odbc_set_string(dbc, buf, buf_len, out_len, s, s_len) \
00600         odbc_set_string_flag(dbc, buf, buf_len, out_len, s, s_len, (sizeof(*(out_len)) == sizeof(SQLSMALLINT)?0:0x10))
00601 #define odbc_set_string_oct(dbc, buf, buf_len, out_len, s, s_len) \
00602         odbc_set_string_flag(dbc, buf, buf_len, out_len, s, s_len, (sizeof(*(out_len)) == sizeof(SQLSMALLINT)?0x20:0x30))
00603 #endif
00604 
00605 SQLSMALLINT odbc_get_concise_sql_type(SQLSMALLINT type, SQLSMALLINT interval);
00606 SQLRETURN odbc_set_concise_sql_type(SQLSMALLINT concise_type, struct _drecord *drec, int check_only);
00607 SQLSMALLINT odbc_get_concise_c_type(SQLSMALLINT type, SQLSMALLINT interval);
00608 SQLRETURN odbc_set_concise_c_type(SQLSMALLINT concise_type, struct _drecord *drec, int check_only);
00609 
00610 SQLLEN odbc_get_octet_len(int c_type, const struct _drecord *drec);
00611 void odbc_convert_err_set(struct _sql_errors *errs, TDS_INT err);
00612 
00613 
00614 
00615 
00616 SQLRETURN prepare_call(struct _hstmt *stmt);
00617 SQLRETURN native_sql(struct _hdbc *dbc, char *s);
00618 int parse_prepared_query(struct _hstmt *stmt, int compute_row);
00619 int start_parse_prepared_query(struct _hstmt *stmt, int compute_row);
00620 int continue_parse_prepared_query(struct _hstmt *stmt, SQLPOINTER DataPtr, SQLLEN StrLen_or_Ind);
00621 const char *parse_const_param(const char * s, TDS_SERVER_TYPE *type);
00622 
00623 
00624 
00625 
00626 SQLRETURN odbc_sql2tds(TDS_STMT * stmt, const struct _drecord *drec_ixd, const struct _drecord *drec_axd, TDSCOLUMN *curcol, int compute_row, const TDS_DESC* axd, unsigned int n_row);
00627 
00628 
00629 
00630 
00631 #if SIZEOF_SQLWCHAR != SIZEOF_WCHAR_T
00632 size_t sqlwcslen(const SQLWCHAR * s);
00633 #else
00634 #define sqlwcslen wcslen
00635 #endif
00636 
00637 #if SIZEOF_SQLWCHAR == 2
00638 # if WORDS_BIGENDIAN
00639 #  define ODBC_WIDE_NAME "UCS-2BE"
00640 # else
00641 #  define ODBC_WIDE_NAME "UCS-2LE"
00642 # endif
00643 #elif SIZEOF_SQLWCHAR == 4
00644 # if WORDS_BIGENDIAN
00645 #  define ODBC_WIDE_NAME "UCS-4BE"
00646 # else
00647 #  define ODBC_WIDE_NAME "UCS-4LE"
00648 # endif
00649 #else
00650 #error SIZEOF_SQLWCHAR not supported !!
00651 #endif
00652 
00653 #if defined(__GNUC__) && __GNUC__ >= 4 && !defined(__MINGW32__)
00654 #pragma GCC visibility pop
00655 #endif
00656 
00657 #ifdef __cplusplus
00658 #if 0
00659 {
00660 #endif
00661 }
00662 #endif
00663 
00664 #endif