FreeTDS API
Loading...
Searching...
No Matches
Classes | Macros | Typedefs | Enumerations | Functions | Variables
tds.h File Reference

Main include file for libtds. More...

#include <stdarg.h>
#include <stdio.h>
#include <time.h>
#include <freetds/version.h>
#include <freetds/sysdep_private.h>
#include <freetds/sysdep_types.h>
#include <freetds/thread.h>
#include <freetds/bool.h>
#include <freetds/macros.h>
#include <freetds/utils/string.h>
#include <freetds/replacements.h>
#include <freetds/pushvis.h>
#include <freetds/proto.h>
#include <freetds/popvis.h>
Include dependency graph for tds.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  tds5_colinfo
 
union  tds_align_struct
 
struct  tds_authentication
 
struct  tds_bcpcoldata
 
struct  tds_bcpinfo
 
struct  tds_blob
 Information about blobs (e.g. More...
 
struct  tds_capabilities
 
struct  tds_capability_type
 
struct  tds_column
 Metadata about columns in regular and compute rows. More...
 
struct  tds_column_funcs
 
struct  tds_compiletime_settings
 A structure to hold all the compile-time settings. More...
 
struct  tds_connection
 
struct  tds_context
 
struct  tds_cursor
 Holds informations about a cursor. More...
 
struct  tds_cursor_status
 
struct  TDS_DATETIMEALL
 this structure is not directed connected to a TDS protocol but keeps any DATE/TIME information. More...
 
struct  tds_dynamic
 Holds information for a dynamic (also called prepared) query. More...
 
struct  tds_encoding
 Information relevant to libiconv. More...
 
struct  tds_env
 Current environment as reported by the server. More...
 
struct  tds_freeze
 
struct  tds_headers
 
struct  tds_locale
 
struct  tds_login
 
struct  tds_message
 
struct  tds_multiple
 
union  tds_option_arg
 
struct  tds_packet
 
struct  tds_poll_wakeup
 
struct  tds_result_info
 Hold information for any results. More...
 
struct  tds_socket
 Information for a server connection. More...
 
struct  tds_tvp
 
struct  tds_tvp_row
 
struct  tds_upd_col
 
struct  tds_variant
 Store variant informations. More...
 
struct  tdsdaterec
 Used by tds_datecrack. More...
 
struct  tdsdump_off_item
 

Macros

#define is_ascii_type(x)   ((tds_type_flags_ms[x] & TDS_TYPEFLAG_ASCII) != 0)
 
#define is_binary_type(x)   ((tds_type_flags_ms[x] & TDS_TYPEFLAG_BINARY) != 0)
 
#define is_blob_col(x)   ((x)->column_varint_size > 2)
 
#define is_blob_type(x)   ((x)==SYBTEXT || (x)==SYBIMAGE || (x)==SYBNTEXT)
 
#define is_char_type(x)   ((tds_type_flags_ms[x] & (TDS_TYPEFLAG_ASCII|TDS_TYPEFLAG_UNICODE)) != 0)
 
#define is_collate_type(x)   ((tds_type_flags_ms[x] & TDS_TYPEFLAG_COLLATE) != 0)
 
#define is_datetime_type(x)   ((tds_type_flags_ms[x] & TDS_TYPEFLAG_DATETIME) != 0)
 return true if type is a datetime (but not date or time)
 
#define is_end_token(x)   ((x) >= TDS_DONE_TOKEN && (x) <= TDS_DONEINPROC_TOKEN)
 
#define is_fixed_type(x)   ((tds_type_flags_ms[x] & TDS_TYPEFLAG_FIXED) != 0)
 
#define is_nullable_type(x)   ((tds_type_flags_ms[x] & TDS_TYPEFLAG_NULLABLE) != 0)
 
#define is_numeric_type(x)   ((x)==SYBNUMERIC || (x)==SYBDECIMAL)
 
#define is_similar_type(x, y)   (is_char_type(x) && is_char_type(y))
 
#define IS_TDS42(x)   (x->tds_version==0x402)
 
#define IS_TDS46(x)   (x->tds_version==0x406)
 
#define IS_TDS50(x)   (x->tds_version==0x500)
 
#define IS_TDS50_PLUS(x)   ((x)->tds_version>=0x500)
 
#define IS_TDS70(x)   (x->tds_version==0x700)
 
#define IS_TDS71(x)   (x->tds_version==0x701)
 
#define IS_TDS71_PLUS(x)   ((x)->tds_version>=0x701)
 
#define IS_TDS72(x)   (x->tds_version==0x702)
 
#define IS_TDS72_PLUS(x)   ((x)->tds_version>=0x702)
 
#define IS_TDS73(x)   (x->tds_version==0x703)
 
#define IS_TDS73_PLUS(x)   ((x)->tds_version>=0x703)
 
#define IS_TDS74_PLUS(x)   ((x)->tds_version>=0x704)
 
#define IS_TDS7_PLUS(x)   ((x)->tds_version>=0x700)
 
#define IS_TDSDEAD(x)   (((x) == NULL) || (x)->state == TDS_DEAD)
 
#define is_unicode_type(x)   ((tds_type_flags_ms[x] & TDS_TYPEFLAG_UNICODE) != 0)
 
#define is_variable_type(x)   ((tds_type_flags_ms[x] & TDS_TYPEFLAG_VARIABLE) != 0)
 
#define is_variant_inner_type(x)   ((tds_type_flags_ms[x] & TDS_TYPEFLAG_VARIANT) != 0)
 
#define MAXPRECISION   77
 
#define TDS_ALIGN_SIZE   sizeof(tds_align_struct)
 
#define TDS_BYTE_SWAP16(value)
 
#define TDS_BYTE_SWAP32(value)
 
#define TDS_CANCELLED   ((TDSRET)-2)
 
#define tds_capability_has_req(conn, cap)    tds_capability_enabled(&conn->capabilities.types[0], cap)
 
#define tds_capability_has_res(conn, cap)    tds_capability_enabled(&conn->capabilities.types[1], cap)
 
#define TDS_CMD_DONE   4046
 
#define TDS_CMD_FAIL   4048
 
#define TDS_CMD_SUCCEED   4047
 
#define TDS_COMPUTE_RESULT   4045
 
#define TDS_COMPUTEFMT_RESULT   4050
 
#define tds_convert_string_free(original, converted)    do { if (original != converted) free((char*) converted); } while(0)
 
#define TDS_DBG_ERROR   __FILE__, ((__LINE__ << 4) | 2)
 
#define TDS_DBG_FUNC   __FILE__, ((__LINE__ << 4) | 7)
 
#define TDS_DBG_HEADER   __FILE__, ((__LINE__ << 4) | 10)
 
#define TDS_DBG_INFO1   __FILE__, ((__LINE__ << 4) | 5)
 
#define TDS_DBG_INFO2   __FILE__, ((__LINE__ << 4) | 6)
 
#define TDS_DBG_LOGIN   __FILE__, ((__LINE__ << 4) | 11)
 
#define TDS_DBG_NETWORK   __FILE__, ((__LINE__ << 4) | 4)
 
#define TDS_DBG_SEVERE   __FILE__, ((__LINE__ << 4) | 1)
 
#define TDS_DBG_WARN   __FILE__, ((__LINE__ << 4) | 3)
 
#define TDS_DBGFLAG_ALL   0xfff
 
#define TDS_DBGFLAG_ERROR   0x04
 
#define TDS_DBGFLAG_FUNC   0x80
 
#define TDS_DBGFLAG_HEADER   0x0400
 
#define TDS_DBGFLAG_INFO1   0x20
 
#define TDS_DBGFLAG_INFO2   0x40
 
#define TDS_DBGFLAG_LOGIN   0x0800
 
#define TDS_DBGFLAG_NETWORK   0x10
 
#define TDS_DBGFLAG_PID   0x1000
 
#define TDS_DBGFLAG_SEVERE   0x02
 
#define TDS_DBGFLAG_SOURCE   0x4000
 
#define TDS_DBGFLAG_THREAD   0x8000
 
#define TDS_DBGFLAG_TIME   0x2000
 
#define TDS_DBGFLAG_WARN   0x08
 
#define TDS_DEF_BLKSZ   512
 
#define TDS_DEF_CHARSET   "iso_1"
 
#define TDS_DEF_LANG   "us_english"
 
#define TDS_DEF_PORT   1433
 
#define TDS_DEF_SERVER   "SYBASE"
 
#define TDS_DEFAULT_VERSION   0x000
 
#define TDS_DESCRIBE_RESULT   4051
 
#define TDS_DONE_RESULT   4052
 
#define TDS_DONEINPROC_RESULT   4054
 
#define TDS_DONEPROC_RESULT   4053
 
#define TDS_END_LEN   while(0); } while(tds_freeze_close(current_freeze), 0); } while(0);
 
#define TDS_FAIL   ((TDSRET)-1)
 
#define TDS_FAILED(rc)   ((rc)<0)
 
#define tds_get_ctx(tds)   ((tds)->conn->tds_ctx)
 
#define tds_get_int(tds)   ((TDS_INT) tds_get_uint(tds))
 
#define tds_get_int8(tds)   ((TDS_INT8) tds_get_uint8(tds))
 
#define tds_get_parent(tds)   ((tds)->parent)
 
#define tds_get_s(tds)   ((tds)->conn->s)
 
#define tds_get_smallint(tds)   ((TDS_SMALLINT) tds_get_usmallint(tds))
 
#define TDS_GSSAPI_DELEGATION   "enable gssapi delegation"
 
#define TDS_INT_CANCEL   2
 
#define TDS_INT_CONTINUE   1
 
#define TDS_INT_TIMEOUT   3
 
#define TDS_INVALID_TYPE   ((TDS_SERVER_TYPE) 0)
 
#define TDS_IS_MSSQL(x)   (((x)->conn->product_version & 0x80000000u)!=0)
 Check if product is Microsft SQL Server.
 
#define TDS_IS_SYBASE(x)   (!((x)->conn->product_version & 0x80000000u))
 Check if product is Sybase (such as Adaptive Server Enterrprice).
 
#define TDS_MAJOR(x)   ((x)->tds_version >> 8)
 
#define TDS_MAX_CAPABILITY   32
 
#define TDS_MAX_CONN   4096
 
#define TDS_MAX_DYNID_LEN   30
 
#define TDS_MAX_LOGIN_STR_SZ   128
 
#define TDS_MINOR(x)   ((x)->tds_version & 0xff)
 
#define TDS_MS_VER(maj, min, x)   (0x80000000u|((maj)<<24)|((min)<<16)|(x))
 Calc a version number for mssql.
 
#define TDS_MSG_RESULT   4044
 
#define tds_new(type, n)   ((type *) malloc(sizeof(type) * (n)))
 
#define tds_new0(type, n)   ((type *) calloc(n, sizeof(type)))
 
#define TDS_NO_COUNT   -1
 
#define TDS_NO_MORE_RESULTS   ((TDSRET)1)
 
#define TDS_NULLTERM   -9
 
#define TDS_OTHERS_RESULT   4055
 
#define tds_packet_get_data_start(pkt)   0
 
#define tds_packet_zero_data_start(pkt)   do { } while(0)
 
#define TDS_PARAM_RESULT   4042
 
#define TDS_PROPAGATE(rc)    do { TDSRET _tds_ret = (rc); if (TDS_FAILED(_tds_ret)) return _tds_ret; } while(0)
 
#define TDS_PUT_BYTE(tds, v)   tds_put_byte((tds), ((unsigned char)(v)))
 
#define TDS_PUT_INT(tds, v)   tds_put_int((tds), ((TDS_INT)(v)))
 
#define TDS_PUT_SMALLINT(tds, v)   tds_put_smallint((tds), ((TDS_SMALLINT)(v)))
 
#define tds_put_tinyint(tds, ti)   tds_put_byte(tds,ti)
 Output a tinyint value.
 
#define TDS_RESIZE(p, n_elem)    tds_realloc((void **) &(p), sizeof(*(p)) * (size_t) (n_elem))
 
#define TDS_ROW_RESULT   4040
 
#define TDS_ROWFMT_RESULT   4049
 
#define tds_set_ctx(tds, val)   do { ((tds)->conn->tds_ctx) = (val); } while(0)
 
#define tds_set_parent(tds, val)   do { ((tds)->parent) = (val); } while(0)
 
#define tds_set_s(tds, val)   do { ((tds)->conn->s) = (val); } while(0)
 
#define TDS_START_LEN_GENERIC(tds_socket, len)
 
#define TDS_START_LEN_TINYINT(tds_socket)   TDS_START_LEN_GENERIC(tds_socket, 1)
 
#define TDS_START_LEN_UINT(tds_socket)   TDS_START_LEN_GENERIC(tds_socket, 4)
 
#define TDS_START_LEN_USMALLINT(tds_socket)   TDS_START_LEN_GENERIC(tds_socket, 2)
 
#define TDS_STATUS_RESULT   4043
 
#define TDS_STR_APPENDMODE   "dump file append"
 
#define TDS_STR_ASA_DATABASE   "asa database"
 
#define TDS_STR_BLKSZ   "initial block size"
 
#define TDS_STR_CAFILE   "ca file"
 
#define TDS_STR_CHARSET   "charset"
 
#define TDS_STR_CHECKSSLHOSTNAME   "check certificate hostname"
 
#define TDS_STR_CLCHARSET   "client charset"
 
#define TDS_STR_CONNTIMEOUT   "connect timeout"
 
#define TDS_STR_CRLFILE   "crl file"
 
#define TDS_STR_DATABASE   "database"
 
#define TDS_STR_DATEFMT   "date-only format"
 
#define TDS_STR_DATETIMEFMT   "date format"
 
#define TDS_STR_DBFILENAME   "database filename"
 
#define TDS_STR_DEBUGFLAGS   "debug flags"
 
#define TDS_STR_DEBUGLVL   "debug level"
 
#define TDS_STR_DUMPFILE   "dump file"
 
#define TDS_STR_EMUL_LE   "emulate little endian"
 
#define TDS_STR_ENABLE_TLS_V1   "enable tls v1"
 
#define TDS_STR_ENCRYPTION   "encryption"
 
#define TDS_STR_ENCRYPTION_OFF   "off"
 
#define TDS_STR_ENCRYPTION_REQUEST   "request"
 
#define TDS_STR_ENCRYPTION_REQUIRE   "require"
 
#define TDS_STR_HOST   "host"
 
#define TDS_STR_HOSTNAME   "hostname"
 
#define TDS_STR_INSTANCE   "instance"
 
#define TDS_STR_LANGUAGE   "language"
 
#define TDS_STR_MUTUAL_AUTHENTICATION   "mutual authentication"
 
#define TDS_STR_PORT   "port"
 
#define TDS_STR_QUERY_TIMEOUT   "query timeout"
 
#define TDS_STR_READONLY_INTENT   "read-only intent"
 
#define TDS_STR_REALM   "realm"
 
#define TDS_STR_SPN   "spn"
 
#define TDS_STR_SWAPDT   "swap broken dates"
 
#define TDS_STR_TEXTSZ   "text size"
 
#define TDS_STR_TIMEFMT   "time-only format"
 
#define TDS_STR_TIMEOUT   "timeout"
 
#define TDS_STR_USE_UTF_16   "use utf-16"
 
#define TDS_STR_USELANMAN   "use lanman"
 
#define TDS_STR_USENTLMV2   "use ntlmv2"
 
#define TDS_STR_VERSION   "tds version"
 
#define TDS_SUCCEED(rc)   ((rc)>=0)
 
#define TDS_SUCCESS   ((TDSRET)0)
 
#define TDS_SYB_VER(maj, min, x)   (((maj)<<24)|((min)<<16)|(x)<<8)
 Calc a version number for Sybase.
 
#define TDS_TOKEN_FLAG(flag)   TDS_RETURN_##flag = (1 << (TDS_TOKEN_RES_##flag*2)), TDS_STOPAT_##flag = (2 << (TDS_TOKEN_RES_##flag*2))
 
#define TDSDUMP_BUF_FAST   if (TDS_UNLIKELY(tds_write_dump)) tdsdump_dump_buf
 
#define tdsdump_dump_buf   TDSDUMP_BUF_FAST
 
#define tdsdump_log   TDSDUMP_LOG_FAST
 
#define TDSDUMP_LOG_FAST   if (TDS_UNLIKELY(tds_write_dump)) tdsdump_log
 
#define TDSSELREAD   POLLIN
 
#define TDSSELWRITE   POLLOUT
 
#define TLS_STR_OPENSSL_CIPHERS   "openssl ciphers"
 

Typedefs

typedef struct tds_bcpcoldata BCPCOLDATA
 
typedef int(* err_handler_t) (const TDSCONTEXT *, TDSSOCKET *, TDSMESSAGE *)
 
typedef struct tds5_colinfo TDS5COLINFO
 
typedef TDSRET(* tds_bcp_get_col_data) (TDSBCPINFO *bulk, TDSCOLUMN *bcpcol, int offset)
 
typedef void(* tds_bcp_null_error) (TDSBCPINFO *bulk, int index, int offset)
 
typedef struct tds_capabilities TDS_CAPABILITIES
 
typedef struct tds_capability_type TDS_CAPABILITY_TYPE
 
typedef char TDS_CHAR
 
typedef struct tds_compiletime_settings TDS_COMPILETIME_SETTINGS
 A structure to hold all the compile-time settings.
 
typedef enum tds_cursor_fetch TDS_CURSOR_FETCH
 
typedef enum tds_cursor_operation TDS_CURSOR_OPERATION
 
typedef struct tds_cursor_status TDS_CURSOR_STATUS
 
typedef struct tds_encoding TDS_ENCODING
 Information relevant to libiconv.
 
typedef enum tds_encryption_level TDS_ENCRYPTION_LEVEL
 
typedef tds_sysdep_real64_type TDS_FLOAT
 
typedef int tds_func_check(const TDSCOLUMN *col)
 
typedef TDSRET tds_func_get_data(TDSSOCKET *tds, TDSCOLUMN *col)
 
typedef TDSRET tds_func_get_info(TDSSOCKET *tds, TDSCOLUMN *col)
 
typedef TDSRET tds_func_put_data(TDSSOCKET *tds, TDSCOLUMN *col, int bcp7)
 
typedef TDSRET tds_func_put_info(TDSSOCKET *tds, TDSCOLUMN *col)
 
typedef TDS_INT tds_func_row_len(TDSCOLUMN *col)
 
typedef int32_t TDS_INT
 
typedef int64_t TDS_INT8
 
typedef enum tds_operations TDS_OPERATION
 
typedef union tds_option_arg TDS_OPTION_ARG
 
typedef tds_sysdep_real32_type TDS_REAL
 
typedef int16_t TDS_SMALLINT
 
typedef enum tds_states TDS_STATE
 values for tds->state
 
typedef uint8_t TDS_TINYINT
 
typedef struct tds_tvp TDS_TVP
 
typedef struct tds_tvp_row TDS_TVP_ROW
 
typedef uint8_t TDS_UCHAR
 
typedef uint32_t TDS_UINT
 
typedef uint64_t TDS_UINT8
 
typedef uint16_t TDS_USMALLINT
 
typedef struct tds_authentication TDSAUTHENTICATION
 
typedef struct tds_bcpinfo TDSBCPINFO
 
typedef struct tds_blob TDSBLOB
 Information about blobs (e.g.
 
typedef struct tds_column TDSCOLUMN
 
typedef struct tds_column_funcs TDSCOLUMNFUNCS
 
typedef struct tds_result_info TDSCOMPUTEINFO
 
typedef void(* TDSCONFPARSE) (const char *option, const char *value, void *param)
 
typedef struct tds_connection TDSCONNECTION
 
typedef struct tds_context TDSCONTEXT
 
typedef struct tds_cursor TDSCURSOR
 Holds informations about a cursor.
 
typedef struct tdsdaterec TDSDATEREC
 Used by tds_datecrack.
 
typedef struct tdsdump_off_item TDSDUMP_OFF_ITEM
 
typedef struct tds_dynamic TDSDYNAMIC
 Holds information for a dynamic (also called prepared) query.
 
typedef struct tds_env TDSENV
 Current environment as reported by the server.
 
typedef struct tds_freeze TDSFREEZE
 
typedef struct tds_headers TDSHEADERS
 
typedef struct tdsiconvinfo TDSICONV
 
typedef struct tds_locale TDSLOCALE
 
typedef struct tds_login TDSLOGIN
 
typedef struct tds_message TDSMESSAGE
 
typedef struct tds_multiple TDSMULTIPLE
 
typedef struct tds_packet TDSPACKET
 
typedef TDSRESULTINFO TDSPARAMINFO
 
typedef struct tds_poll_wakeup TDSPOLLWAKEUP
 
typedef struct tds_result_info TDSRESULTINFO
 Hold information for any results.
 
typedef int TDSRET
 
typedef struct tds_socket TDSSOCKET
 
typedef struct tds_upd_col TDSUPDCOL
 
typedef struct tds_variant TDSVARIANT
 Store variant informations.
 

Enumerations

enum  {
  TDS_CUR_ISTAT_UNUSED = 0x00 , TDS_CUR_ISTAT_DECLARED = 0x01 , TDS_CUR_ISTAT_OPEN = 0x02 , TDS_CUR_ISTAT_CLOSED = 0x04 ,
  TDS_CUR_ISTAT_RDONLY = 0x08 , TDS_CUR_ISTAT_UPDATABLE = 0x10 , TDS_CUR_ISTAT_ROWCNT = 0x20 , TDS_CUR_ISTAT_DEALLOC = 0x40
}
 
enum  {
  TDS_TYPEFLAG_INVALID = 0 , TDS_TYPEFLAG_NULLABLE = 1 , TDS_TYPEFLAG_FIXED = 2 , TDS_TYPEFLAG_VARIABLE = 4 ,
  TDS_TYPEFLAG_COLLATE = 8 , TDS_TYPEFLAG_ASCII = 16 , TDS_TYPEFLAG_UNICODE = 32 , TDS_TYPEFLAG_BINARY = 64 ,
  TDS_TYPEFLAG_DATETIME = 128 , TDS_TYPEFLAG_NUMERIC = 256 , TDS_TYPEFLAG_VARIANT = 512
}
 
enum  tds_bcp_directions { TDS_BCP_IN = 1 , TDS_BCP_OUT = 2 , TDS_BCP_QUERYOUT = 3 }
 bcp direction
 
enum  tds_cursor_fetch {
  TDS_CURSOR_FETCH_NEXT = 1 , TDS_CURSOR_FETCH_PREV , TDS_CURSOR_FETCH_FIRST , TDS_CURSOR_FETCH_LAST ,
  TDS_CURSOR_FETCH_ABSOLUTE , TDS_CURSOR_FETCH_RELATIVE
}
 
enum  tds_cursor_operation { TDS_CURSOR_POSITION = 0 , TDS_CURSOR_UPDATE = 1 , TDS_CURSOR_DELETE = 2 , TDS_CURSOR_INSERT = 4 }
 
enum  TDS_CURSOR_STATE { TDS_CURSOR_STATE_UNACTIONED = 0 , TDS_CURSOR_STATE_REQUESTED = 1 , TDS_CURSOR_STATE_SENT = 2 , TDS_CURSOR_STATE_ACTIONED = 3 }
 
enum  tds_encryption_level { TDS_ENCRYPTION_DEFAULT , TDS_ENCRYPTION_OFF , TDS_ENCRYPTION_REQUEST , TDS_ENCRYPTION_REQUIRE }
 
enum  tds_end {
  TDS_DONE_FINAL = 0x00 , TDS_DONE_MORE_RESULTS = 0x01 , TDS_DONE_ERROR = 0x02 , TDS_DONE_INXACT = 0x04 ,
  TDS_DONE_PROC = 0x08 , TDS_DONE_COUNT = 0x10 , TDS_DONE_CANCELLED = 0x20 , TDS_DONE_EVENT = 0x40 ,
  TDS_DONE_SRVERROR = 0x100 , TDS_DONE_NO_TRAN = 0 , TDS_DONE_TRAN_SUCCEED = 1 , TDS_DONE_TRAN_PROGRESS = 2 ,
  TDS_DONE_STMT_ABORT = 3 , TDS_DONE_TRAN_ABORT = 4
}
 Flags returned in TDS_DONE token. More...
 
enum  TDS_ICONV_ENTRY { client2ucs2 , client2server_chardata , initial_char_conv_count }
 
enum  TDS_MULTIPLE_TYPE { TDS_MULTIPLE_QUERY , TDS_MULTIPLE_EXECUTE , TDS_MULTIPLE_RPC }
 
enum  tds_operations {
  TDS_OP_NONE = 0 , TDS_OP_CURSOR = TDS_SP_CURSOR , TDS_OP_CURSOROPEN = TDS_SP_CURSOROPEN , TDS_OP_CURSORPREPARE = TDS_SP_CURSORPREPARE ,
  TDS_OP_CURSOREXECUTE = TDS_SP_CURSOREXECUTE , TDS_OP_CURSORPREPEXEC = TDS_SP_CURSORPREPEXEC , TDS_OP_CURSORUNPREPARE = TDS_SP_CURSORUNPREPARE , TDS_OP_CURSORFETCH = TDS_SP_CURSORFETCH ,
  TDS_OP_CURSOROPTION = TDS_SP_CURSOROPTION , TDS_OP_CURSORCLOSE = TDS_SP_CURSORCLOSE , TDS_OP_EXECUTESQL = TDS_SP_EXECUTESQL , TDS_OP_PREPARE = TDS_SP_PREPARE ,
  TDS_OP_EXECUTE = TDS_SP_EXECUTE , TDS_OP_PREPEXEC = TDS_SP_PREPEXEC , TDS_OP_PREPEXECRPC = TDS_SP_PREPEXECRPC , TDS_OP_UNPREPARE = TDS_SP_UNPREPARE ,
  TDS_OP_DYN_DEALLOC = 100
}
 
enum  tds_states {
  TDS_IDLE , TDS_WRITING , TDS_SENDING , TDS_PENDING ,
  TDS_READING , TDS_DEAD
}
 values for tds->state More...
 
enum  tds_token_flags {
  TDS_HANDLE_ALL = 0 , TDS_TOKEN_FLAG =(OTHERS) , TDS_TOKEN_FLAG =(OTHERS) , TDS_TOKEN_FLAG =(OTHERS) ,
  TDS_TOKEN_FLAG =(OTHERS) , TDS_TOKEN_FLAG =(OTHERS) , TDS_TOKEN_FLAG =(OTHERS) , TDS_TOKEN_FLAG =(OTHERS) ,
  TDS_TOKEN_FLAG =(OTHERS) , TDS_TOKEN_FLAG =(OTHERS) , TDS_TOKEN_FLAG =(OTHERS) , TDS_TOKEN_RESULTS = TDS_RETURN_ROWFMT|TDS_RETURN_COMPUTEFMT|TDS_RETURN_DONE|TDS_STOPAT_ROW|TDS_STOPAT_COMPUTE|TDS_RETURN_PROC ,
  TDS_TOKEN_TRAILING = TDS_STOPAT_ROWFMT|TDS_STOPAT_COMPUTEFMT|TDS_STOPAT_ROW|TDS_STOPAT_COMPUTE|TDS_STOPAT_MSG|TDS_STOPAT_OTHERS
}
 
enum  tds_token_results {
  TDS_TOKEN_RES_OTHERS , TDS_TOKEN_RES_ROWFMT , TDS_TOKEN_RES_COMPUTEFMT , TDS_TOKEN_RES_PARAMFMT ,
  TDS_TOKEN_RES_DONE , TDS_TOKEN_RES_ROW , TDS_TOKEN_RES_COMPUTE , TDS_TOKEN_RES_PROC ,
  TDS_TOKEN_RES_MSG , TDS_TOKEN_RES_ENV
}
 
enum  TDSERRNO {
  TDSEOK = TDS_SUCCESS , TDSEVERDOWN = 100 , TDSEINPROGRESS , TDSEICONVIU = 2400 ,
  TDSEICONVAVAIL = 2401 , TDSEICONVO = 2402 , TDSEICONVI = 2403 , TDSEICONV2BIG = 2404 ,
  TDSEPORTINSTANCE = 2500 , TDSESYNC = 20001 , TDSEFCON = 20002 , TDSETIME = 20003 ,
  TDSEREAD = 20004 , TDSEWRIT = 20006 , TDSESOCK = 20008 , TDSECONN = 20009 ,
  TDSEMEM = 20010 , TDSEINTF = 20012 , TDSEUHST = 20013 , TDSEPWD = 20014 ,
  TDSESEOF = 20017 , TDSERPND = 20019 , TDSEBTOK = 20020 , TDSEOOB = 20022 ,
  TDSECLOS = 20056 , TDSEUSCT = 20058 , TDSEUTDS = 20146 , TDSEEUNR = 20185 ,
  TDSECAP = 20203 , TDSENEG = 20210 , TDSEUMSG = 20212 , TDSECAPTYP = 20213 ,
  TDSECONF = 20214 , TDSEBPROBADTYP = 20250 , TDSECLOSEIN = 20292
}
 

Functions

static bool is_tds_type_valid (int type)
 
TDSRET tds5_gss_send (TDSSOCKET *tds)
 
TDSAUTHENTICATIONtds5_negotiate_get_auth (TDSSOCKET *tds)
 
static void tds5_negotiate_set_msg_type (TDSAUTHENTICATION *tds_auth, unsigned msg_type)
 
int tds5_send_optioncmd (TDSSOCKET *tds, TDS_OPTION_CMD tds_command, TDS_OPTION tds_option, TDS_OPTION_ARG *tds_argument, TDS_INT *tds_argsize)
 
TDSRET tds71_submit_prepexec (TDSSOCKET *tds, const char *query, const char *id, TDSDYNAMIC **dyn_out, TDSPARAMINFO *params)
 Creates a temporary stored procedure in the server and execute it.
 
int tds7_get_instance_port (struct addrinfo *addr, const char *instance)
 Get port of given instance.
 
int tds7_get_instance_ports (FILE *output, struct addrinfo *addr)
 Get port of all instances.
 
void tds7_srv_charset_changed (TDSCONNECTION *conn, TDS_UCHAR collate[5])
 
const char * tds_addrinfo2str (struct addrinfo *addr, char *name, int namemax)
 
TDSSOCKETtds_alloc_additional_socket (TDSCONNECTION *conn)
 
BCPCOLDATAtds_alloc_bcp_column_data (unsigned int column_size)
 
TDSBCPINFOtds_alloc_bcpinfo (void)
 
char * tds_alloc_client_sqlstate (int msgno)
 
TDSCOMPUTEINFO ** tds_alloc_compute_results (TDSSOCKET *tds, TDS_USMALLINT num_cols, TDS_USMALLINT by_cols)
 
TDSRET tds_alloc_compute_row (TDSCOMPUTEINFO *res_info)
 
TDSCONTEXTtds_alloc_context (void *parent)
 
TDSCURSORtds_alloc_cursor (TDSSOCKET *tds, const char *name, TDS_INT namelen, const char *query, TDS_INT querylen)
 
TDSDYNAMICtds_alloc_dynamic (TDSCONNECTION *conn, const char *id)
 Allocate a dynamic statement.
 
TDSLOCALEtds_alloc_locale (void)
 
TDSLOGINtds_alloc_login (int use_environment)
 
char * tds_alloc_lookup_sqlstate (TDSSOCKET *tds, int msgno)
 
TDSPACKETtds_alloc_packet (void *buf, unsigned len)
 
void * tds_alloc_param_data (TDSCOLUMN *curparam)
 Allocate data for a parameter.
 
TDSPARAMINFOtds_alloc_param_result (TDSPARAMINFO *old_param)
 Adds a output parameter to TDSPARAMINFO.
 
TDSRESULTINFOtds_alloc_results (TDS_USMALLINT num_cols)
 
TDSRET tds_alloc_row (TDSRESULTINFO *res_info)
 Allocate space for row store return NULL on out of memory.
 
TDSSOCKETtds_alloc_socket (TDSCONTEXT *context, unsigned int bufsize)
 
TDSRET tds_bcp_done (TDSSOCKET *tds, int *rows_copied)
 Tell we finished sending BCP data to server.
 
TDSRET tds_bcp_fread (TDSSOCKET *tds, TDSICONV *conv, FILE *stream, const char *terminator, size_t term_len, char **outbuf, size_t *outbytes)
 Read a data file, passing the data through iconv().
 
TDSRET tds_bcp_init (TDSSOCKET *tds, TDSBCPINFO *bcpinfo)
 Initialize BCP information.
 
TDSRET tds_bcp_send_record (TDSSOCKET *tds, TDSBCPINFO *bcpinfo, tds_bcp_get_col_data get_col_data, tds_bcp_null_error null_error, int offset)
 Send one row of data to server.
 
TDSRET tds_bcp_start (TDSSOCKET *tds, TDSBCPINFO *bcpinfo)
 Start sending BCP data to server.
 
TDSRET tds_bcp_start_copy_in (TDSSOCKET *tds, TDSBCPINFO *bcpinfo)
 Start bulk copy to server.
 
static bool tds_capability_enabled (const TDS_CAPABILITY_TYPE *cap, unsigned cap_num)
 
void tds_close_socket (TDSSOCKET *tds)
 Close current socket.
 
int tds_config_boolean (const char *option, const char *value, TDSLOGIN *login)
 
TDS_USMALLINT * tds_config_verstr (const char *tdsver, TDSLOGIN *login)
 Set TDS version from given string.
 
int tds_connect_and_login (TDSSOCKET *tds, TDSLOGIN *login)
 
void tds_connection_close (TDSCONNECTION *conn)
 
int tds_connection_read (TDSSOCKET *tds, unsigned char *buf, int buflen)
 
int tds_connection_write (TDSSOCKET *tds, const unsigned char *buf, int buflen, int final)
 
const char * tds_convert_string (TDSSOCKET *tds, TDSICONV *char_conv, const char *s, int len, size_t *out_len)
 Convert a string in an allocated buffer.
 
void tds_convert_string_free (const char *original, const char *converted)
 
int tds_count_placeholders (const char *query)
 Count the number of placeholders ('?') in a query.
 
TDSRET tds_cursor_close (TDSSOCKET *tds, TDSCURSOR *cursor)
 
TDSRET tds_cursor_dealloc (TDSSOCKET *tds, TDSCURSOR *cursor)
 Send a deallocation request to server.
 
void tds_cursor_deallocated (TDSCONNECTION *conn, TDSCURSOR *cursor)
 
TDSRET tds_cursor_declare (TDSSOCKET *tds, TDSCURSOR *cursor, TDSPARAMINFO *params, int *send)
 
TDSRET tds_cursor_fetch (TDSSOCKET *tds, TDSCURSOR *cursor, TDS_CURSOR_FETCH fetch_type, TDS_INT i_row)
 
TDSRET tds_cursor_get_cursor_info (TDSSOCKET *tds, TDSCURSOR *cursor, TDS_UINT *row_number, TDS_UINT *row_count)
 
TDSRET tds_cursor_open (TDSSOCKET *tds, TDSCURSOR *cursor, TDSPARAMINFO *params, int *send)
 
TDSRET tds_cursor_setname (TDSSOCKET *tds, TDSCURSOR *cursor)
 
TDSRET tds_cursor_setrows (TDSSOCKET *tds, TDSCURSOR *cursor, int *send)
 
TDSRET tds_cursor_update (TDSSOCKET *tds, TDSCURSOR *cursor, TDS_CURSOR_OPERATION op, TDS_INT i_row, TDSPARAMINFO *params)
 
TDSRET tds_datecrack (TDS_INT datetype, const void *di, TDSDATEREC *dr)
 Convert from db date format to a structured date format.
 
TDSRET tds_deferred_cursor_dealloc (TDSCONNECTION *conn, TDSCURSOR *cursor)
 Deallocate cursor on idle.
 
TDSRET tds_deferred_unprepare (TDSCONNECTION *conn, TDSDYNAMIC *dyn)
 Unprepare dynamic on idle.
 
void tds_deinit_bcpinfo (TDSBCPINFO *bcpinfo)
 
void tds_deinit_tvp (TDS_TVP *table)
 
void tds_detach_results (TDSRESULTINFO *info)
 Detach result info from it current socket.
 
TDSRET tds_disconnect (TDSSOCKET *tds)
 
DSTRtds_dstr_get (TDSSOCKET *tds, DSTR *s, size_t len)
 Reads a string from wire and put in a DSTR.
 
void tds_dynamic_deallocated (TDSCONNECTION *conn, TDSDYNAMIC *dyn)
 
size_t tds_fix_column_size (TDSSOCKET *tds, TDSCOLUMN *curcol)
 Get column size for wire.
 
void tds_fix_login (TDSLOGIN *login)
 Fix configuration after reading it.
 
TDSRET tds_flush_packet (TDSSOCKET *tds)
 Flush packet to server.
 
void tds_free_all_results (TDSSOCKET *tds)
 
void tds_free_bcp_column_data (BCPCOLDATA *coldata)
 
void tds_free_bcpinfo (TDSBCPINFO *bcpinfo)
 
void tds_free_context (TDSCONTEXT *locale)
 
void tds_free_input_params (TDSDYNAMIC *dyn)
 Frees all allocated input parameters of a dynamic statement.
 
void tds_free_locale (TDSLOCALE *locale)
 
void tds_free_login (TDSLOGIN *login)
 
void tds_free_msg (TDSMESSAGE *message)
 
void tds_free_packets (TDSPACKET *packet)
 
void tds_free_param_result (TDSPARAMINFO *param_info)
 Delete latest parameter.
 
void tds_free_param_results (TDSPARAMINFO *param_info)
 
void tds_free_results (TDSRESULTINFO *res_info)
 
void tds_free_row (TDSRESULTINFO *res_info, unsigned char *row)
 
void tds_free_socket (TDSSOCKET *tds)
 
void tds_freeze (TDSSOCKET *tds, TDSFREEZE *freeze, unsigned size_len)
 Stop writing to server and cache every packet not sending them to server.
 
TDSRET tds_freeze_abort (TDSFREEZE *freeze)
 Discard all data written after the freeze.
 
TDSRET tds_freeze_close (TDSFREEZE *freeze)
 Stop keeping data for this specific freeze.
 
TDSRET tds_freeze_close_len (TDSFREEZE *freeze, int32_t size)
 Stop keeping data for this specific freeze.
 
size_t tds_freeze_written (TDSFREEZE *freeze)
 Compute how many bytes has been written from freeze.
 
unsigned char tds_get_byte (TDSSOCKET *tds)
 Return a single byte from the input buffer.
 
TDS_SERVER_TYPE tds_get_cardinal_type (TDS_SERVER_TYPE datatype, int usertype)
 
TDSRET tds_get_char_data (TDSSOCKET *tds, char *dest, size_t wire_size, TDSCOLUMN *curcol)
 Fetch character data the wire.
 
TDSRET tds_get_column_declaration (TDSSOCKET *tds, TDSCOLUMN *curcol, char *out)
 Return declaration for column (like "varchar(20)").
 
const TDS_COMPILETIME_SETTINGStds_get_compiletime_settings (void)
 Return a structure capturing the compile-time settings provided to the configure script.
 
TDS_SERVER_TYPE tds_get_conversion_type (TDS_SERVER_TYPE srctype, int colsize)
 Return type suitable for conversions (convert all nullable types to fixed type)
 
char * tds_get_home_file (const char *file)
 Return filename from HOME directory.
 
TDSLOCALEtds_get_locale (void)
 Get locale information.
 
bool tds_get_n (TDSSOCKET *tds, void *dest, size_t n)
 Get N bytes from the buffer and return them in the already allocated space
given to us.
 
int tds_get_size_by_type (TDS_SERVER_TYPE servertype)
 Return the number of bytes needed by specified type.
 
size_t tds_get_string (TDSSOCKET *tds, size_t string_len, char *dest, size_t dest_size)
 Fetch a string from the wire.
 
TDS_UINT tds_get_uint (TDSSOCKET *tds)
 Get an int32 from the server.
 
TDS_UINT8 tds_get_uint8 (TDSSOCKET *tds)
 Get an uint64 from the server.
 
TDS_USMALLINT tds_get_usmallint (TDSSOCKET *tds)
 Get an int16 from the server.
 
int tds_get_varint_size (TDSCONNECTION *conn, int datatype)
 tds_get_varint_size() returns the size of a variable length integer returned in a result string
 
void tds_getmac (TDS_SYS_SOCKET s, unsigned char mac[6])
 
unsigned int tds_gettime_ms (void)
 
int tds_goodread (TDSSOCKET *tds, unsigned char *buf, int buflen)
 Loops until we have received some characters return -1 on failure.
 
int tds_goodwrite (TDSSOCKET *tds, const unsigned char *buffer, size_t buflen)
 
TDSAUTHENTICATIONtds_gss_get_auth (TDSSOCKET *tds)
 
int tds_iconv_alloc (TDSCONNECTION *conn)
 Allocate iconv stuff.
 
void tds_iconv_close (TDSCONNECTION *conn)
 
void tds_iconv_free (TDSCONNECTION *conn)
 
TDSICONVtds_iconv_from_collate (TDSCONNECTION *conn, TDS_UCHAR collate[5])
 Get iconv information from a LCID (to support different column encoding under MSSQL2K)
 
TDSRET tds_iconv_open (TDSCONNECTION *conn, const char *charset, int use_utf16)
 
TDSLOGINtds_init_login (TDSLOGIN *login, TDSLOCALE *locale)
 Initialize login structure with locale information and other stuff for connection.
 
int tds_init_write_buf (TDSSOCKET *tds)
 
TDSDYNAMICtds_lookup_dynamic (TDSCONNECTION *conn, const char *id)
 Finds a dynamic given string id.
 
struct addrinfo * tds_lookup_host (const char *servername)
 Get the IP address for a hostname.
 
TDSRET tds_lookup_host_set (const char *servername, struct addrinfo **addr)
 
char * tds_money_to_string (const TDS_MONEY *money, char *s, bool use_2_digits)
 
TDSRET tds_multiple_done (TDSSOCKET *tds, TDSMULTIPLE *multiple)
 
TDSRET tds_multiple_execute (TDSSOCKET *tds, TDSMULTIPLE *multiple, TDSDYNAMIC *dyn)
 
TDSRET tds_multiple_init (TDSSOCKET *tds, TDSMULTIPLE *multiple, TDS_MULTIPLE_TYPE type, TDSHEADERS *head)
 
TDSRET tds_multiple_query (TDSSOCKET *tds, TDSMULTIPLE *multiple, const char *query, TDSPARAMINFO *params)
 
int tds_needs_unprepare (TDSCONNECTION *conn, TDSDYNAMIC *dyn)
 Check if dynamic request must be unprepared.
 
const char * tds_next_placeholder (const char *start)
 Get position of next placeholder.
 
TDSAUTHENTICATIONtds_ntlm_get_auth (TDSSOCKET *tds)
 Build a NTLMSPP packet to send to server.
 
TDS_INT tds_numeric_change_prec_scale (TDS_NUMERIC *numeric, unsigned char new_prec, unsigned char new_scale)
 
TDS_INT tds_numeric_to_string (const TDS_NUMERIC *numeric, char *s)
 
TDSERRNO tds_open_socket (TDSSOCKET *tds, struct addrinfo *ipaddr, unsigned int port, int timeout, int *p_oserr)
 
int tds_parse_boolean (const char *value, int default_value)
 
void tds_parse_conf_section (const char *option, const char *value, void *param)
 
unsigned char tds_peek (TDSSOCKET *tds)
 Reads a byte from the TDS stream without removing it.
 
TDSRET tds_process_cancel (TDSSOCKET *tds)
 
TDSRET tds_process_login_tokens (TDSSOCKET *tds)
 tds_process_login_tokens() is called after sending the login packet to the server.
 
TDSRET tds_process_simple_query (TDSSOCKET *tds)
 Process results for simple query as "SET TEXTSIZE" or "USE dbname" If the statement returns results, beware they are discarded.
 
TDSRET tds_process_tokens (TDSSOCKET *tds, TDS_INT *result_type, int *done_flags, unsigned flag)
 process all streams.
 
const char * tds_prtype (int token)
 Returns string representation of the given type.
 
char * tds_prwsaerror (int erc)
 
void tds_prwsaerror_free (char *s)
 
int tds_put_buf (TDSSOCKET *tds, const unsigned char *buf, int dsize, int ssize)
 
int tds_put_byte (TDSSOCKET *tds, unsigned char c)
 
int tds_put_cancel (TDSSOCKET *tds)
 
int tds_put_int (TDSSOCKET *tds, TDS_INT i)
 
int tds_put_int8 (TDSSOCKET *tds, TDS_INT8 i)
 
int tds_put_n (TDSSOCKET *tds, const void *buf, size_t n)
 
int tds_put_smallint (TDSSOCKET *tds, TDS_SMALLINT si)
 
int tds_put_string (TDSSOCKET *tds, const char *buf, int len)
 Output a string to wire automatic translate string to unicode if needed.
 
size_t tds_quote_id (TDSSOCKET *tds, char *buffer, const char *id, int idlen)
 Quote an id.
 
size_t tds_quote_id_rpc (TDSSOCKET *tds, char *buffer, const char *id, int idlen)
 Quote an id for a RPC call.
 
size_t tds_quote_string (TDSSOCKET *tds, char *buffer, const char *str, int len)
 Quote a string.
 
void tds_random_buffer (unsigned char *out, int len)
 
bool tds_read_conf_file (TDSLOGIN *login, const char *server)
 Read configuration info for given server return 0 on error.
 
bool tds_read_conf_section (FILE *in, const char *section, TDSCONFPARSE tds_conf_parse, void *parse_param)
 Read a section of configuration file (INI style file)
 
TDSLOGINtds_read_config_info (TDSSOCKET *tds, TDSLOGIN *login, TDSLOCALE *locale)
 tds_read_config_info() will fill the tds connection structure based on configuration information gathered in the following order: 1) Program specified in TDSLOGIN structure 2) The environment variables TDSVER, TDSDUMP, TDSPORT, TDSQUERY, TDSHOST 3) A config file with the following search order: a) a readable file specified by environment variable FREETDSCONF b) a readable file in ~/.freetds.conf c) a readable file in $prefix/etc/freetds.conf 3) ~/.interfaces if exists 4) $SYBASE/interfaces if exists 5) TDS_DEF_* default values
 
int tds_read_packet (TDSSOCKET *tds)
 Read in one 'packet' from the server.
 
void * tds_realloc (void **pp, size_t new_size)
 Reallocate a pointer and update it if success.
 
TDSPACKETtds_realloc_packet (TDSPACKET *packet, unsigned len)
 
TDSSOCKETtds_realloc_socket (TDSSOCKET *tds, size_t bufsize)
 
static void tds_release_cur_dyn (TDSSOCKET *tds)
 
void tds_release_cursor (TDSCURSOR **pcursor)
 
void tds_release_dynamic (TDSDYNAMIC **dyn)
 Frees dynamic statement.
 
int tds_select (TDSSOCKET *tds, unsigned tds_sel, int timeout_seconds)
 Select on a socket until it's available or the timeout expires.
 
TDSRET tds_send_cancel (TDSSOCKET *tds)
 tds_send_cancel() sends an empty packet (8 byte header only) tds_process_cancel should be called directly after this.
 
bool tds_set_app (TDSLOGIN *tds_login, const char *application) TDS_WUR
 
void tds_set_bulk (TDSLOGIN *tds_login, bool enabled)
 
bool tds_set_client_charset (TDSLOGIN *tds_login, const char *charset) TDS_WUR
 
void tds_set_column_type (TDSCONNECTION *conn, TDSCOLUMN *curcol, TDS_SERVER_TYPE type)
 Set type of column initializing all dependency.
 
void tds_set_cur_dyn (TDSSOCKET *tds, TDSDYNAMIC *dyn)
 Set current dynamic.
 
void tds_set_current_results (TDSSOCKET *tds, TDSRESULTINFO *info)
 
static void tds_set_current_send_packet (TDSSOCKET *tds, TDSPACKET *pkt)
 
bool tds_set_host (TDSLOGIN *tds_login, const char *hostname) TDS_WUR
 
TDSRET tds_set_interfaces_file_loc (const char *interfloc)
 Set the full name of interface file.
 
bool tds_set_language (TDSLOGIN *tds_login, const char *language) TDS_WUR
 
bool tds_set_library (TDSLOGIN *tds_login, const char *library) TDS_WUR
 
void tds_set_packet (TDSLOGIN *tds_login, int packet_size)
 
void tds_set_param_type (TDSCONNECTION *conn, TDSCOLUMN *curcol, TDS_SERVER_TYPE type)
 Set type of column initializing all dependency.
 
bool tds_set_passwd (TDSLOGIN *tds_login, const char *password) TDS_WUR
 
void tds_set_port (TDSLOGIN *tds_login, int port)
 
bool tds_set_server (TDSLOGIN *tds_login, const char *server) TDS_WUR
 Set the servername in a TDSLOGIN structure.
 
TDS_STATE tds_set_state (TDSSOCKET *tds, TDS_STATE state)
 Set state of TDS connection, with logging and checking.
 
bool tds_set_user (TDSLOGIN *tds_login, const char *username) TDS_WUR
 
void tds_set_version (TDSLOGIN *tds_login, TDS_TINYINT major_ver, TDS_TINYINT minor_ver)
 
const char * tds_skip_comment (const char *s)
 Skip a comment in a query.
 
const char * tds_skip_quoted (const char *s)
 Skip quoting string (like 'sfsf', "dflkdj" or [dfkjd])
 
void tds_socket_flush (TDS_SYS_SOCKET sock)
 
int tds_socket_set_nonblocking (TDS_SYS_SOCKET sock)
 Set socket to non-blocking.
 
void tds_srv_charset_changed (TDSCONNECTION *conn, const char *charset)
 
void tds_start_query (TDSSOCKET *tds, unsigned char packet_type)
 Start query packet of a given type.
 
char * tds_strndup (const void *s, TDS_INTPTR len)
 Copy a string of length len to a new allocated buffer This function does not read more than len bytes.
 
TDSRET tds_submit_begin_tran (TDSSOCKET *tds)
 Send a rollback request.
 
TDSRET tds_submit_commit (TDSSOCKET *tds, bool cont)
 Send a commit request.
 
TDSRET tds_submit_execdirect (TDSSOCKET *tds, const char *query, TDSPARAMINFO *params, TDSHEADERS *head)
 Submit a prepared query with parameters.
 
TDSRET tds_submit_execute (TDSSOCKET *tds, TDSDYNAMIC *dyn)
 Sends a previously prepared dynamic statement to the server.
 
TDSRET tds_submit_optioncmd (TDSSOCKET *tds, TDS_OPTION_CMD command, TDS_OPTION option, TDS_OPTION_ARG *param, TDS_INT param_size)
 Send option commands to server.
 
TDSRET tds_submit_prepare (TDSSOCKET *tds, const char *query, const char *id, TDSDYNAMIC **dyn_out, TDSPARAMINFO *params)
 Creates a temporary stored procedure in the server.
 
TDSRET tds_submit_query (TDSSOCKET *tds, const char *query)
 Sends a language string to the database server for processing.
 
TDSRET tds_submit_query_params (TDSSOCKET *tds, const char *query, TDSPARAMINFO *params, TDSHEADERS *head)
 Sends a language string to the database server for processing.
 
TDSRET tds_submit_queryf (TDSSOCKET *tds, const char *queryf,...)
 Format and submit a query.
 
TDSRET tds_submit_rollback (TDSSOCKET *tds, bool cont)
 Send a rollback request.
 
TDSRET tds_submit_rpc (TDSSOCKET *tds, const char *rpc_name, TDSPARAMINFO *params, TDSHEADERS *head)
 Calls a RPC from server.
 
TDSRET tds_submit_unprepare (TDSSOCKET *tds, TDSDYNAMIC *dyn)
 Send a unprepare request for a prepared query.
 
void tds_swap_bytes (void *buf, int bytes)
 
void tds_unget_byte (TDSSOCKET *tds)
 Unget will always work as long as you don't call it twice in a row.
 
TDSRET tds_vstrbuild (char *buffer, int buflen, int *resultlen, const char *text, int textlen, const char *formats, int formatlen, va_list ap)
 
void tds_wakeup_close (TDSPOLLWAKEUP *wakeup)
 
static TDS_SYS_SOCKET tds_wakeup_get_fd (const TDSPOLLWAKEUP *wakeup)
 
int tds_wakeup_init (TDSPOLLWAKEUP *wakeup)
 
void tds_wakeup_send (TDSPOLLWAKEUP *wakeup, char cancel)
 
TDSRET tds_write_packet (TDSSOCKET *tds, unsigned char final)
 
TDSRET tds_writetext_continue (TDSSOCKET *tds, const TDS_UCHAR *text, TDS_UINT size)
 Send some data in the writetext request started by tds_writetext_start.
 
TDSRET tds_writetext_end (TDSSOCKET *tds)
 Finish sending writetext data.
 
TDSRET tds_writetext_start (TDSSOCKET *tds, const char *objname, const char *textptr, const char *timestamp, int with_log, TDS_UINT size)
 Start writing writetext request.
 
void tdsdump_close (void)
 Close the TDS dump log file.
 
void tdsdump_col (const TDSCOLUMN *col)
 Write a column value to the debug log.
 
void tdsdump_dump_buf (const char *file, unsigned int level_line, const char *msg, const void *buf, size_t length)
 Dump the contents of data into the log file in a human readable format.
 
int tdsdump_isopen (void)
 
void tdsdump_log (const char *file, unsigned int level_line, const char *fmt,...)
 Write a message to the debug log.
 
void tdsdump_off (TDSDUMP_OFF_ITEM *off_item)
 Temporarily turn off logging for current thread.
 
void tdsdump_on (TDSDUMP_OFF_ITEM *off_item)
 Turn logging back on for current thread.
 
int tdsdump_open (const char *filename)
 Create and truncate a human readable dump file for the TDS traffic.
 
int tdserror (const TDSCONTEXT *tds_ctx, TDSSOCKET *tds, int msgno, int errnum)
 Call the client library's error handler (for library-generated errors only)
 

Variables

const char STD_DATETIME_FMT []
 
int tds_debug_flags
 
int tds_g_append_mode
 
const char tds_hex_digits []
 
const int tds_numeric_bytes_per_prec []
 The following little table is indexed by precision and will tell us the number of bytes required to store the specified precision.
 
const uint16_t tds_type_flags_ms [256]
 
int tds_write_dump
 Tell if TDS debug logging is turned on or off.
 

Detailed Description

Main include file for libtds.

Macro Definition Documentation

◆ TDS_BYTE_SWAP16

#define TDS_BYTE_SWAP16 (   value)
Value:
(((((uint16_t)value)<<8) & 0xFF00u) | \
((((uint16_t)value)>>8) & 0x00FFu))

◆ TDS_BYTE_SWAP32

#define TDS_BYTE_SWAP32 (   value)
Value:
(((((uint32_t)value)<<24) & 0xFF000000u)| \
((((uint32_t)value)<< 8) & 0x00FF0000u)| \
((((uint32_t)value)>> 8) & 0x0000FF00u)| \
((((uint32_t)value)>>24) & 0x000000FFu))

◆ TDS_IS_MSSQL

#define TDS_IS_MSSQL (   x)    (((x)->conn->product_version & 0x80000000u)!=0)

Check if product is Microsft SQL Server.

x should be a TDSSOCKET*.

◆ TDS_IS_SYBASE

#define TDS_IS_SYBASE (   x)    (!((x)->conn->product_version & 0x80000000u))

Check if product is Sybase (such as Adaptive Server Enterrprice).

x should be a TDSSOCKET*.

◆ TDS_MS_VER

#define TDS_MS_VER (   maj,
  min,
 
)    (0x80000000u|((maj)<<24)|((min)<<16)|(x))

Calc a version number for mssql.

Use with TDS_MS_VER(7,0,842). For test for a range of version you can use check like if (tds->product_version >= TDS_MS_VER(7,0,0) && tds->product_version < TDS_MS_VER(8,0,0))

◆ TDS_START_LEN_GENERIC

#define TDS_START_LEN_GENERIC (   tds_socket,
  len 
)
Value:
do { \
TDSFREEZE current_freeze[1]; \
tds_freeze((tds_socket), current_freeze, (len)); do { do
Information for a server connection.
Definition tds.h:1180
Definition tds.h:1602

Typedef Documentation

◆ TDS_COMPILETIME_SETTINGS

A structure to hold all the compile-time settings.

This structure is returned by tds_get_compiletime_settings

◆ TDS_ENCODING

typedef struct tds_encoding TDS_ENCODING

Information relevant to libiconv.

The name is an iconv name, not the same as found in master..syslanguages.

◆ TDSBLOB

typedef struct tds_blob TDSBLOB

Information about blobs (e.g.

text or image). current_row contains this structure.

Enumeration Type Documentation

◆ tds_end

enum tds_end

Flags returned in TDS_DONE token.

Enumerator
TDS_DONE_FINAL 

final result set, command completed successfully.

TDS_DONE_MORE_RESULTS 

more results follow

TDS_DONE_ERROR 

error occurred

TDS_DONE_INXACT 

transaction in progress

TDS_DONE_PROC 

results are from a stored procedure

TDS_DONE_COUNT 

count field in packet is valid

TDS_DONE_CANCELLED 

acknowledging an attention command (usually a cancel)

TDS_DONE_SRVERROR 

SQL server server error.

◆ tds_states

enum tds_states

values for tds->state

Enumerator
TDS_IDLE 

no data expected

TDS_WRITING 

client is writing data

TDS_SENDING 

client would send data

TDS_PENDING 

cilent is waiting for data

TDS_READING 

client is reading data

TDS_DEAD 

no connection

Function Documentation

◆ tds_bcp_done()

TDSRET tds_bcp_done ( TDSSOCKET tds,
int *  rows_copied 
)

Tell we finished sending BCP data to server.

Parameters
tdsA pointer to the TDSSOCKET structure managing a client/server operation.
[out]rows_copiednumber of rows copied to server
Here is the call graph for this function:
Here is the caller graph for this function:

◆ tds_bcp_fread()

TDSRET tds_bcp_fread ( TDSSOCKET tds,
TDSICONV char_conv,
FILE *  stream,
const char *  terminator,
size_t  term_len,
char **  outbuf,
size_t *  outbytes 
)

Read a data file, passing the data through iconv().

Return values
TDS_SUCCESSsuccess
TDS_FAILerror reading the column
TDS_NO_MORE_RESULTSend of file detected
Here is the call graph for this function:
Here is the caller graph for this function:

◆ tds_bcp_init()

TDSRET tds_bcp_init ( TDSSOCKET tds,
TDSBCPINFO bcpinfo 
)

Initialize BCP information.

Query structure of the table to server.

Parameters
tdsA pointer to the TDSSOCKET structure managing a client/server operation.
bcpinfoBCP information to initialize. Structure should be allocate and table name and direction should be already set.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ tds_bcp_send_record()

TDSRET tds_bcp_send_record ( TDSSOCKET tds,
TDSBCPINFO bcpinfo,
tds_bcp_get_col_data  get_col_data,
tds_bcp_null_error  null_error,
int  offset 
)

Send one row of data to server.

Parameters
tdsA pointer to the TDSSOCKET structure managing a client/server operation.
bcpinfoBCP information
get_col_datafunction to call to retrieve data to be sent
ignoredfunction to call if we try to send NULL if not allowed (not used)
offsetpassed to get_col_data and null_error to specify the row to get
Returns
TDS_SUCCESS or TDS_FAIL.
Here is the caller graph for this function:

◆ tds_bcp_start()

TDSRET tds_bcp_start ( TDSSOCKET tds,
TDSBCPINFO bcpinfo 
)

Start sending BCP data to server.

Initialize stream to accept data.

Parameters
tdsA pointer to the TDSSOCKET structure managing a client/server operation.
bcpinfoBCP information already prepared
Here is the call graph for this function:
Here is the caller graph for this function:

◆ tds_bcp_start_copy_in()

TDSRET tds_bcp_start_copy_in ( TDSSOCKET tds,
TDSBCPINFO bcpinfo 
)

Start bulk copy to server.

Parameters
tdsA pointer to the TDSSOCKET structure managing a client/server operation.
bcpinfoBCP information already prepared
Here is the call graph for this function:
Here is the caller graph for this function:

◆ tds_get_conversion_type()

TDS_SERVER_TYPE tds_get_conversion_type ( TDS_SERVER_TYPE  srctype,
int  colsize 
)

Return type suitable for conversions (convert all nullable types to fixed type)

Parameters
srctypetype to convert
colsizesize of type
Returns
type for conversion

◆ tds_get_locale()

TDSLOCALE * tds_get_locale ( void  )

Get locale information.

Returns
allocated structure with all information or NULL if error
Here is the call graph for this function:

◆ tds_iconv_alloc()

int tds_iconv_alloc ( TDSCONNECTION conn)

Allocate iconv stuff.

Returns
0 for success

◆ tds_numeric_to_string()

TDS_INT tds_numeric_to_string ( const TDS_NUMERIC numeric,
char *  s 
)
Returns
<0 if error

◆ tds_set_column_type()

void tds_set_column_type ( TDSCONNECTION conn,
TDSCOLUMN curcol,
TDS_SERVER_TYPE  type 
)

Set type of column initializing all dependency.

column_usertype should already be set.

Parameters
curcolcolumn to set
typetype to set
Here is the caller graph for this function:

◆ tds_set_param_type()

void tds_set_param_type ( TDSCONNECTION conn,
TDSCOLUMN curcol,
TDS_SERVER_TYPE  type 
)

Set type of column initializing all dependency.

Parameters
tdsstate information for the socket and the TDS protocol
curcolcolumn to set
typetype to set
Here is the call graph for this function:

◆ tds_set_server()

bool tds_set_server ( TDSLOGIN tds_login,
const char *  server 
)

Set the servername in a TDSLOGIN structure.

Normally copies server into tds_login. If server does not point to a plausible name, the environment variables TDSQUERY and DSQUERY are used, in that order. If they don't exist, the "default default" servername is "SYBASE" (although the utility of that choice is a bit murky).

Parameters
tds_loginpoints to a TDSLOGIN structure
serverthe servername, or NULL, or a zero-length string
Todo:
open the log file earlier, so these messages can be seen.
Here is the call graph for this function:

◆ tds_set_state()

TDS_STATE tds_set_state ( TDSSOCKET tds,
TDS_STATE  state 
)

Set state of TDS connection, with logging and checking.

Parameters
tdsstate information for the socket and the TDS protocol
statethe new state of the connection, cf. TDS_STATE.
Returns
the new state, which might not be state.
Here is the call graph for this function:

◆ tds_strndup()

char * tds_strndup ( const void *  s,
TDS_INTPTR  len 
)

Copy a string of length len to a new allocated buffer This function does not read more than len bytes.

Please note that some system implementations of strndup do not assure they don't read past len bytes as they use still strlen to check length to copy limiting after strlen to size passed. String returned is NUL terminated.

Parameters
sstring to copy from
lenlength to copy
Returns
string copied or NULL if errors

◆ tds_writetext_continue()

TDSRET tds_writetext_continue ( TDSSOCKET tds,
const TDS_UCHAR *  text,
TDS_UINT  size 
)

Send some data in the writetext request started by tds_writetext_start.

You should write in total (with multiple calls to this function) all bytes declared calling tds_writetext_start.

Parameters
tdsA pointer to the TDSSOCKET structure managing a client/server operation.
textdata to write
sizedata size in bytes
Here is the caller graph for this function:

◆ tds_writetext_end()

TDSRET tds_writetext_end ( TDSSOCKET tds)

Finish sending writetext data.

Parameters
tdsA pointer to the TDSSOCKET structure managing a client/server operation.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ tds_writetext_start()

TDSRET tds_writetext_start ( TDSSOCKET tds,
const char *  objname,
const char *  textptr,
const char *  timestamp,
int  with_log,
TDS_UINT  size 
)

Start writing writetext request.

This request start a bulk session.

Parameters
tdsA pointer to the TDSSOCKET structure managing a client/server operation.
objnametable name
textptrTEXTPTR (see sql documentation)
timestampdata timestamp
with_logis log is enabled during insert
sizebytes to be inserted
Here is the call graph for this function:
Here is the caller graph for this function:

◆ tdsdump_col()

void tdsdump_col ( const TDSCOLUMN col)

Write a column value to the debug log.


Parameters
colcolumn to dump
Here is the call graph for this function:

◆ tdsdump_dump_buf()

void tdsdump_dump_buf ( const char *  file,
unsigned int  level_line,
const char *  msg,
const void *  buf,
size_t  length 
)

Dump the contents of data into the log file in a human readable format.

Parameters
filesource file name
level_lineline and level combined. This and file are automatically computed by TDS_DBG_* macros.
msgmessage to print before dump
bufbuffer to dump
lengthnumber of bytes in the buffer

◆ tdsdump_log()

void tdsdump_log ( const char *  file,
unsigned int  level_line,
const char *  fmt,
  ... 
)

Write a message to the debug log.


Parameters
filename of the log file
level_linekind of detail to be included
fmtprintf-like format string

◆ tdsdump_off()

void tdsdump_off ( TDSDUMP_OFF_ITEM off_item)

Temporarily turn off logging for current thread.

Parameters
off_itemList item to be used by the function. The item will be initialized by the function. It's retained till is removed with tdsdump_on so it must be kept alive.

◆ tdsdump_on()

void tdsdump_on ( TDSDUMP_OFF_ITEM off_item)

Turn logging back on for current thread.

Parameters
off_itemList item to remove from global list. Previously used by tdsdump_off().

◆ tdsdump_open()

int tdsdump_open ( const char *  filename)

Create and truncate a human readable dump file for the TDS traffic.

The name of the file is specified by the filename parameter. If that is given as NULL or an empty string, any existing log file will be closed.

Returns
true if the file was opened, false if it couldn't be opened.

◆ tdserror()

int tdserror ( const TDSCONTEXT tds_ctx,
TDSSOCKET tds,
int  msgno,
int  errnum 
)

Call the client library's error handler (for library-generated errors only)

The client library error handler may return: TDS_INT_CANCEL – Return TDS_FAIL to the calling function. For TDSETIME, closes the connection first. TDS_INT_CONTINUE – For TDSETIME only, retry the network read/write operation. Else invalid. TDS_INT_TIMEOUT – For TDSETIME only, send a TDSCANCEL packet. Else invalid.

These are Sybase semantics, but they serve all purposes.
The application tells the library to quit, fail, retry, or attempt to cancel. In the event of a network timeout, a failed operation necessarily means the connection becomes unusable, because no cancellation dialog was concluded with the server.

It is the client library's duty to call the error handler installed by the application, if any, and to interpret the installed handler's return code. It may return to this function one of the above codes only. This function will not check the return code because there's nothing that can be done here except abort. It is merely passed to the calling function, which will (we hope) DTRT.

Parameters
tds_ctxpoints to a TDSCONTEXT structure
tdsthe connection structure, may be NULL if not connected
msgnoan enumerated libtds msgno, cf. tds.h
errnumthe OS errno, if it matters, else zero
Returns
client library function's return code
Here is the call graph for this function:

Variable Documentation

◆ tds_numeric_bytes_per_prec

const int tds_numeric_bytes_per_prec[]
extern

The following little table is indexed by precision and will tell us the number of bytes required to store the specified precision.

The following little table is indexed by precision and will tell us the number of bytes required to store the specified precision.

Support precision up to 77 digits