FreeTDS API
|
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>
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) |
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]) | |
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. | |
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. | |
Main include file for libtds.
#define TDS_BYTE_SWAP16 | ( | value | ) |
#define TDS_BYTE_SWAP32 | ( | value | ) |
#define TDS_IS_MSSQL | ( | x | ) | (((x)->conn->product_version & 0x80000000u)!=0) |
Check if product is Microsoft SQL Server.
x should be a TDSSOCKET*.
#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*.
#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))
#define TDS_START_LEN_GENERIC | ( | tds_socket, | |
len | |||
) |
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.
Information about blobs (e.g.
text or image). current_row contains this structure.
enum tds_states |
TDSRET tds_bcp_done | ( | TDSSOCKET * | tds, |
int * | rows_copied | ||
) |
Tell we finished sending BCP data to server.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. | |
[out] | rows_copied | number of rows copied to server |
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().
TDS_SUCCESS | success |
TDS_FAIL | error reading the column |
TDS_NO_MORE_RESULTS | end of file detected |
TDSRET tds_bcp_init | ( | TDSSOCKET * | tds, |
TDSBCPINFO * | bcpinfo | ||
) |
Initialize BCP information.
Query structure of the table to server.
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. |
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.
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 |
TDSRET tds_bcp_start | ( | TDSSOCKET * | tds, |
TDSBCPINFO * | bcpinfo | ||
) |
Start sending BCP data to server.
Initialize stream to accept data.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
bcpinfo | BCP information already prepared |
TDSRET tds_bcp_start_copy_in | ( | TDSSOCKET * | tds, |
TDSBCPINFO * | bcpinfo | ||
) |
Start bulk copy to server.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
bcpinfo | BCP information already prepared |
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)
srctype | type to convert |
colsize | size of type |
TDSLOCALE * tds_get_locale | ( | void | ) |
Get locale information.
int tds_iconv_alloc | ( | TDSCONNECTION * | conn | ) |
Allocate iconv stuff.
TDS_INT tds_numeric_to_string | ( | const TDS_NUMERIC * | numeric, |
char * | s | ||
) |
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.
curcol | column to set |
type | type to set |
void tds_set_param_type | ( | TDSCONNECTION * | conn, |
TDSCOLUMN * | curcol, | ||
TDS_SERVER_TYPE | type | ||
) |
Set type of column initializing all dependency.
tds | state information for the socket and the TDS protocol |
curcol | column to set |
type | type to set |
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).
tds_login | points to a TDSLOGIN structure |
server | the servername, or NULL, or a zero-length string |
Set state of TDS connection, with logging and checking.
tds | state information for the socket and the TDS protocol |
state | the new state of the connection, cf. TDS_STATE. |
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.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
text | data to write |
size | data size in bytes |
TDSRET tds_writetext_end | ( | TDSSOCKET * | tds | ) |
Finish sending writetext data.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
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.
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 |
void tdsdump_col | ( | const TDSCOLUMN * | col | ) |
Write a column value to the debug log.
col | column to dump |
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.
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 |
void tdsdump_log | ( | const char * | file, |
unsigned int | level_line, | ||
const char * | fmt, | ||
... | |||
) |
Write a message to the debug log.
file | name of the log file |
level_line | kind of detail to be included |
fmt | printf-like format string |
void tdsdump_off | ( | TDSDUMP_OFF_ITEM * | off_item | ) |
Temporarily turn off logging for current thread.
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. |
void tdsdump_on | ( | TDSDUMP_OFF_ITEM * | off_item | ) |
Turn logging back on for current thread.
off_item | List item to remove from global list. Previously used by tdsdump_off(). |
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.
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.
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 |
|
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