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

📄 data.c

📁 在Linux/Unix下面访问WINDOWS SQLSERVER 的ODBC驱动程序
💻 C
字号:
/* FreeTDS - Library of routines accessing Sybase and Microsoft databases * Copyright (C) 2003, 2004, 2005 Frediano Ziglio * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#if HAVE_CONFIG_H#include <config.h>#endif /* HAVE_CONFIG_H */#include <stdarg.h>#include <stdio.h>#include <assert.h>#if HAVE_STRING_H#include <string.h>#endif /* HAVE_STRING_H */#include "tds.h"#include "tds_checks.h"#ifdef DMALLOC#include <dmalloc.h>#endifTDS_RCSID(var, "$Id: data.c,v 1.18 2007/06/21 07:21:21 freddy77 Exp $");#if !ENABLE_EXTRA_CHECKSstatic int tds_get_cardinal_type(int datatype);static int tds_get_varint_size(TDSSOCKET * tds, int datatype);#endif/** * Set type of column initializing all dependency  * @param curcol column to set * @param type   type to set */voidtds_set_column_type(TDSSOCKET * tds, TDSCOLUMN * curcol, int type){	/* set type */	curcol->on_server.column_type = type;	curcol->column_type = tds_get_cardinal_type(type);	/* set size */	curcol->column_cur_size = -1;	curcol->column_varint_size = tds_get_varint_size(tds, type);	if (curcol->column_varint_size == 0)		curcol->column_cur_size = curcol->on_server.column_size = curcol->column_size = tds_get_size_by_type(type);}/** * Set type of column initializing all dependency * \param tds    state information for the socket and the TDS protocol * \param curcol column to set * \param type   type to set */voidtds_set_param_type(TDSSOCKET * tds, TDSCOLUMN * curcol, TDS_SERVER_TYPE type){	if (IS_TDS7_PLUS(tds)) {		switch (type) {		case SYBVARCHAR:			type = XSYBVARCHAR;			break;		case SYBCHAR:			type = XSYBCHAR;			break;		case SYBVARBINARY:			type = XSYBVARBINARY;			break;		case SYBBINARY:			type = XSYBBINARY;			break;			/* avoid warning on other types */		default:			break;		}	}	tds_set_column_type(tds, curcol, type);	if (is_collate_type(type)) {		curcol->char_conv = tds->char_convs[is_unicode_type(type) ? client2ucs2 : client2server_chardata];		memcpy(curcol->column_collation, tds->collation, sizeof(tds->collation));	}	/* special case, GUID, varint != 0 but only a size */	/* TODO VARIANT, when supported */	switch (type) {	case SYBUNIQUE:		curcol->on_server.column_size = curcol->column_size = sizeof(TDS_UNIQUE);		break;	case SYBBITN:		curcol->on_server.column_size = curcol->column_size = sizeof(TDS_TINYINT);		break;	/* mssql 2005 don't like SYBINT4 as parameter closing connection  */	case SYBINT1:	case SYBINT2:	case SYBINT4:	case SYBINT8:		curcol->on_server.column_type = SYBINTN;		curcol->column_varint_size = 1;		curcol->column_cur_size = -1;		break;	case SYBMONEY4:	case SYBMONEY:		curcol->on_server.column_type = SYBMONEYN;		curcol->column_varint_size = 1;		curcol->column_cur_size = -1;		break;	case SYBDATETIME:	case SYBDATETIME4:		curcol->on_server.column_type = SYBDATETIMN;		curcol->column_varint_size = 1;		curcol->column_cur_size = -1;		break;	case SYBFLT8:	case SYBREAL:		curcol->on_server.column_type = SYBFLTN;		curcol->column_varint_size = 1;		curcol->column_cur_size = -1;		break;	default:		break;	}}#if !ENABLE_EXTRA_CHECKSstatic#endifinttds_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;	case SYB5INT8:		return SYBINT8;	}	return datatype;}/** * tds_get_varint_size() returns the size of a variable length integer * returned in a TDS 7.0 result string */#if !ENABLE_EXTRA_CHECKSstatic#endifinttds_get_varint_size(TDSSOCKET * tds, int datatype){	switch (datatype) {	case SYBTEXT:	case SYBNTEXT:	case SYBIMAGE:		return 4;	case SYBVOID:	case SYBINT1:	case SYBBIT:	case SYBINT2:	case SYBINT4:	case SYBINT8:	case SYBDATETIME4:	case SYBREAL:	case SYBMONEY:	case SYBDATETIME:	case SYBFLT8:	case SYBMONEY4:	case SYBSINT1:	case SYBUINT2:	case SYBUINT4:	case SYBUINT8:		return 0;	}	if (IS_TDS7_PLUS(tds)) {		switch (datatype) {		/* TODO support this strange type */		case SYBVARIANT:			return 4;		case XSYBCHAR:		case XSYBNCHAR:		case XSYBNVARCHAR:		case XSYBVARCHAR:		case XSYBBINARY:		case XSYBVARBINARY:			return 2;		}	} else if (IS_TDS50(tds)) {		switch (datatype) {		case SYBLONGBINARY:		case SYBLONGCHAR:			return 5;		case SYB5INT8:			return 0;		}	}	return 1;}

⌨️ 快捷键说明

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