NCBI C++ ToolKit
|
Main include file for libtds. More...
#include <stdarg.h>
#include <stdio.h>
#include <time.h>
#include <freetds/version.h>
#include <freetds/sysdep_private.h>
#include <freetds/sysdep_types.h>
#include <freetds/thread.h>
#include <freetds/bool.h>
#include <freetds/macros.h>
#include <freetds/utils/string.h>
#include <freetds/replacements.h>
#include <freetds/pushvis.h>
#include <freetds/proto.h>
#include <freetds/popvis.h>
Go to the source code of this file.
Go to the SVN repository for this file.
Classes | |
struct | tds_compiletime_settings |
A structure to hold all the compile-time settings. More... | |
struct | TDS_DATETIMEALL |
this structure is not directed connected to a TDS protocol but keeps any DATE/TIME information. More... | |
struct | tdsdaterec |
Used by tds_datecrack. More... | |
union | tds_option_arg |
union | tds_align_struct |
struct | tds_capability_type |
struct | tds_capabilities |
struct | tds_login |
struct | tds_headers |
struct | tds_locale |
struct | tds_blob |
Information about blobs (e.g. More... | |
struct | tds_variant |
Store variant informations. More... | |
struct | tds_encoding |
Information relevant to libiconv. More... | |
struct | tds_bcpcoldata |
struct | tds_column_funcs |
struct | tds_column |
Metadata about columns in regular and compute rows. More... | |
struct | tds_result_info |
Hold information for any results. More... | |
struct | tds_message |
struct | tds_upd_col |
struct | tds_cursor_status |
struct | tds_cursor |
Holds informations about a cursor. More... | |
struct | tds_env |
Current environment as reported by the server. More... | |
struct | tds_dynamic |
Holds information for a dynamic (also called prepared) query. More... | |
struct | tds_multiple |
struct | tds_context |
struct | tds_authentication |
struct | tds_packet |
struct | tds_poll_wakeup |
struct | tds_connection |
struct | tds_socket |
Information for a server connection. More... | |
struct | tds_tvp_row |
struct | tds_tvp |
struct | tdsdump_off_item |
struct | tds_freeze |
struct | tds5_colinfo |
struct | tds_bcpinfo |
Macros | |
#define | TDS_INVALID_TYPE ((TDS_SERVER_TYPE) 0) |
#define | TDS_NO_MORE_RESULTS ((TDSRET)1) |
#define | TDS_SUCCESS ((TDSRET)0) |
#define | TDS_FAIL ((TDSRET)-1) |
#define | TDS_CANCELLED ((TDSRET)-2) |
#define | TDS_FAILED(rc) ((rc)<0) |
#define | TDS_SUCCEED(rc) ((rc)>=0) |
#define | TDS_PROPAGATE(rc) do { TDSRET _tds_ret = (rc); if (TDS_FAILED(_tds_ret)) return _tds_ret; } while(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_OTHERS_RESULT 4055 |
#define | TDS_TOKEN_FLAG(flag) TDS_RETURN_##flag = (1 << (TDS_TOKEN_RES_##flag*2)), TDS_STOPAT_##flag = (2 << (TDS_TOKEN_RES_##flag*2)) |
#define | TDS_NULLTERM -9 |
#define | TDS_BYTE_SWAP16(value) |
#define | TDS_BYTE_SWAP32(value) |
#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_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 | is_blob_type(x) ((x)==SYBTEXT || (x)==SYBIMAGE || (x)==SYBNTEXT) |
#define | is_blob_col(x) |
#define | is_numeric_type(x) ((x)==SYBNUMERIC || (x)==SYBDECIMAL) |
#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) More... | |
#define | is_unicode_type(x) ((tds_type_flags_ms[x] & TDS_TYPEFLAG_UNICODE) != 0) |
#define | is_collate_type(x) ((tds_type_flags_ms[x] & TDS_TYPEFLAG_COLLATE) != 0) |
#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_char_type(x) ((tds_type_flags_ms[x] & (TDS_TYPEFLAG_ASCII|TDS_TYPEFLAG_UNICODE)) != 0) |
#define | is_similar_type(x, y) (is_char_type(x) && is_char_type(y)) |
#define | TDS_MAX_CAPABILITY 32 |
#define | MAXPRECISION 77 |
#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_DEFAULT_VERSION 0x000 |
#define | TDS_DEF_PORT 1433 |
#define | TDS_STR_VERSION "tds version" |
#define | TDS_STR_BLKSZ "initial block size" |
#define | TDS_STR_SWAPDT "swap broken dates" |
#define | TDS_STR_DUMPFILE "dump file" |
#define | TDS_STR_DEBUGLVL "debug level" |
#define | TDS_STR_DEBUGFLAGS "debug flags" |
#define | TDS_STR_TIMEOUT "timeout" |
#define | TDS_STR_QUERY_TIMEOUT "query 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_USE_UTF_16 "use utf-16" |
#define | TDS_STR_LANGUAGE "language" |
#define | TDS_STR_APPENDMODE "dump file append" |
#define | TDS_STR_DATETIMEFMT "date format" |
#define | TDS_STR_DATEFMT "date-only format" |
#define | TDS_STR_TIMEFMT "time-only format" |
#define | TDS_STR_INSTANCE "instance" |
#define | TDS_STR_ASA_DATABASE "asa database" |
#define | TDS_STR_DATABASE "database" |
#define | TDS_STR_ENCRYPTION "encryption" |
#define | TDS_STR_USENTLMV2 "use ntlmv2" |
#define | TDS_STR_USELANMAN "use lanman" |
#define | TDS_STR_ENCRYPTION_OFF "off" |
#define | TDS_STR_ENCRYPTION_REQUEST "request" |
#define | TDS_STR_ENCRYPTION_REQUIRE "require" |
#define | TDS_GSSAPI_DELEGATION "enable gssapi delegation" |
#define | TDS_STR_MUTUAL_AUTHENTICATION "mutual authentication" |
#define | TDS_STR_REALM "realm" |
#define | TDS_STR_SPN "spn" |
#define | TDS_STR_CAFILE "ca file" |
#define | TDS_STR_CRLFILE "crl file" |
#define | TDS_STR_CHECKSSLHOSTNAME "check certificate hostname" |
#define | TDS_STR_DBFILENAME "database filename" |
#define | TDS_STR_READONLY_INTENT "read-only intent" |
#define | TLS_STR_OPENSSL_CIPHERS "openssl ciphers" |
#define | TDS_STR_ENABLE_TLS_V1 "enable tls v1" |
#define | TDS_ALIGN_SIZE sizeof(tds_align_struct) |
#define | TDS_MAX_LOGIN_STR_SZ 128 |
#define | TDS_DBG_LOGIN __FILE__, ((__LINE__ << 4) | 11) |
#define | TDS_DBG_HEADER __FILE__, ((__LINE__ << 4) | 10) |
#define | TDS_DBG_FUNC __FILE__, ((__LINE__ << 4) | 7) |
#define | TDS_DBG_INFO2 __FILE__, ((__LINE__ << 4) | 6) |
#define | TDS_DBG_INFO1 __FILE__, ((__LINE__ << 4) | 5) |
#define | TDS_DBG_NETWORK __FILE__, ((__LINE__ << 4) | 4) |
#define | TDS_DBG_WARN __FILE__, ((__LINE__ << 4) | 3) |
#define | TDS_DBG_ERROR __FILE__, ((__LINE__ << 4) | 2) |
#define | TDS_DBG_SEVERE __FILE__, ((__LINE__ << 4) | 1) |
#define | TDS_DBGFLAG_FUNC 0x80 |
#define | TDS_DBGFLAG_INFO2 0x40 |
#define | TDS_DBGFLAG_INFO1 0x20 |
#define | TDS_DBGFLAG_NETWORK 0x10 |
#define | TDS_DBGFLAG_WARN 0x08 |
#define | TDS_DBGFLAG_ERROR 0x04 |
#define | TDS_DBGFLAG_SEVERE 0x02 |
#define | TDS_DBGFLAG_ALL 0xfff |
#define | TDS_DBGFLAG_LOGIN 0x0800 |
#define | TDS_DBGFLAG_HEADER 0x0400 |
#define | TDS_DBGFLAG_PID 0x1000 |
#define | TDS_DBGFLAG_TIME 0x2000 |
#define | TDS_DBGFLAG_SOURCE 0x4000 |
#define | TDS_DBGFLAG_THREAD 0x8000 |
#define | tds_packet_zero_data_start(pkt) do { } while(0) |
#define | tds_packet_get_data_start(pkt) 0 |
#define | tds_get_ctx(tds) ((tds)->conn->tds_ctx) |
#define | tds_set_ctx(tds, val) do { ((tds)->conn->tds_ctx) = (val); } while(0) |
#define | tds_get_parent(tds) ((tds)->parent) |
#define | tds_set_parent(tds, val) do { ((tds)->parent) = (val); } while(0) |
#define | tds_get_s(tds) ((tds)->conn->s) |
#define | tds_set_s(tds, val) do { ((tds)->conn->s) = (val); } while(0) |
#define | TDS_RESIZE(p, n_elem) tds_realloc((void **) &(p), sizeof(*(p)) * (size_t) (n_elem)) |
#define | tds_new(type, n) ((type *) malloc(sizeof(type) * (n))) |
#define | tds_new0(type, n) ((type *) calloc(n, sizeof(type))) |
#define | tds_convert_string_free(original, converted) do { if (original != converted) free((char*) converted); } while(0) |
#define | tds_put_tinyint(tds, ti) tds_put_byte(tds,ti) |
Output a tinyint value. More... | |
#define | tds_get_smallint(tds) ((TDS_SMALLINT) tds_get_usmallint(tds)) |
#define | tds_get_int(tds) ((TDS_INT) tds_get_uint(tds)) |
#define | tds_get_int8(tds) ((TDS_INT8) tds_get_uint8(tds)) |
#define | TDSDUMP_LOG_FAST if (TDS_UNLIKELY(tds_write_dump)) tdsdump_do_log |
#define | tdsdump_log TDSDUMP_LOG_FAST |
#define | TDSDUMP_BUF_FAST if (TDS_UNLIKELY(tds_write_dump)) tdsdump_do_dump_buf |
#define | tdsdump_dump_buf TDSDUMP_BUF_FAST |
#define | TDSSELREAD POLLIN |
#define | TDSSELWRITE POLLOUT |
#define | TDS_START_LEN_GENERIC(tds_socket, len) |
#define | TDS_END_LEN while(0); } while(tds_freeze_close(current_freeze), 0); } while(0); |
#define | TDS_START_LEN_TINYINT(tds_socket) TDS_START_LEN_GENERIC(tds_socket, 1) |
#define | TDS_START_LEN_USMALLINT(tds_socket) TDS_START_LEN_GENERIC(tds_socket, 2) |
#define | TDS_START_LEN_UINT(tds_socket) TDS_START_LEN_GENERIC(tds_socket, 4) |
#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 | 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_TDS70(x) (x->tds_version==0x700) |
#define | IS_TDS71(x) (x->tds_version==0x701) |
#define | IS_TDS72(x) (x->tds_version==0x702) |
#define | IS_TDS73(x) (x->tds_version==0x703) |
#define | IS_TDS50_PLUS(x) ((x)->tds_version>=0x500) |
#define | IS_TDS7_PLUS(x) ((x)->tds_version>=0x700) |
#define | IS_TDS71_PLUS(x) ((x)->tds_version>=0x701) |
#define | IS_TDS72_PLUS(x) ((x)->tds_version>=0x702) |
#define | IS_TDS73_PLUS(x) ((x)->tds_version>=0x703) |
#define | IS_TDS74_PLUS(x) ((x)->tds_version>=0x704) |
#define | TDS_MAJOR(x) ((x)->tds_version >> 8) |
#define | TDS_MINOR(x) ((x)->tds_version & 0xff) |
#define | IS_TDSDEAD(x) (((x) == NULL) || (x)->state == TDS_DEAD) |
#define | TDS_IS_SYBASE(x) (!((x)->conn->product_version & 0x80000000u)) |
Check if product is Sybase (such as Adaptive Server Enterrprice). More... | |
#define | TDS_IS_MSSQL(x) (((x)->conn->product_version & 0x80000000u)!=0) |
Check if product is Microsft SQL Server. More... | |
#define | TDS_MS_VER(maj, min, x) (0x80000000u|((maj)<<24)|((min)<<16)|(x)) |
Calc a version number for mssql. More... | |
#define | TDS_SYB_VER(maj, min, x) (((maj)<<24)|((min)<<16)|(x)<<8) |
Calc a version number for Sybase. More... | |
#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_BYTE(tds, v) tds_put_byte((tds), ((unsigned char)(v))) |
Functions | |
static bool | is_tds_type_valid (int type) |
const TDS_COMPILETIME_SETTINGS * | tds_get_compiletime_settings (void) |
Return a structure capturing the compile-time settings provided to the configure script. More... | |
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) More... | |
bool | tds_read_conf_file (TDSLOGIN *login, const char *server) |
Read configuration info for given server return 0 on error. More... | |
void | tds_parse_conf_section (const char *option, const char *value, void *param) |
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 More... | |
void | tds_fix_login (TDSLOGIN *login) |
Fix configuration after reading it. More... | |
TDS_USMALLINT * | tds_config_verstr (const char *tdsver, TDSLOGIN *login) |
Set TDS version from given string. More... | |
struct addrinfo * | tds_lookup_host (const char *servername) |
Get the IP address for a hostname. More... | |
TDSRET | tds_lookup_host_set (const char *servername, struct addrinfo **addr) |
const char * | tds_addrinfo2str (struct addrinfo *addr, char *name, int namemax) |
char * | tds_get_home_file (const char *file) |
Return filename from HOME directory. More... | |
TDSRET | tds_set_interfaces_file_loc (const char *interfloc) |
Set the full name of interface file. More... | |
int | tds_parse_boolean (const char *value, int default_value) |
int | tds_config_boolean (const char *option, const char *value, TDSLOGIN *login) |
TDSLOCALE * | tds_get_locale (void) |
Get locale information. More... | |
TDSRET | tds_alloc_row (TDSRESULTINFO *res_info) |
Allocate space for row store return NULL on out of memory. More... | |
TDSRET | tds_alloc_compute_row (TDSCOMPUTEINFO *res_info) |
BCPCOLDATA * | tds_alloc_bcp_column_data (unsigned int column_size) |
TDSDYNAMIC * | tds_lookup_dynamic (TDSCONNECTION *conn, const char *id) |
Finds a dynamic given string id. More... | |
const char * | tds_prtype (int token) |
Returns string representation of the given type. More... | |
int | tds_get_varint_size (TDSCONNECTION *conn, int datatype) |
tds_get_varint_size() returns the size of a variable length integer returned in a TDS 7.0 result string More... | |
TDS_SERVER_TYPE | tds_get_cardinal_type (TDS_SERVER_TYPE datatype, int usertype) |
TDSRET | tds_iconv_open (TDSCONNECTION *conn, const char *charset, int use_utf16) |
void | tds_iconv_close (TDSCONNECTION *conn) |
void | tds_srv_charset_changed (TDSCONNECTION *conn, const char *charset) |
void | tds7_srv_charset_changed (TDSCONNECTION *conn, TDS_UCHAR collate[5]) |
int | tds_iconv_alloc (TDSCONNECTION *conn) |
Allocate iconv stuff. More... | |
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) More... | |
void | tds_free_socket (TDSSOCKET *tds) |
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_param_result (TDSPARAMINFO *param_info) |
Delete latest parameter. More... | |
void | tds_free_msg (TDSMESSAGE *message) |
void | tds_cursor_deallocated (TDSCONNECTION *conn, TDSCURSOR *cursor) |
void | tds_release_cursor (TDSCURSOR **pcursor) |
void | tds_free_bcp_column_data (BCPCOLDATA *coldata) |
TDSRESULTINFO * | tds_alloc_results (TDS_USMALLINT num_cols) |
TDSCOMPUTEINFO ** | tds_alloc_compute_results (TDSSOCKET *tds, TDS_USMALLINT num_cols, TDS_USMALLINT by_cols) |
TDSCONTEXT * | tds_alloc_context (void *parent) |
void | tds_free_context (TDSCONTEXT *locale) |
TDSPARAMINFO * | tds_alloc_param_result (TDSPARAMINFO *old_param) |
Adds a output parameter to TDSPARAMINFO. More... | |
void | tds_free_input_params (TDSDYNAMIC *dyn) |
Frees all allocated input parameters of a dynamic statement. More... | |
void | tds_release_dynamic (TDSDYNAMIC **dyn) |
Frees dynamic statement. More... | |
static void | tds_release_cur_dyn (TDSSOCKET *tds) |
void | tds_dynamic_deallocated (TDSCONNECTION *conn, TDSDYNAMIC *dyn) |
void | tds_set_cur_dyn (TDSSOCKET *tds, TDSDYNAMIC *dyn) |
Set current dynamic. More... | |
TDSSOCKET * | tds_realloc_socket (TDSSOCKET *tds, unsigned int bufsize) |
char * | tds_alloc_client_sqlstate (int msgno) |
char * | tds_alloc_lookup_sqlstate (TDSSOCKET *tds, int msgno) |
TDSLOGIN * | tds_alloc_login (int use_environment) |
TDSDYNAMIC * | tds_alloc_dynamic (TDSCONNECTION *conn, const char *id) |
Allocate a dynamic statement. More... | |
void | tds_free_login (TDSLOGIN *login) |
TDSLOGIN * | tds_init_login (TDSLOGIN *login, TDSLOCALE *locale) |
Initialize login structure with locale information and other stuff for connection. More... | |
TDSLOCALE * | tds_alloc_locale (void) |
void * | tds_alloc_param_data (TDSCOLUMN *curparam) |
Allocate data for a parameter. More... | |
void | tds_free_locale (TDSLOCALE *locale) |
TDSCURSOR * | tds_alloc_cursor (TDSSOCKET *tds, const char *name, size_t namelen, const char *query, size_t querylen) |
void | tds_free_row (TDSRESULTINFO *res_info, unsigned char *row) |
TDSSOCKET * | tds_alloc_socket (TDSCONTEXT *context, unsigned int bufsize) |
TDSSOCKET * | tds_alloc_additional_socket (TDSCONNECTION *conn) |
void | tds_set_current_results (TDSSOCKET *tds, TDSRESULTINFO *info) |
void | tds_detach_results (TDSRESULTINFO *info) |
Detach result info from it current socket. More... | |
void * | tds_realloc (void **pp, size_t new_size) |
Reallocate a pointer and update it if success. More... | |
TDSPACKET * | tds_alloc_packet (void *buf, unsigned len) |
TDSPACKET * | tds_realloc_packet (TDSPACKET *packet, unsigned len) |
void | tds_free_packets (TDSPACKET *packet) |
TDSBCPINFO * | tds_alloc_bcpinfo (void) |
void | tds_free_bcpinfo (TDSBCPINFO *bcpinfo) |
void | tds_deinit_bcpinfo (TDSBCPINFO *bcpinfo) |
void | tds_deinit_tvp (TDS_TVP *table) |
void | tds_set_packet (TDSLOGIN *tds_login, int packet_size) |
void | tds_set_port (TDSLOGIN *tds_login, int port) |
bool | tds_set_passwd (TDSLOGIN *tds_login, const char *password) TDS_WUR |
void | tds_set_bulk (TDSLOGIN *tds_login, bool enabled) |
bool | tds_set_user (TDSLOGIN *tds_login, const char *username) TDS_WUR |
bool | tds_set_app (TDSLOGIN *tds_login, const char *application) TDS_WUR |
bool | tds_set_host (TDSLOGIN *tds_login, const char *hostname) TDS_WUR |
bool | tds_set_library (TDSLOGIN *tds_login, const char *library) TDS_WUR |
bool | tds_set_server (TDSLOGIN *tds_login, const char *server) TDS_WUR |
Set the servername in a TDSLOGIN structure. More... | |
bool | tds_set_client_charset (TDSLOGIN *tds_login, const char *charset) TDS_WUR |
bool | tds_set_language (TDSLOGIN *tds_login, const char *language) TDS_WUR |
void | tds_set_version (TDSLOGIN *tds_login, TDS_TINYINT major_ver, TDS_TINYINT minor_ver) |
int | tds_connect_and_login (TDSSOCKET *tds, TDSLOGIN *login) |
void | tds_start_query (TDSSOCKET *tds, unsigned char packet_type) |
Start query packet of a given type \tds. More... | |
TDSRET | tds_submit_query (TDSSOCKET *tds, const char *query) |
tds_submit_query() sends a language string to the database server for processing. More... | |
TDSRET | tds_submit_query_params (TDSSOCKET *tds, const char *query, TDSPARAMINFO *params, TDSHEADERS *head) |
tds_submit_query_params() sends a language string to the database server for processing. More... | |
TDSRET | tds_submit_queryf (TDSSOCKET *tds, const char *queryf,...) |
Format and submit a query \tds. More... | |
TDSRET | 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. More... | |
TDSRET | tds_submit_execdirect (TDSSOCKET *tds, const char *query, TDSPARAMINFO *params, TDSHEADERS *head) |
Submit a prepared query with parameters. More... | |
TDSRET | tds71_submit_prepexec (TDSSOCKET *tds, const char *query, const char *id, TDSDYNAMIC **dyn_out, TDSPARAMINFO *params) |
tds71_submit_prepexec() creates a temporary stored procedure in the server. More... | |
TDSRET | tds_submit_execute (TDSSOCKET *tds, TDSDYNAMIC *dyn) |
tds_submit_execute() sends a previously prepared dynamic statement to the server. More... | |
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. More... | |
const char * | tds_next_placeholder (const char *start) |
Get position of next placeholder. More... | |
int | tds_count_placeholders (const char *query) |
Count the number of placeholders in query. More... | |
int | tds_needs_unprepare (TDSCONNECTION *conn, TDSDYNAMIC *dyn) |
Check if dynamic request must be unprepared. More... | |
TDSRET | tds_deferred_unprepare (TDSCONNECTION *conn, TDSDYNAMIC *dyn) |
Unprepare dynamic on idle. More... | |
TDSRET | tds_submit_unprepare (TDSSOCKET *tds, TDSDYNAMIC *dyn) |
Send a unprepare request for a prepared query. More... | |
TDSRET | tds_submit_rpc (TDSSOCKET *tds, const char *rpc_name, TDSPARAMINFO *params, TDSHEADERS *head) |
tds_submit_rpc() call a RPC from server. More... | |
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. More... | |
TDSRET | tds_submit_begin_tran (TDSSOCKET *tds) |
Send a rollback request. More... | |
TDSRET | tds_submit_rollback (TDSSOCKET *tds, bool cont) |
Send a rollback request. More... | |
TDSRET | tds_submit_commit (TDSSOCKET *tds, bool cont) |
Send a commit request. More... | |
TDSRET | tds_disconnect (TDSSOCKET *tds) |
size_t | tds_quote_id (TDSSOCKET *tds, char *buffer, const char *id, ssize_t idlen) |
Quote an id. More... | |
size_t | tds_quote_id_rpc (TDSSOCKET *tds, char *buffer, const char *id, ssize_t idlen) |
Quote an id for a RPC call. More... | |
size_t | tds_quote_string (TDSSOCKET *tds, char *buffer, const char *str, ssize_t len) |
Quote a string. More... | |
const char * | tds_skip_comment (const char *s) |
Skip a comment in a query. More... | |
const char * | tds_skip_quoted (const char *s) |
Skip quoting string (like 'sfsf', "dflkdj" or [dfkjd]) More... | |
size_t | tds_fix_column_size (TDSSOCKET *tds, TDSCOLUMN *curcol) |
Get column size for wire. More... | |
const char * | tds_convert_string (TDSSOCKET *tds, TDSICONV *char_conv, const char *s, ssize_t len, size_t *out_len) |
Convert a string in an allocated buffer. More... | |
void | tds_convert_string_free (const char *original, const char *converted) |
TDSRET | tds_get_column_declaration (TDSSOCKET *tds, TDSCOLUMN *curcol, char *out) |
Return declaration for column (like "varchar(20)") \tds. More... | |
TDSRET | tds_cursor_declare (TDSSOCKET *tds, TDSCURSOR *cursor, TDSPARAMINFO *params, int *send) |
TDSRET | tds_cursor_setrows (TDSSOCKET *tds, TDSCURSOR *cursor, int *send) |
TDSRET | tds_cursor_open (TDSSOCKET *tds, TDSCURSOR *cursor, TDSPARAMINFO *params, int *send) |
TDSRET | tds_cursor_fetch (TDSSOCKET *tds, TDSCURSOR *cursor, TDS_CURSOR_FETCH fetch_type, TDS_INT i_row) |
TDSRET | tds_cursor_get_cursor_info (TDSSOCKET *tds, TDSCURSOR *cursor, TDS_UINT *row_number, TDS_UINT *row_count) |
TDSRET | tds_cursor_close (TDSSOCKET *tds, TDSCURSOR *cursor) |
TDSRET | tds_cursor_dealloc (TDSSOCKET *tds, TDSCURSOR *cursor) |
Send a deallocation request to server. More... | |
TDSRET | tds_deferred_cursor_dealloc (TDSCONNECTION *conn, TDSCURSOR *cursor) |
Deallocate cursor on idle. More... | |
TDSRET | tds_cursor_update (TDSSOCKET *tds, TDSCURSOR *cursor, TDS_CURSOR_OPERATION op, TDS_INT i_row, TDSPARAMINFO *params) |
TDSRET | tds_cursor_setname (TDSSOCKET *tds, TDSCURSOR *cursor) |
TDSRET | tds_multiple_init (TDSSOCKET *tds, TDSMULTIPLE *multiple, TDS_MULTIPLE_TYPE type, TDSHEADERS *head) |
TDSRET | tds_multiple_done (TDSSOCKET *tds, TDSMULTIPLE *multiple) |
TDSRET | tds_multiple_query (TDSSOCKET *tds, TDSMULTIPLE *multiple, const char *query, TDSPARAMINFO *params) |
TDSRET | tds_multiple_execute (TDSSOCKET *tds, TDSMULTIPLE *multiple, TDSDYNAMIC *dyn) |
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. More... | |
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. More... | |
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 | tds_process_tokens (TDSSOCKET *tds, TDS_INT *result_type, int *done_flags, unsigned flag) |
process all streams. More... | |
void | tds_set_param_type (TDSCONNECTION *conn, TDSCOLUMN *curcol, TDS_SERVER_TYPE type) |
Set type of column initializing all dependency. More... | |
void | tds_set_column_type (TDSCONNECTION *conn, TDSCOLUMN *curcol, TDS_SERVER_TYPE type) |
Set type of column initializing all dependency. More... | |
TDSRET | tds_datecrack (TDS_INT datetype, const void *di, TDSDATEREC *dr) |
Convert from db date format to a structured date format. More... | |
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) More... | |
int | tds_init_write_buf (TDSSOCKET *tds) |
int | tds_put_n (TDSSOCKET *tds, const void *buf, size_t n) |
int | tds_put_string (TDSSOCKET *tds, const char *buf, int len) |
Output a string to wire automatic translate string to unicode if needed. More... | |
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) |
TDSRET | tds_flush_packet (TDSSOCKET *tds) |
Flush packet to server. More... | |
int | tds_put_buf (TDSSOCKET *tds, const unsigned char *buf, int dsize, int ssize) |
unsigned char | tds_get_byte (TDSSOCKET *tds) |
Return a single byte from the input buffer \tds. More... | |
void | tds_unget_byte (TDSSOCKET *tds) |
Unget will always work as long as you don't call it twice in a row. More... | |
unsigned char | tds_peek (TDSSOCKET *tds) |
Reads a byte from the TDS stream without removing it \tds. More... | |
TDS_USMALLINT | tds_get_usmallint (TDSSOCKET *tds) |
Get an int16 from the server. More... | |
TDS_UINT | tds_get_uint (TDSSOCKET *tds) |
Get an int32 from the server. More... | |
TDS_UINT8 | tds_get_uint8 (TDSSOCKET *tds) |
Get an uint64 from the server. More... | |
size_t | tds_get_string (TDSSOCKET *tds, size_t string_len, char *dest, size_t dest_size) |
Fetch a string from the wire. More... | |
TDSRET | tds_get_char_data (TDSSOCKET *tds, char *dest, size_t wire_size, TDSCOLUMN *curcol) |
Fetch character data the wire. More... | |
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. More... | |
int | tds_get_size_by_type (TDS_SERVER_TYPE servertype) |
Return the number of bytes needed by specified type. More... | |
DSTR * | tds_dstr_get (TDSSOCKET *tds, DSTR *s, size_t len) |
Reads a string from wire and put in a DSTR. More... | |
int | tdserror (const TDSCONTEXT *tds_ctx, TDSSOCKET *tds, int msgno, int errnum) |
Call the client library's error handler (for library-generated errors only) More... | |
TDS_STATE | tds_set_state (TDSSOCKET *tds, TDS_STATE state) |
Set state of TDS connection, with logging and checking. More... | |
void | tds_swap_bytes (void *buf, int bytes) |
unsigned int | tds_gettime_ms (void) |
char * | tds_strndup (const void *s, TDS_INTPTR len) |
Copy a string of length len to a new allocated buffer This function does not read more than len bytes Please note that some system implementation of strndup do not assure they don't read past len bytes as they use still strlen to check length to copy limiting after strlen to size passed Also this function is different from strndup as it assume that len bytes are valid String returned is NUL terminated. More... | |
void | tdsdump_off (TDSDUMP_OFF_ITEM *off_item) |
Temporarily turn off logging for current thread. More... | |
void | tdsdump_on (TDSDUMP_OFF_ITEM *off_item) |
Turn logging back on for current thread. More... | |
int | tdsdump_isopen (void) |
int | tdsdump_open (const char *filename) |
Create and truncate a human readable dump file for the TDS traffic. More... | |
void | tdsdump_close (void) |
Close the TDS dump log file. More... | |
void | tdsdump_do_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. More... | |
void | tdsdump_col (const TDSCOLUMN *col) |
Write a column value to the debug log. More... | |
void | tdsdump_do_log (const char *file, unsigned int level_line, const char *fmt,...) |
Write a message to the debug log. More... | |
TDSERRNO | tds_open_socket (TDSSOCKET *tds, struct addrinfo *ipaddr, unsigned int port, int timeout, int *p_oserr) |
void | tds_close_socket (TDSSOCKET *tds) |
Close current socket. More... | |
int | tds7_get_instance_ports (FILE *output, struct addrinfo *addr) |
Get port of all instances. More... | |
int | tds7_get_instance_port (struct addrinfo *addr, const char *instance) |
Get port of given instance. More... | |
char * | tds_prwsaerror (int erc) |
void | tds_prwsaerror_free (char *s) |
ssize_t | tds_connection_read (TDSSOCKET *tds, unsigned char *buf, size_t buflen) |
ssize_t | tds_connection_write (TDSSOCKET *tds, const unsigned char *buf, size_t buflen, int final) |
int | tds_select (TDSSOCKET *tds, unsigned tds_sel, int timeout_seconds) |
Select on a socket until it's available or the timeout expires. More... | |
void | tds_connection_close (TDSCONNECTION *conn) |
ssize_t | tds_goodread (TDSSOCKET *tds, unsigned char *buf, size_t buflen) |
Loops until we have received some characters return -1 on failure. More... | |
ssize_t | tds_goodwrite (TDSSOCKET *tds, const unsigned char *buffer, size_t buflen) |
void | tds_socket_flush (TDS_SYS_SOCKET sock) |
int | tds_socket_set_nonblocking (TDS_SYS_SOCKET sock) |
Set socket to non-blocking. More... | |
int | tds_wakeup_init (TDSPOLLWAKEUP *wakeup) |
void | tds_wakeup_close (TDSPOLLWAKEUP *wakeup) |
void | tds_wakeup_send (TDSPOLLWAKEUP *wakeup, char cancel) |
static TDS_SYS_SOCKET | tds_wakeup_get_fd (const TDSPOLLWAKEUP *wakeup) |
int | tds_read_packet (TDSSOCKET *tds) |
Read in one 'packet' from the server. More... | |
TDSRET | tds_write_packet (TDSSOCKET *tds, unsigned char final) |
int | tds_put_cancel (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. More... | |
unsigned int | tds_freeze_written (TDSFREEZE *freeze) |
Compute how many bytes has been written from freeze. More... | |
TDSRET | tds_freeze_abort (TDSFREEZE *freeze) |
Discard all data written after the freeze. More... | |
TDSRET | tds_freeze_close (TDSFREEZE *freeze) |
Stop keeping data for this specific freeze. More... | |
TDSRET | tds_freeze_close_len (TDSFREEZE *freeze, int32_t size) |
Stop keeping data for this specific freeze. More... | |
static void | tds_set_current_send_packet (TDSSOCKET *tds, TDSPACKET *pkt) |
TDSRET | tds_vstrbuild (char *buffer, int buflen, int *resultlen, const char *text, int textlen, const char *formats, int formatlen, va_list ap) |
char * | tds_money_to_string (const TDS_MONEY *money, char *s, bool use_2_digits) |
TDS_INT | tds_numeric_to_string (const TDS_NUMERIC *numeric, char *s) |
TDS_INT | tds_numeric_change_prec_scale (TDS_NUMERIC *numeric, unsigned char new_prec, unsigned char new_scale) |
void | tds_getmac (TDS_SYS_SOCKET s, unsigned char mac[6]) |
TDSAUTHENTICATION * | tds_ntlm_get_auth (TDSSOCKET *tds) |
Build a NTLMSPP packet to send to server. More... | |
TDSAUTHENTICATION * | tds_gss_get_auth (TDSSOCKET *tds) |
TDSRET | tds5_gss_send (TDSSOCKET *tds) |
void | tds_random_buffer (unsigned char *out, int len) |
TDSAUTHENTICATION * | tds5_negotiate_get_auth (TDSSOCKET *tds) |
static void | tds5_negotiate_set_msg_type (TDSAUTHENTICATION *tds_auth, unsigned msg_type) |
TDSRET | tds_bcp_init (TDSSOCKET *tds, TDSBCPINFO *bcpinfo) |
Initialize BCP information. More... | |
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. More... | |
TDSRET | tds_bcp_done (TDSSOCKET *tds, int *rows_copied) |
Tell we finished sending BCP data to server \tds. More... | |
TDSRET | tds_bcp_start (TDSSOCKET *tds, TDSBCPINFO *bcpinfo) |
Start sending BCP data to server. More... | |
TDSRET | tds_bcp_start_copy_in (TDSSOCKET *tds, TDSBCPINFO *bcpinfo) |
Start bulk copy to server \tds. More... | |
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(). More... | |
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. More... | |
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. More... | |
TDSRET | tds_writetext_end (TDSSOCKET *tds) |
Finish sending writetext data. More... | |
static bool | tds_capability_enabled (const TDS_CAPABILITY_TYPE *cap, unsigned cap_num) |
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. More... | |
const uint16_t | tds_type_flags_ms [256] |
const char | STD_DATETIME_FMT [] |
const char | tds_hex_digits [] |
int | tds_write_dump |
Tell if TDS debug logging is turned on or off. More... | |
int | tds_debug_flags |
int | tds_g_append_mode |
Main include file for libtds.
Definition in file tds.h.
#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 | ) |
#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) |
#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_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 TDS_ALIGN_SIZE sizeof(tds_align_struct) |
#define TDS_BYTE_SWAP16 | ( | value | ) |
#define TDS_BYTE_SWAP32 | ( | value | ) |
#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_END_LEN while(0); } while(tds_freeze_close(current_freeze), 0); } while(0); |
#define tds_get_smallint | ( | tds | ) | ((TDS_SMALLINT) tds_get_usmallint(tds)) |
#define TDS_INVALID_TYPE ((TDS_SERVER_TYPE) 0) |
#define TDS_IS_MSSQL | ( | x | ) | (((x)->conn->product_version & 0x80000000u)!=0) |
#define TDS_IS_SYBASE | ( | x | ) | (!((x)->conn->product_version & 0x80000000u)) |
#define TDS_MAJOR | ( | x | ) | ((x)->tds_version >> 8) |
#define TDS_MINOR | ( | x | ) | ((x)->tds_version & 0xff) |
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_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) |
#define TDS_RESIZE | ( | p, | |
n_elem | |||
) | tds_realloc((void **) &(p), sizeof(*(p)) * (size_t) (n_elem)) |
#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_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_do_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_do_log |
typedef struct tds_bcpcoldata BCPCOLDATA |
typedef int(* err_handler_t) (const TDSCONTEXT *, TDSSOCKET *, TDSMESSAGE *) |
typedef struct tds5_colinfo TDS5COLINFO |
typedef TDSRET(* tds_bcp_get_col_data) (TDSBCPINFO *bulk, TDSCOLUMN *bcpcol, int offset) |
typedef void(* tds_bcp_null_error) (TDSBCPINFO *bulk, int index, int offset) |
typedef struct tds_capabilities TDS_CAPABILITIES |
typedef struct tds_capability_type TDS_CAPABILITY_TYPE |
typedef 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 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.
The name is an iconv name, not the same as found in master..syslanguages.
typedef enum tds_encryption_level TDS_ENCRYPTION_LEVEL |
typedef tds_sysdep_real64_type TDS_FLOAT |
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_row TDS_TVP_ROW |
typedef uint16_t TDS_USMALLINT |
typedef struct tds_authentication TDSAUTHENTICATION |
typedef struct tds_bcpinfo TDSBCPINFO |
Information about blobs (e.g.
text or image). current_row contains this structure.
typedef struct tds_column TDSCOLUMN |
typedef struct tds_column_funcs TDSCOLUMNFUNCS |
typedef struct tds_result_info TDSCOMPUTEINFO |
typedef struct tds_connection TDSCONNECTION |
typedef struct tds_context TDSCONTEXT |
typedef struct tds_cursor TDSCURSOR |
Holds informations about a cursor.
typedef struct tdsdaterec TDSDATEREC |
Used by tds_datecrack.
typedef struct tdsdump_off_item TDSDUMP_OFF_ITEM |
typedef struct tds_dynamic TDSDYNAMIC |
Holds information for a dynamic (also called prepared) query.
typedef struct tds_freeze TDSFREEZE |
typedef struct tds_headers TDSHEADERS |
typedef struct tdsiconvinfo TDSICONV |
typedef struct tds_locale TDSLOCALE |
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 struct tds_socket TDSSOCKET |
typedef struct tds_upd_col TDSUPDCOL |
typedef struct tds_variant TDSVARIANT |
Store variant informations.
anonymous enum |
anonymous enum |
enum tds_bcp_directions |
enum tds_cursor_fetch |
enum tds_cursor_operation |
enum TDS_CURSOR_STATE |
enum tds_encryption_level |
enum tds_end |
Flags returned in TDS_DONE token.
enum TDS_ICONV_ENTRY |
enum TDS_MULTIPLE_TYPE |
enum tds_operations |
enum tds_states |
values for tds->state
enum tds_token_flags |
enum tds_token_results |
enum TDSERRNO |
Definition at line 424 of file tds.h.
References tds_type_flags_ms, and type.
Referenced by tds_send_login().
|
inlinestatic |
Definition at line 1709 of file tds.h.
References tds_authentication::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 | ||
) |
TDSSOCKET* tds_alloc_additional_socket | ( | TDSCONNECTION * | conn | ) |
Tell we finished sending BCP data to server \tds.
[out] | rows_copied | number of rows copied to server |
Definition at line 898 of file bulk.c.
References tds_socket::out_flag, tds_socket::rows_affected, tds, TDS_BULK, TDS_DBG_FUNC, TDS_FAIL, TDS_FAILED, tds_flush_packet, TDS_PENDING, tds_process_simple_query, tds_set_state, TDS_SUCCESS, TDS_WRITING, and tdsdump_log.
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 |
Definition at line 1141 of file bulk.c.
References tds_output_stream::buf_len, tds_output_stream::buffer, free(), NULL, outbuf, r(), tds_dynamic_stream::size, tds_dynamic_stream::stream, tds, tds_convert_stream, tds_copy_stream, tds_dynamic_stream_init, TDS_FAIL, TDS_FAILED, tds_file_stream_read(), tds_new0, TDS_NO_MORE_RESULTS, terminator, to_server, and tds_output_stream::write.
TDSRET tds_bcp_init | ( | TDSSOCKET * | tds, |
TDSBCPINFO * | bcpinfo | ||
) |
Initialize BCP information.
Query structure of the table to server. \tds
bcpinfo | BCP information to initialize. Structure should be allocate and table name and direction should be already set. |
Definition at line 88 of file bulk.c.
References tds_column::bcp_column_data, tds_bcpinfo::bind_count, tds_bcpinfo::bindinfo, tds_column::char_conv, cleanup(), tds_column::column_collation, tds_column::column_computed, tds_column::column_cur_size, tds_column::column_flags, tds_column::column_identity, tds_column::column_name, tds_column::column_nullable, tds_column::column_prec, tds_column::column_scale, tds_column::column_size, tds_column::column_timestamp, tds_column::column_type, tds_column::column_usertype, tds_column::column_varint_size, tds_result_info::columns, tds_socket::conn, tds_result_info::current_row, tds_bcpcoldata::data, tds_bcpinfo::direction, tds_column::funcs, i, tds_bcpinfo::identity_insert_on, is_blob_col, is_numeric_type, IS_TDS7_PLUS, MAX, NULL, tds_result_info::num_cols, tds_column::on_server, tds_socket::res_info, tds_result_info::row_free, tds_result_info::row_size, tds_column::table_column_name, tds_bcpinfo::tablename, tds, tds_alloc_bcp_column_data, tds_alloc_results, TDS_BCP_QUERYOUT, tds_bcp_row_free(), tds_dstr_cstr(), tds_dstr_dup(), TDS_FAIL, TDS_FAILED, tds_free_results, tds_new, TDS_NO_MORE_RESULTS, tds_process_tokens, tds_submit_queryf, TDS_SUCCESS, and TDS_TOKEN_RESULTS.
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.
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 |
Definition at line 344 of file bulk.c.
References assert, tds_column::bcp_column_data, tds_bcpinfo::bindinfo, tds_bcpinfo::blob_cols, cleanup(), tds_column::column_bindlen, tds_column::column_cur_size, tds_column::column_data, tds_column::column_identity, tds_column::column_lenbind, tds_column::column_nullable, tds_column::column_textpos, tds_column::column_timestamp, tds_column::column_type, tds_column::column_varaddr, tds_column::column_varint_size, tds_result_info::columns, tds_socket::conn, tds_result_info::current_row, tds_bcpcoldata::data, tds_bcpcoldata::datalen, tds_column::funcs, i, tds_bcpinfo::identity_insert_on, is_blob_col, is_blob_type, tds_bcpcoldata::is_null, is_nullable_type, IS_TDS7_PLUS, MIN, tds_bcpinfo::next_col, NULL, tds_result_info::num_cols, offset, tds_column::on_server, tds_socket::out_flag, tds_column_funcs::put_data, tds_result_info::row_size, tds_bcpinfo::rows_sent, tds, tds5_send_record(), tds7_send_record(), tds_bcp_add_fixed_columns(), tds_bcp_add_variable_columns(), tds_bcp_is_bound(), TDS_BULK, TDS_DBG_FUNC, TDS_DBG_INFO1, TDS_FAIL, TDS_FAILED, TDS_NO_MORE_RESULTS, tds_put_byte, tds_put_int, tds_put_n, tds_put_smallint, TDS_PUT_UA2, TDS_ROW_TOKEN, TDS_SENDING, tds_set_state, TDS_SUCCESS, TDS_WRITING, tdsdump_log, tds_bcpinfo::text_sent, and tds_blob::textvalue.
TDSRET tds_bcp_start | ( | TDSSOCKET * | tds, |
TDSBCPINFO * | bcpinfo | ||
) |
Start sending BCP data to server.
Initialize stream to accept data. \tds
bcpinfo | BCP information already prepared |
Definition at line 928 of file bulk.c.
References tds_socket::bulk_query, tds_socket::conn, tds_bcpinfo::insert_stmt, IS_TDS50, IS_TDS50_PLUS, IS_TDS7_PLUS, tds_socket::out_flag, tds, tds5_process_insert_bulk_reply(), tds7_bcp_send_colmetadata(), tds_bcp_read_column_defaults(), TDS_BULK, TDS_DBG_FUNC, TDS_FAIL, TDS_FAILED, tds_process_simple_query, TDS_SENDING, tds_set_state, tds_submit_query, TDS_SUCCESS, and tdsdump_log.
Referenced by tds_bcp_start_copy_in().
TDSRET tds_bcp_start_copy_in | ( | TDSSOCKET * | tds, |
TDSBCPINFO * | bcpinfo | ||
) |
Start bulk copy to server \tds.
bcpinfo | BCP information already prepared |
Definition at line 980 of file bulk.c.
References tds_bcpinfo::bindinfo, tds_column::column_nullable, tds_column::column_prec, tds_column::column_size, tds_column::column_type, tds_result_info::columns, tds_socket::conn, tds_result_info::current_row, i, int, is_blob_type, is_nullable_type, is_numeric_type, IS_TDS50, tds_result_info::num_cols, tds_column::on_server, tds_result_info::row_free, tds_result_info::row_size, tds, tds_bcp_row_free(), tds_bcp_start(), tds_bcp_start_insert_stmt(), TDS_DBG_FUNC, TDS_FAIL, TDS_FAILED, tds_numeric_bytes_per_prec, TDS_RESIZE, TDS_SUCCESS, and tdsdump_log.
|
inlinestatic |
Definition at line 1775 of file tds.h.
References tds_capability_type::values.
Definition at line 657 of file login.c.
References login, tds, and tds_connect().
TDS_SERVER_TYPE tds_get_cardinal_type | ( | TDS_SERVER_TYPE | datatype, |
int | usertype | ||
) |
Definition at line 351 of file data.c.
References SYB5INT8, SYBBINARY, SYBCHAR, SYBINT8, SYBLONGBINARY, SYBLONGCHAR, SYBMSXML, SYBNTEXT, SYBTEXT, SYBVARBINARY, SYBVARCHAR, USER_UNICHAR_TYPE, USER_UNIVARCHAR_TYPE, XSYBBINARY, XSYBCHAR, XSYBNCHAR, XSYBNVARCHAR, XSYBVARBINARY, and XSYBVARCHAR.
Referenced by tds_set_column_type(), and tds_variant_get().
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 |
Definition at line 124 of file tds_types.h.
References SYB5INT8, SYBBIT, SYBBITN, SYBDATE, SYBDATEN, SYBDATETIME, SYBDATETIME4, SYBDATETIMN, SYBFLT8, SYBFLTN, SYBINT1, SYBINT2, SYBINT4, SYBINT8, SYBINTN, SYBMONEY, SYBMONEY4, SYBMONEYN, SYBREAL, SYBTIME, SYBTIMEN, SYBUINT1, SYBUINT2, SYBUINT4, SYBUINT8, and SYBUINTN.
char * tds_get_home_file | ( | const char * | file | ) |
Return filename from HOME directory.
Definition at line 325 of file config.c.
References asprintf, file, free(), NULL, and tds_get_homedir.
Referenced by tds_read_conf_file(), and tds_read_interfaces().
TDSLOCALE* tds_get_locale | ( | void | ) |
Get locale information.
Definition at line 50 of file locale.c.
References buf, FREETDS_LOCALECONFFILE, in(), locale, NULL, strlcpy, tds_alloc_locale, TDS_DBG_INFO1, tds_parse_locale(), tds_read_conf_section, and tdsdump_log.
int tds_get_size_by_type | ( | TDS_SERVER_TYPE | servertype | ) |
Return the number of bytes needed by specified type.
Definition at line 9 of file tds_types.h.
References SYB5BIGDATETIME, SYB5BIGTIME, SYB5INT8, SYBBIT, SYBBITN, SYBDATE, SYBDATEN, SYBDATETIME, SYBDATETIME4, SYBFLT8, SYBINT1, SYBINT2, SYBINT4, SYBINT8, SYBINTERVAL, SYBMONEY, SYBMONEY4, SYBMSDATE, SYBREAL, SYBSINT1, SYBTIME, SYBTIMEN, SYBUINT1, SYBUINT2, SYBUINT4, SYBUINT8, SYBUNIQUE, and SYBVOID.
int tds_get_varint_size | ( | TDSCONNECTION * | conn, |
int | datatype | ||
) |
tds_get_varint_size() returns the size of a variable length integer returned in a TDS 7.0 result string
tds_get_varint_size() returns the size of a variable length integer returned in a TDS 7.0 result string
Definition at line 57 of file tds_types.h.
References conn, IS_TDS50, IS_TDS7_PLUS, SYB5INT8, SYBBIT, SYBDATE, SYBDATETIME, SYBDATETIME4, SYBFLT8, SYBIMAGE, SYBINT1, SYBINT2, SYBINT4, SYBINT8, SYBINTERVAL, SYBLONGBINARY, SYBLONGCHAR, SYBMONEY, SYBMONEY4, SYBMSUDT, SYBMSXML, SYBNTEXT, SYBREAL, SYBSINT1, SYBTEXT, SYBTIME, SYBUINT1, SYBUINT2, SYBUINT4, SYBUINT8, SYBUNITEXT, SYBVARIANT, SYBVOID, SYBXML, XSYBBINARY, XSYBCHAR, XSYBNCHAR, XSYBNVARCHAR, XSYBVARBINARY, and XSYBVARCHAR.
void tds_getmac | ( | TDS_SYS_SOCKET | s, |
unsigned char | mac[6] | ||
) |
TDSAUTHENTICATION* tds_gss_get_auth | ( | TDSSOCKET * | tds | ) |
int tds_iconv_alloc | ( | TDSCONNECTION * | conn | ) |
Allocate iconv stuff.
Definition at line 286 of file iconv.c.
References assert, client2server_chardata, conn, i, initial_char_conv_count, tds_iconv_reset(), tds_new, tds_new0, and TDS_ZERO_FREE.
Definition at line 64 of file numeric.c.
References if(), tdsoldmoney::mnyhigh, tdsoldmoney::mnylow, n, PRIu64, and tdsmoney::tdsoldmoney.
TDS_INT tds_numeric_change_prec_scale | ( | TDS_NUMERIC * | numeric, |
unsigned char | new_prec, | ||
unsigned char | new_scale | ||
) |
Definition at line 241 of file numeric.c.
References tdsnumeric::array, i, MAXPRECISION, memmove, n, tdsnumeric::precision, precision, tdsnumeric::scale, TDS_CONVERT_FAIL, TDS_CONVERT_OVERFLOW, TDS_DWORD, TDS_GET_UA4BE, tds_numeric_bytes_per_prec, tds_packet_check_overflow(), TDS_PUT_UA4BE, TDS_WORD, and TDS_WORD_DDIGIT.
Referenced by test0().
TDS_INT tds_numeric_to_string | ( | const TDS_NUMERIC * | numeric, |
char * | s | ||
) |
Definition at line 94 of file numeric.c.
References tdsnumeric::array, i, int, MAXPRECISION, n, number, tdsnumeric::precision, tdsnumeric::scale, TDS_CONVERT_FAIL, TDS_GET_UA2BE, tds_numeric_bytes_per_prec, and TDS_VECTOR_SIZE.
Referenced by test0().
char* tds_prwsaerror | ( | int | erc | ) |
void tds_prwsaerror_free | ( | char * | s | ) |
void tds_random_buffer | ( | unsigned char * | out, |
int | len | ||
) |
Definition at line 1388 of file tds.h.
References tds_socket::cur_dyn, tds, and tds_release_dynamic().
Definition at line 112 of file login.c.
References tds_login::app_name, and tds_dstr_copy().
Definition at line 94 of file login.c.
References tds_login::bulk_copy.
Definition at line 162 of file login.c.
References tds_login::client_charset, and tds_dstr_copy().
void tds_set_column_type | ( | TDSCONNECTION * | conn, |
TDSCOLUMN * | curcol, | ||
TDS_SERVER_TYPE | type | ||
) |
Set type of column initializing all dependency.
curcol | column to set |
type | type to set |
column_usertype should already be set.
curcol | column to set |
type | type to set |
Definition at line 225 of file data.c.
References tds_column::column_cur_size, tds_column::column_size, tds_column::column_type, tds_column::column_usertype, tds_column::column_varint_size, conn, tds_column::funcs, tds_column::on_server, tds_get_cardinal_type(), tds_get_column_funcs(), tds_get_size_by_type, tds_get_varint_size, and type.
Referenced by tds_set_param_type().
Definition at line 1655 of file tds.h.
References tds_packet::buf, tds_socket::out_buf, tds_socket::send_packet, tds, and tds_packet_get_data_start.
Referenced by tds_freeze_abort(), tds_init_socket(), tds_realloc_socket(), and tds_write_packet().
Definition at line 106 of file login.c.
References tds_login::client_host_name, and tds_dstr_copy().
Definition at line 168 of file login.c.
References tds_login::language, and tds_dstr_copy().
Definition at line 156 of file login.c.
References tds_login::library, and tds_dstr_copy().
Definition at line 73 of file login.c.
References tds_login::block_size.
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 |
Definition at line 247 of file data.c.
References tds_column::char_conv, client2server_chardata, client2ucs2, tds_column::column_collation, tds_column::column_cur_size, tds_column::column_prec, tds_column::column_scale, tds_column::column_size, tds_column::column_type, tds_column::column_varint_size, conn, is_collate_type, IS_TDS50, IS_TDS71_PLUS, IS_TDS72_PLUS, IS_TDS7_PLUS, is_unicode_type, tds_column::on_server, SYB5BIGDATETIME, SYB5BIGTIME, SYB5INT8, SYBBINARY, SYBBIT, SYBBITN, SYBCHAR, SYBDATETIME, SYBDATETIME4, SYBDATETIMN, SYBFLT8, SYBFLTN, SYBIMAGE, SYBINT1, SYBINT2, SYBINT4, SYBINT8, SYBINTN, SYBMONEY, SYBMONEY4, SYBMONEYN, SYBNTEXT, SYBNVARCHAR, SYBREAL, SYBTEXT, SYBUNIQUE, SYBVARBINARY, SYBVARCHAR, tds_set_column_type(), XSYBBINARY, XSYBCHAR, XSYBNVARCHAR, XSYBVARBINARY, and XSYBVARCHAR.
Definition at line 85 of file login.c.
References tds_login::password, tds_dstr_copy(), and tds_dstr_zero().
Definition at line 79 of file login.c.
References tds_login::port.
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 |
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 |
Definition at line 129 of file login.c.
References i, names, tds_login::server_name, rapidjson::source, TDS_DBG_INFO1, tds_dstr_copy(), TDS_VECTOR_SIZE, and tdsdump_log.
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. |
Definition at line 65 of file util.c.
References assert, CHECK_TDS_EXTRA, tds_socket::conn, tds_socket::cur_cursor, tds_socket::current_op, tds_socket::frozen, tds_socket::frozen_packets, tds_freeze::pkt, tds_freeze::pkt_pos, tds_socket::rows_affected, tds_freeze::size_len, tds_socket::state, tds_freeze::tds, tds, tds_connection_close, TDS_DBG_ERROR, TDS_DBG_INFO1, TDS_DEAD, tds_free_all_results, tds_freeze_abort, tds_get_ctx, tds_get_s, TDS_IDLE, TDS_IS_SOCKET_INVALID, tds_mutex_trylock, tds_mutex_unlock, TDS_NO_COUNT, TDS_OP_NONE, TDS_PENDING, TDS_READING, tds_release_cur_dyn(), tds_release_cursor, TDS_SENDING, TDS_UNLIKELY, TDS_VECTOR_SIZE, TDS_WRITING, tdsdump_log, TDSERPND, tdserror(), TDSETIME, TDSEWRIT, and tds_socket::wire_mtx.
Definition at line 100 of file login.c.
References tds_dstr_copy(), and tds_login::user_name.
void tds_set_version | ( | TDSLOGIN * | tds_login, |
TDS_TINYINT | major_ver, | ||
TDS_TINYINT | minor_ver | ||
) |
Definition at line 67 of file login.c.
References tds_login::tds_version.
char* tds_strndup | ( | const void * | s, |
TDS_INTPTR | len | ||
) |
Copy a string of length len to a new allocated buffer This function does not read more than len bytes Please note that some system implementation of strndup do not assure they don't read past len bytes as they use still strlen to check length to copy limiting after strlen to size passed Also this function is different from strndup as it assume that len bytes are valid String returned is NUL terminated.
s | string to copy from |
len | length to copy |
Copy a string of length len to a new allocated buffer This function does not read more than len bytes Please note that some system implementation of strndup do not assure they don't read past len bytes as they use still strlen to check length to copy limiting after strlen to size passed Also this function is different from strndup as it assume that len bytes are valid String returned is NUL terminated.
Please note that some system implementations of strndup do not assure they don't read past len bytes as they use still strlen to check length to copy limiting after strlen to size passed. String returned is NUL terminated.
s | string to copy from |
len | length to copy |
void tds_swap_bytes | ( | void * | buf, |
int | bytes | ||
) |
TDSRET tds_vstrbuild | ( | char * | buffer, |
int | buflen, | ||
int * | resultlen, | ||
const char * | text, | ||
int | textlen, | ||
const char * | formats, | ||
int | formatlen, | ||
va_list | ap | ||
) |
Definition at line 80 of file vstrbuild.c.
References buffer, CALCPARAM, COPYING, free(), head, i, int, string_linked_list::next, norm_fmt(), NULL, out(), OUTPARAM, string_linked_list::str, strtok_r, TDS_FAIL, tds_new, TDS_NULLTERM, TDS_SUCCESS, text(), and vasprintf.
|
inlinestatic |
Definition at line 1620 of file tds.h.
References tds_poll_wakeup::s_signaled.
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
text | data to write |
size | data size in bytes |
Definition at line 1249 of file bulk.c.
References tds_socket::out_flag, ncbi::grid::netcache::search::fields::size, tds, TDS_BULK, TDS_FAIL, tds_put_n, TDS_SENDING, tds_set_state, TDS_SUCCESS, TDS_WRITING, and text().
Finish sending writetext data.
\tds
Definition at line 1266 of file bulk.c.
References tds_socket::out_flag, tds, TDS_BULK, TDS_FAIL, tds_flush_packet, TDS_PENDING, tds_set_state, TDS_SUCCESS, and TDS_WRITING.
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
objname | table name |
textptr | TEXTPTR (see sql documentation) |
timestamp | data timestamp |
with_log | is log is enabled during insert |
size | bytes to be inserted |
Definition at line 1211 of file bulk.c.
References tds_socket::bulk_query, tds_socket::out_flag, ncbi::grid::netcache::search::fields::size, tds, TDS_BULK, TDS_FAIL, TDS_FAILED, tds_process_simple_query, tds_put_int, TDS_SENDING, tds_set_state, tds_submit_queryf, TDS_SUCCESS, and TDS_WRITING.
void tdsdump_close | ( | void | ) |
Close the TDS dump log file.
Definition at line 207 of file log.c.
References g_dump_filename, g_dump_mutex, g_dumpfile, NULL, tds_mutex_lock, tds_mutex_unlock, tds_write_dump, and TDS_ZERO_FREE.
Write a column value to the debug log.
col | column to dump |
Definition at line 424 of file log.c.
References assert, tds_column::column_cur_size, tds_column::column_data, tds_column::column_size, tds_column::column_type, data, free(), SYBCHAR, SYBFLT8, SYBINT1, SYBINT2, SYBINT4, SYBREAL, SYBVARCHAR, TDS_DBG_FUNC, tds_get_conversion_type, tds_new0, tds_prtype, tdsdump_log, type, and type_name().
void tdsdump_do_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 |
Definition at line 270 of file log.c.
References buf, BYTES_PER_LINE, current_thread_is_excluded(), data, file, g_dump_filename, g_dump_mutex, g_dumpfile, i, isprint(), line_buf, msg(), NULL, tds_debug_flags, tds_g_append_mode, tds_mutex_lock, tds_mutex_unlock, tds_write_dump, tdsdump_append(), tdsdump_elided, and tdsdump_start().
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 |
Definition at line 370 of file log.c.
References current_thread_is_excluded(), file, g_dump_filename, g_dump_mutex, g_dumpfile, NULL, tds_debug_flags, tds_g_append_mode, tds_mutex_lock, tds_mutex_unlock, tds_write_dump, tdsdump_append(), and tdsdump_start().
int tdsdump_isopen | ( | void | ) |
Definition at line 111 of file log.c.
References g_dump_filename, and g_dumpfile.
Referenced by tdsdump_on().
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. |
Definition at line 81 of file log.c.
References g_dump_mutex, tdsdump_off_item::next, off_list, tds_mutex_lock, tds_mutex_unlock, tds_thread_get_current_id(), tds_write_dump, and tdsdump_off_item::thread_id.
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(). |
Definition at line 101 of file log.c.
References g_dump_mutex, tdsdump_off_item::next, NULL, off_list, tds_mutex_lock, and tds_mutex_unlock.
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.
Definition at line 126 of file log.c.
References g_dump_filename, g_dump_mutex, g_dumpfile, NULL, result, util::strcmp(), strdup, t, TDS_DBG_INFO1, tds_debug_flags, tds_g_append_mode, tds_localtime_r, tds_mutex_lock, tds_mutex_unlock, tds_write_dump, TDS_ZERO_FREE, tdsdump_append(), tdsdump_log, and VERSION.
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 |
Definition at line 322 of file util.c.
References assert, CHECK_CONTEXT_EXTRA, CHECK_TDS_EXTRA, tds_context::err_handler, msg(), tds_error_message::msgno, tds_error_message::msgtext, NULL, retname(), s_StrError(), tds_error_message::severity, tds, tds_alloc_client_sqlstate, TDS_DBG_ERROR, TDS_DBG_FUNC, TDS_DBG_SEVERE, tds_error_messages, TDS_INT_CANCEL, TDS_INT_CONTINUE, TDS_INT_TIMEOUT, tds_send_cancel, TDS_ZERO_FREE, tdsdump_log, TDSEOK, TDSETIME, and UTIL_ReleaseBuffer.
Referenced by tds_set_state().
|
extern |
Definition at line 53 of file log.c.
Referenced by tdsdump_do_dump_buf(), tdsdump_do_log(), tdsdump_open(), and tdsdump_start().
|
extern |
Definition at line 54 of file log.c.
Referenced by tdsdump_do_dump_buf(), tdsdump_do_log(), and tdsdump_open().
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
Definition at line 41 of file numeric.c.
Referenced by tds_numeric_change_prec_scale(), and tds_numeric_to_string().
Definition at line 189 of file tds_types.h.
|
extern |
Tell if TDS debug logging is turned on or off.
Definition at line 57 of file log.c.
Referenced by tdsdump_close(), tdsdump_do_dump_buf(), tdsdump_do_log(), tdsdump_off(), tdsdump_on(), tdsdump_open(), and tdsdump_state().