Main Page Modules Compound List File List Compound Members File Members Related Pages

# tds.h File Reference

Main include file for libtds. More...

`#include <stdio.h>`
`#include <stdarg.h>`
`#include <time.h>`
`#include "tdsver.h"`
`#include "tds_sysdep_public.h"`

Go to the source code of this file.

## Compounds

struct | _tds_bcpcoldata
struct | _tds_compiletime_settings
| A structure to hold all the compile-time settings. More...
struct | _tds_cursor
struct | _tds_cursor_status
struct | _tds_encoding
| Information relevant to libiconv. More...
struct | DSTR_STRUCT
struct | TDS8_COLLATION
| TDS 8.0 collation information. More...
union | tds_align_struct
struct | tds_answer
struct | tds_blob
| Information about blobs (e.g. More...
struct | tds_column
| Metadata about columns in regular and compute rows. More...
struct | tds_connection
struct | tds_context
struct | tds_dynamic
struct | tds_env
struct | tds_locale
struct | tds_login
struct | tds_message
union | tds_option_arg
struct | tds_result_info
| Hold information for any results. More...
struct | tds_socket
struct | tds_upd_col
struct | tdsdaterec
| information on data, used by tds_datecrack More...
struct | tdsdatetime
struct | tdsdatetime4
union | tdsmoney
struct | tdsmoney4
struct | tdsnumeric
struct | tdsoldmoney
struct | tdsunique
struct | tdsvarbinary
struct | tdsvarchar

## Defines

#define | TDS_SUCCEED 1
#define | TDS_FAIL 0
#define | TDS_NO_MORE_RESULTS 2
#define | TDS_REG_ROW -1
#define | TDS_NO_MORE_ROWS -2
#define | TDS_COMP_ROW -3
#define | TDS_END_ROW -4
#define | TDS_INT_EXIT 0
#define | TDS_INT_CONTINUE 1
#define | TDS_INT_CANCEL 2
#define | TDS_INT_TIMEOUT 3
#define | TDS_NO_COUNT -1
#define | TDS_ROW_RESULT 4040
#define | TDS_PARAM_RESULT 4042
#define | TDS_STATUS_RESULT 4043
#define | TDS_MSG_RESULT 4044
#define | TDS_COMPUTE_RESULT 4045
#define | TDS_CMD_DONE 4046
#define | TDS_CMD_SUCCEED 4047
#define | TDS_CMD_FAIL 4048
#define | TDS_ROWFMT_RESULT 4049
#define | TDS_COMPUTEFMT_RESULT 4050
#define | TDS_DESCRIBE_RESULT 4051
#define | TDS_DONE_RESULT 4052
#define | TDS_DONEPROC_RESULT 4053
#define | TDS_DONEINPROC_RESULT 4054
#define | TDS_ERROR 3
#define | TDS_DONT_RETURN 42
#define | TDS5_PARAMFMT2_TOKEN 32
#define | TDS_LANGUAGE_TOKEN 33
#define | TDS_ORDERBY2_TOKEN 34
#define | TDS_ROWFMT2_TOKEN 97
#define | TDS_LOGOUT_TOKEN 113
#define | TDS_RETURNSTATUS_TOKEN 121
#define | TDS_PROCID_TOKEN 124
#define | TDS7_RESULT_TOKEN 129
#define | TDS7_COMPUTE_RESULT_TOKEN 136
#define | TDS_COLNAME_TOKEN 160
#define | TDS_COLFMT_TOKEN 161
#define | TDS_DYNAMIC2_TOKEN 163
#define | TDS_TABNAME_TOKEN 164
#define | TDS_COLINFO_TOKEN 165
#define | TDS_OPTIONCMD_TOKEN 166
#define | TDS_COMPUTE_NAMES_TOKEN 167
#define | TDS_COMPUTE_RESULT_TOKEN 168
#define | TDS_ORDERBY_TOKEN 169
#define | TDS_ERROR_TOKEN 170
#define | TDS_INFO_TOKEN 171
#define | TDS_PARAM_TOKEN 172
#define | TDS_LOGINACK_TOKEN 173
#define | TDS_CONTROL_TOKEN 174
#define | TDS_ROW_TOKEN 209
#define | TDS_CMP_ROW_TOKEN 211
#define | TDS5_PARAMS_TOKEN 215
#define | TDS_CAPABILITY_TOKEN 226
#define | TDS_ENVCHANGE_TOKEN 227
#define | TDS_EED_TOKEN 229
#define | TDS_DBRPC_TOKEN 230
#define | TDS5_DYNAMIC_TOKEN 231
#define | TDS5_PARAMFMT_TOKEN 236
#define | TDS_AUTH_TOKEN 237
#define | TDS_RESULT_TOKEN 238
#define | TDS_DONE_TOKEN 253
#define | TDS_DONEPROC_TOKEN 254
#define | TDS_DONEINPROC_TOKEN 255
#define | TDS_CURCLOSE_TOKEN 128
#define | TDS_CURFETCH_TOKEN 130
#define | TDS_CURINFO_TOKEN 131
#define | TDS_CUROPEN_TOKEN 132
#define | TDS_CURDECLARE_TOKEN 134
#define | IS_DECLARE 100
#define | IS_CURROW 200
#define | IS_OPEN 300
#define | IS_CLOSE 400
#define | PROCESS_ROWS 0
#define | PROCESS_RESULTS 1
#define | CANCEL_PROCESS 2
#define | GOTO_1ST_ROW 3
#define | LOGIN 4
#define | TDS_ENV_DATABASE 1
#define | TDS_ENV_LANG 2
#define | TDS_ENV_CHARSET 3
#define | TDS_ENV_PACKSIZE 4
#define | TDS_ENV_LCID 5
#define | TDS_ENV_SQLCOLLATION 7
#define | TDS_NULLTERM -9
#define | TDS_SP_CURSOR 1
#define | TDS_SP_CURSOROPEN 2
#define | TDS_SP_CURSORPREPARE 3
#define | TDS_SP_CURSOREXECUTE 4
#define | TDS_SP_CURSORPREPEXEC 5
#define | TDS_SP_CURSORUNPREPARE 6
#define | TDS_SP_CURSORFETCH 7
#define | TDS_SP_CURSOROPTION 8
#define | TDS_SP_CURSORCLOSE 9
#define | TDS_SP_EXECUTESQL 10
#define | TDS_SP_PREPARE 11
#define | TDS_SP_EXECUTE 12
#define | TDS_SP_PREPEXEC 13
#define | TDS_SP_PREPEXECRPC 14
#define | TDS_SP_UNPREPARE 15
#define | SYBCHAR SYBCHAR
#define | SYBVARCHAR SYBVARCHAR
#define | SYBINTN SYBINTN
#define | SYBINT1 SYBINT1
#define | SYBINT2 SYBINT2
#define | SYBINT4 SYBINT4
#define | SYBINT8 SYBINT8
#define | SYBFLT8 SYBFLT8
#define | SYBDATETIME SYBDATETIME
#define | SYBBIT SYBBIT
#define | SYBTEXT SYBTEXT
#define | SYBNTEXT SYBNTEXT
#define | SYBIMAGE SYBIMAGE
#define | SYBMONEY4 SYBMONEY4
#define | SYBMONEY SYBMONEY
#define | SYBDATETIME4 SYBDATETIME4
#define | SYBREAL SYBREAL
#define | SYBBINARY SYBBINARY
#define | SYBVOID SYBVOID
#define | SYBVARBINARY SYBVARBINARY
#define | SYBNVARCHAR SYBNVARCHAR
#define | SYBBITN SYBBITN
#define | SYBNUMERIC SYBNUMERIC
#define | SYBDECIMAL SYBDECIMAL
#define | SYBFLTN SYBFLTN
#define | SYBMONEYN SYBMONEYN
#define | SYBDATETIMN SYBDATETIMN
#define | XSYBCHAR XSYBCHAR
#define | XSYBVARCHAR XSYBVARCHAR
#define | XSYBNVARCHAR XSYBNVARCHAR
#define | XSYBNCHAR XSYBNCHAR
#define | XSYBVARBINARY XSYBVARBINARY
#define | XSYBBINARY XSYBBINARY
#define | SYBLONGBINARY SYBLONGBINARY
#define | SYBSINT1 SYBSINT1
#define | SYBUINT2 SYBUINT2
#define | SYBUINT4 SYBUINT4
#define | SYBUINT8 SYBUINT8
#define | SYBUNIQUE SYBUNIQUE
#define | SYBVARIANT SYBVARIANT
#define | SYBAOPCNT 0x4b
#define | SYBAOPCNTU 0x4c
#define | SYBAOPSUM 0x4d
#define | SYBAOPSUMU 0x4e
#define | SYBAOPAVG 0x4f
#define | SYBAOPAVGU 0x50
#define | SYBAOPMIN 0x51
#define | SYBAOPMAX 0x52
#define | SYBAOPCNT_BIG 0x09
#define | SYBAOPSTDEV 0x30
#define | SYBAOPSTDEVP 0x31
#define | SYBAOPVAR 0x32
#define | SYBAOPVARP 0x33
#define | SYBAOPCHECKSUM_AGG 0x72
#define | TDS_ZERO_FREE(x) do {free((x)); (x) = NULL;} while(0)
#define | TDS_VECTOR_SIZE(x) (sizeof(x)/sizeof(x[0]))
#define | TDS_BYTE_SWAP16(value)
#define | TDS_BYTE_SWAP32(value)
#define | is_end_token(x)
#define | is_hard_end_token(x)
#define | is_msg_token(x)
#define | is_result_token(x)
#define | is_fixed_type(x)
#define | is_nullable_type(x)
#define | is_blob_type(x) (x==SYBTEXT || x==SYBIMAGE || x==SYBNTEXT)
#define | is_numeric_type(x) (x==SYBNUMERIC || x==SYBDECIMAL)
#define | is_unicode_type(x) (x==XSYBNVARCHAR || x==XSYBNCHAR || x==SYBNTEXT)
#define | is_collate_type(x) (x==XSYBVARCHAR || x==XSYBCHAR || x==SYBTEXT || x==XSYBNVARCHAR || x==XSYBNCHAR || x==SYBNTEXT)
#define | is_ascii_type(x) ( x==XSYBCHAR || x==XSYBVARCHAR || x==SYBTEXT || x==SYBCHAR || x==SYBVARCHAR)
#define | is_binary_type(x) (x==SYBLONGBINARY)
#define | is_char_type(x) (is_unicode_type(x) || is_ascii_type(x))
#define | is_similar_type(x, y) ((is_char_type(x) && is_char_type(y)) || ((is_unicode_type(x) && is_unicode_type(y))))
#define | TDS_MAX_CAPABILITY 22
#define | MAXPRECISION 80
#define | TDS_MAX_CONN 4096
#define | TDS_MAX_DYNID_LEN 30
#define | TDS_DEF_SERVER "SYBASE"
#define | TDS_DEF_BLKSZ 512
#define | TDS_DEF_CHARSET "iso_1"
#define | TDS_DEF_LANG "us_english"
#define | TDS_DEF_MAJOR 5
#define | TDS_DEF_MINOR 0
#define | TDS_DEF_PORT 4000
#define | TDS_STR_VERSION "tds version"
#define | TDS_STR_BLKSZ "initial block size"
#define | TDS_STR_SWAPDT "swap broken dates"
#define | TDS_STR_SWAPMNY "swap broken money"
#define | TDS_STR_TRYSVR "try server login"
#define | TDS_STR_TRYDOM "try domain login"
#define | TDS_STR_DOMAIN "nt domain"
#define | TDS_STR_XDOMAUTH "cross domain login"
#define | TDS_STR_DUMPFILE "dump file"
#define | TDS_STR_DEBUGLVL "debug level"
#define | TDS_STR_TIMEOUT "timeout"
#define | TDS_STR_CONNTIMEOUT "connect timeout"
#define | TDS_STR_HOSTNAME "hostname"
#define | TDS_STR_HOST "host"
#define | TDS_STR_PORT "port"
#define | TDS_STR_TEXTSZ "text size"
#define | TDS_STR_EMUL_LE "emulate little endian"
#define | TDS_STR_CHARSET "charset"
#define | TDS_STR_CLCHARSET "client charset"
#define | TDS_STR_LANGUAGE "language"
#define | TDS_STR_APPENDMODE "dump file append"
#define | TDS_STR_DATEFMT "date format"
#define | TDS_ALIGN_SIZE sizeof(tds_align_struct)
#define | TDS_MAX_LOGIN_STR_SZ 30
#define | TDS_SF_BIN (TDS_USMALLINT) 0x100
#define | TDS_SF_WIDTH_INSENSITIVE (TDS_USMALLINT) 0x080
#define | TDS_SF_KATATYPE_INSENSITIVE (TDS_USMALLINT) 0x040
#define | TDS_SF_ACCENT_SENSITIVE (TDS_USMALLINT) 0x020
#define | TDS_SF_CASE_INSENSITIVE (TDS_USMALLINT) 0x010
#define | TDS_UT_TIMESTAMP 80
#define | TDS_DBG_FUNC 7
#define | TDS_DBG_INFO2 6
#define | TDS_DBG_INFO1 5
#define | TDS_DBG_NETWORK 4
#define | TDS_DBG_WARN 3
#define | TDS_DBG_ERROR 2
#define | TDS_DBG_SEVERE 1
#define | tds_put_tinyint(tds, ti) tds_put_byte(tds,ti)
| Output a tinyint value.
#define | IS_TDS42(x) (x->major_version==4 && x->minor_version==2)
#define | IS_TDS46(x) (x->major_version==4 && x->minor_version==6)
#define | IS_TDS50(x) (x->major_version==5 && x->minor_version==0)
#define | IS_TDS70(x) (x->major_version==7 && x->minor_version==0)
#define | IS_TDS80(x) (x->major_version==8 && x->minor_version==0)
#define | IS_TDS7_PLUS(x) ( IS_TDS70(x) || IS_TDS80(x) )
#define | IS_TDSDEAD(x) (((x) == NULL) || TDS_IS_SOCKET_INVALID((x)->s))
#define | TDS_IS_SYBASE(x) (!(x->product_version & 0x80000000u))
| Check if product is Sybase (such as Adaptive Server Enterrprice).
#define | TDS_IS_MSSQL(x) ((x->product_version & 0x80000000u)!=0)
| Check if product is Microsft SQL Server.
#define | TDS_MS_VER(maj, min, x) (0x80000000u|((maj)<<24)|((min)<<16)|(x))
| Calc a version number for mssql.
#define | TDS_SYB_VER(maj, min, x) (((maj)<<24)|((min)<<16)|(x)<<8)
| Calc a version number for Sybase.

## Typedefs

typedef tdsiconvinfo | TDSICONV
typedef tds_socket | TDSSOCKET
typedef _tds_compiletime_settings | TDS_COMPILETIME_SETTINGS
| A structure to hold all the compile-time settings.
typedef DSTR_STRUCT * | DSTR
typedef char | TDS_CHAR
typedef unsigned char | TDS_UCHAR
typedef unsigned char | TDS_TINYINT
typedef tds_sysdep_int16_type | TDS_SMALLINT
typedef unsigned tds_sysdep_int16_type | TDS_USMALLINT
typedef tds_sysdep_int32_type | TDS_INT
typedef unsigned tds_sysdep_int32_type | TDS_UINT
typedef tds_sysdep_real32_type | TDS_REAL
typedef tds_sysdep_real64_type | TDS_FLOAT
typedef tds_sysdep_int64_type | TDS_INT8
typedef unsigned tds_sysdep_int64_type | TDS_UINT8
typedef tds_sysdep_intptr_type | TDS_INTPTR
typedef tdsnumeric | TDS_NUMERIC
typedef tdsoldmoney | TDS_OLD_MONEY
typedef tdsmoney | TDS_MONEY
typedef tdsmoney4 | TDS_MONEY4
typedef tdsdatetime | TDS_DATETIME
typedef tdsdatetime4 | TDS_DATETIME4
typedef tdsvarbinary | TDS_VARBINARY
typedef tdsvarchar | TDS_VARCHAR
typedef tdsunique | TDS_UNIQUE
typedef tdsdaterec | TDSDATEREC
| information on data, used by tds_datecrack
typedef tds_option_arg | TDS_OPTION_ARG
typedef tds_login | TDSLOGIN
typedef tds_connection | TDSCONNECTION
typedef tds_locale | TDSLOCALE
typedef tds_blob | TDSBLOB
| Information about blobs (e.g.
typedef _tds_encoding | TDS_ENCODING
| Information relevant to libiconv.
typedef _tds_bcpcoldata | BCPCOLDATA
typedef tds_column | TDSCOLUMN
| Metadata about columns in regular and compute rows.
typedef tds_result_info | TDSRESULTINFO
| Hold information for any results.
typedef tds_result_info | TDSCOMPUTEINFO
typedef TDSRESULTINFO | TDSPARAMINFO
typedef tds_message | TDSMESSAGE
typedef tds_upd_col | TDSUPDCOL
typedef _tds_cursor_status | TDS_CURSOR_STATUS
typedef _tds_cursor | TDSCURSOR
typedef tds_env | TDSENV
typedef tds_dynamic | TDSDYNAMIC
typedef tds_context | TDSCONTEXT
typedef void(* | TDSCONFPARSE )(const char *option, const char *value, void *param)
typedef tds_answer | TDSANSWER

## Enumerations

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 }
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_SERVER_TYPE {
SYBCHAR = 47, SYBVARCHAR = 39, SYBINTN = 38, SYBINT1 = 48,
SYBINT2 = 52, SYBINT4 = 56, SYBINT8 = 127, SYBFLT8 = 62,
SYBDATETIME = 61, SYBBIT = 50, SYBTEXT = 35, SYBNTEXT = 99,
SYBIMAGE = 34, SYBMONEY4 = 122, SYBMONEY = 60, SYBDATETIME4 = 58,
SYBREAL = 59, SYBBINARY = 45, SYBVOID = 31, SYBVARBINARY = 37,
SYBNVARCHAR = 103, SYBBITN = 104, SYBNUMERIC = 108, SYBDECIMAL = 106,
SYBFLTN = 109, SYBMONEYN = 110, SYBDATETIMN = 111, XSYBCHAR = 175,
XSYBVARCHAR = 167, XSYBNVARCHAR = 231, XSYBNCHAR = 239, XSYBVARBINARY = 165,
XSYBBINARY = 173, SYBLONGBINARY = 225, SYBSINT1 = 64, SYBUINT2 = 65,
SYBUINT4 = 66, SYBUINT8 = 67, SYBUNIQUE = 36, SYBVARIANT
}

enum | TDS_USER_TYPE { USER_UNICHAR_TYPE = 34, USER_UNIVARCHAR_TYPE = 35 }
enum | TDS_OPTION_CMD { TDS_OPT_SET = 1, TDS_OPT_DEFAULT = 2, TDS_OPT_LIST = 3, TDS_OPT_INFO = 4 }
| options that can be sent with a TDS_OPTIONCMD token

enum

TDS_OPTION {
TDS_OPT_DATEFIRST = 1, TDS_OPT_TEXTSIZE = 2, TDS_OPT_STAT_TIME = 3, TDS_OPT_STAT_IO = 4,
TDS_OPT_ROWCOUNT = 5, TDS_OPT_NATLANG = 6, TDS_OPT_DATEFORMAT = 7, TDS_OPT_ISOLATION = 8,
TDS_OPT_AUTHON = 9, TDS_OPT_CHARSET = 10, TDS_OPT_SHOWPLAN = 13, TDS_OPT_NOEXEC = 14,
TDS_OPT_ARITHIGNOREON = 15, TDS_OPT_ARITHABORTON = 17, TDS_OPT_PARSEONLY = 18, TDS_OPT_GETDATA = 20,
TDS_OPT_NOCOUNT = 21, TDS_OPT_FORCEPLAN = 23, TDS_OPT_FORMATONLY = 24, TDS_OPT_CHAINXACTS = 25,
TDS_OPT_CURCLOSEONXACT = 26, TDS_OPT_FIPSFLAG = 27, TDS_OPT_RESTREES = 28, TDS_OPT_IDENTITYON = 29,
TDS_OPT_CURREAD = 30, TDS_OPT_CURWRITE = 31, TDS_OPT_IDENTITYOFF = 32, TDS_OPT_AUTHOFF = 33,
TDS_OPT_ANSINULL = 34, TDS_OPT_QUOTED_IDENT = 35, TDS_OPT_ARITHIGNOREOFF = 36, TDS_OPT_ARITHABORTOFF = 37,
TDS_OPT_TRUNCABORT = 38
}

enum | { TDS_OPT_ARITHOVERFLOW = 0x01, TDS_OPT_NUMERICTRUNC = 0x02 }
enum | TDS_OPT_DATEFIRST_CHOICE { TDS_OPT_MONDAY = 1, TDS_OPT_TUESDAY = 2, TDS_OPT_WEDNESDAY = 3, TDS_OPT_THURSDAY = 4, TDS_OPT_FRIDAY = 5, TDS_OPT_SATURDAY, TDS_OPT_SUNDAY = 7 }
enum | TDS_OPT_DATEFORMAT_CHOICE { TDS_OPT_FMTMDY = 1, TDS_OPT_FMTDMY = 2, TDS_OPT_FMTYMD = 3, TDS_OPT_FMTYDM = 4, TDS_OPT_FMTMYD = 5, TDS_OPT_FMTDYM = 6 }
enum | TDS_OPT_ISOLATION_CHOICE { TDS_OPT_LEVEL1 = 1, TDS_OPT_LEVEL3 = 3 }
enum | { TDS_SYSNAME_SIZE = 512 }
enum | { TDS_QUERYING, TDS_PENDING, TDS_IDLE, TDS_CANCELED, TDS_DEAD }
enum | TDS_DBG_LOG_STATE { TDS_DBG_LOGIN = 1, TDS_DBG_API = (1 << 1), TDS_DBG_ASYNC = (1 << 2), TDS_DBG_DIAG = (1 << 3), TDS_DBG_error = (1 << 4), TDS_DBG_PACKET = (1 << 5), TDS_DBG_LIBTDS = (1 << 6), TDS_DBG_CONFIG = (1 << 7), TDS_DBG_DEFAULT = 0xFE }
| An attempt at better logging. More...
enum | TDS_CURSOR_STATE { TDS_CURSOR_STATE_UNACTIONED = 0, TDS_CURSOR_STATE_REQUESTED = 1, TDS_CURSOR_STATE_SENT = 2 }
enum | TDS_ICONV_ENTRY { client2ucs2, client2server_chardata, iso2server_metadata, initial_char_conv_count }

## Functions

void | tds_set_longquery_handler (TDSLOGIN *tds_login, void(*longquery_func)(void *param), void *longquery_param)
int | tds_init_write_buf (TDSSOCKET *tds)
void | tds_free_result_info (TDSRESULTINFO *info)
void | tds_free_socket (TDSSOCKET *tds)
void | tds_free_connection (TDSCONNECTION *connection)
void | tds_free_all_results (TDSSOCKET *tds)
void | tds_free_results (TDSRESULTINFO *res_info)
void | tds_free_param_results (TDSPARAMINFO *param_info)
void | tds_free_msg (TDSMESSAGE *message)
void | tds_free_cursor (TDSSOCKET *tds, TDS_INT cursor_id)
void | tds_free_bcp_column_data (BCPCOLDATA *coldata)
int | tds_put_n (TDSSOCKET *tds, const void *buf, int n)
int | tds_put_string (TDSSOCKET *tds, const char *buf, int len)
| Output a string to wire automatic translate string to unicode if needed.
int | tds_put_int (TDSSOCKET *tds, TDS_INT i)
int | tds_put_int8 (TDSSOCKET *tds, TDS_INT8 i)
int | tds_put_smallint (TDSSOCKET *tds, TDS_SMALLINT si)
int | tds_put_byte (TDSSOCKET *tds, unsigned char c)
TDSRESULTINFO * | tds_alloc_results (int num_cols)
TDSCOMPUTEINFO ** | tds_alloc_compute_results (TDS_INT *num_comp_results, TDSCOMPUTEINFO **ci, int num_cols, int by_cols)
TDSCONTEXT * | tds_alloc_context (void)
void | tds_free_context (TDSCONTEXT *locale)
TDSSOCKET * | tds_alloc_socket (TDSCONTEXT *context, int bufsize)
const TDS_COMPILETIME_SETTINGS * | tds_get_compiletime_settings (void)
| Return a structure capturing the compile-time settings provided to the configure script.
int | 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).
int | tds_read_conf_file (TDSCONNECTION *connection, const char *server)
| Read configuration info for given server return 0 on error.
TDSCONNECTION * | 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

void | tds_fix_connection (TDSCONNECTION *connection)
| Fix configuration after reading it.
void | tds_config_verstr (const char *tdsver, TDSCONNECTION *connection)
| Set TDS version from given string.
void | tds_lookup_host (const char *servername, char *ip)
| Given a servername and port name or number, lookup the hostname and service.
int | tds_set_interfaces_file_loc (const char *interfloc)
| Set the full name of interface file.
TDSLOCALE * | tds_get_locale (void)
| Get locale information.
unsigned char * | tds_alloc_row (TDSRESULTINFO *res_info)
| Allocate space for row store return NULL on out of memory.
unsigned char * | tds_alloc_compute_row (TDSCOMPUTEINFO *res_info)
BCPCOLDATA * | tds_alloc_bcp_column_data (int column_size)
int | tds_alloc_get_string (TDSSOCKET *tds, char **string, int len)
| Read a string from wire in a new allocated buffer.
void | tds_set_null (unsigned char *current_row, int column)
| set the null bit for the given column in the row buffer
void | tds_clr_null (unsigned char *current_row, int column)
| clear the null bit for the given column in the row buffer
int | tds_get_null (unsigned char *current_row, int column)
| Return the null bit for the given column in the row buffer.
unsigned char * | tds7_crypt_pass (const unsigned char *clear_pass, int len, unsigned char *crypt_pass)
| tds7_crypt_pass() -- 'encrypt' TDS 7.0 style passwords.
TDSDYNAMIC * | tds_lookup_dynamic (TDSSOCKET *tds, char *id)
| Find a dynamic given string id.
const char * | tds_prtype (int token)
void | tds_iconv_open (TDSSOCKET *tds, const char *charset)
void | tds_iconv_close (TDSSOCKET *tds)
void | tds_srv_charset_changed (TDSSOCKET *tds, const char *charset)
void | tds7_srv_charset_changed (TDSSOCKET *tds, int sql_collate, int lcid)
int | tds_iconv_alloc (TDSSOCKET *tds)
| Allocate iconv stuff.
void | tds_iconv_free (TDSSOCKET *tds)
TDSICONV * | tds_iconv_from_collate (TDSSOCKET *tds, int sql_collate, int lcid)
| Get iconv information from a LCID (to support different column encoding under MSSQL2K).
char * | tds_timestamp_str (char *str, int maxlen)
hostent * | tds_gethostbyname_r (const char *servername, struct hostent *result, char *buffer, int buflen, int *h_errnop)
hostent * | tds_gethostbyaddr_r (const char *addr, int len, int type, struct hostent *result, char *buffer, int buflen, int *h_errnop)
servent * | tds_getservbyname_r (const char *name, const char *proto, struct servent *result, char *buffer, int buflen)
char * | tds_get_homedir (void)
| Get user home directory.
TDSPARAMINFO * | tds_alloc_param_result (TDSPARAMINFO *old_param)
| Adds a output parameter to TDSPARAMINFO.
void | tds_free_input_params (TDSDYNAMIC *dyn)
| Frees all allocated input parameters of a dynamic statement.
void | tds_free_all_dynamic (TDSSOCKET *tds)
| Frees all dynamic statements for a given connection.
void | tds_free_dynamic (TDSSOCKET *tds, TDSDYNAMIC *dyn)
| Frees dynamic statement and remove from TDS.
TDSSOCKET * | tds_realloc_socket (TDSSOCKET *tds, int bufsize)
void | tds_free_compute_result (TDSCOMPUTEINFO *comp_info)
void | tds_free_compute_results (TDSCOMPUTEINFO **comp_info, TDS_INT num_comp)
unsigned char * | tds_alloc_param_row (TDSPARAMINFO *info, TDSCOLUMN *curparam)
| Add another field to row.
char * | tds_alloc_client_sqlstate (int msgnum)
char * | tds_alloc_lookup_sqlstate (TDSSOCKET *tds, int msgnum)
TDSLOGIN * | tds_alloc_login (void)
TDSDYNAMIC * | tds_alloc_dynamic (TDSSOCKET *tds, const char *id)
| Allocate a dynamic statement.
void | tds_free_login (TDSLOGIN *login)
TDSCONNECTION * | tds_alloc_connection (TDSLOCALE *locale)
| Allocate space for configure structure and initialize with default values.
TDSLOCALE * | tds_alloc_locale (void)
void | tds_free_locale (TDSLOCALE *locale)
TDSCURSOR * | tds_alloc_cursor (TDSSOCKET *tds, const char *name, TDS_INT namelen, const char *query, TDS_INT querylen)
int | tds7_send_auth (TDSSOCKET *tds, const unsigned char *challenge)
void | tds_set_packet (TDSLOGIN *tds_login, int packet_size)
void | tds_set_port (TDSLOGIN *tds_login, int port)
void | tds_set_passwd (TDSLOGIN *tds_login, const char *password)
void | tds_set_bulk (TDSLOGIN *tds_login, TDS_TINYINT enabled)
void | tds_set_user (TDSLOGIN *tds_login, const char *username)
void | tds_set_app (TDSLOGIN *tds_login, const char *application)
void | tds_set_host (TDSLOGIN *tds_login, const char *hostname)
void | tds_set_library (TDSLOGIN *tds_login, const char *library)
void | tds_set_server (TDSLOGIN *tds_login, const char *server)
void | tds_set_client_charset (TDSLOGIN *tds_login, const char *charset)
void | tds_set_language (TDSLOGIN *tds_login, const char *language)
void | tds_set_version (TDSLOGIN *tds_login, short major_ver, short minor_ver)
void | tds_set_capabilities (TDSLOGIN *tds_login, unsigned char *capabilities, int size)
int | tds_connect (TDSSOCKET *tds, TDSCONNECTION *connection)
| Do a connection to socket.
int | tds_submit_query (TDSSOCKET *tds, const char *query)
| tds_submit_query() sends a language string to the database server for processing.
int | tds_submit_query_params (TDSSOCKET *tds, const char *query, TDSPARAMINFO *params)
| tds_submit_query_params() sends a language string to the database server for processing.
int | tds_submit_queryf (TDSSOCKET *tds, const char *queryf,...)
int | tds_submit_prepare (TDSSOCKET *tds, const char *query, const char *id, TDSDYNAMIC **dyn_out, TDSPARAMINFO *params)
| tds_submit_prepare() creates a temporary stored procedure in the server.
int | tds_submit_execdirect (TDSSOCKET *tds, const char *query, TDSPARAMINFO *params)
| Currently works with TDS 5.0 and TDS7+.
int | tds_submit_execute (TDSSOCKET *tds, TDSDYNAMIC *dyn)
| tds_submit_execute() sends a previously prepared dynamic statement to the server.
int | 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.
const char * | tds_next_placeholders (const char *start)
| Get position of next placeholders.
int | tds_count_placeholders (const char *query)
| Count the number of placeholders in query.
int | tds_get_dynid (TDSSOCKET *tds, char **id)
| Get an id for dynamic query based on TDS information.
int | tds_submit_unprepare (TDSSOCKET *tds, TDSDYNAMIC *dyn)
| Send a unprepare request for a prepared query.
int | tds_submit_rpc (TDSSOCKET *tds, const char *rpc_name, TDSPARAMINFO *params)
| tds_submit_rpc() call a RPC from server.
int | tds_quote_id (TDSSOCKET *tds, char *buffer, const char *id, int idlen)
| Quote an id.
int | tds_quote_string (TDSSOCKET *tds, char *buffer, const char *str, int len)
| Quote a string.
const char * | tds_skip_quoted (const char *s)
| Skip quoting string (like 'sfsf', "dflkdj" or [dfkjd]).
int | tds_cursor_declare (TDSSOCKET *tds, TDS_INT cursor_id, int *send)
int | tds_cursor_setrows (TDSSOCKET *tds, TDS_INT cursor_id, int *send)
int | tds_cursor_open (TDSSOCKET *tds, TDS_INT cursor_id, int *send)
int | tds_cursor_fetch (TDSSOCKET *tds, TDS_INT client_cursor_id)
int | tds_cursor_close (TDSSOCKET *tds, TDS_INT cursor_id)
int | tds_cursor_dealloc (TDSSOCKET *tds, TDS_INT cursor_id)
int | tds_process_cancel (TDSSOCKET *tds)
| tds_process_cancel() processes the incoming token stream until it finds an end token (DONE, DONEPROC, DONEINPROC) with the cancel flag set.
void | tds_swap_datatype (int coltype, unsigned char *buf)
int | tds_get_token_size (int marker)
| tds_get_token_size() returns the size of a fixed length token used by tds_process_cancel() to determine how to read past a token
int | tds_process_login_tokens (TDSSOCKET *tds)
| tds_process_login_tokens() is called after sending the login packet to the server.
void | tds_add_row_column_size (TDSRESULTINFO *info, TDSCOLUMN *curcol)
| Add a column size to result info row size and calc offset into row.
int | 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.
int | tds5_send_optioncmd (TDSSOCKET *tds, TDS_OPTION_CMD tds_command, TDS_OPTION tds_option, TDS_OPTION_ARG *tds_argument, TDS_INT *tds_argsize)
int | tds_process_result_tokens (TDSSOCKET *tds, TDS_INT *result_type, int *done_flags)
| process TDS result-type message streams.
int | tds_process_row_tokens (TDSSOCKET *tds, TDS_INT *rowtype, TDS_INT *computeid)
| process TDS row-type message streams.
int | tds_process_row_tokens_ct (TDSSOCKET *tds, TDS_INT *rowtype, TDS_INT *computeid)
int | tds_process_trailing_tokens (TDSSOCKET *tds)
| tds_process_trailing_tokens() is called to discard messages that may be left unprocessed at the end of a result "batch".
int | tds_client_msg (TDSCONTEXT *tds_ctx, TDSSOCKET *tds, int msgnum, int level, int state, int line, const char *message)
| tds_client_msg() sends a message to the client application from the CLI or TDS layer.
int | tds_do_until_done (TDSSOCKET *tds)
| simple flush function.
void | tds_set_param_type (TDSSOCKET *tds, TDSCOLUMN *curcol, TDS_SERVER_TYPE type)
| Set type of column initializing all dependency.
void | tds_set_column_type (TDSCOLUMN *curcol, int type)
| Set type of column initializing all dependency.
TDS_INT | tds_datecrack (TDS_INT datetype, const void *di, TDSDATEREC *dr)
| Convert from db date format to a structured date format.
int | tds_get_conversion_type (int srctype, int colsize)
| Return type suitable for conversions (convert all nullable types to fixed type).
int | tds_flush_packet (TDSSOCKET *tds)
| Flush packet to server.
int | tds_put_buf (TDSSOCKET *tds, const unsigned char *buf, int dsize, int ssize)
unsigned char | tds_get_byte (TDSSOCKET *tds)
void | tds_unget_byte (TDSSOCKET *tds)
unsigned char | tds_peek (TDSSOCKET *tds)
TDS_SMALLINT | tds_get_smallint (TDSSOCKET *tds)
| Get an int16 from the server.
TDS_INT | tds_get_int (TDSSOCKET *tds)
| Get an int32 from the server.
int | tds_get_string (TDSSOCKET *tds, int string_len, char *dest, size_t dest_size)
| Fetch a string from the wire.
int | tds_get_char_data (TDSSOCKET *tds, char *dest, size_t wire_size, TDSCOLUMN *curcol)
| Fetch character data the wire.
void * | tds_get_n (TDSSOCKET *tds, void *dest, int n)
| Get N bytes from the buffer and return them in the already allocated space given to us.
int | tds_get_size_by_type (int servertype)
| Return the number of bytes needed by specified type.
int | tds_read_packet (TDSSOCKET *tds)
| Read in one 'packet' from the server.
void | tds_set_parent (TDSSOCKET *tds, void *the_parent)
void * | tds_get_parent (TDSSOCKET *tds)
void | tds_ctx_set_parent (TDSCONTEXT *ctx, void *the_parent)
void * | tds_ctx_get_parent (TDSCONTEXT *ctx)
int | tds_swap_bytes (unsigned char *buf, int bytes)
int | tds_version (TDSSOCKET *tds_socket, char *pversion_string)
| Returns the version of the TDS protocol in effect for the link as a decimal integer.
void | tdsdump_off (void)
| Temporarily turn off logging.
void | tdsdump_on (void)
| Turn logging back on.
int | tdsdump_open (const char *filename)
| This creates and truncates a human readable dump file for the TDS traffic.
int | tdsdump_append (void)
void | tdsdump_close (void)
| Close the TDS dump log file.
void | tdsdump_dump_buf (int debug_lvl, const char *msg, const void *buf, int length)
| Dump the contents of data into the log file in a human readable format.
void | tdsdump_log (int dbg_lvl, const char *fmt,...)
| This function write a message to the debug log.
int | tds_close_socket (TDSSOCKET *tds)
int | tds_vstrbuild (char *buffer, int buflen, int *resultlen, char *text, int textlen, const char *formats, int formatlen, va_list ap)
char * | tds_money_to_string (const TDS_MONEY *money, char *s)
TDS_INT | tds_numeric_to_string (const TDS_NUMERIC *numeric, char *s)
void | tds_getmac (int s, unsigned char mac[6])
void | tds_answer_challenge (const char *passwd, const unsigned char *challenge, TDSANSWER *answer)
| Crypt a given password using schema required for NTLMv1 authentication.

## Variables

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 char | tds_hex_digits []

## Detailed Description

Main include file for libtds.

## Define Documentation

#define is_end_token | ( | x |  | ) |

Value:

    (x==TDS_DONE_TOKEN    || \
                            x==TDS_DONEPROC_TOKEN    || \
                            x==TDS_DONEINPROC_TOKEN)

#define is_fixed_type | ( | x |  | ) |

Value:

    (x==SYBINT1    || \
                            x==SYBINT2      || \
                            x==SYBINT4      || \
                            x==SYBINT8      || \
                            x==SYBREAL       || \
                            x==SYBFLT8      || \
                            x==SYBDATETIME  || \
                            x==SYBDATETIME4 || \
                            x==SYBBIT       || \
                            x==SYBMONEY     || \
                            x==SYBMONEY4    || \
                            x==SYBUNIQUE)

#define is_hard_end_token | ( | x |  | ) |

Value:

    (x==TDS_DONE_TOKEN    || \
                            x==TDS_DONEPROC_TOKEN)

#define is_msg_token | ( | x |  | ) |

Value:

    (x==TDS_INFO_TOKEN    || \
                            x==TDS_ERROR_TOKEN    || \
                            x==TDS_EED_TOKEN)

#define is_nullable_type | ( | x |  | ) |

Value:

    ( \
                            x==SYBBITN      || \
                         x==SYBINTN      || \
                         x==SYBFLTN      || \
                         x==SYBMONEYN    || \
                         x==SYBDATETIMN  || \
                         x==SYBVARCHAR   || \
                         x==SYBBINARY    || \
                         x==SYBVARBINARY || \
                         x==SYBTEXT      || \
                         x==SYBNTEXT     || \
                         x==SYBIMAGE)

#define is_result_token | ( | x |  | ) |

Value:

    (x==TDS_RESULT_TOKEN || \
                            x==TDS_ROWFMT2_TOKEN    || \
                            x==TDS7_RESULT_TOKEN    || \
                            x==TDS_COLFMT_TOKEN     || \
                            x==TDS_COLNAME_TOKEN    || \
                            x==TDS_RETURNSTATUS_TOKEN)

#define TDS_BYTE_SWAP16 | ( | value |  | ) |

Value:

    (((((unsigned short)value)<<8) & 0xFF00)   | \
              ((((unsigned short)value)>>8) & 0x00FF))

#define TDS_BYTE_SWAP32 | ( | value |  | ) |

Value:

    (((((unsigned long)value)<<24) & 0xFF000000)  | \
              ((((unsigned long)value)<< 8) & 0x00FF0000)  | \
              ((((unsigned long)value)>> 8) & 0x0000FF00)  | \
              ((((unsigned long)value)>>24) & 0x000000FF))

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

| Check if product is Microsft SQL Server. x should be a TDS_SOCKET*.

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

| Check if product is Sybase (such as Adaptive Server Enterrprice). x should be a TDS_SOCKET*.

#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))

## Typedef Documentation

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

typedef struct _tds_encoding TDS_ENCODING

| Information relevant to libiconv. The name is an iconv name, not the same as found in master..syslanguages.

typedef struct tds_blob TDSBLOB

| Information about blobs (e.g. text or image). current_row contains this structure.

## Enumeration Type Documentation

enum TDS_DBG_LOG_STATE

| An attempt at better logging. Using these bitmapped values, various logging features can be turned on and off. It can be especially helpful to turn packet data on/off for security reasons.

## Function Documentation

unsigned char* tds7_crypt_pass | ( | const unsigned char * | clear_pass,
|  | int | len,
|  | unsigned char * | crypt_pass
| ) |

| tds7_crypt_pass() -- 'encrypt' TDS 7.0 style passwords. the calling function is responsible for ensuring crypt_pass is at least 'len' characters

int tds_connect | ( | TDSSOCKET * | tds,
|  | TDSCONNECTION * | connection
| ) |

Do a connection to socket.

Parameters:

  tds | connection structure. This should be a non-connected connection. If the function fail connection is deleted
  connection | info for connection

Returns:
  TDS_FAIL or TDS_SUCCEED

char* tds_get_homedir | ( | void |  | ) |

Get user home directory.

Returns:
  home directory or NULL if error. Should be freed with free

TDSLOCALE* tds_get_locale | ( | void |  | ) |

Get locale information.

Returns:
  allocated structure with all information or NULL if error

int tds_iconv_alloc | ( | TDSSOCKET * | tds | ) |

Allocate iconv stuff.

Returns:
  0 for success

void tds_set_column_type | ( | TDSCOLUMN * | curcol,
|  | int | type
| ) |

Set type of column initializing all dependency.

Parameters:

  curcol | column to set
  type | type to set

void tds_set_param_type | ( | TDSSOCKET * | tds,
|  | TDSCOLUMN * | curcol,
|  | TDS_SERVER_TYPE | type
| ) |

Set type of column initializing all dependency.

Parameters:

  curcol | column to set
  type | type to set

char* tds_timestamp_str | ( | char * | str,
|  | int | maxlen
| ) |

| strftime(str, maxlen - 6, "%Y-%m-%d %H:%M:%S", tm); *

int tds_version | ( | TDSSOCKET * | tds_socket,
|  | char * | pversion_string
| ) |

| Returns the version of the TDS protocol in effect for the link as a decimal integer. Typical returned values are 42, 50, 70, 80. Also fills pversion_string unless it is null. Typical pversion_string values are "4.2" and "7.0".

void tdsdump_dump_buf | ( | int | debug_lvl,
|  | const char * | msg,
|  | const void * | buf,
|  | int | length
| ) |

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

Parameters:

  msg | message to print before dump
  buf | buffer to dump
  length | number of bytes in the buffer

void tdsdump_log | ( | int | debug_lvl,
|  | const char * | fmt,
|  | ... |
| ) |

This function write a message to the debug log.

Parameters:

  debug_lvl | level of debugging
  fmt | printf-like format string

void tdsdump_on | ( | void |  | ) |

| Turn logging back on. You must call tdsdump_open() before calling this routine.

int tdsdump_open | ( | const char * | filename | ) |

This creates and truncates 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.