Re: Rows truncated at 176 chars when using CT-Lib interface

Frediano Ziglio <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <[email protected]>
2009/4/27 Alejandro Guerrieri <[email protected]>:
> Hi,
> This is my first post to the list. I've started playing with FreeTDS a few
> days ago, and I'm having some issues getting more than 176 characters back
> using the ct-lib interface.
>
> The code fragment I'm pasting below works fine when the data does not exceed
> 176 bytes, but anything over that value gets truncated. The fields I'm
> retrieving are VARCHAR(255) and VARCHAR(4000) (it doesn't matter the size,
> the problem occurs anyways).
>
> Maybe I'm doing something really stupid (these are my first attempts at
> coding with FreeTDS and ct-lib, and I found Sybase docs a little cryptic on
> the "examples" side).
>
> I'm using Mac OSX Leopard with gcc 4.0.1. and FreeTDS 0.82 (tried with the
> MacPorts version and also compiling it myself from code downloaded from the
> FreeTDS site. Same results).
>
> Does anybody knows what I'm doing wrong? I don't believe this is a bug, I
> guess somebody would have noticed before me (I did my homework and googled
> around for similar problems, to no avail).
>
> Thank you in advance,
>
> Alex
>
> ....
>
> struct data_s {
>
>  CS_CHAR *data;
>
>  CS_DATAFMT format;
>
>  CS_INT size;
>
>  CS_SMALLINT ind;
>
> };
>
> struct data_s *data;
>
> .....
>

I'm interested on how you send the query. Did you issue a prepared
query? Please post missing code

> while((ret = ct_results(conn->command, &res_type)) == CS_SUCCEED)
>
> {
>
>  switch (res_type)
>
>  {
>
>  case CS_ROW_RESULT:
>
>    if (ct_res_info(conn->command, CS_NUMDATA, (CS_INT *)&columns,
>
>      CS_UNUSED, NULL) != CS_SUCCEED) {
>
>      error(0, "Error fetching attributes");
>
>      return -1;
>
>    }
>
>    data = malloc(sizeof(struct data_s)*columns);
>
>    for (i = 0; i < columns; i++) {
>
>      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].size = data[i].format.maxlength;
>
>      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);
>
>      fprintf(stderr, "Col %d\tSize: %d\tMaxlen %d\n", i,
>
>        data[i].size, data[i].format.maxlength);
>
>    }
>
>    while(((ret = ct_fetch(conn->command, CS_UNUSED, CS_UNUSED,
>
>      CS_UNUSED, &count)) == CS_SUCCEED) || (ret == CS_ROW_FAIL)) {
>
>      if( ret == CS_ROW_FAIL ) {
>
>        fprintf(stderr, "** Error on row %d in this fetch batch.\n",
> count+1);
>
>      } else {
>
>      for (i=0;i<columns;i++) {
>
>        fprintf(stdout, "[%d:%d:%s]\n", i,
>
>          strlen((char *)&data[i].data), &data[i].data);
>
>      }
>
>    }
>
>  }
>
>  case ...
> }
> ....

freddy77
_______________________________________________
FreeTDS mailing list
[email protected]
http://lists.ibiblio.org/mailman/listinfo/freetds
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.