00001
00002
00003
00004
00005
00009 int
00010 tds_get_size_by_type(int servertype)
00011 {
00012 switch (servertype) {
00013 case SYBVOID:
00014 return 0;
00015 case SYBBIT:
00016 case SYBBITN:
00017 case SYBINT1:
00018 case SYBSINT1:
00019 case SYBUINT1:
00020 return 1;
00021 case SYBINT2:
00022 case SYBUINT2:
00023 return 2;
00024 case SYBDATE:
00025 case SYBDATEN:
00026 case SYBDATETIME4:
00027 case SYBINT4:
00028 case SYBMONEY4:
00029 case SYBREAL:
00030 case SYBTIME:
00031 case SYBTIMEN:
00032 case SYBUINT4:
00033 return 4;
00034 case SYB5INT8:
00035 case SYBDATETIME:
00036 case SYBFLT8:
00037 case SYBINT8:
00038 case SYBINTERVAL:
00039 case SYBMONEY:
00040 case SYBUINT8:
00041 return 8;
00042 case SYBUNIQUE:
00043 return 16;
00044 default:
00045 return -1;
00046 }
00047 }
00048
00053 int
00054 tds_get_varint_size(TDSSOCKET * tds, int datatype)
00055 {
00056 switch (datatype) {
00057 case SYBBIT:
00058 case SYBDATETIME:
00059 case SYBDATETIME4:
00060 case SYBFLT8:
00061 case SYBINT1:
00062 case SYBINT2:
00063 case SYBINT4:
00064 case SYBMONEY:
00065 case SYBMONEY4:
00066 case SYBREAL:
00067 case SYBVOID:
00068 return 0;
00069 case SYBIMAGE:
00070 case SYBTEXT:
00071 return 4;
00072 }
00073
00074 if (IS_TDS7_PLUS(tds)) {
00075 switch (datatype) {
00076 case SYBINT8:
00077 return 0;
00078 case XSYBBINARY:
00079 case XSYBCHAR:
00080 case XSYBNCHAR:
00081 case XSYBNVARCHAR:
00082 case XSYBVARBINARY:
00083 case XSYBVARCHAR:
00084 return 2;
00085 case SYBNTEXT:
00086 case SYBVARIANT:
00087 return 4;
00088 case SYBMSXML:
00089 return 8;
00090 }
00091 } else if (IS_TDS50(tds)) {
00092 switch (datatype) {
00093 case SYB5INT8:
00094 case SYBDATE:
00095 case SYBINTERVAL:
00096 case SYBSINT1:
00097 case SYBTIME:
00098 case SYBUINT1:
00099 case SYBUINT2:
00100 case SYBUINT4:
00101 case SYBUINT8:
00102 return 0;
00103 case SYBUNITEXT:
00104 case SYBXML:
00105 return 4;
00106 case SYBLONGBINARY:
00107 case SYBLONGCHAR:
00108 return 5;
00109 }
00110 }
00111 return 1;
00112 }
00113
00120 int
00121 tds_get_conversion_type(int srctype, int colsize)
00122 {
00123 switch (srctype) {
00124 case SYBBITN:
00125 return SYBBIT;
00126 case SYBDATEN:
00127 return SYBDATE;
00128 case SYBDATETIMN:
00129 switch (colsize) {
00130 case 8:
00131 return SYBDATETIME;
00132 case 4:
00133 return SYBDATETIME4;
00134 }
00135 break;
00136 case SYBFLTN:
00137 switch (colsize) {
00138 case 8:
00139 return SYBFLT8;
00140 case 4:
00141 return SYBREAL;
00142 }
00143 break;
00144 case SYBINTN:
00145 switch (colsize) {
00146 case 8:
00147 return SYBINT8;
00148 case 4:
00149 return SYBINT4;
00150 case 2:
00151 return SYBINT2;
00152 case 1:
00153 return SYBINT1;
00154 }
00155 break;
00156 case SYBMONEYN:
00157 switch (colsize) {
00158 case 8:
00159 return SYBMONEY;
00160 case 4:
00161 return SYBMONEY4;
00162 }
00163 break;
00164 case SYBTIMEN:
00165 return SYBTIME;
00166 case SYBUINTN:
00167 switch (colsize) {
00168 case 8:
00169 return SYBUINT8;
00170 case 4:
00171 return SYBUINT4;
00172 case 2:
00173 return SYBUINT2;
00174 case 1:
00175 return SYBUINT1;
00176 }
00177 break;
00178 case SYB5INT8:
00179 return SYBINT8;
00180 }
00181 return srctype;
00182 }
00183