41 #define TDS_ISSPACE(c) isspace((unsigned char) (c))
42 #define TDS_ISALPHA(c) isalpha((unsigned char) (c))
84 unsigned long is_calls = 0;
97 if (*s ==
'-' || *s ==
'/') {
107 if (*s ==
'"' || *s ==
'\'' || *s ==
'[') {
123 if (server_scalar &&
strncasecmp(pcall,
"fn ", 3) == 0) {
143 stmt->prepared_query_is_rpc = 1;
153 if (*s ==
'?' &&
stmt)
154 stmt->prepared_query_is_func = 1;
155 memcpy(d,
"exec ", 5);
160 }
else if (nest_syntax > 0) {
168 }
else if ((is_calls & 1) && (*s ==
'(' || *s ==
')')) {
203 if (
isdigit(*s) || *s ==
'+' || *s ==
'-') {
206 if (end != s && strcspn(s,
".eE") < (
size_t) (end-s) && errno == 0) {
213 if (end != s && errno == 0) {
244 const char *s, *p, *param_start;
261 if (
stmt->prepared_query_is_rpc == 0)
263 stmt->prepared_query_is_rpc = 0;
274 stmt->prepared_query_is_func = 0;
297 stmt->prepared_query_is_func = 0;
308 stmt->prepared_query_is_func = 0;
312 stmt->prepared_query_is_rpc = 1;
318 stmt->prepared_pos =
buf + (param_start - p);
353 static const struct func_info funcs[] = {
356 {
"BIT_LENGTH", 1,
"(8*OCTET_LENGTH", fn_parentheses},
359 {
"CHARACTER_LENGTH", 1,
"CHAR_LENGTH"},
360 {
"CONCAT", 2,
NULL, fn_concat},
362 {
"INSERT", 4,
"STUFF"},
363 {
"LCASE", 1,
"LOWER"},
364 {
"LEFT", 2,
"SUBSTRING", fn_left},
365 {
"LENGTH", 1,
"CHAR_LENGTH(RTRIM", fn_parentheses},
366 {
"LOCATE", 2,
"CHARINDEX"},
371 {
"REPEAT", 2,
"REPLICATE"},
378 {
"UCASE", 1,
"UPPER"},
385 {
"ATAN2", 2,
"ATN2"},
394 {
"MOD", 2,
NULL, fn_mod},
398 {
"RAND", -1,
NULL, fn_rand},
407 {
"DATABASE", 0,
"DB_NAME"},
408 {
"IFNULL", 2,
"ISNULL"},
409 {
"USER", 0,
"USER_NAME"}
417 odbc_native_sql(
const char *odbc_sql,
char **
out)
std::ofstream out("events_result.xml")
main entry point for tests
DSTR * tds_dstr_setlen(DSTR *s, size_t length)
limit length of string, MUST be <= current length
static char * tds_dstr_buf(DSTR *s)
Returns a buffer to edit the string.
static int tds_dstr_isempty(DSTR *s)
test if string is empty
const char * parse_const_param(const char *s, TDS_SERVER_TYPE *type)
SQLRETURN prepare_call(struct _hstmt *stmt)
SQLRETURN native_sql(struct _hdbc *dbc, DSTR *s)
const char * odbc_skip_rpc_name(const char *s)
static SQLRETURN to_native(struct _hdbc *dbc, struct _hstmt *stmt, DSTR *str)
void(* special_fn)(struct native_info *ni, struct func_info *fi, char **params)
void odbc_errs_add(struct _sql_errors *errs, const char *sqlstate, const char *msg)
add an error to list
#define SQL_SUCCESS_WITH_INFO
static const char * str(char *buf, int n)
Structure to hold a string.
#define TDS_IS_MSSQL(x)
Check if product is Microsft SQL Server.
#define TDS_MS_VER(maj, min, x)
Calc a version number for mssql.