Re: Status of UTF-8 support in 0.83 dev

Sebastien FLAESCH <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Organization Four J's Development Tools
Message-ID <[email protected]>
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

_______________________________________________
FreeTDS mailing list
[email protected]
http://lists.ibiblio.org/mailman/listinfo/freetds
odbctest111.c (text/plain, 5.2 KB)
/* 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");

}
tds.log (text/x-log, 14.7 KB)
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 |[email protected] . .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 |.,[email protected] . .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 |.,[email protected] . .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. .( [email protected].,|
00d0 00 40 00 50 00 32 00 2c-00 40 00 50 00 33 00 29 |[email protected]., [email protected].)|
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.