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