Loading...
Searching...
No Matches
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/thread.h>`
`#include <freetds/bool.h>`
`#include <freetds/macros.h>`
`#include <freetds/utils/string.h>`
`#include <freetds/utils/path.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 information about a cursor. More...
struct | tds_cursor_status
struct | TDS_DATETIMEALL
| This structure is not directly connected to 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 information. 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_TDS80_PLUS(x) ((x)->tds_version>=0x800)
#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_END_LEN_STRING while(0); } while(tds_freeze_close_string(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 Microsoft SQL Server.
#define | TDS_IS_SYBASE(x) (!((x)->conn->product_version & 0x80000000u))
| Check if product is Sybase (such as Adaptive Server Enterprise).
#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_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_ENCRYPTION_STRICT "strict"
#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_SSLHOSTNAME "certificate hostname"
#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 int(* | int_handler_t) (void *)
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 bool(* | 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 information 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 information.

## 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 , TDS_ENCRYPTION_STRICT }
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)
TDSAUTHENTICATION * | tds5_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])
TDSRET | tds8_adjust_login (TDSLOGIN *login)
| Make sure proper setting are in place for TDS 8.0.
const char * | tds_addrinfo2str (struct addrinfo *addr, char *name, int namemax)
TDSSOCKET * | tds_alloc_additional_socket (TDSCONNECTION *conn)
BCPCOLDATA * | tds_alloc_bcp_column_data (unsigned int column_size)
TDSBCPINFO * | tds_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)
TDSCONTEXT * | tds_alloc_context (void *parent)
TDSCURSOR * | tds_alloc_cursor (TDSSOCKET *tds, const char *name, TDS_INT namelen, const char *query, TDS_INT querylen)
TDSDYNAMIC * | tds_alloc_dynamic (TDSCONNECTION *conn, const char *id)
| Allocate a dynamic statement.
TDSLOCALE * | tds_alloc_locale (void)
TDSLOGIN * | tds_alloc_login (bool use_environment)
char * | tds_alloc_lookup_sqlstate (TDSSOCKET *tds, int msgno)
TDSPACKET * | tds_alloc_packet (void *buf, unsigned len)
void * | tds_alloc_param_data (TDSCOLUMN *curparam)
| Allocate data for a parameter.
TDSPARAMINFO * | tds_alloc_param_result (TDSPARAMINFO *old_param)
| Adds a output parameter to TDSPARAMINFO.
TDSRESULTINFO * | tds_alloc_results (TDS_USMALLINT num_cols)
TDSRET | tds_alloc_row (TDSRESULTINFO *res_info)
| Allocate space for row store return NULL on out of memory.
TDSSOCKET * | tds_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.
TDSRET | tds_connect_and_login (TDSSOCKET *tds, TDSLOGIN *login)
void | tds_connection_close (TDSCONNECTION *conn)
void | tds_connection_coalesce (TDSSOCKET *tds)
void | tds_connection_flush (TDSSOCKET *tds)
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, bool *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, bool *send)
TDSRET | tds_cursor_setname (TDSSOCKET *tds, TDSCURSOR *cursor)
TDSRET | tds_cursor_setrows (TDSSOCKET *tds, TDSCURSOR *cursor, bool *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)
DSTR * | tds_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)
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.
TDSRET | tds_freeze_close_string (TDSFREEZE *freeze)
| 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_SETTINGS * | tds_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)
TDSLOCALE * | tds_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 uint32 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 uint16 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)
TDSAUTHENTICATION * | tds_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)
TDSICONV * | tds_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)
TDSLOGIN * | tds_init_login (TDSLOGIN *login, TDSLOCALE *locale)
| Initialize login structure with locale information and other stuff for connection.
int | tds_init_write_buf (TDSSOCKET *tds)
TDSDYNAMIC * | tds_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.
TDSAUTHENTICATION * | tds_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)
bool | 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)
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)
TDSLOGIN * | tds_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.
TDSPACKET * | tds_realloc_packet (TDSPACKET *packet, unsigned len)
TDSSOCKET * | tds_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])
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.
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 tds_dir_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_append_mode
int | tds_debug_flags
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]
bool | 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 Microsoft 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 Enterprise).

x should be a TDSSOCKET*.

## TDS_MS_VER

#define TDS_MS_VER | ( |  | maj,
|  |  | min,
|  |  | x
| ) |  | (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
tds_socket
Information for a server connection.
Definition tds.h:1163
tds_freeze
Definition tds.h:1584

## Typedef Documentation

## TDS_COMPILETIME_SETTINGS

typedef struct tds_compiletime_settings 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_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

  | tds | A pointer to the TDSSOCKET structure managing a client/server operation.
  [out] | rows_copied | number 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_SUCCESS | success
  TDS_FAIL | error reading the column
  TDS_NO_MORE_RESULTS | end 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

  tds | A pointer to the TDSSOCKET structure managing a client/server operation.
  bcpinfo | BCP 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

  tds | A pointer to the TDSSOCKET structure managing a client/server operation.
  bcpinfo | BCP information
  get_col_data | function to call to retrieve data to be sent
  ignored | function to call if we try to send NULL if not allowed (not used)
  offset | passed 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

  tds | A pointer to the TDSSOCKET structure managing a client/server operation.
  bcpinfo | BCP 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

  tds | A pointer to the TDSSOCKET structure managing a client/server operation.
  bcpinfo | BCP 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

  srctype | type to convert
  colsize | size 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

  curcol | column to set
  type | type 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

  tds | state information for the socket and the TDS protocol
  curcol | column to set
  type | type 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_login | points to a TDSLOGIN structure
  server | the 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

  tds | state information for the socket and the TDS protocol
  state | the 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_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

  tds | A pointer to the TDSSOCKET structure managing a client/server operation.
  text | data to write
  size | data 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

  tds | A 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

  tds | A pointer to the TDSSOCKET structure managing a client/server operation.
  objname | table name
  textptr | TEXTPTR (see sql documentation)
  timestamp | data timestamp
  with_log | is log is enabled during insert
  size | bytes 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

  col | column 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

  file | source file name
  level_line | line and level combined. This and file are automatically computed by TDS_DBG_* macros.
  msg | message to print before dump
  buf | buffer to dump
  length | number 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

  file | name of the log file
  level_line | kind of detail to be included
  fmt | printf-like format string

## tdsdump_off()

void tdsdump_off | ( | TDSDUMP_OFF_ITEM * | off_item | ) |

Temporarily turn off logging for current thread.

Parameters

  off_item | List 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_item | List item to remove from global list. Previously used by tdsdump_off().

## tdsdump_open()

int tdsdump_open | ( | const tds_dir_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_ctx | points to a TDSCONTEXT structure
  tds | the connection structure, may be NULL if not connected
  msgno | an enumerated libtds msgno, cf. tds.h
  errnum | the 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