26 #if defined(UNIXODBC) || defined(TDS_NO_DM)
35 #ifdef HAVE_IODBCINST_H
36 #include <iodbcinst.h>
42 #define SQLULEN SQLUINTEGER
45 #define SQLLEN SQLINTEGER
49 #ifndef HAVE_SQLSETPOSIROW
50 #define SQLSETPOSIROW SQLUSMALLINT
53 #ifndef HAVE_SQLROWOFFSET
54 #define SQLROWOFFSET SQLLEN
57 #ifndef HAVE_SQLROWSETSIZE
58 #define SQLROWSETSIZE SQLULEN
71 #if defined(__GNUC__) && __GNUC__ >= 4
72 #pragma GCC visibility push(hidden)
73 #define ODBC_API SQL_API __attribute__((externally_visible))
75 #define ODBC_API SQL_API
78 #define ODBC_MAX(a,b) ( (a) > (b) ? (a) : (b) )
79 #define ODBC_MIN(a,b) ( (a) < (b) ? (a) : (b) )
100 #if ENABLE_EXTRA_CHECKS
101 void odbc_check_struct_extra(
void *p);
103 #define ODBC_RETURN(handle, rc) \
104 do { odbc_check_struct_extra(handle); return (handle->errs.lastrc = (rc)); } while(0)
105 #define ODBC_RETURN_(handle) \
106 do { odbc_check_struct_extra(handle); return handle->errs.lastrc; } while(0)
108 #define ODBC_RETURN(handle, rc) \
109 do { return (handle->errs.lastrc = (rc)); } while(0)
110 #define ODBC_RETURN_(handle) \
111 do { return handle->errs.lastrc; } while(0)
118 void odbc_errs_add(
struct _sql_errors *errs,
const char *sqlstate,
const char *msg);
121 void odbc_errs_add_rdbms(
struct _sql_errors *errs, TDS_UINT native,
const char *sqlstate,
const char *msg,
int linenum,
122 int msgstate,
const char *server);
126 SQLSMALLINT sql_desc_alloc_type;
127 SQLINTEGER sql_desc_bind_type;
128 SQLULEN sql_desc_array_size;
130 SQLSMALLINT sql_desc_count;
131 SQLUSMALLINT *sql_desc_array_status_ptr;
132 SQLULEN *sql_desc_rows_processed_ptr;
133 SQLLEN *sql_desc_bind_offset_ptr;
138 SQLUINTEGER sql_desc_auto_unique_value;
139 DSTR sql_desc_base_column_name;
140 DSTR sql_desc_base_table_name;
141 SQLINTEGER sql_desc_case_sensitive;
142 DSTR sql_desc_catalog_name;
143 SQLSMALLINT sql_desc_concise_type;
144 SQLPOINTER sql_desc_data_ptr;
145 SQLSMALLINT sql_desc_datetime_interval_code;
146 SQLINTEGER sql_desc_datetime_interval_precision;
147 SQLLEN sql_desc_display_size;
148 SQLSMALLINT sql_desc_fixed_prec_scale;
149 SQLLEN *sql_desc_indicator_ptr;
151 SQLULEN sql_desc_length;
153 const char *sql_desc_literal_prefix;
155 const char *sql_desc_literal_suffix;
156 DSTR sql_desc_local_type_name;
158 SQLSMALLINT sql_desc_nullable;
159 SQLINTEGER sql_desc_num_prec_radix;
160 SQLLEN sql_desc_octet_length;
161 SQLLEN *sql_desc_octet_length_ptr;
162 SQLSMALLINT sql_desc_parameter_type;
163 SQLSMALLINT sql_desc_precision;
164 SQLSMALLINT sql_desc_rowver;
165 SQLSMALLINT sql_desc_scale;
166 DSTR sql_desc_schema_name;
167 SQLSMALLINT sql_desc_searchable;
168 DSTR sql_desc_table_name;
169 SQLSMALLINT sql_desc_type;
171 const char *sql_desc_type_name;
172 SQLSMALLINT sql_desc_unnamed;
173 SQLSMALLINT sql_desc_unsigned;
174 SQLSMALLINT sql_desc_updatable;
196 SQLUINTEGER connection_pooling;
197 SQLUINTEGER cp_match;
198 SQLINTEGER odbc_version;
199 SQLINTEGER output_nts;
217 SQLUINTEGER access_mode;
218 SQLUINTEGER async_enable;
219 SQLUINTEGER auto_ipd;
220 SQLUINTEGER autocommit;
221 SQLUINTEGER connection_dead;
222 SQLUINTEGER connection_timeout;
223 DSTR current_catalog;
224 SQLUINTEGER login_timeout;
225 SQLUINTEGER metadata_id;
226 SQLUINTEGER odbc_cursors;
227 SQLUINTEGER packet_size;
230 SQLUINTEGER translate_option;
231 SQLUINTEGER txn_isolation;
232 SQLUINTEGER cursor_type;
239 #define TDS_MAX_APP_DESC 100
263 TDS_INT default_query_timeout;
271 SQLUINTEGER async_enable;
272 SQLUINTEGER concurrency;
273 SQLUINTEGER cursor_scrollable;
274 SQLUINTEGER cursor_sensitivity;
275 SQLUINTEGER cursor_type;
276 SQLUINTEGER enable_auto_ipd;
277 SQLPOINTER fetch_bookmark_ptr;
281 SQLUINTEGER metadata_id;
295 SQLUINTEGER query_timeout;
296 SQLUINTEGER retrieve_data;
310 SQLUINTEGER simulate_cursor;
311 SQLUINTEGER use_bookmarks;
324 } TDS_ODBC_ROW_STATUS;
339 char *prepared_query;
340 unsigned prepared_query_is_func:1;
341 unsigned prepared_query_is_rpc:1;
342 unsigned need_reprepare:1;
343 unsigned param_data_called:1;
353 unsigned int curr_param_row, num_param_rows;
367 SQLULEN sql_rowset_size;
373 unsigned char cancel_sent;
381 #define IS_HENV(x) (((TDS_CHK *)x)->htype == SQL_HANDLE_ENV)
382 #define IS_HDBC(x) (((TDS_CHK *)x)->htype == SQL_HANDLE_DBC)
383 #define IS_HSTMT(x) (((TDS_CHK *)x)->htype == SQL_HANDLE_STMT)
384 #define IS_HDESC(x) (((TDS_CHK *)x)->htype == SQL_HANDLE_DESC)
388 #if SQL_INTERVAL_YEAR == (100 + SQL_CODE_SECOND)
390 #undef SQL_INTERVAL_YEAR
391 #undef SQL_INTERVAL_MONTH
392 #undef SQL_INTERVAL_DAY
393 #undef SQL_INTERVAL_HOUR
394 #undef SQL_INTERVAL_MINUTE
395 #undef SQL_INTERVAL_SECOND
396 #undef SQL_INTERVAL_YEAR_TO_MONTH
397 #undef SQL_INTERVAL_DAY_TO_HOUR
398 #undef SQL_INTERVAL_DAY_TO_MINUTE
399 #undef SQL_INTERVAL_DAY_TO_SECOND
400 #undef SQL_INTERVAL_HOUR_TO_MINUTE
401 #undef SQL_INTERVAL_HOUR_TO_SECOND
402 #undef SQL_INTERVAL_MINUTE_TO_SECOND
404 #define SQL_INTERVAL_YEAR (100 + SQL_CODE_YEAR)
405 #define SQL_INTERVAL_MONTH (100 + SQL_CODE_MONTH)
406 #define SQL_INTERVAL_DAY (100 + SQL_CODE_DAY)
407 #define SQL_INTERVAL_HOUR (100 + SQL_CODE_HOUR)
408 #define SQL_INTERVAL_MINUTE (100 + SQL_CODE_MINUTE)
409 #define SQL_INTERVAL_SECOND (100 + SQL_CODE_SECOND)
410 #define SQL_INTERVAL_YEAR_TO_MONTH (100 + SQL_CODE_YEAR_TO_MONTH)
411 #define SQL_INTERVAL_DAY_TO_HOUR (100 + SQL_CODE_DAY_TO_HOUR)
412 #define SQL_INTERVAL_DAY_TO_MINUTE (100 + SQL_CODE_DAY_TO_MINUTE)
413 #define SQL_INTERVAL_DAY_TO_SECOND (100 + SQL_CODE_DAY_TO_SECOND)
414 #define SQL_INTERVAL_HOUR_TO_MINUTE (100 + SQL_CODE_HOUR_TO_MINUTE)
415 #define SQL_INTERVAL_HOUR_TO_SECOND (100 + SQL_CODE_HOUR_TO_SECOND)
416 #define SQL_INTERVAL_MINUTE_TO_SECOND (100 + SQL_CODE_MINUTE_TO_SECOND)
422 BOOL get_login_info(HWND hwndParent,
TDSCONNECTION * connection);
435 int odbc_parse_connect_string(
const char *connect_string,
const char *connect_string_end,
TDSCONNECTION * connection);
436 int odbc_get_dsn_info(
const char *DSN,
TDSCONNECTION * connection);
441 TDS_INT convert_tds2sql(
TDSCONTEXT * context,
int srctype, TDS_CHAR * src, TDS_UINT srclen,
int desttype, TDS_CHAR * dest, SQLULEN destlen,
const struct _drecord *drec_ixd);
446 TDS_DESC *desc_alloc(SQLHANDLE parent,
int desc_type,
int alloc_type);
447 SQLRETURN desc_free(
TDS_DESC * desc);
448 SQLRETURN desc_alloc_records(
TDS_DESC * desc,
unsigned count);
450 SQLRETURN desc_free_records(
TDS_DESC * desc);
455 SQLRETURN _SQLRowCount(SQLHSTMT hstmt, SQLLEN FAR * pcrow);
460 #if ENABLE_EXTRA_CHECKS
462 #define CHECK_ENV_EXTRA(env) odbc_check_env_extra(env)
463 #define CHECK_DBC_EXTRA(dbc) odbc_check_dbc_extra(dbc)
464 #define CHECK_STMT_EXTRA(stmt) odbc_check_stmt_extra(stmt)
465 #define CHECK_DESC_EXTRA(desc) odbc_check_desc_extra(desc)
467 void odbc_check_env_extra(
TDS_ENV * env);
468 void odbc_check_dbc_extra(
TDS_DBC * dbc);
469 void odbc_check_stmt_extra(
TDS_STMT * stmt);
470 void odbc_check_desc_extra(
TDS_DESC * desc);
473 #define CHECK_ENV_EXTRA(env)
474 #define CHECK_DBC_EXTRA(dbc)
475 #define CHECK_STMT_EXTRA(stmt)
476 #define CHECK_DESC_EXTRA(desc)
482 int odbc_set_stmt_query(
struct _hstmt *stmt,
const char *sql,
int sql_len);
483 int odbc_set_stmt_prepared_query(
struct _hstmt *stmt,
const char *sql,
int sql_len);
484 void odbc_set_return_status(
struct _hstmt *stmt,
unsigned int n_row);
485 void odbc_set_return_params(
struct _hstmt *stmt,
unsigned int n_row);
488 int odbc_sql_to_c_type_default(
int sql_type);
489 int odbc_sql_to_server_type(
TDSSOCKET * tds,
int sql_type);
492 void odbc_set_sql_type_info(
TDSCOLUMN * col,
struct _drecord *drec, SQLINTEGER odbc_ver);
493 SQLINTEGER odbc_sql_to_displaysize(
int sqltype,
TDSCOLUMN *col);
494 int odbc_get_string_size(
int size, SQLCHAR * str);
498 SQLRETURN
odbc_set_string(SQLPOINTER buffer, SQLSMALLINT cbBuffer, SQLSMALLINT FAR * pcbBuffer,
const char *s,
int len);
499 SQLRETURN odbc_set_string_i(SQLPOINTER buffer, SQLINTEGER cbBuffer, SQLINTEGER FAR * pcbBuffer,
const char *s,
int len);
501 SQLSMALLINT odbc_get_concise_sql_type(SQLSMALLINT type, SQLSMALLINT interval);
503 SQLSMALLINT odbc_get_concise_c_type(SQLSMALLINT type, SQLSMALLINT interval);
506 SQLLEN odbc_get_octet_len(
int c_type,
const struct _drecord *drec);
511 SQLRETURN prepare_call(
struct _hstmt *stmt);
512 SQLRETURN native_sql(
struct _hdbc *dbc,
char *s);
513 int parse_prepared_query(
struct _hstmt *stmt,
int compute_row);
514 int start_parse_prepared_query(
struct _hstmt *stmt,
int compute_row);
515 int continue_parse_prepared_query(
struct _hstmt *stmt, SQLPOINTER DataPtr, SQLLEN StrLen_or_Ind);
516 const char *parse_const_param(
const char * s, TDS_SERVER_TYPE *type);
523 #if defined(__GNUC__) && __GNUC__ >= 4
524 #pragma GCC visibility pop
SQLRETURN odbc_set_concise_sql_type(SQLSMALLINT concise_type, struct _drecord *drec, int check_only)
Set concise type and all cascading field.
Definition: odbc_util.c:886
char * query
query to execute
Definition: tdsodbc.h:331
TDS_ODBC_ROW_STATUS row_status
status of row, it can happen that this flag mark that we are still parsing row, this it's normal ...
Definition: tdsodbc.h:361
Definition: tdsodbc.h:326
int odbc_c_to_server_type(int c_type)
Pass this an SQL_C_* type and get a SYB* type which most closely corresponds to the SQL_C_* type...
Definition: odbc_util.c:374
Definition: tdsodbc.h:124
Definition: tdsodbc.h:177
TDS_DESC * uad[TDS_MAX_APP_DESC]
descriptors associated to connection
Definition: tdsodbc.h:260
SQLRETURN odbc_set_string(SQLPOINTER buffer, SQLSMALLINT cbBuffer, SQLSMALLINT FAR *pcbBuffer, const char *s, int len)
Copy a string to client setting size according to ODBC convenction.
Definition: odbc_util.c:730
struct _hstmt * stmt_list
list of all statements allocated from this connection
Definition: tdsodbc.h:256
int param_num
last valid parameter in params, it's a ODBC index (from 1 relative to descriptor) ...
Definition: tdsodbc.h:349
struct _hstmt * current_statement
Statement executing.
Definition: tdsodbc.h:254
Definition: tdsodbc.h:266
SQLSMALLINT odbc_server_to_sql_type(int col_type, int col_size)
Convert type from database to ODBC.
Definition: odbc_util.c:253
char * prepared_pos
position in prepared query to check parameters, used only in RPC
Definition: tdsodbc.h:351
unsigned int cursor_support
<>0 if server handle cursors
Definition: tdsodbc.h:262
Hold information for a server connection.
Definition: tds.h:1276
Definition: tdsodbc.h:242
Definition: tdsodbc.h:215
struct _hstmt * next
next in list
Definition: tdsodbc.h:334
SQLINTEGER odbc_get_param_len(const struct _drecord *drec_axd, const struct _drecord *drec_ixd, const TDS_DESC *axd, unsigned int n_row)
Return length of parameter from parameter information.
Definition: odbc_util.c:783
struct _hstmt * prev
previous in list
Definition: tdsodbc.h:336
Definition: tdsodbc.h:207
void odbc_rdbms_version(TDSSOCKET *tds, char *pversion_string)
Returns the version of the RDBMS in the ODBC format.
Definition: odbc_util.c:775
Hold information for any results.
Definition: tds.h:1026
SQLRETURN odbc_set_concise_c_type(SQLSMALLINT concise_type, struct _drecord *drec, int check_only)
Set concise type and all cascading field.
Definition: odbc_util.c:1007
unsigned int param_count
number of parameter in current query
Definition: tdsodbc.h:356
Definition: tdsodbc.h:202
Definition: tdsodbc.h:136
TDSPARAMINFO * params
parameters saved
Definition: tdsodbc.h:347
Main include file for libtds.
TDS_INT8 row_count
row count to return
Definition: tdsodbc.h:359
Metadata about columns in regular and compute rows.
Definition: tds.h:948
Holds information for a dynamic (also called prepared) query.
Definition: tds.h:1199
Holds informations about a cursor.
Definition: tds.h:1163
Definition: tdsodbc.h:194