⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ct.c

📁 ncbi源码
💻 C
📖 第 1 页 / 共 3 页
字号:
					cmd->empty_res_hack=1;					*result_type = CS_ROW_RESULT;					return CS_SUCCEED;				}			} else {				*result_type = CS_CMD_DONE;				return CS_END_RESULTS;			}		case TDS_FAIL:			if (tds->state == TDS_DEAD) {				return CS_FAIL;			} else {				*result_type = CS_CMD_FAIL;				return CS_SUCCEED;			}		default:			return CS_FAIL;	}		return CS_FAIL;}CS_RETCODE ct_bind(CS_COMMAND *cmd, CS_INT item, CS_DATAFMT *datafmt, CS_VOID *buffer, CS_INT *copied, CS_SMALLINT *indicator){TDSCOLINFO * colinfo;CT_COLINFO *ctcolinfo; /* additional information about columns used by ctlib */TDSRESULTINFO * resinfo;TDSSOCKET * tds;   tdsdump_log(TDS_DBG_FUNC, "%L inside ct_bind()\n");   tds = (TDSSOCKET *) cmd->con->tds_socket;   resinfo = tds->res_info;   /* FIXME check item value */   colinfo = resinfo->columns[item-1];   colinfo->varaddr = (char *)buffer;   colinfo->column_bindtype = datafmt->datatype;   colinfo->column_bindfmt = datafmt->format;   tdsdump_log(TDS_DBG_INFO1, "%L inside ct_bind() item = %d datafmt->datatype = %d\n", item, datafmt->datatype);   colinfo->column_bindlen = datafmt->maxlength;   if (indicator) {   	colinfo->column_nullbind = (TDS_CHAR *) indicator;   }   if (copied) {   	colinfo->column_lenbind = (TDS_CHAR *) copied;   }   return CS_SUCCEED;}CS_RETCODE ct_fetch(CS_COMMAND *cmd, CS_INT type, CS_INT offset, CS_INT option, CS_INT *rows_read){   tdsdump_log(TDS_DBG_FUNC, "%L inside ct_fetch()\n");   if (rows_read) *rows_read = 0;   switch (tds_process_row_tokens(cmd->con->tds_socket)) {      case TDS_SUCCEED:	if (_ct_bind_data(cmd))		return CS_ROW_FAIL;      	if (rows_read) *rows_read = 1;      	return TDS_SUCCEED;      case TDS_NO_MORE_ROWS:      	return CS_END_DATA;      default:      	return CS_FAIL;   }   return CS_SUCCEED;}static int _ct_bind_data(CS_COMMAND *cmd){int i;TDSCOLINFO *curcol;TDSSOCKET *tds = cmd->con->tds_socket;TDSRESULTINFO *resinfo = tds->res_info;unsigned char *src;unsigned char *dest;int result = 0;TDS_INT srctype, srclen, desttype, destlen, len;CS_CONTEXT *ctx = cmd->con->ctx;CS_DATAFMT srcfmt, destfmt;   tdsdump_log(TDS_DBG_FUNC, "%L inside _ct_bind_data()\n");   for (i=0; i<resinfo->num_cols; i++) {      curcol = resinfo->columns[i];      if (curcol->column_nullbind) {      	if (tds_get_null(resinfo->current_row,i)) {         		*((CS_SMALLINT *)curcol->column_nullbind) = -1;      	} else {         		*((CS_SMALLINT *)curcol->column_nullbind) = 0;      	}	 }      /* printf("%d %s\n",i,resinfo->columns[i]->column_value); */         srctype = curcol->column_type;      desttype = _ct_get_server_type(curcol->column_bindtype);      dest = (unsigned char *)curcol->varaddr;        if (dest && !tds_get_null(resinfo->current_row,i)) {         srctype = _ct_get_client_type(curcol->column_type, curcol->column_size);         if (is_blob_type(curcol->column_type)) {            src = (unsigned char *)curcol->column_textvalue;            srclen = curcol->column_textsize;         } else {            src = &(resinfo->current_row[curcol->column_offset]);	    srclen = curcol->cur_row_size;         }         tdsdump_log(TDS_DBG_INFO1, "%L inside _ct_bind_data() setting source length for %d = %d destlen = %d\n", i, srclen, curcol->column_bindlen);         srcfmt.datatype  = srctype;         srcfmt.maxlength = srclen;         srcfmt.locale    = cmd->con->locale;         destfmt.datatype  = curcol->column_bindtype;         destfmt.maxlength = curcol->column_bindlen;         destfmt.locale    = cmd->con->locale;         destfmt.format    = curcol->column_bindfmt;	 /* if convert return FAIL mark error but process other columns */         if (cs_convert(ctx, &srcfmt, (CS_VOID *)src, &destfmt, (CS_VOID *)dest, &len) != CS_SUCCEED) {		 result = 1;		 len = 0;	 }         if (curcol->column_lenbind) {            tdsdump_log(TDS_DBG_INFO1, "%L inside _ct_bind_data() length binding len = %d\n", len);            *((CS_INT *)curcol->column_lenbind) = len;         }      }   }   return result;}CS_RETCODE ct_cmd_drop(CS_COMMAND *cmd){	tdsdump_log(TDS_DBG_FUNC, "%L inside ct_cmd_drop()\n");	if (cmd) {		if (cmd->query) free(cmd->query);		free(cmd);	}	return CS_SUCCEED;}CS_RETCODE ct_close(CS_CONNECTION *con, CS_INT option){	tdsdump_log(TDS_DBG_FUNC, "%L inside ct_close()\n");	tds_free_socket(con->tds_socket);	return CS_SUCCEED;}CS_RETCODE ct_con_drop(CS_CONNECTION *con){   tdsdump_log(TDS_DBG_FUNC, "%L inside ct_con_drop()\n");   if (con) {      if (con->userdata)   free(con->userdata);      if (con->tds_login)  tds_free_login(con->tds_login);      free(con);   }   return CS_SUCCEED;}static int _ct_get_client_type(int datatype, int size){   tdsdump_log(TDS_DBG_FUNC, "%L inside _ct_get_client_type(type %d, size %d)\n",                             datatype, size);   switch (datatype) {         case SYBBIT:         case SYBBITN:		return CS_BIT_TYPE;		break;         case SYBCHAR:         case SYBVARCHAR:		return CS_CHAR_TYPE;		break;         case SYBINT4:      		return CS_INT_TYPE;		break;         case SYBINT2:      		return CS_SMALLINT_TYPE;		break;         case SYBINT1:      		return CS_TINYINT_TYPE;		break;	 case SYBINTN:		if (size==4) {			return CS_INT_TYPE;		} else if (size==2) {      			return CS_SMALLINT_TYPE;		} else if (size==1) {      			return CS_TINYINT_TYPE;		} else {			fprintf(stderr,"Unknown size %d for SYBINTN\n", size);		}		break;         case SYBREAL:      		return CS_REAL_TYPE;		break;         case SYBFLT8:      		return CS_FLOAT_TYPE;		break;	 case SYBFLTN:      		if (size==4) {			return CS_REAL_TYPE;		} else if (size==8) {			return CS_FLOAT_TYPE;		} else {			fprintf(stderr,"Error! unknown float size of %d\n",size);		}         case SYBMONEY:      		return CS_MONEY_TYPE;		break;         case SYBMONEY4:      		return CS_MONEY4_TYPE;		break;	 case SYBMONEYN:      		if (size==4) {			return CS_MONEY4_TYPE;		} else if (size==8) {			return CS_MONEY_TYPE;		} else {			fprintf(stderr,"Error! unknown money size of %d\n",size);		}         case SYBDATETIME:      		return CS_DATETIME_TYPE;		break;         case SYBDATETIME4:      		return CS_DATETIME4_TYPE;		break;	 case SYBDATETIMN:      		if (size==4) {			return CS_DATETIME4_TYPE;		} else if (size==8) {			return CS_DATETIME_TYPE;		} else {			fprintf(stderr,"Error! unknown date size of %d\n",size);		}		break;         case SYBNUMERIC:      		return CS_NUMERIC_TYPE;		break;         case SYBDECIMAL:      		return CS_DECIMAL_TYPE;		break;         case SYBBINARY:      		return CS_BINARY_TYPE;		break;         case SYBIMAGE:      		return CS_IMAGE_TYPE;		break;         case SYBVARBINARY:      		return CS_VARBINARY_TYPE;		break;         case SYBTEXT:      		return CS_TEXT_TYPE;		break;         case SYBUNIQUE:      		return CS_UNIQUE_TYPE;		break;   }   return CS_FAIL;}int _ct_get_server_type(int datatype){   tdsdump_log(TDS_DBG_FUNC, "%L inside _ct_get_server_type(%d)\n", datatype);   switch (datatype) {      case CS_IMAGE_TYPE:	 return SYBIMAGE;	 break;      case CS_BINARY_TYPE:	 return SYBBINARY;	 break;      case CS_BIT_TYPE:         return SYBBIT;         break;      case CS_CHAR_TYPE:         return SYBCHAR;         break;      case CS_INT_TYPE:         return SYBINT4;         break;      case CS_SMALLINT_TYPE:         return SYBINT2;         break;      case CS_TINYINT_TYPE:         return SYBINT1;         break;      case CS_REAL_TYPE:         return SYBREAL;         break;      case CS_FLOAT_TYPE:         return SYBFLT8;         break;      case CS_MONEY_TYPE:         return SYBMONEY;         break;      case CS_MONEY4_TYPE:         return SYBMONEY4;         break;      case CS_DATETIME_TYPE:         return SYBDATETIME;         break;      case CS_DATETIME4_TYPE:         return SYBDATETIME4;         break;      case CS_NUMERIC_TYPE:         return SYBNUMERIC;         break;      case CS_DECIMAL_TYPE:         return SYBDECIMAL;         break;      case CS_VARBINARY_TYPE:         return SYBVARBINARY;	 break;      case CS_TEXT_TYPE:         return SYBTEXT;	 break;      case CS_UNIQUE_TYPE:         return SYBUNIQUE;	 break;      default:         return -1;         break;   }}CS_RETCODE ct_cancel(CS_CONNECTION *conn, CS_COMMAND *cmd, CS_INT type){   CS_RETCODE ret;   tdsdump_log(TDS_DBG_FUNC, "%L inside ct_cancel()\n");   if (type == CS_CANCEL_CURRENT) {      if (conn || !cmd)  return CS_FAIL;      while (1) {         ret = ct_fetch(cmd, CS_UNUSED, CS_UNUSED, CS_UNUSED, NULL);         if ((ret != CS_SUCCEED) && (ret != CS_ROW_FAIL)) {            break;         }      }      if (cmd->con->tds_socket) {         tds_free_all_results(cmd->con->tds_socket);      }      return ret;   }   if ((conn && cmd) || (!conn && !cmd)) {      return CS_FAIL;   }   if (cmd)  conn = cmd->con;   tds_send_cancel(conn->tds_socket);   tds_process_cancel(conn->tds_socket);   return CS_SUCCEED;}CS_RETCODE ct_describe(CS_COMMAND *cmd, CS_INT item, CS_DATAFMT *datafmt){TDSSOCKET *tds;TDSRESULTINFO *resinfo;TDSCOLINFO *curcol;	tdsdump_log(TDS_DBG_FUNC, "%L inside ct_describe()\n");	tds = cmd->con->tds_socket;	if (cmd->dynamic_cmd) {		resinfo = tds->dyns[tds->cur_dyn_elem]->res_info;	} else { 		resinfo = cmd->con->tds_socket->res_info;	}	if (item<1 || item>resinfo->num_cols) return CS_FAIL;		curcol=resinfo->columns[item-1];	strncpy(datafmt->name, curcol->column_name, CS_MAX_NAME);	datafmt->namelen = strlen(curcol->column_name);	/* need to turn the SYBxxx into a CS_xxx_TYPE */	datafmt->datatype = _ct_get_client_type(curcol->column_type, curcol->column_size); 	tdsdump_log(TDS_DBG_INFO1, "%L inside ct_describe() datafmt->datatype = %d server type %d\n", datafmt->datatype, curcol->column_type);	datafmt->maxlength = curcol->column_size;	datafmt->usertype = curcol->column_usertype; 	datafmt->precision = curcol->column_prec; 	datafmt->scale = curcol->column_scale; 	/* FIX ME -- TDS 5.0 has status information in the results 	** however, this will work for 4.2 as well */	if (is_nullable_type(curcol->column_type)) 		datafmt->status |= CS_CANBENULL;	datafmt->count = 1;	datafmt->locale = NULL;		return CS_SUCCEED;}CS_RETCODE ct_res_info_dyn(CS_COMMAND *cmd, CS_INT type, CS_VOID *buffer, CS_INT buflen, CS_INT *out_len){TDSSOCKET *tds = cmd->con->tds_socket;TDSDYNAMIC *dyn;CS_INT int_val;	switch(type) {		case CS_NUMDATA:			dyn = tds->dyns[tds->cur_dyn_elem];			int_val = dyn->res_info->num_cols;			memcpy(buffer, &int_val, sizeof(CS_INT));			break;		default:			fprintf(stderr,"Unknown type in ct_res_info_dyn: %d\n",type);			return CS_FAIL;	}	return CS_SUCCEED;}CS_RETCODE ct_res_info(CS_COMMAND *cmd, CS_INT type, CS_VOID *buffer, CS_INT buflen, CS_INT *out_len){TDSSOCKET *tds = cmd->con->tds_socket;TDSRESULTINFO *resinfo = tds->res_info;CS_INT int_val;	tdsdump_log(TDS_DBG_FUNC, "%L inside ct_res_info()\n");	if (cmd->dynamic_cmd) {		return ct_res_info_dyn(cmd, type, buffer, buflen, out_len);	}	switch(type) {		case CS_NUMDATA:			if (!resinfo) {				int_val = 0;			} else {				int_val = resinfo->num_cols;			}			memcpy(buffer, &int_val, sizeof(CS_INT));			break;		case CS_ROW_COUNT:			/* resinfo check by kostya@warmcat.excom.spb.su */			if (resinfo) {				int_val = resinfo->row_count;			} else {				int_val = tds->rows_affected;			}			memcpy(buffer, &int_val, sizeof(CS_INT));			break;		default:			fprintf(stderr,"Unknown type in ct_res_info: %d\n",type);			return CS_FAIL;			break;	}	return CS_SUCCEED;}CS_RETCODE ct_config(CS_CONTEXT *ctx, CS_INT action, CS_INT property, CS_VOID *buffer, CS_INT buflen, CS_INT *outlen){	tdsdump_log(TDS_DBG_FUNC, "%L inside ct_config() action = %s property = %d\n",		CS_GET ? "CS_GET" : "CS_SET", property);	return CS_SUCCEED;}CS_RETCODE ct_cmd_props(CS_COMMAND *cmd, CS_INT action, CS_INT property, CS_VOID *buffer, CS_INT buflen, CS_INT *outlen){	tdsdump_log(TDS_DBG_FUNC, "%L inside ct_cmd_props() action = %s property = %d\n",		CS_GET ? "CS_GET" : "CS_SET", property);	return CS_SUCCEED;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -