📄 tds.h
字号:
/* * =========================================================================== * PRODUCTION $Log: tds.h,v $ * PRODUCTION Revision 1000.1 2003/11/17 22:11:37 gouriano * PRODUCTION PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.3 * PRODUCTION * =========================================================================== *//* FreeTDS - Library of routines accessing Sybase and Microsoft databases * Copyright (C) 1998-1999 Brian Bruns * * 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. */#ifndef _tds_h_#define _tds_h_static char rcsid_tds_h[]= "$Id: tds.h,v 1000.1 2003/11/17 22:11:37 gouriano Exp $";static void *no_unused_tds_h_warn[]={rcsid_tds_h, no_unused_tds_h_warn};#include <tds_config.h>#ifndef WIN32#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>#include <sys/signal.h>#include <sys/wait.h>#endif #ifdef WIN32#include <windows.h>#include <stdio.h>#endif#ifdef __INCvxWorksh#include <signal.h>#include <ioLib.h> /* for FIONBIO */#else#include <errno.h>#include <stdio.h>#include <ctype.h>#include <string.h>#include <stdlib.h>#include <time.h>#ifdef HAVE_MALLOC_H#include <malloc.h>#endif#include <sys/time.h>#endif#ifndef WIN32#include <unistd.h>#endif#include "tdsver.h"#ifdef __cplusplusextern "C" {#endif /* ** this is where platform specific changes need to be made.** I've tried to change all references to data that goes to ** or comes off the wire to use these typedefs. I've probably ** missed a bunch, but the idea is we can do an ifdef here ** to set the appropriately sized native type.**** If you have problems on 64-bit machines and the code is ** using a native datatype, please change the code to use** these. (In the TDS layer only, the API layers have their** own typedefs which equate to these).*/typedef char TDS_CHAR; /* 8 bit char */typedef unsigned char TDS_UCHAR; /* 8 bit uchar */typedef unsigned char TDS_TINYINT; /* 8 bit int */typedef short TDS_SMALLINT; /* 16 bit int */typedef unsigned short TDS_USMALLINT; /* 16 bit unsigned */typedef int TDS_INT; /* 32 bit int */typedef unsigned int TDS_UINT; /* 32 bit unsigned */typedef float TDS_REAL; /* 32 bit float */typedef double TDS_FLOAT; /* 64 bit float */typedef long long TDS_INT8; /* 64 bit integer */typedef unsigned long long TDS_UINT8; /* 64 bit integer */typedef struct tdsnumeric{ unsigned char precision; unsigned char scale; unsigned char array[17];} TDS_NUMERIC;typedef struct tdsoldmoney{ TDS_INT mnyhigh; TDS_INT mnylow;} TDS_OLD_MONEY;typedef union tdsmoney{ TDS_OLD_MONEY tdsoldmoney; TDS_INT8 mny;} TDS_MONEY;typedef struct tdsmoney4{ TDS_INT mny4;} TDS_MONEY4;typedef struct tdsdatetime{ TDS_INT dtdays; TDS_INT dttime;} TDS_DATETIME;typedef struct tdsdatetime4{ TDS_USMALLINT days; TDS_USMALLINT minutes;} TDS_DATETIME4;typedef struct tdsvarbinary{ TDS_INT len; TDS_CHAR array[256];} TDS_VARBINARY;typedef struct tdsvarchar{ TDS_INT len; TDS_CHAR array[256];} TDS_VARCHAR;typedef struct tdsunique{ TDS_UINT Data1; TDS_USMALLINT Data2; TDS_USMALLINT Data3; TDS_UCHAR Data4[8];} TDS_UNIQUE;typedef struct tdsdaterec{ TDS_INT year; TDS_INT month; TDS_INT day; TDS_INT dayofyear; TDS_INT weekday; TDS_INT hour; TDS_INT minute; TDS_INT second; TDS_INT millisecond; TDS_INT tzone;} TDSDATEREC;#define TDS_NO_MORE_ROWS -2#define TDS_SUCCEED 1#define TDS_FAIL 0#define TDS_NO_MORE_RESULTS 2/*** TDS_ERROR indicates a successful processing, but an TDS_ERR_TOKEN or ** TDS_EED_TOKEN error was encountered, whereas TDS_FAIL indicates an** unrecoverable failure.*/#define TDS_ERROR 3 #define TDS_DONT_RETURN 42#define TDS5_DYN_TOKEN 231 /* 0xE7 TDS 5.0 only */#define TDS5_DYNRES_TOKEN 236 /* 0xEC TDS 5.0 only */#define TDS5_DYN3_TOKEN 215 /* 0xD7 TDS 5.0 only */#define TDS_LANG_TOKEN 33 /* 0x21 TDS 5.0 only */#define TDS_CLOSE_TOKEN 113 /* 0x71 TDS 5.0 only? ct_close() */#define TDS_RET_STAT_TOKEN 121 /* 0x79 */#define TDS_124_TOKEN 124 /* 0x7C TDS 4.2 only - TDS_PROCID */#define TDS7_RESULT_TOKEN 129 /* 0x81 TDS 7.0 only */#define TDS_COL_NAME_TOKEN 160 /* 0xA0 TDS 4.2 only */#define TDS_COL_INFO_TOKEN 161 /* 0xA1 TDS 4.2 only - TDS_COLFMT *//*#define TDS_TABNAME 164 */#ifdef NCBI_FTDS#define TDS_COL_INFO_TOKEN2 165 /* 0xA5 */#endif#define TDS_167_TOKEN 167 /* 0xA7 */#define TDS_168_TOKEN 168 /* 0xA8 */#define TDS_ORDER_BY_TOKEN 169 /* 0xA9 TDS_ORDER */#define TDS_ERR_TOKEN 170 /* 0xAA */#define TDS_MSG_TOKEN 171 /* 0xAB */#define TDS_PARAM_TOKEN 172 /* 0xAC RETURNVALUE? */#define TDS_LOGIN_ACK_TOKEN 173 /* 0xAD */#define TDS_174_TOKEN 174 /* 0xAE TDS_CONTROL */#define TDS_ROW_TOKEN 209 /* 0xD1 */#define TDS_CMP_ROW_TOKEN 211 /* 0xD3 */#define TDS_CAP_TOKEN 226 /* 0xE2 */#define TDS_ENV_CHG_TOKEN 227 /* 0xE3 */#define TDS_EED_TOKEN 229 /* 0xE5 */#define TDS_AUTH_TOKEN 237 /* 0xED */#define TDS_RESULT_TOKEN 238 /* 0xEE */#define TDS_DONE_TOKEN 253 /* 0xFD TDS_DONE */#define TDS_DONEPROC_TOKEN 254 /* 0xFE TDS_DONEPROC */#define TDS_DONEINPROC_TOKEN 255 /* 0xFF TDS_DONEINPROC *//* states for tds_process_messages() */#define PROCESS_ROWS 0#define PROCESS_RESULTS 1#define CANCEL_PROCESS 2#define GOTO_1ST_ROW 3#define LOGIN 4/* environment type field */#define TDS_ENV_DATABASE 1#define TDS_ENV_CHARSET 3#define TDS_ENV_BLOCKSIZE 4/* <rant> Sybase does an awful job of this stuff, non null ints of size 1 2 and 4 have there own codes but nullable ints are lumped into INTNsheesh! </rant>*/#define SYBCHAR 47 /* 0x2F */#define SYBVARCHAR 39 /* 0x27 */#define SYBINTN 38 /* 0x26 */#define SYBINT1 48 /* 0x30 */#define SYBINT2 52 /* 0x34 */#define SYBINT4 56 /* 0x38 */#define SYBINT8 127 /* 0x7F */#define SYBFLT8 62 /* 0x3E */#define SYBDATETIME 61 /* 0x3D */#define SYBBIT 50 /* 0x32 */#define SYBTEXT 35 /* 0x23 */#define SYBNTEXT 99 /* 0x63 */#define SYBIMAGE 34 /* 0x22 */#define SYBMONEY4 122 /* 0x7A */#define SYBMONEY 60 /* 0x3C */#define SYBDATETIME4 58 /* 0x3A */#define SYBREAL 59 /* 0x3B */#define SYBBINARY 45 /* 0x2D */#define SYBVOID 31 /* 0x1F */#define SYBVARBINARY 37 /* 0x25 */#define SYBNVARCHAR 103 /* 0x67 */#define SYBBITN 104 /* 0x68 */#define SYBNUMERIC 108 /* 0x6C */#define SYBDECIMAL 106 /* 0x6A */#define SYBFLTN 109 /* 0x6D */#define SYBMONEYN 110 /* 0x6E */#define SYBDATETIMN 111 /* 0x6F */#define XSYBCHAR 175 /* 0xAF */#define XSYBVARCHAR 167 /* 0xA7 */#define XSYBNVARCHAR 231 /* 0xE7 */#define XSYBNCHAR 239 /* 0xEF */#define XSYBVARBINARY 165 /* 0xA5 */#define XSYBBINARY 173 /* 0xAD */#define SYBUNIQUE 36 /* 0x24 */#define SYBVARIANT 0x62#define TDS_ZERO_FREE(x) {free((x)); (x) = NULL;}#define TDS_BYTE_SWAP16(value) \ (((((unsigned short)value)<<8) & 0xFF00) | \ ((((unsigned short)value)>>8) & 0x00FF))#define TDS_BYTE_SWAP32(value) \ (((((unsigned long)value)<<24) & 0xFF000000) | \ ((((unsigned long)value)<< 8) & 0x00FF0000) | \ ((((unsigned long)value)>> 8) & 0x0000FF00) | \ ((((unsigned long)value)>>24) & 0x000000FF))#define is_end_token(x) (x==TDS_DONE_TOKEN || \ x==TDS_DONEPROC_TOKEN || \ x==TDS_DONEINPROC_TOKEN)#define is_hard_end_token(x) (x==TDS_DONE_TOKEN || \ x==TDS_DONEPROC_TOKEN)#define is_msg_token(x) (x==TDS_MSG_TOKEN || \ x==TDS_ERR_TOKEN || \ x==TDS_EED_TOKEN)#define is_result_token(x) (x==TDS_RESULT_TOKEN || \ x==TDS7_RESULT_TOKEN || \ x==TDS_COL_INFO_TOKEN || \ x==TDS_COL_NAME_TOKEN)/* FIX ME -- not a complete list */#define is_fixed_type(x) (x==SYBINT1 || \ x==SYBINT2 || \ x==SYBINT4 || \ x==SYBINT8 || \ x==SYBREAL || \ x==SYBFLT8 || \ x==SYBDATETIME || \ x==SYBDATETIME4 || \ x==SYBBIT || \ x==SYBMONEY || \ x==SYBMONEY4 || \ x==SYBUNIQUE)#define is_nullable_type(x) (x==SYBINTN || \ x==SYBFLTN || \ x==SYBDATETIMN || \ x==SYBVARCHAR || \ x==SYBVARBINARY || \ x==SYBMONEYN || \ x==SYBTEXT || \ x==SYBNTEXT || \ x==SYBBITN || \ x==SYBIMAGE)#define is_blob_type(x) (x==SYBTEXT || x==SYBIMAGE || x==SYBNTEXT)/* large type means it has a two byte size field */#define is_large_type(x) (x>128)#define is_numeric_type(x) (x==SYBNUMERIC || x==SYBDECIMAL)#define is_unicode(x) (x==XSYBNVARCHAR || x==XSYBNCHAR || x==SYBNTEXT)#define is_collate_type(x) (x==XSYBVARCHAR || x==XSYBCHAR || x==SYBTEXT || x == XSYBNVARCHAR || x==SYBNTEXT)#define TDS_MAX_CAPABILITY 18#define MAXPRECISION 50#define TDS_MAX_CONN 4096#define TDS_MAX_DYNID_LEN 30/* defaults to use if no others are found */#define TDS_DEF_SERVER "SYBASE"#define TDS_DEF_BLKSZ 512#define TDS_DEF_CHARSET "iso_1"#define TDS_DEF_LANG "us_english"#if TDS42#define TDS_DEF_MAJOR 4#define TDS_DEF_MINOR 2#define TDS_DEF_PORT 1433#elif TDS46#define TDS_DEF_MAJOR 4#define TDS_DEF_MINOR 6#define TDS_DEF_PORT 4000#elif TDS70#define TDS_DEF_MAJOR 7#define TDS_DEF_MINOR 0#define TDS_DEF_PORT 1433#elif TDS80#define TDS_DEF_MAJOR 8#define TDS_DEF_MINOR 0#define TDS_DEF_PORT 1433#else#define TDS_DEF_MAJOR 5#define TDS_DEF_MINOR 0#define TDS_DEF_PORT 4000#endif/* normalized strings from freetds.conf file */#define TDS_STR_VERSION "tds version"#define TDS_STR_BLKSZ "initial block size"#define TDS_STR_SWAPDT "swap broken dates"#define TDS_STR_SWAPMNY "tds version"#define TDS_STR_TRYSVR "try server login"#define TDS_STR_TRYDOM "try domain login"#define TDS_STR_DOMAIN "nt domain"#define TDS_STR_XDOMAUTH "cross domain auth"#define TDS_STR_DUMPFILE "dump file"#define TDS_STR_DEBUGLVL "debug level"#define TDS_STR_TIMEOUT "timeout"#define TDS_STR_CONNTMOUT "connect timeout"#define TDS_STR_HOSTNAME "hostname"#define TDS_STR_HOST "host"#define TDS_STR_PORT "port"#define TDS_STR_TEXTSZ "text size"/* for big endian hosts */#define TDS_STR_EMUL_LE "emulate little endian"#define TDS_STR_CHARSET "charset"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -