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

📄 token.c

📁 ncbi源码
💻 C
📖 第 1 页 / 共 4 页
字号:
			tds->msg_info->server,			tds->msg_info->line_number,			tds->msg_info->message);		tds_free_msg(tds->msg_info);	}	return rc;}char *tds_msg_get_proc_name(TDSSOCKET *tds){int len_proc;char *proc_name;	len_proc = tds_get_byte(tds);	if (len_proc < 0) {		len_proc = 0;	}        proc_name = (char*)malloc(len_proc+1);	if (len_proc > 0) {              tds_get_string(tds, proc_name, len_proc);	}        proc_name[len_proc] = '\0';	return proc_name;}int tds_reset_msg_info(TDSMSGINFO *msg_info){	if (!msg_info) 		return 0;	msg_info->priv_msg_type = 0;	msg_info->msg_number = 0;	msg_info->msg_state = 0;	msg_info->msg_level = 0;	msg_info->line_number = 0;	if( msg_info->message)		TDS_ZERO_FREE(msg_info->message);	if(msg_info->server)		TDS_ZERO_FREE(msg_info->server);	if(msg_info->proc_name)		TDS_ZERO_FREE(msg_info->proc_name);	return 0;}/*** tds_process_cancel() processes the incoming token stream until it finds** an end token (DONE, DONEPROC, DONEINPROC) with the cancel flag set.** a that point the connetion should be ready to handle a new query.*/int tds_process_cancel(TDSSOCKET *tds){int marker, cancelled=0;	do {		marker=tds_get_byte(tds);		if (marker==TDS_DONE_TOKEN) {			tds_process_end(tds, marker, NULL, &cancelled);		} else if (marker==0) {			cancelled = 1;		} else {			tds_process_default_tokens(tds,marker);		}	} while (!cancelled);	tds->state = TDS_COMPLETED;	return 0;}/* =========================== tds_is_result_row() =========================== *  * Def:  does the next token in stream signify a result row? *  * Ret:  true if stream is positioned at a row, false otherwise *  * =========================================================================== */int tds_is_result_row(TDSSOCKET *tds){   const int  marker = tds_peek(tds);   int        result = 0;   if (marker==TDS_ROW_TOKEN)   {      result = 1;   }   return result;} /* tds_is_result_row()  */int tds_is_result_set(TDSSOCKET *tds){   const int  marker = tds_peek(tds);   int        result = 0;   result = (marker==TDS_COL_NAME_TOKEN              || marker==TDS_COL_INFO_TOKEN              || marker==TDS_RESULT_TOKEN             || marker==TDS7_RESULT_TOKEN);   return result;} /* tds_is_result_set()  */int tds_is_end_of_results(TDSSOCKET *tds){   const int  marker = tds_peek(tds);   int        result = 0;   result = marker==TDS_DONE_TOKEN || marker==TDS_DONEPROC_TOKEN;   return result;} /* tds_is_end_of_results()  */int tds_is_doneinproc(TDSSOCKET *tds){   const int  marker = tds_peek(tds);   int        result = 0;   result = marker==TDS_DONEINPROC_TOKEN;   return result;} /* tds_is_end_of_results()  */int tds_is_error(TDSSOCKET *tds){   const int  marker = tds_peek(tds);   int        result = 0;   result = marker==TDS_ERR_TOKEN;   return result;} /* tds_is_error()  */int tds_is_message(TDSSOCKET *tds){   const int  marker = tds_peek(tds);   int        result = 0;   result = marker==TDS_MSG_TOKEN;   return result;} /* tds_is_message()  */int tds_is_control(TDSSOCKET *tds){   const int  marker = tds_peek(tds);   int        result = 0;   result = (marker==TDS_174_TOKEN || marker==TDS_167_TOKEN);   return result;}/*** set the null bit for the given column in the row buffer*/#ifdef NCBI_FTDSstatic unsigned char s_null_mask[8]= {0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};void tds_set_null(unsigned char *current_row, int column){    current_row[column >> 3]|= s_null_mask[column & 0x7];}/*** clear the null bit for the given column in the row buffer*/void tds_clr_null(unsigned char *current_row, int column){    current_row[column >> 3]&= ~s_null_mask[column & 0x7];}/*** return the null bit for the given column in the row buffer*/int tds_get_null(unsigned char *current_row, int column){ return (current_row[column >> 3] & s_null_mask[column & 0x7])? 1 : 0;}#elsevoid tds_set_null(unsigned char *current_row, int column){int bytenum = column >> 3;int bit = column & 0x7;unsigned char mask = 1 << bit;	tdsdump_log(TDS_DBG_INFO1,"%L setting column %d NULL bit\n", column);	current_row[bytenum] |= mask;}/*** clear the null bit for the given column in the row buffer*/void tds_clr_null(unsigned char *current_row, int column){int bytenum = column  >> 3;int bit = column & 0x7;unsigned char mask = ~(1 << bit);	tdsdump_log(TDS_DBG_INFO1, "%L clearing column %d NULL bit\n", column);	current_row[bytenum] &= mask;}/*** return the null bit for the given column in the row buffer*/int tds_get_null(unsigned char *current_row, int column){int bytenum = column >> 3;int bit = column & 0x7;unsigned char mask = 1 << bit;	return (current_row[bytenum] & mask) ? 1 : 0;}#endifint tds_lookup_dynamic(TDSSOCKET *tds, char *id){int i;	for (i=0;i<tds->num_dyns;i++) {		if (!strcmp(tds->dyns[i]->id, id)) {			return i;		}	}	return -1;}/*** tds_process_dynamic()** finds the element of the dyns array for the id*/static int tds_process_dynamic(TDSSOCKET *tds){int token_sz;char subtoken[2];int id_len;char id[TDS_MAX_DYNID_LEN+1];int drain = 0;	token_sz = tds_get_smallint(tds);	subtoken[0] = tds_get_byte(tds);	subtoken[1] = tds_get_byte(tds);	if (subtoken[0]!=0x20 || subtoken[1]!=0x00) {		tdsdump_log(TDS_DBG_ERROR,"Unrecognized TDS5_DYN subtoken %x,%x\n",		        subtoken[0], subtoken[1]);		tds_get_n(tds, NULL, token_sz-2);		return -1;	}	id_len = tds_get_byte(tds);	if (id_len > TDS_MAX_DYNID_LEN) {		drain = id_len - TDS_MAX_DYNID_LEN;		id_len = TDS_MAX_DYNID_LEN;	}	tds_get_string(tds, id, id_len);	id[id_len]='\0';	if (drain) { 		tds_get_string(tds, NULL, drain);	}	return tds_lookup_dynamic(tds,id);}static void tds_process_dyn_result(TDSSOCKET *tds){int hdrsize;int col, num_cols;TDSCOLINFO *curcol;TDSRESULTINFO *info;TDSDYNAMIC *dyn;	hdrsize = tds_get_smallint(tds);	num_cols = tds_get_smallint(tds);	if (tds->cur_dyn_elem) {		dyn = tds->dyns[tds->cur_dyn_elem];		tds_free_results(dyn->res_info);		/* read number of columns and allocate the columns structure */		dyn->res_info = tds_alloc_results(num_cols);		info = dyn->res_info;	} else {		tds_free_results(tds->res_info);		tds->res_info = tds_alloc_results(num_cols);		info = tds->res_info;	}	for (col=0;col<info->num_cols;col++) {		curcol=info->columns[col];		tds_get_n(tds,NULL,6);		/* column type */		curcol->column_type = tds_get_byte(tds);		/* column size */		if (!is_fixed_type(curcol->column_type)) {			curcol->column_size = tds_get_byte(tds);		} else { 			curcol->column_size = get_size_by_type(curcol->column_type);		}		tds_get_byte(tds);		/* fprintf(stderr,"elem %d coltype %d size %d\n",tds->cur_dyn_elem, curcol->column_type, curcol->column_size); */	}}/* ** tds_is_fixed_token()** some tokens are fixed length while others are variable.  This function is ** used by tds_process_cancel() to determine how to read past a token*/int tds_is_fixed_token(int marker){	switch (marker) {		case TDS_DONE_TOKEN:		case TDS_DONEPROC_TOKEN:		case TDS_DONEINPROC_TOKEN:		case TDS_RET_STAT_TOKEN:			return 1;		default:			return 0;		}}/* ** tds_get_token_size() returns the size of a fixed length token** used by tds_process_cancel() to determine how to read past a token*/int tds_get_token_size(int marker){	switch(marker) {		case TDS_DONE_TOKEN:		case TDS_DONEPROC_TOKEN:		case TDS_DONEINPROC_TOKEN:			return 8;		case TDS_RET_STAT_TOKEN:			return 4;		case TDS_124_TOKEN:			return 8;		default:			return 0;	}}void tds_swap_datatype(int coltype, unsigned char *buf){TDS_NUMERIC *num;	switch(coltype) {#ifdef NCBI_FTDS		case SYBINT2:			tds_swap_2bytes(buf); break;		case SYBINT4:			tds_swap_4bytes(buf); break;		case SYBINT8:			tds_swap_8bytes(buf); break;		case SYBREAL:			tds_swap_4bytes(buf); break;		case SYBFLT8:			tds_swap_8bytes(buf); break;		case SYBMONEY4:			tds_swap_4bytes(buf); break;		case SYBMONEY:			tds_swap_4bytes(buf);			tds_swap_4bytes(&buf[4]); break;		case SYBDATETIME4:			tds_swap_2bytes(buf);			tds_swap_2bytes(&buf[2]); break;		case SYBDATETIME:			tds_swap_4bytes(buf);			tds_swap_4bytes(&buf[4]); break;		case SYBNUMERIC:		case SYBDECIMAL:			num = (TDS_NUMERIC *) buf;            /* swap the sign */            num->array[0] = (num->array[0] == 0) ? 1 : 0;            /* swap the data */            tds_swap_bytes(&(num->array[1]),                           g__numeric_bytes_per_prec[num->precision] - 1); break;        case SYBUNIQUE:			tds_swap_4bytes(buf);			tds_swap_2bytes(&buf[4]); 			tds_swap_2bytes(&buf[6]); break;#else		case SYBINT2:			tds_swap_bytes(buf,2); break;		case SYBINT4:			tds_swap_bytes(buf,4); break;		case SYBINT8:			tds_swap_bytes(buf,8); break;		case SYBREAL:			tds_swap_bytes(buf,4); break;		case SYBFLT8:			tds_swap_bytes(buf,8); break;		case SYBMONEY4:			tds_swap_bytes(buf,4); break;		case SYBMONEY:			tds_swap_bytes(buf,4);			tds_swap_bytes(&buf[4],4); break;		case SYBDATETIME4:			tds_swap_bytes(buf,2);			tds_swap_bytes(&buf[2],2); break;		case SYBDATETIME:			tds_swap_bytes(buf,4);			tds_swap_bytes(&buf[4],4); break;		case SYBNUMERIC:		case SYBDECIMAL:			num = (TDS_NUMERIC *) buf;            /* swap the sign */            num->array[0] = (num->array[0] == 0) ? 1 : 0;            /* swap the data */            tds_swap_bytes(&(num->array[1]),                           g__numeric_bytes_per_prec[num->precision] - 1); break;        case SYBUNIQUE:			tds_swap_bytes(buf,4);			tds_swap_bytes(&buf[4],2); 			tds_swap_bytes(&buf[6],2); break;#endif	}}/*** tds_get_varint_size() returns the size of a variable length integer** returned in a TDS 7.0 result string*/static int tds_get_varint_size(int datatype){	switch(datatype) {		case SYBTEXT:		case SYBNTEXT:		case SYBIMAGE:		case SYBVARIANT:			return 4;		case SYBVOID:		case SYBINT1:		case SYBBIT:		case SYBINT2:		case SYBINT4:		case SYBDATETIME4:		case SYBREAL:		case SYBMONEY:		case SYBDATETIME:		case SYBFLT8:		case SYBMONEY4:		case SYBINT8:			return 0;		case XSYBNCHAR:		case XSYBNVARCHAR:		case XSYBCHAR:		case XSYBVARCHAR:		case XSYBBINARY:		case XSYBVARBINARY:			return 2;		default:			return 1;	}}static int tds_get_cardinal_type(int datatype){	switch(datatype) {		case XSYBVARBINARY: 			return SYBVARBINARY;		case XSYBBINARY: 			return SYBBINARY;		case SYBNTEXT:			return SYBTEXT;		case XSYBNVARCHAR: 		case XSYBVARCHAR: 			return SYBVARCHAR;		case XSYBNCHAR: 		case XSYBCHAR: 			return SYBCHAR;	}	return datatype;}

⌨️ 快捷键说明

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