Skip to content

Commit a869fb6

Browse files
author
freddy77
committed
improve test for binary
1 parent b0f3446 commit a869fb6

File tree

2 files changed

+58
-9
lines changed

2 files changed

+58
-9
lines changed

ChangeLog

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
Wed Aug 17 15:21:15 CEST 2011 Frediano Ziglio <freddy77_A_gmail_D_com>
2+
* src/odbc/unittests/genparams.c: improve test for binary
3+
14
Wed Aug 17 11:11:38 CEST 2011 Frediano Ziglio <freddy77_A_gmail_D_com>
25
* src/odbc/convert_tds2sql.c src/odbc/odbc_util.c:
36
* src/odbc/sql2tds.c:
@@ -768,4 +771,4 @@ Sat Apr 9 16:15:00 EDT 2011 JK Lowden <[email protected]>
768771
* ChangeLog-0.91 added because of release
769772

770773
$FreeTDS$
771-
$Id: ChangeLog,v 1.3381 2011/08/17 09:11:38 freddy77 Exp $
774+
$Id: ChangeLog,v 1.3382 2011/08/17 13:21:09 freddy77 Exp $

src/odbc/unittests/genparams.c

Lines changed: 54 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* Also we have to check normal char and wide char
1919
*/
2020

21-
static char software_version[] = "$Id: genparams.c,v 1.48 2011/07/12 10:16:59 freddy77 Exp $";
21+
static char software_version[] = "$Id: genparams.c,v 1.49 2011/08/17 13:21:10 freddy77 Exp $";
2222
static void *no_unused_var_warn[] = { software_version, no_unused_var_warn };
2323

2424
#ifdef TDS_NO_DM
@@ -31,8 +31,9 @@ static char precision = 18;
3131
static char exec_direct = 0;
3232
static char prepare_before = 0;
3333
static char use_cursors = 0;
34+
static int only_test = 0;
3435

35-
static void
36+
static int
3637
TestOutput(const char *type, const char *value_to_convert, SQLSMALLINT out_c_type, SQLSMALLINT out_sql_type, const char *expected)
3738
{
3839
char sbuf[1024];
@@ -112,11 +113,18 @@ TestOutput(const char *type, const char *value_to_convert, SQLSMALLINT out_c_typ
112113
}
113114

114115
if (strcmp(sbuf, expected) != 0) {
116+
if (only_test) {
117+
odbc_command("drop proc spTestProc");
118+
ODBC_FREE();
119+
return 1;
120+
}
115121
fprintf(stderr, "Wrong result\n Got: %s\n Expected: %s\n", sbuf, expected);
116122
exit(1);
117123
}
124+
only_test = 0;
118125
odbc_command("drop proc spTestProc");
119126
ODBC_FREE();
127+
return 0;
120128
}
121129

122130
static char check_truncation = 0;
@@ -268,6 +276,37 @@ NullInput(SQLSMALLINT out_c_type, SQLSMALLINT out_sql_type, const char *param_ty
268276

269277
static int big_endian = 1;
270278

279+
static const char*
280+
pack(const char *fmt, ...)
281+
{
282+
static char out[80];
283+
char *p = out;
284+
285+
va_list v;
286+
va_start(v, fmt);
287+
for (; *fmt; ++fmt) {
288+
unsigned n = va_arg(v, unsigned);
289+
int i, l = 2;
290+
291+
assert(p - out + 8 < sizeof(out));
292+
switch (*fmt) {
293+
case 'l':
294+
l += 2;
295+
case 's':
296+
for (i = 0; i < l; ++i) {
297+
sprintf(p, "%02X", (n >> (8*(big_endian ? l-1-i : i))) & 0xffu);
298+
p += 2;
299+
}
300+
break;
301+
default:
302+
assert(0);
303+
}
304+
}
305+
*p = 0;
306+
va_end(v);
307+
return out;
308+
}
309+
271310
static void
272311
AllTests(void)
273312
{
@@ -306,13 +345,20 @@ AllTests(void)
306345
*/
307346
if (odbc_driver_is_freetds())
308347
TestOutput("VARCHAR(20)", "313233", SQL_C_BINARY, SQL_VARCHAR, "333133323333");
309-
/* FIXME our driver ignore precision for date */
348+
349+
only_test = 1;
310350
precision = 3;
311-
/* Some MS driver incorrectly prepare with smalldatetime*/
312-
if (!use_cursors || odbc_driver_is_freetds())
313-
TestOutput("DATETIME", "2004-02-24 15:16:17", SQL_C_BINARY, SQL_TIMESTAMP, big_endian ? "0000949700FBAA2C" : "979400002CAAFB00");
314-
TestOutput("SMALLDATETIME", "2004-02-24 15:16:17", SQL_C_BINARY, SQL_TIMESTAMP,
315-
big_endian ? "0000949700FB9640" : "979400004096FB00");
351+
if (TestOutput("DATETIME", "2004-02-24 15:16:17", SQL_C_BINARY, SQL_TIMESTAMP, pack("ssssssl", 2004, 2, 24, 15, 16, 17, 0))) {
352+
/* FIXME our driver ignore precision for date */
353+
precision = 3;
354+
/* Some MS driver incorrectly prepare with smalldatetime*/
355+
if (!use_cursors || odbc_driver_is_freetds()) {
356+
TestOutput("DATETIME", "2004-02-24 15:16:17", SQL_C_BINARY, SQL_TIMESTAMP, pack("ll", 0x9497, 0xFBAA2C));
357+
}
358+
TestOutput("SMALLDATETIME", "2004-02-24 15:16:17", SQL_C_BINARY, SQL_TIMESTAMP, pack("ll", 0x9497, 0xFB9640));
359+
} else {
360+
TestOutput("SMALLDATETIME", "2004-02-24 15:16:17", SQL_C_BINARY, SQL_TIMESTAMP, pack("ssssssl", 2004, 2, 24, 15, 16, 0, 0));
361+
}
316362
TestInput(SQL_C_TYPE_TIMESTAMP, "DATETIME", SQL_TYPE_TIMESTAMP, "DATETIME", "2005-07-22 09:51:34");
317363

318364
/* test timestamp millisecond round off */

0 commit comments

Comments
 (0)