38 unsigned char out_buf[256];
45 odbc_command(
"IF OBJECT_ID('spTestProc') IS NOT NULL DROP PROC spTestProc");
47 if (
strncmp(value_to_convert,
"0x", 2) == 0)
49 sprintf(sbuf,
"CREATE PROC spTestProc @i %s OUTPUT AS SELECT @i = CONVERT(%s, %s%s%s)",
type,
type, sep, value_to_convert, sep);
51 memset(out_buf, 0,
sizeof(out_buf));
62 sizeof(out_buf), &out_len,
"S");
71 sizeof(out_buf), &out_len,
"S");
95 fprintf(stderr,
"Wrong result\n Got: %s\n Expected: %s\n", sbuf,
expected);
111 unsigned char out_buf[256];
113 const char *
expected = value_to_convert;
114 size_t value_len = strlen(value_to_convert);
116 const char *sep =
"'";
121 if ((p = strstr(value_to_convert,
" -> ")) !=
NULL) {
122 value_len = p - value_to_convert;
125 if (value_len >= 2 &&
strncmp(value_to_convert,
"0x", 2) == 0)
127 sprintf(sbuf,
"SELECT CONVERT(%s, %s%.*s%s)",
type, sep, (
int) value_len, value_to_convert, sep);
140 sprintf(sbuf,
"CREATE TABLE #tmp_insert (col %s)", param_type);
150 sprintf(sbuf,
"INSERT INTO #tmp_insert VALUES(?)");
179 if (
strcmp(param_type,
"TEXT") == 0)
180 sprintf(sbuf,
"SELECT * FROM #tmp_insert WHERE CONVERT(VARCHAR(255), col) = CONVERT(VARCHAR(255), %s%s%s)", sep,
expected, sep);
181 else if (
strcmp(param_type,
"NTEXT") == 0)
182 sprintf(sbuf,
"SELECT * FROM #tmp_insert WHERE CONVERT(NVARCHAR(2000), col) = CONVERT(NVARCHAR(2000), %s%s%s)", sep,
expected, sep);
183 else if (
strcmp(param_type,
"IMAGE") == 0)
184 sprintf(sbuf,
"SELECT * FROM #tmp_insert WHERE CONVERT(VARBINARY(255), col) = CONVERT(VARBINARY(255), %s%s%s)", sep,
expected, sep);
186 sprintf(sbuf,
"SELECT * FROM #tmp_insert WHERE col = CONVERT(%s, %s%s%s)", param_type, sep,
expected, sep);
209 sprintf(sbuf,
"CREATE TABLE #tmp_insert (col %s NULL)", param_type);
219 sprintf(sbuf,
"INSERT INTO #tmp_insert VALUES(?)");
239 odbc_command(
"SELECT * FROM #tmp_insert WHERE DATALENGTH(col) = 0 OR DATALENGTH(col) IS NULL");
241 odbc_command(
"SELECT * FROM #tmp_insert WHERE col IS NULL");
261 for (; *fmt; ++fmt) {
262 unsigned n = va_arg(v,
unsigned);
270 for (
i = 0;
i < l; ++
i) {
271 sprintf(p,
"%02X", (
n >> (8*(
big_endian ? l-1-
i :
i))) & 0xffu);
325 if (
TestOutput(
"DATETIME",
"2004-02-24 15:16:17",
SQL_C_BINARY,
SQL_TIMESTAMP,
pack(
"ssssssl", 2004, 2, 24, 15, 16, 17, 0))) {
334 TestOutput(
"SMALLDATETIME",
"2004-02-24 15:16:17",
SQL_C_BINARY,
SQL_TIMESTAMP,
pack(
"ssssssl", 2004, 2, 24, 15, 16, 0, 0));
351 ltime = localtime(&curr_time);
352 y = ltime->tm_year + 1900;
353 m = ltime->tm_mon + 1;
360 if (sscanf(date,
"%d-%d-%d", &
a, &
b, &c) == 3) {
369 sprintf(
buf,
"2003-07-22 13:02:03 -> %04d-%02d-%02d 13:02:03", (
int) y, (
int) m, (
int) d);
426 #ifdef ENABLE_DEVELOPING
484 setenv(
"TDS_SKIP_SUCCESS",
"1", 1);
501 printf(
"Done successfully!\n");
void odbc_c2string(char *out, SQLSMALLINT out_c_type, const void *in, size_t in_len)
Converts an ODBC result into a string.
#define CHKMoreResults(res)
#define CHKBindParameter(a, b, c, d, e, f, g, h, i, res)
#define CHKPrepare(a, b, res)
#define odbc_reset_statement()
#define odbc_command(cmd)
#define CHKExecDirect(a, b, res)
#define CHKSetStmtAttr(a, b, c, res)
std::ofstream out("events_result.xml")
main entry point for tests
int main(int argc, char *argv[])
static const char tds_no_dm
static void NullInput(SQLSMALLINT out_c_type, SQLSMALLINT out_sql_type, const char *param_type)
static const char * pack(const char *fmt,...)
static void AllTests(void)
static char check_truncation
static int TestOutput(const char *type, const char *value_to_convert, SQLSMALLINT out_c_type, SQLSMALLINT out_sql_type, const char *expected)
static char prepare_before
static void TestInput(SQLSMALLINT out_c_type, const char *type, SQLSMALLINT out_sql_type, const char *param_type, const char *value_to_convert)
int strncmp(const char *str1, const char *str2, size_t count)
int strcmp(const char *str1, const char *str2)
static const char * expected[]
const char * odbc_db_version(void)
unsigned int odbc_db_version_int(void)
void odbc_check_cursor(void)
int odbc_disconnect(void)
int odbc_db_is_microsoft(void)
int odbc_tds_version(void)
int odbc_driver_is_freetds(void)
static SQLRETURN odbc_connect(TDS_DBC *dbc, TDSLOGIN *login)
SQLRETURN SQLFetch(SQLHSTMT StatementHandle)
#define SQL_ATTR_CURSOR_SCROLLABLE
SQLRETURN SQLFreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option)
#define SQL_TYPE_TIMESTAMP
SQLRETURN SQLBindCol(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLINTEGER BufferLength, SQLINTEGER *StrLen_or_Ind)
#define SQL_C_TYPE_TIMESTAMP
#define SQL_LONGVARBINARY
#define SQL_ATTR_CURSOR_TYPE
#define SQL_CURSOR_DYNAMIC
SQLRETURN SQLMoreResults(SQLHSTMT hstmt)
signed short int SQLSMALLINT