NCBI C++ ToolKit
Classes | Macros | Typedefs | Enumerations | Functions | Variables

Function to handle query. More...

+ Collaboration diagram for Query:

Classes

struct  tds_quoteout_stream
 

Macros

#define TDS_PUT_N_AS_UCS2(tds, s)
 Utility to convert a constant ascii string to ucs2 and send to server. More...
 
#define TDS_PUT_N_AS_UCS2(tds, s)
 Utility to convert a constant ascii string to ucs2 and send to server. More...
 

Typedefs

typedef struct tds_quoteout_stream TDSQUOTEOUTSTREAM
 

Enumerations

enum  { MUL_STARTED = 1 }
 
enum  { MUL_STARTED = 1 }
 

Functions

static size_t tds_ascii_to_ucs2 (char *buffer, const char *buf)
 Accept an ASCII string, convert it to UCS2-LE The input is null-terminated, but the output excludes the null. 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...
 
static TDSRET tds_query_flush_packet (TDSSOCKET *tds)
 Flush query packet. More...
 
void tds_set_cur_dyn (TDSSOCKET *tds, TDSDYNAMIC *dyn)
 Set current dynamic. More...
 
TDSRET tds_submit_query (TDSSOCKET *tds, const char *query)
 tds_submit_query() sends a language string to the database server for processing. More...
 
static char * tds5_fix_dot_query (const char *query, size_t *query_len, TDSPARAMINFO *params)
 Substitute ?-style placeholders with named (@param) ones. More...
 
static TDSRET tds_put_data (TDSSOCKET *tds, TDSCOLUMN *curcol)
 Write data to wire \tds. More...
 
static TDSRET tds_start_query_head (TDSSOCKET *tds, unsigned char packet_type, TDSHEADERS *head)
 Start query packet of a given type \tds. More...
 
void tds_start_query (TDSSOCKET *tds, unsigned char packet_type)
 Start query packet of a given type \tds. 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...
 
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...
 
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...
 
static const char * tds_skip_comment_ucs2le (const char *s, const char *end)
 Skip a comment in a query. More...
 
static const char * tds_skip_quoted_ucs2le (const char *s, const char *end)
 Return pointer to end of a quoted string. More...
 
static const char * tds_next_placeholder_ucs2le (const char *start, const char *end, int named)
 Found the next placeholder (? or @param) in a string. More...
 
static int tds_count_placeholders_ucs2le (const char *query, const char *query_end)
 Count number of placeholders (?) in a query. More...
 
TDSRET tds_get_column_declaration (TDSSOCKET *tds, TDSCOLUMN *curcol, char *out)
 Return declaration for column (like "varchar(20)") \tds. More...
 
static char * tds7_build_param_def_from_query (TDSSOCKET *tds, const char *converted_query, size_t converted_query_len, TDSPARAMINFO *params, size_t *out_len)
 Return string with parameters definition, useful for TDS7+ Looks like "@P1 INT, @P2 VARCHAR(100)". More...
 
static char * tds7_build_param_def_from_params (TDSSOCKET *tds, const char *query, size_t query_len, TDSPARAMINFO *params, size_t *out_len)
 Return string with parameters definition, useful for TDS7+. More...
 
static void tds7_put_query_params (TDSSOCKET *tds, const char *query, size_t query_len)
 Output params types and query (required by sp_prepare/sp_executesql/sp_prepexec) More...
 
static void tds7_put_params_definition (TDSSOCKET *tds, const char *param_definition, size_t param_length)
 Send parameter definition to server \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...
 
size_t tds_fix_column_size (TDSSOCKET *tds, TDSCOLUMN *curcol)
 Get column size for wire. More...
 
static TDSRET tds_put_data_info (TDSSOCKET *tds, TDSCOLUMN *curcol, int flags)
 Put data information to wire. More...
 
static int tds_put_data_info_length (TDSSOCKET *tds, TDSCOLUMN *curcol, int flags)
 Calc information length in bytes (useful for calculating full packet length) More...
 
static int tds7_send_execute (TDSSOCKET *tds, TDSDYNAMIC *dyn)
 Send dynamic request on TDS 7+ to be executed \tds. More...
 
TDSRET tds_submit_execute (TDSSOCKET *tds, TDSDYNAMIC *dyn)
 tds_submit_execute() sends a previously prepared dynamic statement to the server. More...
 
static int tds_put_params (TDSSOCKET *tds, TDSPARAMINFO *info, int flags)
 Send parameters to server. 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...
 
static TDSRET tds_send_emulated_rpc (TDSSOCKET *tds, const char *rpc_name, TDSPARAMINFO *params)
 Send RPC as string 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_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...
 
static size_t tds_quote (TDSSOCKET *tds, char *buffer, char quoting, const char *id, size_t len)
 Quote a string properly. More...
 
size_t tds_quote_id (TDSSOCKET *tds, char *buffer, const char *id, ssize_t idlen)
 Quote an id. More...
 
size_t tds_quote_string (TDSSOCKET *tds, char *buffer, const char *str, ssize_t len)
 Quote a string. More...
 
static void tds_set_cur_cursor (TDSSOCKET *tds, TDSCURSOR *cursor)
 Set current cursor. More...
 
TDSRET tds_cursor_declare (TDSSOCKET *tds, TDSCURSOR *cursor, TDSPARAMINFO *params, int *something_to_send)
 
TDSRET tds_cursor_open (TDSSOCKET *tds, TDSCURSOR *cursor, TDSPARAMINFO *params, int *something_to_send)
 
TDSRET tds_cursor_setrows (TDSSOCKET *tds, TDSCURSOR *cursor, int *something_to_send)
 
static void tds7_put_cursor_fetch (TDSSOCKET *tds, TDS_INT cursor_id, TDS_TINYINT fetch_type, TDS_INT i_row, TDS_INT num_rows)
 
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 *prow_number, TDS_UINT *prow_count)
 
TDSRET tds_cursor_close (TDSSOCKET *tds, TDSCURSOR *cursor)
 
TDSRET tds_cursor_setname (TDSSOCKET *tds, TDSCURSOR *cursor)
 
TDSRET tds_cursor_update (TDSSOCKET *tds, TDSCURSOR *cursor, TDS_CURSOR_OPERATION op, TDS_INT i_row, TDSPARAMINFO *params)
 
static int tds_cursor_check_allocated (TDSCONNECTION *conn, TDSCURSOR *cursor)
 Check if a cursor is allocated into the server. More...
 
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...
 
static void tds_quote_and_put (TDSSOCKET *tds, const char *s, const char *end)
 Send a string to server while quoting it. More...
 
static TDSRET tds_put_param_as_string (TDSSOCKET *tds, TDSPARAMINFO *params, int n)
 Send a parameter to server. More...
 
static TDSRET tds_send_emulated_execute (TDSSOCKET *tds, const char *query, TDSPARAMINFO *params)
 Emulate prepared execute traslating to a normal language. More...
 
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_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, int cont)
 Send a rollback request. More...
 
TDSRET tds_submit_commit (TDSSOCKET *tds, int cont)
 Send a commit request. More...
 
TDSRET tds_disconnect (TDSSOCKET *tds)
 
static const char * tds50_char_declaration_from_usertype (TDSSOCKET *tds, TDS_INT usertype, unsigned int *p_size)
 
static TDSRET tds7_write_param_def_from_query (TDSSOCKET *tds, const char *converted_query, size_t converted_query_len, TDSPARAMINFO *params)
 Write string with parameters definition, useful for TDS7+. More...
 
static TDSRET tds7_write_param_def_from_params (TDSSOCKET *tds, const char *query, size_t query_len, TDSPARAMINFO *params)
 Write string with parameters definition, useful for TDS7+. More...
 
static TDSRET tds5_put_params (TDSSOCKET *tds, TDSPARAMINFO *info, int flags)
 Send parameters to server. More...
 
static TDSRET tds4_send_emulated_rpc (TDSSOCKET *tds, const char *rpc_name, TDSPARAMINFO *params)
 Send RPC as string query. More...
 
static size_t tds_quote (char *buffer, char quoting, const char *id, size_t len)
 Quote a string properly. 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...
 
static int tds_quoteout_stream_write (TDSOUTSTREAM *stream, size_t len)
 
static void tds_quoteout_stream_init (TDSQUOTEOUTSTREAM *stream, TDSSOCKET *tds)
 
static TDSRET tds_put_char_param_as_string (TDSSOCKET *tds, const TDSCOLUMN *curcol)
 
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...
 

Variables

static const TDSCONTEXT empty_ctx = {0}
 
static const TDSCONTEXT empty_ctx = {0}
 

Detailed Description

Function to handle query.

Macro Definition Documentation

◆ TDS_PUT_N_AS_UCS2 [1/2]

#define TDS_PUT_N_AS_UCS2 (   tds,
 
)
Value:
do { \
char buffer[sizeof(s)*2-2]; \
tds_put_smallint(tds, sizeof(buffer)/2); \
tds_put_n(tds, buffer, tds_ascii_to_ucs2(buffer, s)); \
} while(0)
static TDSSOCKET * tds
Definition: collations.c:37
static size_t tds_ascii_to_ucs2(char *buffer, const char *buf)
Accept an ASCII string, convert it to UCS2-LE The input is null-terminated, but the output excludes t...
Definition: query.c:92
static uint8_t * buffer
Definition: pcre2test.c:1016

Utility to convert a constant ascii string to ucs2 and send to server.

Used to send internal store procedure names to server. \tds

Parameters
sconstanst string to send

Definition at line 111 of file query.c.

◆ TDS_PUT_N_AS_UCS2 [2/2]

#define TDS_PUT_N_AS_UCS2 (   tds,
 
)
Value:
do { \
char buffer[sizeof(s)*2-2]; \
tds_put_smallint(tds, sizeof(buffer)/2); \
tds_put_n(tds, buffer, tds_ascii_to_ucs2(buffer, s)); \
} while(0)
static size_t tds_ascii_to_ucs2(char *buffer, const char *buf)
Accept an ASCII string, convert it to UCS2-LE The input is NUL-terminated, but the output does not co...
Definition: query.c:91

Utility to convert a constant ascii string to ucs2 and send to server.

Used to send internal store procedure names to server. \tds

Parameters
sconstanst string to send

Definition at line 110 of file query.c.

Typedef Documentation

◆ TDSQUOTEOUTSTREAM

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
MUL_STARTED 

Definition at line 3373 of file query.c.

◆ anonymous enum

anonymous enum
Enumerator
MUL_STARTED 

Definition at line 3366 of file query.c.

Function Documentation

◆ tds4_send_emulated_rpc()

static TDSRET tds4_send_emulated_rpc ( TDSSOCKET tds,
const char *  rpc_name,
TDSPARAMINFO params 
)
static

Send RPC as string query.

This function is used on old protocol which does not support RPC queries. \tds

Parameters
rpc_namename of RPC to invoke
paramsparameters to send to server
Returns
TDS_FAIL or TDS_SUCCESS

Definition at line 1933 of file query.c.

References buf, tds_column::column_name, tds_column::column_output, tds_result_info::columns, i, n, tds_result_info::num_cols, tds, tds_dstr_cstr(), tds_dstr_isempty(), tds_dstr_len(), tds_get_column_declaration(), tds_put_param_as_string(), tds_put_string, and tds_query_flush_packet().

Referenced by tds_submit_rpc().

◆ tds50_char_declaration_from_usertype()

static const char* tds50_char_declaration_from_usertype ( TDSSOCKET tds,
TDS_INT  usertype,
unsigned int p_size 
)
static

◆ tds5_fix_dot_query()

static char* tds5_fix_dot_query ( const char *  query,
size_t *  query_len,
TDSPARAMINFO params 
)
static

Substitute ?-style placeholders with named (@param) ones.

Sybase does not support ?-style placeholders so convert them. Also the function replace parameters names.

Parameters
queryquery string
[in,out]query_lenpointer to query length. On input length of input query, on output length of output query
paramsparameters to send to server
Returns
new query or NULL on error

Definition at line 229 of file query.c.

References tds_column::column_name, tds_result_info::columns, free(), i, len, NULL, tds_result_info::num_cols, out(), query, ncbi::grid::netcache::search::fields::size, tds_dstr_copy(), tds_new, tds_next_placeholder(), and TDS_RESIZE.

Referenced by tds_submit_query_params().

◆ tds5_put_params()

static TDSRET tds5_put_params ( TDSSOCKET tds,
TDSPARAMINFO info,
int  flags 
)
static

◆ tds71_submit_prepexec()

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.

Creates a temporary stored procedure in the server and execute it.

Parameters
tdsstate information for the socket and the TDS protocol
querylanguage query with given placeholders (?)
idstring to identify the dynamic query. Pass NULL for automatic generation.
dyn_outwill receive allocated TDSDYNAMIC*. Any older allocated dynamic won't be freed, Can be NULL.
paramsparameters to use. It can be NULL even if parameters are present. Used only for TDS7+
Returns
TDS_FAIL or TDS_SUCCESS
Parameters
tdsstate information for the socket and the TDS protocol
querylanguage query with given placeholders ('?')
idstring to identify the dynamic query. Pass NULL for automatic generation.
dyn_outwill receive allocated TDSDYNAMIC*. Any older allocated dynamic won't be freed. Can be NULL.
paramsparameters to use. It can be NULL even if parameters are present.
Returns
TDS_FAIL or TDS_SUCCESS

Definition at line 1478 of file query.c.

References tds_connection::char_convs, CHECK_PARAMINFO_EXTRA, CHECK_TDS_EXTRA, client2ucs2, tds_result_info::columns, tds_socket::conn, tds_socket::current_op, failure, free(), i, int, IS_TDS71_PLUS, IS_TDS7_PLUS, NULL, tds_result_info::num_cols, query, SYBINTN, tds, tds7_build_param_def_from_query(), tds7_put_params_definition(), tds7_put_query_params(), tds7_write_param_def_from_query(), tds_alloc_dynamic, tds_convert_string(), tds_convert_string_free, tds_dynamic_deallocated, TDS_FAIL, TDS_FAILED, tds_freeze, tds_freeze_abort, tds_freeze_close, TDS_IDLE, TDS_OP_PREPEXEC, TDS_PROPAGATE, tds_put_byte, tds_put_data(), tds_put_data_info(), TDS_PUT_N_AS_UCS2, tds_put_smallint, tds_query_flush_packet(), tds_release_dynamic, TDS_RPC, tds_set_cur_dyn(), tds_set_state, TDS_SP_PREPEXEC, tds_start_query(), TDS_SUCCEED, and TDS_WRITING.

◆ tds7_build_param_def_from_params()

static char * tds7_build_param_def_from_params ( TDSSOCKET tds,
const char *  query,
size_t  query_len,
TDSPARAMINFO params,
size_t *  out_len 
)
static

Return string with parameters definition, useful for TDS7+.

Parameters
tdsstate information for the socket and the TDS protocol
queryquery to send to server encoded as ucs2
query_lenquery length in bytes
paramsparameters to build declaration
out_lenlength output buffer in bytes
Returns
allocated and filled string or NULL on failure (coded in ucs2le charset )

Definition at line 993 of file query.c.

References assert, tds_connection::char_convs, CHECK_PARAMINFO_EXTRA, CHECK_TDS_EXTRA, client2ucs2, tds_column::column_name, tds_result_info::columns, tds_socket::conn, free(), i, IS_TDS7_PLUS, isalnum(), l(), len, NULL, tds_result_info::num_cols, query, ncbi::grid::netcache::search::fields::size, tdsiconvinfo::suppress, tds, tds_ascii_to_ucs2(), tds_dstr_cstr(), tds_dstr_isempty(), tds_dstr_len(), tds_get_column_declaration(), tds_iconv, tds_new, tds_new0, tds_next_placeholder_ucs2le(), TDS_RESIZE, and to_server.

Referenced by tds_submit_query_params().

◆ tds7_build_param_def_from_query()

static char * tds7_build_param_def_from_query ( TDSSOCKET tds,
const char *  converted_query,
size_t  converted_query_len,
TDSPARAMINFO params,
size_t *  out_len 
)
static

Return string with parameters definition, useful for TDS7+ Looks like "@P1 INT, @P2 VARCHAR(100)".

Parameters
tdsstate information for the socket and the TDS protocol
converted_queryquery to send to server in ucs2 encoding
converted_query_lenquery length in bytes
paramsparameters to build declaration
out_lenlength output buffer in bytes
Returns
allocated and filled string or NULL on failure (coded in ucs2le charset )

Definition at line 929 of file query.c.

References assert, CHECK_PARAMINFO_EXTRA, CHECK_TDS_EXTRA, tds_result_info::columns, tds_socket::conn, count, free(), i, IS_TDS7_PLUS, len, NULL, ncbi::grid::netcache::search::fields::size, strcat, tds, tds_ascii_to_ucs2(), tds_count_placeholders_ucs2le(), TDS_FAILED, tds_get_column_declaration(), tds_new, and TDS_RESIZE.

Referenced by tds71_submit_prepexec(), tds_cursor_open(), tds_submit_execdirect(), tds_submit_prepare(), and tds_submit_query_params().

◆ tds7_put_cursor_fetch()

static void tds7_put_cursor_fetch ( TDSSOCKET tds,
TDS_INT  cursor_id,
TDS_TINYINT  fetch_type,
TDS_INT  i_row,
TDS_INT  num_rows 
)
static

◆ tds7_put_params_definition()

static void tds7_put_params_definition ( TDSSOCKET tds,
const char *  param_definition,
size_t  param_length 
)
static

Send parameter definition to server \tds.

Parameters
param_definitionparameter definition string. Encoded in ucs2
param_lengthparameter definition string length in bytes

Definition at line 1158 of file query.c.

References CHECK_TDS_EXTRA, tds_connection::collation, tds_socket::conn, IS_TDS71_PLUS, SYBNTEXT, tds, tds_put_byte, TDS_PUT_INT, and tds_put_n.

Referenced by tds71_submit_prepexec(), tds_cursor_open(), tds_submit_execdirect(), tds_submit_prepare(), and tds_submit_query_params().

◆ tds7_put_query_params()

static void tds7_put_query_params ( TDSSOCKET tds,
const char *  query,
size_t  query_len 
)
static

Output params types and query (required by sp_prepare/sp_executesql/sp_prepexec)

Parameters
tdsstate information for the socket and the TDS protocol
queryquery (in ucs2le codings)
query_lenquery length in bytes

Definition at line 1107 of file query.c.

References assert, buf, CHECK_TDS_EXTRA, tds_connection::collation, tds_socket::conn, i, IS_TDS71_PLUS, IS_TDS7_PLUS, len, query, SYBNTEXT, tds, tds_count_placeholders_ucs2le(), tds_next_placeholder_ucs2le(), tds_put_byte, TDS_PUT_INT, tds_put_n, and tds_put_string.

Referenced by tds71_submit_prepexec(), tds_cursor_open(), tds_submit_execdirect(), tds_submit_prepare(), and tds_submit_query_params().

◆ tds7_send_execute()

static int tds7_send_execute ( TDSSOCKET tds,
TDSDYNAMIC dyn 
)
static

Send dynamic request on TDS 7+ to be executed \tds.

Parameters
dyndynamic query to execute

Definition at line 1713 of file query.c.

References tds_socket::current_op, i, info, tds_dynamic::num_id, tds_dynamic::params, SYBINTN, tds, TDS_FAIL, TDS_FAILED, TDS_OP_EXECUTE, tds_put_byte, tds_put_data(), tds_put_data_info(), tds_put_int, TDS_PUT_N_AS_UCS2, tds_put_smallint, and TDS_SUCCESS.

Referenced by tds_multiple_execute(), and tds_submit_execute().

◆ tds7_write_param_def_from_params()

static TDSRET tds7_write_param_def_from_params ( TDSSOCKET tds,
const char *  query,
size_t  query_len,
TDSPARAMINFO params 
)
static

Write string with parameters definition, useful for TDS7+.

Looks like "@P1 INT, @P2 VARCHAR(100)"

Parameters
tdsstate information for the socket and the TDS protocol
queryquery to send to server encoded in ucs2le
query_lenquery length in bytes
paramsparameters to build declaration
Returns
result of the operation

Definition at line 1019 of file query.c.

References assert, CHECK_PARAMINFO_EXTRA, CHECK_TDS_EXTRA, tds_connection::collation, tds_column::column_name, tds_result_info::columns, tds_socket::conn, free(), i, IS_TDS71_PLUS, IS_TDS7_PLUS, isalnum(), len, NULL, tds_result_info::num_cols, query, SYBNTEXT, tds, tds_dstr_cstr(), tds_dstr_isempty(), tds_dstr_len(), TDS_FAIL, tds_freeze, tds_freeze_abort, tds_freeze_close_len, tds_freeze_written, tds_get_column_declaration(), tds_new0, tds_next_placeholder_ucs2le(), tds_put_byte, tds_put_n, tds_put_smallint, tds_put_string, and TDS_SUCCESS.

Referenced by tds_submit_query_params().

◆ tds7_write_param_def_from_query()

static TDSRET tds7_write_param_def_from_query ( TDSSOCKET tds,
const char *  converted_query,
size_t  converted_query_len,
TDSPARAMINFO params 
)
static

Write string with parameters definition, useful for TDS7+.

Looks like "@P1 INT, @P2 VARCHAR(100)"

Parameters
tdsstate information for the socket and the TDS protocol
converted_queryquery to send to server in ucs2le encoding
converted_query_lenquery length in bytes
paramsparameters to build declaration
Returns
result of write

Definition at line 958 of file query.c.

References assert, CHECK_PARAMINFO_EXTRA, CHECK_TDS_EXTRA, tds_connection::collation, tds_result_info::columns, tds_socket::conn, count, i, IS_TDS71_PLUS, IS_TDS7_PLUS, tds_result_info::num_cols, SYBNTEXT, tds, tds_count_placeholders_ucs2le(), TDS_FAIL, TDS_FAILED, tds_freeze, tds_freeze_abort, tds_freeze_close_len, tds_freeze_written, tds_get_column_declaration(), tds_put_byte, tds_put_n, tds_put_string, and TDS_SUCCESS.

Referenced by tds71_submit_prepexec(), tds_cursor_open(), tds_submit_execdirect(), tds_submit_prepare(), and tds_submit_query_params().

◆ tds_ascii_to_ucs2()

static size_t tds_ascii_to_ucs2 ( char *  buffer,
const char *  buf 
)
static

Accept an ASCII string, convert it to UCS2-LE The input is null-terminated, but the output excludes the null.

Parameters
bufferbuffer where to store output
bufstring to write
Returns
bytes written

Definition at line 92 of file query.c.

References assert, buf, and buffer.

Referenced by tds7_build_param_def_from_params(), and tds7_build_param_def_from_query().

◆ tds_convert_string()

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.

Parameters
tdsstate information for the socket and the TDS protocol
char_convinformation about the encodings involved
sinput string
leninput string length (in bytes), -1 for null terminated
out_lenreturned output length (in bytes)
Returns
string allocated (or input pointer if no conversion required) or NULL if error
Parameters
tdsstate information for the socket and the TDS protocol
char_convinformation about the encodings involved
sinput string
leninput string length (in bytes), -1 for NUL-terminated
out_lenreturned output length (in bytes)
Returns
string allocated (or input pointer if no conversion required) or NULL if error

Definition at line 127 of file query.c.

References buf, tdsiconvdir::charset, CHECK_TDS_EXTRA, tdsiconvinfo::flags, free(), tdsiconvinfo::from, len, tds_encoding::min_bytes_per_char, NULL, tdsiconvinfo::suppress, tds, TDS_ENCODING_MEMCPY, tds_iconv, tds_new, and to_server.

Referenced by tds71_submit_prepexec(), tds_cursor_open(), tds_cursor_update(), tds_put_data_info(), tds_put_param_as_string(), tds_start_query_head(), tds_submit_execdirect(), tds_submit_prepare(), tds_submit_query_params(), and tds_submit_rpc().

◆ tds_count_placeholders()

int tds_count_placeholders ( const char *  query)

Count the number of placeholders in query.

Count the number of placeholders ('?') in a query.

Parameters
queryquery string

Definition at line 604 of file query.c.

References count, query, and tds_next_placeholder().

Referenced by tds_send_emulated_execute().

◆ tds_count_placeholders_ucs2le()

static int tds_count_placeholders_ucs2le ( const char *  query,
const char *  query_end 
)
static

Count number of placeholders (?) in a query.

Parameters
queryquery encoded in ucs2
query_endend of query
Returns
number of placeholders found

Definition at line 724 of file query.c.

References count, query, and tds_next_placeholder_ucs2le().

Referenced by tds7_build_param_def_from_query(), tds7_put_query_params(), and tds_submit_query_params().

◆ tds_cursor_check_allocated()

static int tds_cursor_check_allocated ( TDSCONNECTION conn,
TDSCURSOR cursor 
)
static

Check if a cursor is allocated into the server.

If not is allocated it assure is removed from the connection list \tds

Returns
0 if not allocated <>0 otherwise

Definition at line 3102 of file query.c.

References conn, IS_TDS7_PLUS, tds_cursor::srv_status, TDS_CUR_ISTAT_CLOSED, TDS_CUR_ISTAT_DEALLOC, TDS_CUR_ISTAT_UNUSED, and tds_cursor_deallocated.

Referenced by tds_cursor_dealloc(), and tds_deferred_cursor_dealloc().

◆ tds_cursor_close()

TDSRET tds_cursor_close ( TDSSOCKET tds,
TDSCURSOR cursor 
)

◆ tds_cursor_dealloc()

TDSRET tds_cursor_dealloc ( TDSSOCKET tds,
TDSCURSOR cursor 
)

◆ tds_cursor_declare()

TDSRET tds_cursor_declare ( TDSSOCKET tds,
TDSCURSOR cursor,
TDSPARAMINFO params,
int something_to_send 
)

◆ tds_cursor_fetch()

TDSRET tds_cursor_fetch ( TDSSOCKET tds,
TDSCURSOR cursor,
TDS_CURSOR_FETCH  fetch_type,
TDS_INT  i_row 
)

◆ tds_cursor_get_cursor_info()

TDSRET tds_cursor_get_cursor_info ( TDSSOCKET tds,
TDSCURSOR cursor,
TDS_UINT prow_number,
TDS_UINT prow_count 
)

◆ tds_cursor_open()

TDSRET tds_cursor_open ( TDSSOCKET tds,
TDSCURSOR cursor,
TDSPARAMINFO params,
int something_to_send 
)

◆ tds_cursor_setname()

TDSRET tds_cursor_setname ( TDSSOCKET tds,
TDSCURSOR cursor 
)

◆ tds_cursor_setrows()

TDSRET tds_cursor_setrows ( TDSSOCKET tds,
TDSCURSOR cursor,
int something_to_send 
)

◆ tds_cursor_update()

TDSRET tds_cursor_update ( TDSSOCKET tds,
TDSCURSOR cursor,
TDS_CURSOR_OPERATION  op,
TDS_INT  i_row,
TDSPARAMINFO params 
)

◆ tds_deferred_cursor_dealloc()

TDSRET tds_deferred_cursor_dealloc ( TDSCONNECTION conn,
TDSCURSOR cursor 
)

Deallocate cursor on idle.

This let libTDS close the cursor when possible. \tds

Parameters
cursorcursor to close

Definition at line 3168 of file query.c.

References CHECK_CONN_EXTRA, CHECK_CURSOR_EXTRA, conn, tds_cursor::defer_close, tds_cursor_check_allocated(), and TDS_SUCCESS.

◆ tds_deferred_unprepare()

TDSRET tds_deferred_unprepare ( TDSCONNECTION conn,
TDSDYNAMIC dyn 
)

Unprepare dynamic on idle.

This let libTDS close the prepared statement when possible. \tds

Parameters
dyndynamic request to close

Definition at line 1893 of file query.c.

References CHECK_CONN_EXTRA, CHECK_DYNAMIC_EXTRA, conn, tds_dynamic::defer_close, tds_dynamic_deallocated, tds_needs_unprepare(), and TDS_SUCCESS.

◆ tds_disconnect()

TDSRET tds_disconnect ( TDSSOCKET tds)

◆ tds_fix_column_size()

size_t tds_fix_column_size ( TDSSOCKET tds,
TDSCOLUMN curcol 
)

◆ tds_get_column_declaration()

TDSRET tds_get_column_declaration ( TDSSOCKET tds,
TDSCOLUMN curcol,
char *  out 
)

Return declaration for column (like "varchar(20)") \tds.

Return declaration for column (like "varchar(20)").

Parameters
curcolcolumn
outbuffer to hold declaration
Returns
TDS_FAIL or TDS_SUCCESS

This depends on:

  • on_server.column_type
  • varint_size (for varchar(max) distinction)
  • column_size
  • precision/scale (numeric)

\tds

Parameters
curcolcolumn
outbuffer to hold declaration
Returns
TDS_FAIL or TDS_SUCCESS

Definition at line 743 of file query.c.

References assert, CHECK_COLUMN_EXTRA, CHECK_TDS_EXTRA, tds_column::column_prec, tds_column::column_scale, tds_column::column_size, tds_column::column_type, tds_column::column_usertype, tds_column::column_varint_size, tds_socket::conn, int, IS_TDS50, IS_TDS7_PLUS, MIN, NULL, tds_column::on_server, out(), ncbi::grid::netcache::search::fields::size, SYB5BIGDATETIME, SYB5BIGTIME, SYBBINARY, SYBBIT, SYBBITN, SYBCHAR, SYBDATE, SYBDATETIME, SYBDATETIME4, SYBDATETIMN, SYBDECIMAL, SYBFLT8, SYBFLTN, SYBIMAGE, SYBINT1, SYBINT2, SYBINT4, SYBINT8, SYBINTN, SYBLONGBINARY, SYBMONEY, SYBMONEY4, SYBMONEYN, SYBMSDATE, SYBMSDATETIME2, SYBMSDATETIMEOFFSET, SYBMSTIME, SYBNTEXT, SYBNUMERIC, SYBNVARCHAR, SYBREAL, SYBSINT1, SYBTEXT, SYBTIME, SYBUINT1, SYBUINT2, SYBUINT4, SYBUINT8, SYBUNIQUE, SYBVARBINARY, SYBVARCHAR, SYBVARIANT, SYBVOID, tds, tds50_char_declaration_from_usertype(), TDS_DBG_ERROR, TDS_FAIL, tds_fix_column_size(), tds_get_conversion_type, TDS_SUCCESS, tdsdump_log, USER_UNICHAR_TYPE, USER_UNITEXT_TYPE, USER_UNIVARCHAR_TYPE, XSYBBINARY, XSYBCHAR, XSYBNCHAR, XSYBNVARCHAR, XSYBVARBINARY, and XSYBVARCHAR.

Referenced by tds4_send_emulated_rpc(), tds7_build_param_def_from_params(), tds7_build_param_def_from_query(), tds7_write_param_def_from_params(), tds7_write_param_def_from_query(), and tds_send_emulated_rpc().

◆ tds_multiple_done()

TDSRET tds_multiple_done ( TDSSOCKET tds,
TDSMULTIPLE multiple 
)

Definition at line 3402 of file query.c.

References assert, tds, and tds_query_flush_packet().

◆ tds_multiple_execute()

TDSRET tds_multiple_execute ( TDSSOCKET tds,
TDSMULTIPLE multiple,
TDSDYNAMIC dyn 
)

◆ tds_multiple_init()

TDSRET tds_multiple_init ( TDSSOCKET tds,
TDSMULTIPLE multiple,
TDS_MULTIPLE_TYPE  type,
TDSHEADERS head 
)

◆ tds_multiple_query()

TDSRET tds_multiple_query ( TDSSOCKET tds,
TDSMULTIPLE multiple,
const char *  query,
TDSPARAMINFO params 
)

◆ tds_needs_unprepare()

int tds_needs_unprepare ( TDSCONNECTION conn,
TDSDYNAMIC dyn 
)

Check if dynamic request must be unprepared.

Depending on status and protocol version request should be unprepared or not. \tds

Parameters
dyndynamic request to check

Definition at line 1871 of file query.c.

References CHECK_CONN_EXTRA, CHECK_DYNAMIC_EXTRA, conn, tds_dynamic::emulated, tds_dynamic::id, IS_TDS7_PLUS, and tds_dynamic::num_id.

Referenced by tds_deferred_unprepare().

◆ tds_next_placeholder()

const char* tds_next_placeholder ( const char *  start)

Get position of next placeholder.

Parameters
startpointer to part of query to search
Returns
next placeholder or NULL if not found

Definition at line 568 of file query.c.

References NULL, tds_skip_comment(), and tds_skip_quoted().

Referenced by tds5_fix_dot_query(), tds_count_placeholders(), tds_send_emulated_execute(), and tds_submit_query_params().

◆ tds_next_placeholder_ucs2le()

static const char* tds_next_placeholder_ucs2le ( const char *  start,
const char *  end,
int  named 
)
static

Found the next placeholder (? or @param) in a string.

String must be encoded in ucs2.

Parameters
startstart of the string (or part of it)
endend of string
namedtrue if named parameters should be returned
Returns
either start of next placeholder or end if not found

Definition at line 676 of file query.c.

References assert, isalnum(), prev(), tds_skip_comment_ucs2le(), and tds_skip_quoted_ucs2le().

Referenced by tds7_build_param_def_from_params(), tds7_put_query_params(), and tds_count_placeholders_ucs2le().

◆ tds_put_char_param_as_string()

static TDSRET tds_put_char_param_as_string ( TDSSOCKET tds,
const TDSCOLUMN curcol 
)
static

◆ tds_put_data()

static TDSRET tds_put_data ( TDSSOCKET tds,
TDSCOLUMN curcol 
)
inlinestatic

Write data to wire \tds.

Parameters
curcolcolumn where store column information
Returns
TDS_FAIL on error or TDS_SUCCESS

Definition at line 281 of file query.c.

References tds_column::funcs, tds_column_funcs::put_data, and tds.

Referenced by tds71_submit_prepexec(), tds7_send_execute(), tds_cursor_open(), tds_cursor_update(), tds_put_params(), tds_submit_execdirect(), tds_submit_query_params(), and tds_submit_rpc().

◆ tds_put_data_info()

static TDSRET tds_put_data_info ( TDSSOCKET tds,
TDSCOLUMN curcol,
int  flags 
)
static

◆ tds_put_data_info_length()

static int tds_put_data_info_length ( TDSSOCKET tds,
TDSCOLUMN curcol,
int  flags 
)
static

Calc information length in bytes (useful for calculating full packet length)

Parameters
tdsstate information for the socket and the TDS protocol
curcolcolumn where to store information
flagsbit flags on how to send data (use TDS_PUT_DATA_USE_NAME for use name information)
Returns
data info length

Definition at line 1689 of file query.c.

References CHECK_COLUMN_EXTRA, CHECK_TDS_EXTRA, tds_column::column_name, tds_socket::conn, flags, tds_column::funcs, IS_TDS7_PLUS, len, tds_column_funcs::put_info_len, tds, TDS_DBG_ERROR, tds_dstr_len(), TDS_PUT_DATA_USE_NAME, and tdsdump_log.

Referenced by tds_put_params().

◆ tds_put_param_as_string()

static TDSRET tds_put_param_as_string ( TDSSOCKET tds,
TDSPARAMINFO params,
int  n 
)
static

◆ tds_put_params()

static int tds_put_params ( TDSSOCKET tds,
TDSPARAMINFO info,
int  flags 
)
static

◆ tds_query_flush_packet()

static TDSRET tds_query_flush_packet ( TDSSOCKET tds)
static

◆ tds_quote() [1/2]

static size_t tds_quote ( char *  buffer,
char  quoting,
const char *  id,
size_t  len 
)
static

Quote a string properly.

Output string is always NUL-terminated

Parameters
bufferoutput buffer. If NULL function will just return required bytes
quotingquote character (should be one of '\'', '"', ']')
idstring to quote
lenlength of string to quote
Returns
size of output string

Definition at line 2188 of file query.c.

References buffer, len, and ncbi::grid::netcache::search::fields::size.

Referenced by tds_quote_id(), tds_quote_id_rpc(), and tds_quote_string().

◆ tds_quote() [2/2]

static size_t tds_quote ( TDSSOCKET tds,
char *  buffer,
char  quoting,
const char *  id,
size_t  len 
)
static

Quote a string properly.

Output string is always NUL-terminated \tds

Parameters
bufferoutput buffer. If NULL function will just return required bytes
quotingquote character
idstring to quote
lenlength of string to quote
Returns
size of output string

Definition at line 2260 of file query.c.

References buffer, CHECK_TDS_EXTRA, len, ncbi::grid::netcache::search::fields::size, and tds.

Referenced by tds_quote_id(), and tds_quote_string().

◆ tds_quote_and_put()

static void tds_quote_and_put ( TDSSOCKET tds,
const char *  s,
const char *  end 
)
static

Send a string to server while quoting it.

\tds

Parameters
sstring start
endstring end

Definition at line 3190 of file query.c.

References buf, CHECK_TDS_EXTRA, i, tds, and tds_put_string.

Referenced by tds_put_param_as_string().

◆ tds_quote_id()

size_t tds_quote_id ( TDSSOCKET tds,
char *  buffer,
const char *  id,
ssize_t  idlen 
)

Quote an id.

Parameters
tdsstate information for the socket and the TDS protocol
bufferbuffer to store quoted id. If NULL do not write anything (useful to compute quote length)
idid to quote
idlenid length (< 0 for NUL terminated)
Returns
written chars (not including needed terminator)
Parameters
tdsstate information for the socket and the TDS protocol
bufferbuffer to store quoted id. If NULL do not write anything (useful to compute quote length)
idid to quote
idlenid length (< 0 for NUL terminated)
Returns
written chars (not including needed terminator)
See also
tds_quote_id_rpc

Definition at line 2302 of file query.c.

References buffer, CHECK_TDS_EXTRA, tds_socket::conn, i, len, tds_connection::product_version, tds, TDS_IS_MSSQL, tds_quote(), and TDS_SYB_VER.

◆ tds_quote_id_rpc()

size_t tds_quote_id_rpc ( TDSSOCKET tds,
char *  buffer,
const char *  id,
ssize_t  idlen 
)

Quote an id for a RPC call.

Parameters
tdsstate information for the socket and the TDS protocol
bufferbuffer to store quoted id. If NULL do not write anything (useful to compute quote length)
idid to quote
idlenid length (< 0 for NUL terminated)
Returns
written chars (not including needed terminator)
See also
tds_quote_id

Definition at line 2274 of file query.c.

References buffer, CHECK_TDS_EXTRA, len, tds, TDS_IS_MSSQL, and tds_quote().

◆ tds_quote_string()

size_t tds_quote_string ( TDSSOCKET tds,
char *  buffer,
const char *  str,
ssize_t  len 
)

Quote a string.

Parameters
tdsstate information for the socket and the TDS protocol
bufferbuffer to store quoted id. If NULL do not write anything (useful to compute quote length)
strstring to quote (not necessary null-terminated)
lenlength of string (-1 for null terminated)
Returns
written chars (not including needed terminator)
Parameters
tdsstate information for the socket and the TDS protocol
bufferbuffer to store quoted id. If NULL do not write anything (useful to compute quote length)
strstring to quote (not necessary NUL-terminated)
lenlength of string (-1 for NUL-terminated)
Returns
written chars (not including needed terminator)

Definition at line 2346 of file query.c.

References buffer, len, str(), tds, and tds_quote().

◆ tds_quoteout_stream_init()

static void tds_quoteout_stream_init ( TDSQUOTEOUTSTREAM stream,
TDSSOCKET tds 
)
static

◆ tds_quoteout_stream_write()

static int tds_quoteout_stream_write ( TDSOUTSTREAM stream,
size_t  len 
)
static

◆ tds_send_cancel()

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.

Parameters
tdsstate information for the socket and the TDS protocol
Remarks
tcp will either deliver the packet or time out. (TIME_WAIT determines how long it waits between retries.)

On sending the cancel, we may get EAGAIN. We then select(2) until we know either 1) it succeeded or 2) it didn't. On failure, close the socket, tell the app, and fail the function.

On success, we read(2) and wait for a reply with select(2). If we get one, great. If the client's timeout expires, we tell him, but all we can do is wait some more or give up and close the connection. If he tells us to cancel again, we wait some more.

Definition at line 2159 of file query.c.

References CHECK_TDS_EXTRA, tds_socket::conn, tds_socket::in_cancel, tds_connection::list_mtx, tds_socket::out_flag, tds_socket::out_pos, tds_socket::state, tds, TDS_CANCEL, TDS_DBG_FUNC, tds_flush_packet, TDS_IDLE, tds_mutex_trylock, tds_mutex_unlock, tds_put_cancel, TDS_SUCCESS, tds_wakeup_send, tdsdump_log, tds_connection::wakeup, and tds_socket::wire_mtx.

◆ tds_send_emulated_execute()

static TDSRET tds_send_emulated_execute ( TDSSOCKET tds,
const char *  query,
TDSPARAMINFO params 
)
static

◆ tds_send_emulated_rpc()

static TDSRET tds_send_emulated_rpc ( TDSSOCKET tds,
const char *  rpc_name,
TDSPARAMINFO params 
)
static

Send RPC as string query.

This function is used on old protocol which does not support RPC queries. \tds

Parameters
rpc_namename of RPC to invoke
paramsparameters to send to server
Returns
TDS_FAIL or TDS_SUCCESS

Definition at line 1994 of file query.c.

References buf, tds_column::column_name, tds_column::column_output, tds_result_info::columns, i, n, tds_result_info::num_cols, tds, tds_dstr_cstr(), tds_dstr_isempty(), tds_dstr_len(), tds_get_column_declaration(), tds_put_param_as_string(), tds_put_string, and tds_query_flush_packet().

Referenced by tds_submit_rpc().

◆ tds_set_cur_cursor()

static void tds_set_cur_cursor ( TDSSOCKET tds,
TDSCURSOR cursor 
)
inlinestatic

Set current cursor.

Current cursor is the one will receive output from server. \tds

Parameters
cursorcursor to set as current

Definition at line 2358 of file query.c.

References tds_socket::cur_cursor, tds_cursor::ref_count, tds, and tds_release_cursor.

Referenced by tds_cursor_close(), tds_cursor_dealloc(), tds_cursor_fetch(), tds_cursor_get_cursor_info(), tds_cursor_open(), tds_cursor_setname(), tds_cursor_setrows(), and tds_cursor_update().

◆ tds_set_cur_dyn()

void tds_set_cur_dyn ( TDSSOCKET tds,
TDSDYNAMIC dyn 
)

Set current dynamic.

\tds

Parameters
dyndynamic to set

Definition at line 194 of file query.c.

References tds_socket::cur_dyn, tds_dynamic::ref_count, tds, and tds_release_cur_dyn().

Referenced by tds71_submit_prepexec(), tds_submit_execute(), tds_submit_prepare(), and tds_submit_unprepare().

◆ tds_skip_comment()

const char* tds_skip_comment ( const char *  s)

Skip a comment in a query.

Parameters
sstart of the string (or part of it)
Returns
pointer to end of comment

Definition at line 523 of file query.c.

Referenced by tds_next_placeholder().

◆ tds_skip_comment_ucs2le()

static const char* tds_skip_comment_ucs2le ( const char *  s,
const char *  end 
)
static

Skip a comment in a query.

Parameters
sstart of the string (or part of it). Encoded in ucs2
endend of string
Returns
pointer to end of comment

Definition at line 622 of file query.c.

Referenced by tds_next_placeholder_ucs2le(), and test_generic().

◆ tds_skip_quoted()

const char* tds_skip_quoted ( const char *  s)

Skip quoting string (like 'sfsf', "dflkdj" or [dfkjd])

Parameters
spointer to first quoting character.
Should be ', " or [. 
Returns
character after quoting

Definition at line 548 of file query.c.

Referenced by tds_next_placeholder().

◆ tds_skip_quoted_ucs2le()

static const char* tds_skip_quoted_ucs2le ( const char *  s,
const char *  end 
)
static

Return pointer to end of a quoted string.

At the beginning pointer should point to delimiter.

Parameters
sstart of string to skip encoded in ucs2
endpointer to end of string

Definition at line 650 of file query.c.

References assert.

Referenced by tds_next_placeholder_ucs2le(), and test_generic().

◆ tds_start_query()

void tds_start_query ( TDSSOCKET tds,
unsigned char  packet_type 
)

◆ tds_start_query_head()

static TDSRET tds_start_query_head ( TDSSOCKET tds,
unsigned char  packet_type,
TDSHEADERS head 
)
static

◆ tds_submit_begin_tran()

TDSRET tds_submit_begin_tran ( TDSSOCKET tds)

Send a rollback request.

TDS 7.2+ need this in order to handle transactions correctly if MARS is used. \tds

See also
tds_submit_commit, tds_submit_rollback

Definition at line 3738 of file query.c.

References CHECK_TDS_EXTRA, tds_socket::conn, IS_TDS72_PLUS, tds, TDS7_TRANS, TDS_FAIL, tds_put_byte, tds_put_smallint, tds_query_flush_packet(), tds_set_state, tds_start_query(), tds_submit_query(), and TDS_WRITING.

◆ tds_submit_commit() [1/2]

TDSRET tds_submit_commit ( TDSSOCKET tds,
bool  cont 
)

Send a commit request.

TDS 7.2+ need this in order to handle transactions correctly if MARS is used. \tds

Parameters
conttrue to start a new transaction
See also
tds_submit_rollback, tds_submit_begin_tran

Definition at line 3783 of file query.c.

References CHECK_TDS_EXTRA, tds_socket::conn, IS_TDS72_PLUS, tds, TDS7_TRANS, TDS_FAIL, tds_put_byte, tds_put_smallint, tds_query_flush_packet(), tds_set_state, tds_start_query(), tds_submit_query(), and TDS_WRITING.

◆ tds_submit_commit() [2/2]

TDSRET tds_submit_commit ( TDSSOCKET tds,
int  cont 
)

Send a commit request.

TDS 7.2+ need this in order to handle transactions correctly if MARS is used. \tds

Parameters
conttrue to start a new transaction
See also
tds_submit_rollback, tds_submit_begin_tran

Definition at line 3797 of file query.c.

References CHECK_TDS_EXTRA, tds_socket::conn, IS_TDS72_PLUS, tds, TDS7_TRANS, TDS_FAIL, tds_put_byte, tds_put_smallint, tds_query_flush_packet(), tds_set_state, tds_start_query(), tds_submit_query(), and TDS_WRITING.

◆ tds_submit_execdirect()

TDSRET tds_submit_execdirect ( TDSSOCKET tds,
const char *  query,
TDSPARAMINFO params,
TDSHEADERS head 
)

Submit a prepared query with parameters.

Parameters
tdsstate information for the socket and the TDS protocol
querylanguage query with given placeholders (?)
paramsparameters to send
Returns
TDS_FAIL or TDS_SUCCESS

Definition at line 1326 of file query.c.

References tds_connection::char_convs, CHECK_PARAMINFO_EXTRA, CHECK_TDS_EXTRA, client2ucs2, tds_result_info::columns, tds_socket::conn, tds_socket::cur_dyn, tds_socket::current_op, tds_dynamic::emulated, free(), head, i, tds_dynamic::id, int, IS_TDS50, IS_TDS71_PLUS, IS_TDS7_PLUS, NULL, tds_result_info::num_cols, tds_socket::out_flag, tds_dynamic::params, tds_dynamic::query, query, strdup, tds, TDS5_DYNAMIC_TOKEN, tds5_put_params(), tds7_build_param_def_from_query(), tds7_put_params_definition(), tds7_put_query_params(), tds7_write_param_def_from_query(), tds_alloc_dynamic, tds_convert_string(), tds_convert_string_free, TDS_DYN_EXEC_IMMED, tds_dynamic_deallocated, TDS_END_LEN, TDS_FAIL, TDS_FAILED, tds_flush_packet, tds_freeze, tds_freeze_abort, tds_freeze_close, TDS_IDLE, TDS_NORMAL, TDS_OP_EXECUTESQL, TDS_PROPAGATE, TDS_PUT_BYTE, tds_put_byte, tds_put_data(), tds_put_data_info(), tds_put_n, TDS_PUT_N_AS_UCS2, tds_put_params(), TDS_PUT_SMALLINT, tds_put_smallint, tds_put_string, tds_query_flush_packet(), tds_release_cur_dyn(), tds_release_dynamic, TDS_RPC, tds_send_emulated_execute(), tds_set_state, TDS_SP_EXECUTESQL, TDS_START_LEN_TINYINT, TDS_START_LEN_USMALLINT, tds_start_query_head(), tds_submit_query(), TDS_SUCCEED, TDS_SUCCESS, and TDS_WRITING.

◆ tds_submit_execute()

TDSRET tds_submit_execute ( TDSSOCKET tds,
TDSDYNAMIC dyn 
)

◆ tds_submit_optioncmd()

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.

Option commands are used to change server options. \tds

Parameters
commandcommand type.
optionoption to set/get.
paramparameter value
param_sizelength of parameter value in bytes

Definition at line 3455 of file query.c.

References CHECK_TDS_EXTRA, cmd, tds_column::column_cur_size, tds_column::column_data, tds_column::column_size, tds_column::column_type, tds_result_info::columns, command, tds_socket::conn, tds_socket::current_results, conv_result::i, tds_option_arg::i, IS_TDS50, IS_TDS7_PLUS, NULL, tds_column::on_server, option, tds_socket::option_value, tds_socket::out_flag, SYBINT4, tds, tds_convert, TDS_DBG_FUNC, TDS_FAIL, TDS_FAILED, tds_get_conversion_type, tds_get_ctx, TDS_NORMAL, TDS_OPT_ANSINULL, TDS_OPT_ARITHABORTOFF, TDS_OPT_ARITHABORTON, TDS_OPT_ARITHIGNOREOFF, TDS_OPT_ARITHIGNOREON, TDS_OPT_AUTHOFF, TDS_OPT_AUTHON, TDS_OPT_CHAINXACTS, TDS_OPT_CHARSET, TDS_OPT_CURCLOSEONXACT, TDS_OPT_CURREAD, TDS_OPT_CURWRITE, TDS_OPT_DATEFIRST, TDS_OPT_DATEFORMAT, TDS_OPT_FIPSFLAG, TDS_OPT_FMTDMY, TDS_OPT_FMTDYM, TDS_OPT_FMTMDY, TDS_OPT_FMTMYD, TDS_OPT_FMTYDM, TDS_OPT_FMTYMD, TDS_OPT_FORCEPLAN, TDS_OPT_FORMATONLY, TDS_OPT_GETDATA, TDS_OPT_IDENTITYOFF, TDS_OPT_IDENTITYON, TDS_OPT_ISOLATION, TDS_OPT_LIST, TDS_OPT_NATLANG, TDS_OPT_NOCOUNT, TDS_OPT_NOEXEC, TDS_OPT_PARSEONLY, TDS_OPT_QUOTED_IDENT, TDS_OPT_RESTREES, TDS_OPT_ROWCOUNT, TDS_OPT_SET, TDS_OPT_SHOWPLAN, TDS_OPT_STAT_IO, TDS_OPT_STAT_TIME, TDS_OPT_TEXTSIZE, TDS_OPT_TRUNCABORT, TDS_OPTIONCMD_TOKEN, tds_process_simple_query, tds_process_tokens, TDS_PROPAGATE, tds_put_byte, tds_put_n, tds_put_smallint, tds_query_flush_packet(), TDS_RETURN_DONE, TDS_RETURN_ROW, TDS_ROW_RESULT, TDS_ROWFMT_RESULT, tds_set_state, TDS_STOPAT_ROWFMT, tds_submit_query(), TDS_SUCCESS, TDS_TOKEN_RESULTS, TDS_WRITING, tdsdump_log, and tds_option_arg::ti.

◆ tds_submit_prepare()

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.

Creates a temporary stored procedure in the server.

Under TDS 4.2 dynamic statements are emulated building sql command

Parameters
tdsstate information for the socket and the TDS protocol
querylanguage query with given placeholders (?)
idstring to identify the dynamic query. Pass NULL for automatic generation.
dyn_outwill receive allocated TDSDYNAMIC*. Any older allocated dynamic won't be freed, Can be NULL.
paramsparameters to use. It can be NULL even if parameters are present. Used only for TDS7+
Returns
TDS_FAIL or TDS_SUCCESS

Under TDS 4.2 dynamic statements are emulated building sql command. TDS 5 does not uses parameters type. TDS 7+ uses parameter types to prepare the query. You should prepare again the query if parameters changes.

Parameters
tdsstate information for the socket and the TDS protocol
querylanguage query with given placeholders (?)
idstring to identify the dynamic query. Pass NULL for automatic generation.
dyn_outwill receive allocated TDSDYNAMIC*. Any older allocated dynamic won't be freed, Can be NULL.
paramsparameters to use. It can be NULL even if parameters are present. Used only for TDS7+
Returns
TDS_FAIL or TDS_SUCCESS

Definition at line 1187 of file query.c.

References tds_connection::char_convs, CHECK_PARAMINFO_EXTRA, CHECK_TDS_EXTRA, client2ucs2, tds_socket::conn, tds_socket::current_op, tds_dynamic::emulated, failure, free(), tds_dynamic::id, int, IS_TDS50, IS_TDS71_PLUS, IS_TDS7_PLUS, NULL, tds_socket::out_flag, tds_dynamic::query, query, strdup, SYBINTN, tds, TDS5_DYNAMIC_TOKEN, tds7_build_param_def_from_query(), tds7_put_params_definition(), tds7_put_query_params(), tds7_write_param_def_from_query(), tds_alloc_dynamic, tds_capability_has_req, tds_convert_string(), tds_convert_string_free, TDS_DYN_PREPARE, tds_dynamic_deallocated, TDS_END_LEN, TDS_FAIL, TDS_FAILED, tds_freeze, tds_freeze_abort, tds_freeze_close, TDS_IDLE, TDS_NORMAL, TDS_OP_PREPARE, tds_put_byte, tds_put_int, tds_put_n, TDS_PUT_N_AS_UCS2, tds_put_smallint, tds_put_string, tds_query_flush_packet(), tds_release_cur_dyn(), tds_release_dynamic, TDS_REQ_PROTO_DYNPROC, TDS_RPC, tds_set_cur_dyn(), tds_set_state, TDS_SP_PREPARE, TDS_START_LEN_TINYINT, TDS_START_LEN_USMALLINT, tds_start_query(), TDS_SUCCEED, TDS_SUCCESS, and TDS_WRITING.

◆ tds_submit_query()

TDSRET tds_submit_query ( TDSSOCKET tds,
const char *  query 
)

tds_submit_query() sends a language string to the database server for processing.

Sends a language string to the database server for processing.

TDS 4.2 is a plain text message with a packet type of 0x01, TDS 7.0 is a unicode string with packet type 0x01, and TDS 5.0 uses a TDS_LANGUAGE_TOKEN to encapsulate the query and a packet type of 0x0f. \tds

Parameters
querylanguage query to submit
Returns
TDS_FAIL or TDS_SUCCESS

Definition at line 212 of file query.c.

References NULL, query, tds, and tds_submit_query_params().

Referenced by tds_submit_begin_tran(), tds_submit_commit(), tds_submit_execdirect(), tds_submit_optioncmd(), tds_submit_queryf(), and tds_submit_rollback().

◆ tds_submit_query_params()

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.

Sends a language string to the database server for processing.

TDS 4.2 is a plain text message with a packet type of 0x01, TDS 7.0 is a unicode string with packet type 0x01, and TDS 5.0 uses a TDS_LANGUAGE_TOKEN to encapsulate the query and a packet type of 0x0f. \tds

Parameters
querylanguage query to submit
paramsparameters of query
Returns
TDS_FAIL or TDS_SUCCESS

Definition at line 369 of file query.c.

References tds_connection::char_convs, CHECK_PARAMINFO_EXTRA, CHECK_TDS_EXTRA, client2ucs2, tds_connection::collation, tds_column::column_name, tds_result_info::columns, tds_socket::conn, count, tds_socket::current_op, flags, free(), head, i, IS_TDS50, IS_TDS71_PLUS, IS_TDS7_PLUS, NULL, tds_result_info::num_cols, tds_socket::out_flag, query, SYBNTEXT, tds, tds5_fix_dot_query(), tds5_put_params(), tds7_build_param_def_from_params(), tds7_build_param_def_from_query(), tds7_put_params_definition(), tds7_put_query_params(), tds7_write_param_def_from_params(), tds7_write_param_def_from_query(), tds_convert_string(), tds_convert_string_free, tds_count_placeholders_ucs2le(), tds_dstr_isempty(), TDS_END_LEN, TDS_FAIL, TDS_FAILED, tds_freeze, tds_freeze_abort, tds_freeze_close, TDS_IDLE, TDS_LANGUAGE_TOKEN, tds_next_placeholder(), TDS_NORMAL, TDS_OP_EXECUTESQL, TDS_PROPAGATE, tds_put_byte, tds_put_data(), tds_put_data_info(), TDS_PUT_DATA_USE_NAME, TDS_PUT_INT, tds_put_n, TDS_PUT_N_AS_UCS2, tds_put_params(), tds_put_smallint, tds_put_string, TDS_QUERY, tds_query_flush_packet(), TDS_RPC, tds_set_state, TDS_SP_EXECUTESQL, TDS_START_LEN_UINT, tds_start_query_head(), TDS_SUCCESS, and TDS_WRITING.

Referenced by tds_submit_query().

◆ tds_submit_queryf()

TDSRET tds_submit_queryf ( TDSSOCKET tds,
const char *  queryf,
  ... 
)

Format and submit a query \tds.

Parameters
queryfquery format. printf like expansion is performed on this query.

Definition at line 500 of file query.c.

References CHECK_TDS_EXTRA, free(), NULL, query, tds, TDS_FAIL, tds_submit_query(), and vasprintf.

◆ tds_submit_rollback() [1/2]

TDSRET tds_submit_rollback ( TDSSOCKET tds,
bool  cont 
)

Send a rollback request.

TDS 7.2+ need this in order to handle transactions correctly if MARS is used. \tds

Parameters
conttrue to start a new transaction
See also
tds_submit_begin_tran, tds_submit_commit

Definition at line 3752 of file query.c.

References CHECK_TDS_EXTRA, tds_socket::conn, IS_TDS72_PLUS, tds, TDS7_TRANS, TDS_FAIL, tds_put_byte, tds_put_smallint, tds_query_flush_packet(), tds_set_state, tds_start_query(), tds_submit_query(), and TDS_WRITING.

◆ tds_submit_rollback() [2/2]

TDSRET tds_submit_rollback ( TDSSOCKET tds,
int  cont 
)

Send a rollback request.

TDS 7.2+ need this in order to handle transactions correctly if MARS is used. \tds

Parameters
conttrue to start a new transaction
See also
tds_submit_begin_tran, tds_submit_commit

Definition at line 3766 of file query.c.

References CHECK_TDS_EXTRA, tds_socket::conn, IS_TDS72_PLUS, tds, TDS7_TRANS, TDS_FAIL, tds_put_byte, tds_put_smallint, tds_query_flush_packet(), tds_set_state, tds_start_query(), tds_submit_query(), and TDS_WRITING.

◆ tds_submit_rpc()

TDSRET tds_submit_rpc ( TDSSOCKET tds,
const char *  rpc_name,
TDSPARAMINFO params,
TDSHEADERS head 
)

tds_submit_rpc() call a RPC from server.

Calls a RPC from server.

Output parameters will be stored in tds->param_info

Parameters
tdsstate information for the socket and the TDS protocol
rpc_namename of RPC
paramsparameters informations. NULL for no parameters

Output parameters will be stored in tds->param_info.

Parameters
tdsstate information for the socket and the TDS protocol
rpc_namename of RPC
paramsparameters informations. NULL for no parameters

Definition at line 2051 of file query.c.

References assert, tds_connection::char_convs, CHECK_PARAMINFO_EXTRA, CHECK_TDS_EXTRA, client2ucs2, tds_result_info::columns, tds_socket::conn, head, i, int, IS_TDS50, IS_TDS7_PLUS, tds_result_info::num_cols, tds_socket::out_flag, tds, tds4_send_emulated_rpc(), tds5_put_params(), tds_convert_string(), tds_convert_string_free, TDS_DBRPC_TOKEN, TDS_END_LEN, TDS_FAIL, TDS_FAILED, tds_freeze, tds_freeze_close_len, tds_freeze_written, TDS_IDLE, TDS_NORMAL, TDS_PROPAGATE, tds_put_byte, tds_put_data(), tds_put_data_info(), TDS_PUT_DATA_USE_NAME, tds_put_n, tds_put_params(), TDS_PUT_SMALLINT, tds_put_smallint, tds_put_string, tds_query_flush_packet(), tds_release_cur_dyn(), TDS_RPC, tds_send_emulated_rpc(), tds_set_state, TDS_START_LEN_TINYINT, TDS_START_LEN_USMALLINT, tds_start_query_head(), TDS_SUCCESS, tds_connection::tds_version, and TDS_WRITING.

◆ tds_submit_unprepare()

TDSRET tds_submit_unprepare ( TDSSOCKET tds,
TDSDYNAMIC dyn 
)

Variable Documentation

◆ empty_ctx [1/2]

const TDSCONTEXT empty_ctx = {0}
static

Definition at line 3820 of file query.c.

Referenced by tds_disconnect().

◆ empty_ctx [2/2]

const TDSCONTEXT empty_ctx = {0}
static

Definition at line 3806 of file query.c.

Referenced by tds_disconnect().

Modified on Fri Sep 20 14:57:07 2024 by modify_doxy.py rev. 669887