Skip to Content.
Sympa Menu

freetds - tds_process_result_tokens patch

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Mark Schaal <mark AT champ.tstonramp.com>
  • To: freetds AT franklin.oit.unc.edu
  • Subject: tds_process_result_tokens patch
  • Date: Thu, 12 Aug 1999 14:31:31 -0700 (PDT)



For your consideration.

Adds an is_end_token macro to tds.h. (Maybe it should go in token.c?)
Changes tds_process_result_tokens error handling.
Changes tds_process_result_tokens end token handling to support above.
Changes more_results handling, eliminating more_results global variable.
Fixes spelling of 'cancelled'.

Mark

######################################################################
tds.h patch
######################################################################
*** tds.h Thu Aug 12 13:56:25 1999
--- tds.h~ Thu Aug 12 14:19:33 1999
***************
*** 124,133 ****
#define TDS_DONEPROC TDS_END2_TOKEN
#define TDS_DONEINPROC TDS_END3_TOKEN

- #define is_end_token(x) (x==TDS_END_TOKEN || \
- x==TDS_END2_TOKEN || \
- x==TDS_END3_TOKEN)
-
/* states for tds_process_messages() */
#define PROCESS_ROWS 0
#define PROCESS_RESULTS 1
--- 124,129 ----


######################################################################
token.c patch
######################################################################
*** token.c Thu Aug 12 14:29:19 1999
--- token.c~ Thu Aug 12 13:47:32 1999
***************
*** 47,52 ****
--- 47,53 ----
static int tds_process_row(TDSSOCKET *tds);


+ static int more_results;
int tds_process_default_tokens(TDSSOCKET *tds, int marker)
{
TDSRESULTINFO *info;
***************
*** 62,74 ****
}
case TDS_END2_TOKEN:
case TDS_END_TOKEN:
- case TDS_END3_TOKEN:
{
int more_results;
! int cancelled;
! tds_process_end(tds, marker, &more_results, &cancelled);
break;
}
case TDS_124_TOKEN:
tds_get_n(tds,NULL,8);
break;
--- 63,88 ----
}
case TDS_END2_TOKEN:
case TDS_END_TOKEN:
{
int more_results;
! int canceled;
! tds_process_end(tds, marker, &more_results, &canceled);
break;
}
+ case TDS_END3_TOKEN:
+ {
+ /*
+ * XXX It might be better not to consider TDS_END3_TOKEN
+ * an end token. They have a similar format, but the
+ * TDS_END3_TOKEN has more info after it.
+ */
+
+ more_results = tds_get_smallint(tds) & 0x1;
+ if (tds->res_info)
+ tds->res_info->more_results=more_results;
+ tds_get_n(tds,NULL,6);
+ break;
+ }
case TDS_124_TOKEN:
tds_get_n(tds,NULL,8);
break;
***************
*** 163,170 ****
int tds_process_result_tokens(TDSSOCKET *tds)
{
int result=0;
- int more_results = 0;
- int cancelled;
int marker;

if (tds->res_info && tds->res_info->state==TDS_COMPLETED) {
--- 177,182 ----
***************
*** 184,189 ****
--- 196,203 ----
case TDS_MSG_TOKEN:
case TDS_EED_TOKEN:
tds_process_msg(tds,marker);
+ if (tds->msg_info->priv_msg_type==1)
+ return TDS_FAIL;
break;
case TDS_RESULT_TOKEN:
if (!result) {
***************
*** 218,239 ****
case TDS_END_TOKEN:
case TDS_END2_TOKEN:
case TDS_END3_TOKEN:
!
tds_process_end(tds,marker,&more_results,&cancelled);
! break;
default:
tds_process_default_tokens(tds, marker);
break;
}
! } while ( (!is_end_token(marker)) || more_results);
! if (tds->res_info)
! tds->res_info->state=TDS_COMPLETED;
! if (tds->msg_info && tds->msg_info->priv_msg_type==1)
! return TDS_FAIL;
return TDS_NO_MORE_RESULTS;
}
int tds_process_row_tokens(TDSSOCKET *tds)
{
int marker;


while (1) {
--- 232,268 ----
case TDS_END_TOKEN:
case TDS_END2_TOKEN:
case TDS_END3_TOKEN:
! tds_process_default_tokens(tds,marker);
! if(tds->res_info) {
! if (tds->res_info->more_results) {
! break;
! } else {
!
tds->res_info->state=TDS_COMPLETED;
! return TDS_NO_MORE_RESULTS;
! }
! }
! else if (more_results) {
! break;
! } else {
! return TDS_NO_MORE_RESULTS;
! }
default:
tds_process_default_tokens(tds, marker);
break;
}
! } while ((marker!=TDS_END_TOKEN) || more_results);
! if (tds->res_info) tds->res_info->state=TDS_COMPLETED;
return TDS_NO_MORE_RESULTS;
}
int tds_process_row_tokens(TDSSOCKET *tds)
{
int marker;
+ int more_results;
+ int canceled;
+ /*
+ int aByte;
+ int aLen, aVal;
+ */


while (1) {
***************
*** 249,259 ****
case TDS_END_TOKEN:
case TDS_END2_TOKEN:
case TDS_END3_TOKEN:
! {
! int more_results, cancelled;
! tds_process_end(tds, marker, &more_results,
&cancelled);
return TDS_NO_MORE_ROWS;
- }
default:
tds_process_default_tokens(tds,marker);
break;
--- 278,287 ----
case TDS_END_TOKEN:
case TDS_END2_TOKEN:
case TDS_END3_TOKEN:
! /* tds_unget_byte(tds); */
! tds_process_end(tds, marker, &more_results,
&canceled);
! tds->res_info->more_results = more_results;
return TDS_NO_MORE_ROWS;
default:
tds_process_default_tokens(tds,marker);
break;
***************
*** 553,567 ****
TDSSOCKET *tds,
int marker,
int *more_results,
! int *was_cancelled)
{
int tmp = tds_get_smallint(tds);

*more_results = (tmp & 0x1) != 0;
! *was_cancelled = (tmp & 0x20) != 0;
if (tds->res_info) {
tds->res_info->more_results=*more_results;
! if (*was_cancelled || !(*more_results)) {
tds->res_info->state = TDS_COMPLETED;
}
}
--- 581,595 ----
TDSSOCKET *tds,
int marker,
int *more_results,
! int *was_canceled)
{
int tmp = tds_get_smallint(tds);

*more_results = (tmp & 0x1) != 0;
! *was_canceled = (tmp & 0x20) != 0;
if (tds->res_info) {
tds->res_info->more_results=*more_results;
! if (*was_canceled || !(*more_results)) {
tds->res_info->state = TDS_COMPLETED;
}
}
***************
*** 585,591 ****
int bufsize;
int marker;
int more_results;
! int cancelled;


if (!query) return TDS_FAIL;
--- 613,619 ----
int bufsize;
int marker;
int more_results;
! int canceled;


if (!query) return TDS_FAIL;
***************
*** 611,617 ****
break;
case TDS_END_TOKEN:
case TDS_END2_TOKEN:
! tds_process_end(tds, marker,
&more_results, &cancelled);
if (more_results) {

tds_client_msg(tds,10000,7,0,1,
"Attempt to initiate a new SQL Server operation with results
pending.");
--- 639,645 ----
break;
case TDS_END_TOKEN:
case TDS_END2_TOKEN:
! tds_process_end(tds, marker,
&more_results, &canceled);
if (more_results) {

tds_client_msg(tds,10000,7,0,1,
"Attempt to initiate a new SQL Server operation with results
pending.");

--
Mark J. Schaal Phone: (909) 620-7724
TST On Ramp Fax: (909) 620-8174
System Administrator E-Mail: mark AT tstonramp.com




Archive powered by MHonArc 2.6.24.

Top of Page