freetds AT lists.ibiblio.org
Subject: FreeTDS Development Group
List archive
- From: "ZIGLIO, Frediano, VF-IT" <Frediano.Ziglio AT vodafone.com>
- To: "FreeTDS Development Group" <freetds AT lists.ibiblio.org>
- Subject: [freetds] dblib buffering problem
- Date: Fri, 9 Jul 2004 14:34:07 +0200
Today I tried regression tests with a mssql2k and I discovered that
patch for STATUSRESULT causes some problems to dblib and buffering.
Assuming client issue a simple select server can reply with
STATUSRESULT
ROWFMT
ROW
ROW
...
DONE
In dbsqlok we test if next token it's a result, if not it calls
trs_process_results_token however doing so it process token but do not
init buffer so at next dbnextrow it just core at dblib.c:337
(assert(row_size <= buf->element_size)).
IMHO there are two fixes:
1- add TDS_STATUSRESULT_TOKEN in is_result_token macro (include/tds.h);
2- initialize buffer in dbsqlok
1 works perfectly, 2 it's not so easy cause next dbresults want to
handle ROWFMT... from my point of view is something too complicated in
dblib... I readed dbsqlok docs on Sybase site but I don't understand
what should this function do... it has to detect if there are errors on
query but it hasn't to process any results... so what class of tokens
it's expected to handle??
Also buffering has some problems:
- it simply can't run with text/image, it copy just buffer without any
text/image, pointer to garbage and memory errors are just waiting... it
can work only with maximun 1 row and row in TDSSOCKET freed _after_
dblib one...
- what happen if compute row is bigger than result row ?? Or it this
impossible?
freddy77
- [freetds] dblib buffering problem, ZIGLIO, Frediano, VF-IT, 07/09/2004
Archive powered by MHonArc 2.6.24.