From: Vlad S. <ser...@us...> - 2005-06-07 00:02:40
|
Update of /cvsroot/naviserver/modules/nsfreetds In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14382 Modified Files: nsfreetds.c Log Message: dead connection detecting by Ian Harding, support FreeTDS 0.64 Index: nsfreetds.c =================================================================== RCS file: /cvsroot/naviserver/modules/nsfreetds/nsfreetds.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** nsfreetds.c 26 May 2005 04:09:35 -0000 1.3 --- nsfreetds.c 7 Jun 2005 00:02:28 -0000 1.4 *************** *** 118,123 **** tds = tds_alloc_socket(context,512); ! if(context->locale && !context->locale->date_fmt) context->locale->date_fmt = strdup("%Y-%m-%d %T"); context->msg_handler = Db_Msg_Handler; --- 118,124 ---- tds = tds_alloc_socket(context,512); ! if(context->locale && !context->locale->date_fmt) { context->locale->date_fmt = strdup("%Y-%m-%d %T"); + } context->msg_handler = Db_Msg_Handler; *************** *** 176,184 **** TDS_INT resulttype; ! Db_Cancel(handle); if(tds_submit_query(GET_TDS(handle),sql) != TDS_SUCCEED) { ! Ns_Log(Error, "Db_Exec(%s): tds_submit_query failed.", handle->datasource); ! return NS_ERROR; } while(status == TDS_SUCCEED) { --- 177,187 ---- TDS_INT resulttype; ! if(Db_Cancel(handle) == NS_ERROR) { ! return NS_ERROR; ! } if(tds_submit_query(GET_TDS(handle),sql) != TDS_SUCCEED) { ! Ns_Log(Error, "Db_Exec(%s): tds_submit_query failed.", handle->datasource); ! return NS_ERROR; } while(status == TDS_SUCCEED) { *************** *** 188,194 **** case TDS_DONEPROC_RESULT: case TDS_DONEINPROC_RESULT: ! status = done & TDS_DONE_ERROR ? TDS_FAIL : TDS_NO_MORE_RESULTS; break; case TDS_ROW_RESULT: case TDS_COMPUTE_RESULT: handle->statement = (void *)GET_TDS(handle)->res_info; --- 191,198 ---- case TDS_DONEPROC_RESULT: case TDS_DONEINPROC_RESULT: ! if(done & TDS_DONE_ERROR) status = TDS_FAIL; break; case TDS_ROW_RESULT: + case TDS_ROWFMT_RESULT: case TDS_COMPUTE_RESULT: handle->statement = (void *)GET_TDS(handle)->res_info; *************** *** 200,203 **** --- 204,208 ---- break; } + } if((status != TDS_SUCCEED && status != TDS_NO_MORE_RESULTS) || handle->dsExceptionMsg.length) { *************** *** 219,230 **** if(!handle->fetchingRows || !handle->row->size) { ! Ns_DbSetException(handle,"NSDB","no rows waiting to fetch"); ! return NS_ERROR; } rc = tds_process_tokens(GET_TDS(handle),&resulttype,&computeid,TDS_STOPAT_ROWFMT|TDS_RETURN_DONE|TDS_RETURN_ROW|TDS_RETURN_COMPUTE); if(rc != TDS_SUCCEED && rc != TDS_NO_MORE_RESULTS) { ! Ns_Log(Error,"Db_GetRow(%s): tds_process_row_tokens: %d",handle->datasource,rc); ! Db_Cancel(handle); ! return NS_ERROR; } if(rc == TDS_NO_MORE_RESULTS || --- 224,235 ---- if(!handle->fetchingRows || !handle->row->size) { ! Ns_DbSetException(handle,"NSDB","no rows waiting to fetch"); ! return NS_ERROR; } rc = tds_process_tokens(GET_TDS(handle),&resulttype,&computeid,TDS_STOPAT_ROWFMT|TDS_RETURN_DONE|TDS_RETURN_ROW|TDS_RETURN_COMPUTE); if(rc != TDS_SUCCEED && rc != TDS_NO_MORE_RESULTS) { ! Ns_Log(Error,"Db_GetRow(%s): tds_process_row_tokens: %d",handle->datasource,rc); ! Db_Cancel(handle); ! return NS_ERROR; } if(rc == TDS_NO_MORE_RESULTS || *************** *** 259,264 **** Db_Flush(Ns_DbHandle *handle) { ! Db_Cancel(handle); ! return NS_OK; } --- 264,268 ---- Db_Flush(Ns_DbHandle *handle) { ! return Db_Cancel(handle); } *************** *** 266,271 **** Db_Cancel(Ns_DbHandle *handle) { ! if(handle->fetchingRows) { ! tds_process_simple_query(GET_TDS(handle)); } tds_free_all_results(GET_TDS(handle)); --- 270,282 ---- Db_Cancel(Ns_DbHandle *handle) { ! if(IS_TDSDEAD(GET_TDS(handle))) { ! Ns_Log(Error, "Db_Cancel(%s): dead connection detected.", handle->datasource); ! handle->statement = NULL; ! handle->fetchingRows = 0; ! handle->connected = NS_FALSE; ! return NS_ERROR; ! } ! if(tds_process_simple_query(GET_TDS(handle)) == TDS_FAIL) { ! Ns_Log(Error,"Db_Cancel(%s): tds_process_simple_query failed",handle->datasource); } tds_free_all_results(GET_TDS(handle)); *************** *** 283,288 **** if(GET_TDS_RESULTS(handle)) { ! for(i = 0; i < GET_TDS_RESULTS(handle)->num_cols; i++) Ns_SetPut((Ns_Set *)handle->row,GET_TDS_RESULTS(handle)->columns[i]->column_name,NULL); } return (Ns_Set *)handle->row; --- 294,300 ---- if(GET_TDS_RESULTS(handle)) { ! for(i = 0; i < GET_TDS_RESULTS(handle)->num_cols; i++) { Ns_SetPut((Ns_Set *)handle->row,GET_TDS_RESULTS(handle)->columns[i]->column_name,NULL); + } } return (Ns_Set *)handle->row; *************** *** 292,296 **** Db_SpStart(Ns_DbHandle *handle, char *procname) { ! if(Db_Exec(handle, procname) != NS_ERROR) return NS_OK; return NS_ERROR; } --- 304,310 ---- Db_SpStart(Ns_DbHandle *handle, char *procname) { ! if(Db_Exec(handle, procname) != NS_ERROR) { ! return NS_OK; ! } return NS_ERROR; } *************** *** 299,303 **** Db_SpExec(Ns_DbHandle *handle) { ! if(GET_TDS(handle)->res_info == NULL) return NS_DML; return NS_ROWS; } --- 313,319 ---- Db_SpExec(Ns_DbHandle *handle) { ! if(GET_TDS(handle)->res_info == NULL) { ! return NS_DML; ! } return NS_ROWS; } *************** *** 318,326 **** Ns_DbHandle *handle = (Ns_DbHandle *)tds->parent; ! Ns_Log(Notice, "Db_Msg_Handler(%s:%d,%d,%s): %s", ! handle->datasource,msg->msg_level,msg->msg_state, ! msg->sql_state ? msg->sql_state : "0",msg->message); ! if(msg->msg_level > 10) Ns_DbSetException(handle, "NSDB", msg->message); return 0; } --- 334,345 ---- Ns_DbHandle *handle = (Ns_DbHandle *)tds->parent; ! if(handle->verbose) { ! Ns_Log(Notice, "Db_Msg_Handler(%s:%d,%d,%s): %s", ! handle->datasource,msg->msg_level,msg->msg_state, ! msg->sql_state ? msg->sql_state : "0",msg->message); ! } ! if(msg->msg_level > 10) { Ns_DbSetException(handle, "NSDB", msg->message); + } return 0; } |