[freetds] Rows truncated at 176 chars when using CT-Lib interface

Frediano Ziglio freddy77 at gmail.com
Wed Apr 29 05:18:56 EDT 2009


2009/4/29 Alejandro Guerrieri <alejandro.guerrieri at gmail.com>:
> Frediano,
> Thanks for replying.
>
> I've just solved the issue. The problem was with the CS_DATAFMT structure
> member not being a pointer. I've replaced by:
>

Mmm.... quite strange... I think that real problem is ct_bind, on
first mail you have

ct_bind(conn->command, i+1, &data[i].format, &data[i].data,
&data[i].size, &data[i].ind);

while on second

ct_bind(conn->command, i+1, data[i].format, data[i].data,
&data[i].size, &data[i].ind);

you have changed data[i].format cause you used a pointer but
data[i].data change is the real fix.

freddy77

> struct data_s {
>
> CS_CHAR *data;
>
> CS_DATAFMT *format;
>
> CS_INT size;
>
> CS_SMALLINT ind;
>
> };
>
> struct data_s *data;
>
> And fixed the references on the code:
>
> data[i].format = malloc(sizeof(CS_DATAFMT));
>
> memset(data[i].format, 0, sizeof(CS_DATAFMT));
>
> if (ct_describe(conn->command, i+1, data[i].format) != CS_SUCCEED) {
>
> error(0, "Error fetching column description");
>
> free(data);
>
> return -1;
>
> }
>
> data[i].format->maxlength++;
>
> data[i].data = malloc(data[i].format->maxlength);
>
> data[i].format->datatype = CS_CHAR_TYPE;
>
> data[i].format->format = CS_FMT_NULLTERM;
>
> ct_bind(conn->command, i+1, data[i].format, data[i].data,
>
> &data[i].size, &data[i].ind);
>
> And that was it :)
>
> Regarding the select, it's a simple command:
>
> ct_command(conn->command, CS_LANG_CMD,
>
> "SELECT col1, col2, col3 FROM table",
>
> CS_NULLTERM, CS_UNUSED);
>



More information about the FreeTDS mailing list