Skip to Content.
Sympa Menu

freetds - Re: [freetds] Status of UTF-8 support in 0.83 dev

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Sebastien FLAESCH <sf AT 4js.com>
  • To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
  • Subject: Re: [freetds] Status of UTF-8 support in 0.83 dev
  • Date: Thu, 14 Aug 2008 16:02:04 +0200

James,

When I print the client and the server charset in tds_convert_string()
called from tds_put_data(), I see:

char_conv->client_charset.name = "UTF-8"
char_conv->server_charset.name = "CP1252"

I expected UCS-2 for the server charset...????

Hence it's normal that the conversion of non-CP1252 compatible chars
like 鴻 result in error...

I appears that curcol->char_conv points to the client2server_chardata
TDSICONV structure, because in tds_set_param_type(), the data type is
not identified as a UNICODE type...

So when binding the buffers with sqltype SQL_[VAR]CHAR, it appears that
the Sybase type used is not "UNICODE"...

Should I then bind with SQL_WCHAR / SQL_WVARCHAR?

I made a little test (attached, with log)... still failing.

Seb
/* Test UTF-8 character set
* Author: Sebastien FLAESCH
*
* The ODBC config parameter ClientCharset must be set:
* ClientCharset = UTF8
*/

static const char * g_dbname = "freetds_msvtest1_cobra_utf8";
static const char * g_usernm = "msvuser";
static const char * g_passwd = "fourjs";

#ifdef _WIN32
#include <WINDOWS.H>
#endif
#include <stdio.h>
#include <sql.h>
#include <sqlext.h>

#define CHECK_RCODE(t,h,m) \
if ( rcode != SQL_NO_DATA \
&& rcode != SQL_SUCCESS \
&& rcode != SQL_SUCCESS_WITH_INFO \
&& rcode != SQL_NEED_DATA ) { \
fprintf(stderr,"Error %d at: %s\n",rcode,m); \
getErrorInfo(t,h); \
exit(1); \
}

static int v_key;
static SQLINTEGER v_ind_key;

static char v_char[41]; /* Can hold 10 UTF-8 chars */
static SQLINTEGER v_ind_char;

static char v_varchar[41]; /* Can hold 10 UTF-8 chars */
static SQLINTEGER v_ind_varchar;

static void getErrorInfo(SQLSMALLINT sqlhdltype, SQLHANDLE sqlhandle)
{
SQLRETURN rcode = 0;
SQLCHAR sqlstate[SQL_SQLSTATE_SIZE + 1];
SQLINTEGER naterror = 0;
SQLCHAR msgtext[SQL_MAX_MESSAGE_LENGTH + 1];
SQLSMALLINT msgtextl = 0;
int ifxerror = 0;
rcode = SQLGetDiagRec((SQLSMALLINT) sqlhdltype,
(SQLHANDLE) sqlhandle,
(SQLSMALLINT) 1,
(SQLCHAR *) sqlstate,
(SQLINTEGER *) & naterror,
(SQLCHAR *) msgtext,
(SQLSMALLINT) sizeof(msgtext),
(SQLSMALLINT *) & msgtextl);
fprintf(stderr, "Diagnostic info:\n");
fprintf(stderr, " SQL State: %s\n", (char *) sqlstate);
fprintf(stderr, " SQL code : %d\n", (int) naterror);
fprintf(stderr, " Message : %s\n", (char *) msgtext);
}

main(int argc,char **argv)
{
SQLRETURN rcode;
SQLHENV m_henv;
SQLHDBC m_hdbc;
SQLHSTMT m_hstmt1;
int i,j;
const char * dbname;
const char * usernm;
const char * passwd;

if (argc == 4) {
dbname = argv[1];
usernm = argv[2];
passwd = argv[3];
} else {
dbname = g_dbname;
usernm = g_usernm;
passwd = g_passwd;
}

m_henv = NULL;
rcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_henv);
CHECK_RCODE(SQL_HANDLE_ENV,NULL,"SQLAllocHandle EnvH");

rcode = SQLSetEnvAttr(m_henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)
SQL_OV_ODBC3, SQL_IS_UINTEGER);
CHECK_RCODE(SQL_HANDLE_ENV,m_henv,"ODBC V3");

m_hdbc = NULL;
rcode = SQLAllocHandle(SQL_HANDLE_DBC, (SQLHANDLE) m_henv, (SQLHANDLE *)
&m_hdbc);
CHECK_RCODE(SQL_HANDLE_ENV,m_henv,"SQLAllocHandle DbcH");

rcode = SQLConnect((SQLHANDLE) m_hdbc,
(SQLCHAR *) dbname,
(SQLINTEGER) SQL_NTS,
(SQLCHAR *) usernm,
(SQLINTEGER) SQL_NTS,
(SQLCHAR *) passwd,
(SQLINTEGER) SQL_NTS);
CHECK_RCODE(SQL_HANDLE_DBC,m_hdbc,"SQLConnect");

rcode = SQLSetConnectAttr(m_hdbc,
SQL_ATTR_AUTOCOMMIT, (SQLPOINTER) SQL_AUTOCOMMIT_ON,
SQL_IS_UINTEGER);
CHECK_RCODE(SQL_HANDLE_ENV,m_henv,"SQLSetConnectAttr(autocommit)");

m_hstmt1 = NULL;
rcode = SQLAllocHandle(SQL_HANDLE_STMT, m_hdbc, &m_hstmt1);
CHECK_RCODE(SQL_HANDLE_DBC,m_hdbc,"SQLAllocHandle StmtH 1");

rcode = SQLExecDirect(m_hstmt1, (SQLCHAR *) "drop table mytab王鴻",
SQL_NTS);
rcode = SQLExecDirect(m_hstmt1, (SQLCHAR *) "create table mytab王鴻 (k
int, c nchar(10), vc nvarchar(10))", SQL_NTS);
CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt1,"SQLExecDirect 1.1");

fprintf(stderr,">> SQLPrepare!!!\n");
rcode = SQLPrepare(m_hstmt1, (SQLCHAR *) "insert into mytab王鴻 values
(?,?,?)", SQL_NTS);
CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt1,"SQLPrepare insert");

SQLBindParameter(m_hstmt1, 1, SQL_PARAM_INPUT,
SQL_C_LONG, SQL_INTEGER, 0, 0, &v_key, 0, &v_ind_key);
CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt1,"SQLBindParameter 1");

SQLBindParameter(m_hstmt1, 2, SQL_PARAM_INPUT,
SQL_C_CHAR, SQL_WCHAR /* or SQL_CHAR? */, 40, 0, v_char,
0, &v_ind_char);
CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt1,"SQLBindParameter 2");

SQLBindParameter(m_hstmt1, 3, SQL_PARAM_INPUT,
SQL_C_CHAR, SQL_WVARCHAR /* or SQL_VARCHAR? */, 40, 0,
v_varchar, 0, &v_ind_varchar);
CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt1,"SQLBindParameter 3");

strcpy(v_char, "abcéô鴻");
v_ind_char = strlen(v_char);
strcpy(v_varchar, "abcéô鴻");
v_ind_varchar = strlen(v_varchar);
fprintf(stderr,">> SQLExecute: [%s] (%d) [%s] (%d) \n", v_char,
v_ind_char, v_varchar, v_ind_varchar);
rcode = SQLExecute(m_hstmt1);
CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt1,"SQLExecute 1.1 StmtH");

rcode = SQLFreeHandle(SQL_HANDLE_STMT, (SQLHANDLE) m_hstmt1);
CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt1,"SQLFreeHandle StmtH 1");

rcode = SQLDisconnect(m_hdbc);
CHECK_RCODE(SQL_HANDLE_DBC,m_hdbc,"SQLDisconnect");

rcode = SQLFreeHandle(SQL_HANDLE_DBC, (SQLHANDLE) m_hdbc);
CHECK_RCODE(SQL_HANDLE_DBC,m_hdbc,"SQLFreeHandle DbcH");

rcode = SQLFreeHandle(SQL_HANDLE_ENV, (SQLHANDLE) m_henv);
CHECK_RCODE(SQL_HANDLE_ENV,m_henv,"SQLFreeHandle EnvH");

}

log.c:190:Starting log file for FreeTDS 0.83.dev.20080813
	on 2008-08-14 15:59:51 with debug flags 0x4fff.
iconv.c:337:tds_iconv_open(0x4136fc0, UTF-8)
iconv.c:197:local name for ISO-8859-1 is ISO-8859-1
iconv.c:197:local name for UTF-8 is UTF-8
iconv.c:197:local name for UCS-2LE is UCS-2LE
iconv.c:197:local name for UCS-2BE is UCS-2BE
iconv.c:365:setting up conversions for client charset "UTF-8"
iconv.c:367:preparing iconv for "UTF-8" <-> "UCS-2LE" conversion
iconv.c:404:preparing iconv for "ISO-8859-1" <-> "UCS-2LE" conversion
iconv.c:407:tds_iconv_open: done
net.c:204:Connecting to 10.0.0.115 port 1680 (TDS version 8.0)
net.c:258:tds_open_socket: connect(2) returned "Operation now in progress"
net.c:296:tds_open_socket() succeeded
util.c:162:Changed query state from DEAD to IDLE
login.c:734:quietly sending TDS 7+ login packet
token.c:312:tds_process_login_tokens()
net.c:662:Received packet
0000 04 01 01 89 00 35 01 00-e3 1f 00 01 08 6d 00 73 |.....5.. .....m.s|
0010 00 76 00 74 00 65 00 73-00 74 00 31 00 06 6d 00 |.v.t.e.s .t.1..m.|
0020 61 00 73 00 74 00 65 00-72 00 ab 6e 00 45 16 00 |a.s.t.e. r..n.E..|
0030 00 02 00 27 00 43 00 68-00 61 00 6e 00 67 00 65 |...'.C.h .a.n.g.e|
0040 00 64 00 20 00 64 00 61-00 74 00 61 00 62 00 61 |.d. .d.a .t.a.b.a|
0050 00 73 00 65 00 20 00 63-00 6f 00 6e 00 74 00 65 |.s.e. .c .o.n.t.e|
0060 00 78 00 74 00 20 00 74-00 6f 00 20 00 27 00 6d |.x.t. .t .o. .'.m|
0070 00 73 00 76 00 74 00 65-00 73 00 74 00 31 00 27 |.s.v.t.e .s.t.1.'|
0080 00 2e 00 0a 43 00 4f 00-42 00 52 00 41 00 5c 00 |....C.O. B.R.A.\.|
0090 4d 00 53 00 56 00 31 00-00 01 00 e3 08 00 07 05 |M.S.V.1. ........|
00a0 09 04 c0 00 33 00 e3 17-00 02 0a 75 00 73 00 5f |....3... ...u.s._|
00b0 00 65 00 6e 00 67 00 6c-00 69 00 73 00 68 00 00 |.e.n.g.l .i.s.h..|
00c0 ab 6e 00 47 16 00 00 01-00 27 00 43 00 68 00 61 |.n.G.... .'.C.h.a|
00d0 00 6e 00 67 00 65 00 64-00 20 00 6c 00 61 00 6e |.n.g.e.d . .l.a.n|
00e0 00 67 00 75 00 61 00 67-00 65 00 20 00 73 00 65 |.g.u.a.g .e. .s.e|
00f0 00 74 00 74 00 69 00 6e-00 67 00 20 00 74 00 6f |.t.t.i.n .g. .t.o|
0100 00 20 00 75 00 73 00 5f-00 65 00 6e 00 67 00 6c |. .u.s._ .e.n.g.l|
0110 00 69 00 73 00 68 00 2e-00 0a 43 00 4f 00 42 00 |.i.s.h.. ..C.O.B.|
0120 52 00 41 00 5c 00 4d 00-53 00 56 00 31 00 00 01 |R.A.\.M. S.V.1...|
0130 00 ad 36 00 01 71 00 00-01 16 4d 00 69 00 63 00 |..6..q.. ..M.i.c.|
0140 72 00 6f 00 73 00 6f 00-66 00 74 00 20 00 53 00 |r.o.s.o. f.t. .S.|
0150 51 00 4c 00 20 00 53 00-65 00 72 00 76 00 65 00 |Q.L. .S. e.r.v.e.|
0160 72 00 00 00 00 00 09 00-05 77 e3 13 00 04 04 34 |r....... .w.....4|
0170 00 30 00 39 00 36 00 04-34 00 30 00 39 00 36 00 |.0.9.6.. 4.0.9.6.|
0180 fd 00 00 00 00 00 00 00-00                      |........ .|

token.c:316:looking for login token, got  e3(ENVCHANGE)
token.c:108:tds_process_default_tokens() marker is e3(ENVCHANGE)
token.c:316:looking for login token, got  ab(INFO)
token.c:108:tds_process_default_tokens() marker is ab(INFO)
token.c:2524:tds_process_msg() reading message from server
token.c:2597:tds_process_msg() calling client msg handler
odbc.c:2106:msgno 5701 20003
token.c:2610:tds_process_msg() returning TDS_SUCCEED
token.c:316:looking for login token, got  e3(ENVCHANGE)
token.c:108:tds_process_default_tokens() marker is e3(ENVCHANGE)
token.c:2355:tds_process_env_chg(): 5 bytes of collation data received
token.c:2356:tds->collation was
0000 00 00 00 00 00         -                        |.....|

iconv.c:992:setting server single-byte charset to "CP1252"
token.c:2366:tds->collation now
0000 09 04 c0 00 33         -                        |....3|

token.c:316:looking for login token, got  e3(ENVCHANGE)
token.c:108:tds_process_default_tokens() marker is e3(ENVCHANGE)
token.c:316:looking for login token, got  ab(INFO)
token.c:108:tds_process_default_tokens() marker is ab(INFO)
token.c:2524:tds_process_msg() reading message from server
token.c:2597:tds_process_msg() calling client msg handler
odbc.c:2106:msgno 5703 20003
token.c:2610:tds_process_msg() returning TDS_SUCCEED
token.c:316:looking for login token, got  ad(LOGINACK)
token.c:316:looking for login token, got  e3(ENVCHANGE)
token.c:108:tds_process_default_tokens() marker is e3(ENVCHANGE)
token.c:2413:changing block size from 4096 to 4096
token.c:316:looking for login token, got  fd(DONE)
token.c:108:tds_process_default_tokens() marker is fd(DONE)
token.c:2275:tds_process_end: more_results = 0
		was_cancelled = 0
		error = 0
		done_count_valid = 0
token.c:2291:tds_process_end() state set to TDS_IDLE
token.c:2306:                rows_affected = 0
token.c:393:leaving tds_process_login_tokens() returning 1
odbc.c:6123:SQLSetConnectAttr(0x4133420, 102, 0x1, -5)
odbc.c:6038:_SQLSetConnectAttr(0x4133420, 102, 0x1, -5)
odbc.c:235:change_autocommit: executing SET IMPLICIT_TRANSACTIONS OFF
mem.c:563:tds_free_all_results()
util.c:162:Changed query state from IDLE to QUERYING
write.c:136:tds_put_string converting 29 bytes of "SET IMPLICIT_TRANSACTIONS OFF"
write.c:164:tds_put_string wrote 58 bytes
util.c:162:Changed query state from QUERYING to PENDING
net.c:768:Sending packet
0000 01 01 00 42 00 00 01 00-53 00 45 00 54 00 20 00 |...B.... S.E.T. .|
0010 49 00 4d 00 50 00 4c 00-49 00 43 00 49 00 54 00 |I.M.P.L. I.C.I.T.|
0020 5f 00 54 00 52 00 41 00-4e 00 53 00 41 00 43 00 |_.T.R.A. N.S.A.C.|
0030 54 00 49 00 4f 00 4e 00-53 00 20 00 4f 00 46 00 |T.I.O.N. S. .O.F.|
0040 46 00                  -                        |F.|

token.c:495:tds_process_tokens(0x4136fc0, 0xbef39884, 0xbef39888, 0x100)
util.c:162:Changed query state from PENDING to READING
net.c:662:Received packet
0000 04 01 00 11 00 35 01 00-fd 00 00 ba 00 00 00 00 |.....5.. ........|
0010 00                     -                        |.|

token.c:510:processing result tokens.  marker is  fd(DONE)
token.c:2275:tds_process_end: more_results = 0
		was_cancelled = 0
		error = 0
		done_count_valid = 0
token.c:2291:tds_process_end() state set to TDS_IDLE
util.c:162:Changed query state from READING to IDLE
token.c:2306:                rows_affected = 0
util.c:110:logic error: cannot change query state from IDLE to PENDING
token.c:495:tds_process_tokens(0x4136fc0, 0xbef39884, 0xbef39888, 0x100)
token.c:498:tds_process_tokens() state is COMPLETED
odbc.c:1314:SQLAllocHandle(3, 0x4133420, 0xbef399c8)
odbc.c:1473:_SQLAllocStmt(0x4133420, 0xbef399c8)
odbc.c:3286:SQLExecDirect(0x4139d88, 0x8049269, -3)
prepare_query.c:202:parsing 0 parameters
odbc.c:3043:_SQLExecute(0x4139d88)
odbc.c:3048:_SQLExecute() starting with state 0
mem.c:563:tds_free_all_results()
util.c:162:Changed query state from IDLE to QUERYING
write.c:136:tds_put_string converting 22 bytes of "drop table mytab王鴻"
write.c:164:tds_put_string wrote 36 bytes
util.c:162:Changed query state from QUERYING to PENDING
net.c:768:Sending packet
0000 01 01 00 2c 00 00 01 00-64 00 72 00 6f 00 70 00 |...,.... d.r.o.p.|
0010 20 00 74 00 61 00 62 00-6c 00 65 00 20 00 6d 00 | .t.a.b. l.e. .m.|
0020 79 00 74 00 61 00 62 00-8b 73 3b 9d             |y.t.a.b. .s;.|

token.c:495:tds_process_tokens(0x4136fc0, 0xbef398c0, 0xbef398c4, 0x6914)
util.c:162:Changed query state from PENDING to READING
net.c:662:Received packet
0000 04 01 00 11 00 35 01 00-fd 00 00 c7 00 00 00 00 |.....5.. ........|
0010 00                     -                        |.|

token.c:510:processing result tokens.  marker is  fd(DONE)
token.c:2275:tds_process_end: more_results = 0
		was_cancelled = 0
		error = 0
		done_count_valid = 0
token.c:2291:tds_process_end() state set to TDS_IDLE
util.c:162:Changed query state from READING to IDLE
token.c:2306:                rows_affected = 0
util.c:110:logic error: cannot change query state from IDLE to PENDING
odbc.c:3356:odbc_process_tokens: tds_process_tokens returned 1
odbc.c:3357:    result_type=4052, TDS_DONE_COUNT=0, TDS_DONE_ERROR=0
odbc.c:3400:odbc_process_tokens: processed TDS_DONE_RESULT
token.c:495:tds_process_tokens(0x4136fc0, 0xbef398c0, 0xbef398c4, 0x26914)
token.c:498:tds_process_tokens() state is COMPLETED
odbc.c:3356:odbc_process_tokens: tds_process_tokens returned 2
odbc.c:3357:    result_type=4052, TDS_DONE_COUNT=0, TDS_DONE_ERROR=0
odbc.c:3197:_SQLExecute: odbc_process_tokens returned result_type 4046
odbc.c:3286:SQLExecDirect(0x4139d88, 0x8049280, -3)
prepare_query.c:202:parsing 0 parameters
odbc.c:3043:_SQLExecute(0x4139d88)
odbc.c:3048:_SQLExecute() starting with state 0
mem.c:563:tds_free_all_results()
util.c:162:Changed query state from IDLE to QUERYING
write.c:136:tds_put_string converting 62 bytes of "create table mytab王鴻 (k int, c nchar(10), vc nvarchar(10))"
write.c:164:tds_put_string wrote 116 bytes
util.c:162:Changed query state from QUERYING to PENDING
net.c:768:Sending packet
0000 01 01 00 7c 00 00 01 00-63 00 72 00 65 00 61 00 |...|.... c.r.e.a.|
0010 74 00 65 00 20 00 74 00-61 00 62 00 6c 00 65 00 |t.e. .t. a.b.l.e.|
0020 20 00 6d 00 79 00 74 00-61 00 62 00 8b 73 3b 9d | .m.y.t. a.b..s;.|
0030 20 00 28 00 6b 00 20 00-69 00 6e 00 74 00 2c 00 | .(.k. . i.n.t.,.|
0040 20 00 63 00 20 00 6e 00-63 00 68 00 61 00 72 00 | .c. .n. c.h.a.r.|
0050 28 00 31 00 30 00 29 00-2c 00 20 00 76 00 63 00 |(.1.0.). ,. .v.c.|
0060 20 00 6e 00 76 00 61 00-72 00 63 00 68 00 61 00 | .n.v.a. r.c.h.a.|
0070 72 00 28 00 31 00 30 00-29 00 29 00             |r.(.1.0. ).).|

token.c:495:tds_process_tokens(0x4136fc0, 0xbef398c0, 0xbef398c4, 0x6914)
util.c:162:Changed query state from PENDING to READING
net.c:662:Received packet
0000 04 01 00 11 00 35 01 00-fd 00 00 c6 00 00 00 00 |.....5.. ........|
0010 00                     -                        |.|

token.c:510:processing result tokens.  marker is  fd(DONE)
token.c:2275:tds_process_end: more_results = 0
		was_cancelled = 0
		error = 0
		done_count_valid = 0
token.c:2291:tds_process_end() state set to TDS_IDLE
util.c:162:Changed query state from READING to IDLE
token.c:2306:                rows_affected = 0
util.c:110:logic error: cannot change query state from IDLE to PENDING
odbc.c:3356:odbc_process_tokens: tds_process_tokens returned 1
odbc.c:3357:    result_type=4052, TDS_DONE_COUNT=0, TDS_DONE_ERROR=0
odbc.c:3400:odbc_process_tokens: processed TDS_DONE_RESULT
token.c:495:tds_process_tokens(0x4136fc0, 0xbef398c0, 0xbef398c4, 0x26914)
token.c:498:tds_process_tokens() state is COMPLETED
odbc.c:3356:odbc_process_tokens: tds_process_tokens returned 2
odbc.c:3357:    result_type=4052, TDS_DONE_COUNT=0, TDS_DONE_ERROR=0
odbc.c:3197:_SQLExecute: odbc_process_tokens returned result_type 4046
odbc.c:4239:SQLPrepare(0x4139d88, insert into mytab王鴻 values (?,?,?), -3)
prepare_query.c:202:parsing 0 parameters
prepare_query.c:207:parse_prepared_query: logic_error: parameter out of bounds: 1 > 0 || 1 > 0
odbc.c:4303:Creating prepared statement
mem.c:563:tds_free_all_results()
util.c:162:Changed query state from IDLE to QUERYING
write.c:136:tds_put_string converting 3 bytes of "@P1"
write.c:164:tds_put_string wrote 6 bytes
write.c:136:tds_put_string converting 3 bytes of "@P2"
write.c:164:tds_put_string wrote 6 bytes
write.c:136:tds_put_string converting 3 bytes of "@P3"
write.c:164:tds_put_string wrote 6 bytes
util.c:162:Changed query state from QUERYING to PENDING
net.c:768:Sending packet
0000 03 01 00 ea 00 00 01 00-ff ff 0b 00 00 00 00 01 |........ ........|
0010 26 04 00 00 00 63 5e 00-00 00 09 04 c0 00 33 5e |&....c^. ......3^|
0020 00 00 00 40 00 50 00 31-00 20 00 76 00 61 00 72 |...@.P.1 . .v.a.r|
0030 00 63 00 68 00 61 00 72-00 28 00 38 00 30 00 29 |.c.h.a.r .(.8.0.)|
0040 00 2c 00 40 00 50 00 32-00 20 00 76 00 61 00 72 |.,.@.P.2 . .v.a.r|
0050 00 63 00 68 00 61 00 72-00 28 00 38 00 30 00 29 |.c.h.a.r .(.8.0.)|
0060 00 2c 00 40 00 50 00 33-00 20 00 76 00 61 00 72 |.,.@.P.3 . .v.a.r|
0070 00 63 00 68 00 61 00 72-00 28 00 38 00 30 00 29 |.c.h.a.r .(.8.0.)|
0080 00 00 00 63 50 00 00 00-09 04 c0 00 33 50 00 00 |...cP... ....3P..|
0090 00 69 00 6e 00 73 00 65-00 72 00 74 00 20 00 69 |.i.n.s.e .r.t. .i|
00a0 00 6e 00 74 00 6f 00 20-00 6d 00 79 00 74 00 61 |.n.t.o.  .m.y.t.a|
00b0 00 62 00 8b 73 3b 9d 20-00 76 00 61 00 6c 00 75 |.b..s;.  .v.a.l.u|
00c0 00 65 00 73 00 20 00 28-00 40 00 50 00 31 00 2c |.e.s. .( .@.P.1.,|
00d0 00 40 00 50 00 32 00 2c-00 40 00 50 00 33 00 29 |.@.P.2., .@.P.3.)|
00e0 00 00 00 26 04 04 01 00-00 00                   |...&.... ..|

token.c:495:tds_process_tokens(0x4136fc0, 0xbef39974, 0xbef39978, 0x104)
util.c:162:Changed query state from PENDING to READING
net.c:662:Received packet
0000 04 01 00 2f 00 35 01 00-ff 11 00 c3 00 00 00 00 |.../.5.. ........|
0010 00 79 00 00 00 00 ac 0d-00 00 01 00 00 00 00 26 |.y...... .......&|
0020 04 04 01 00 00 00 fe 00-00 e0 00 00 00 00 00    |........ .......|

token.c:510:processing result tokens.  marker is  ff(DONEINPROC)
token.c:2275:tds_process_end: more_results = 1
		was_cancelled = 0
		error = 0
		done_count_valid = 1
token.c:2306:                rows_affected = 0
token.c:510:processing result tokens.  marker is  79(RETURNSTATUS)
token.c:510:processing result tokens.  marker is  ac(PARAM)
token.c:567:processing parameters for sp 11
token.c:569:calling tds_process_param_result
token.c:1199:tds_process_param_result(0x4136fc0, 0xbef3990c)
token.c:1583:tds_get_data_info(0x4136fc0, 0x413a590, 1) [for parameter]token.c:1646:processing result. type = 38(integer-null), varint_size 1
token.c:1667:processing result. column_size 4
token.c:1985:tds_get_data: type 38, varint size 1
token.c:2049:tds_get_data(): wire column size is 4 
log.c:481:type integer-null has value 1
token.c:573:1 hidden return parameters
token.c:510:processing result tokens.  marker is  fe(DONEPROC)
token.c:2275:tds_process_end: more_results = 0
		was_cancelled = 0
		error = 0
		done_count_valid = 0
token.c:2291:tds_process_end() state set to TDS_IDLE
util.c:162:Changed query state from READING to IDLE
token.c:2306:                rows_affected = 0
util.c:110:logic error: cannot change query state from IDLE to PENDING
token.c:495:tds_process_tokens(0x4136fc0, 0xbef39974, 0xbef39978, 0x104)
token.c:498:tds_process_tokens() state is COMPLETED
odbc.c:1294:SQLBindParameter(0x4139d88, 1, 1, 4, 4, 0, 0, 0x804a560, 0, 0x804a564)
odbc.c:1195:_SQLBindParameter(0x4139d88, 1, 1, 4, 4, 0, 0, 0x804a560, 0, 0x804a564)
odbc.c:1294:SQLBindParameter(0x4139d88, 2, 1, 1, -8, 40, 0, 0x804a580, 0, 0x804a5ac)
odbc.c:1195:_SQLBindParameter(0x4139d88, 2, 1, 1, -8, 40, 0, 0x804a580, 0, 0x804a5ac)
error.c:409:odbc_errs_add: "Invalid data type"
odbc.c:1294:SQLBindParameter(0x4139d88, 3, 1, 1, -9, 40, 0, 0x804a5c0, 0, 0x804a5ec)
odbc.c:1195:_SQLBindParameter(0x4139d88, 3, 1, 1, -9, 40, 0, 0x804a5c0, 0, 0x804a5ec)
error.c:409:odbc_errs_add: "Invalid data type"
odbc.c:3318:SQLExecute(0x4139d88)
prepare_query.c:202:parsing 0 parameters
sql2tds.c:150:type=4
sql2tds.c:156:trace
prepare_query.c:207:parse_prepared_query: logic_error: parameter out of bounds: 2 > 1 || 2 > 1
odbc.c:3332:SQLExecute returns SQL_ERROR or SQL_NULL_DATA (start_parse_prepared_query failed)
error.c:613:SQLGetDiagRec(3, 0x4139d88, 1, 0xbef39960, 0xbef3995c, 0xbef39740, 513, 0xbef3973e)
error.c:618:SQLGetDiagRec returning 100



Archive powered by MHonArc 2.6.24.

Top of Page