1 /***************************************************************************
3 * Copyright (C) Lakshya Solutions Ltd. All rights reserved. *
5 ***************************************************************************/
10 long AllDataType::size(DataType type
, int length
)
12 if (type
== typeInt
) return sizeof(int);
13 else if (type
== typeString
) return length
;
25 size
= sizeof(long long);
34 size
= sizeof(double);
41 //fldDef.length_ = sizeof(long double);
50 size
= sizeof(TimeStamp
);
64 void AllDataType::cachecopyVal(void* dest
, void *src
, DataType type
, int length
,int dbFlag
)
68 *(int*)dest
= *(int*)src
;
70 }else if (typeString
== type
|| typeVarchar
== type
)
72 Util::trimRight((char*)src
);
73 //strncpy((char*)dest, (char*)src, length);
74 //char *d =(char*)dest;
76 strcpy((char *)dest
, (char *)src
);
78 }else if (typeShort
== type
) {
79 *(short*)dest
= *(short*)src
;
80 }else if (typeDouble
== type
) {
81 *(double*)dest
= *(double*)src
;
82 }else if (typeTimeStamp
== type
) {
83 *(TimeStamp
*)dest
= *(TimeStamp
*)src
;
84 }else if (typeDate
== type
) {
85 *(Date
*)dest
= *(Date
*)src
;
86 }else if (typeFloat
== type
) {
87 *(float*)dest
= *(float*)src
;
88 }else if (typeTime
== type
) {
89 *(Time
*)dest
= *(Time
*)src
;
90 }else if (typeLong
== type
) {
91 *(long*)dest
= *(long*)src
;
92 }else if (typeLongLong
== type
) {
94 convertToLongLong(dest
, src
,typeString
);
96 *(long long*)dest
= *(long long*)src
;
97 }else if (typeByteInt
== type
) {
98 *(char*)dest
= *(char*)src
;
99 }else if (typeBinary
== type
) {
100 os::memcpy(dest
, src
, length
);
101 }else if (typeComposite
== type
) {
102 os::memcpy(dest
, src
, length
);
107 void AllDataType::copyVal(void* dest
, void *src
, DataType type
, int length
,int dbFlag
)
109 //Performance optimization. putting likely case first
110 if (typeInt
== type
)
112 *(int*)dest
= *(int*)src
;
114 }else if (typeString
== type
|| typeVarchar
== type
)
116 //strncpy((char*)dest, (char*)src, length);
117 //char *d =(char*)dest;
118 //d[length-1] = '\0';
119 strcpy((char*)dest
, (char*)src
);
121 }else if (typeShort
== type
) {
122 *(short*)dest
= *(short*)src
;
123 }else if (typeDouble
== type
) {
124 *(double*)dest
= *(double*)src
;
125 }else if (typeTimeStamp
== type
) {
126 *(TimeStamp
*)dest
= *(TimeStamp
*)src
;
127 }else if (typeDate
== type
) {
128 *(Date
*)dest
= *(Date
*)src
;
129 }else if (typeFloat
== type
) {
130 *(float*)dest
= *(float*)src
;
131 }else if (typeTime
== type
) {
132 *(Time
*)dest
= *(Time
*)src
;
133 }else if (typeLong
== type
) {
134 *(long*)dest
= *(long*)src
;
135 }else if (typeLongLong
== type
) {
136 *(long long*)dest
= *(long long*)src
;
137 }else if (typeByteInt
== type
) {
138 *(char*)dest
= *(char*)src
;
139 }else if (typeBinary
== type
) {
140 os::memcpy(dest
, src
, length
);
141 }else if (typeComposite
== type
) {
142 os::memcpy(dest
, src
, length
);
146 void AllDataType::copyZeroVal(void *dest
, DataType type
, int length
)
148 if (typeInt
== type
)
151 }else if (typeString
== type
|| typeVarchar
== type
)
153 char *d
=(char*)dest
;
155 }else if (typeShort
== type
) {
157 }else if (typeDouble
== type
) {
159 }else if (typeTimeStamp
== type
) {
160 ((TimeStamp
*)dest
)->setDate(0,0,0);
161 ((TimeStamp
*)dest
)->setTime(0,0,0);
162 }else if (typeDate
== type
) {
163 ((Date
*)dest
)->set(0,0,0);
164 }else if (typeFloat
== type
) {
166 }else if (typeTime
== type
) {
167 ((Time
*)dest
)->set(0,0,0);
168 }else if (typeLong
== type
) {
170 }else if (typeLongLong
== type
) {
171 *(long long*)dest
= 0;
172 }else if (typeByteInt
== type
) {
174 }else if (typeBinary
== type
) {
175 os::memset(dest
, 0, length
);
176 }else if (typeComposite
== type
) {
177 os::memset(dest
, 0, length
);
183 void AllDataType::addVal(void* dest
, void *src
, DataType type
)
187 *(int*)dest
= *(int*)dest
+ *(int*)src
;
193 *(int*)dest
= *(int*)dest
+ *(int*)src
;
196 *(long*)dest
= *(long*)dest
+ *(long*)src
;
199 *(long long*)dest
= *(long long*)dest
+ *(long long*)src
;
202 *(short*)dest
= *(short*)dest
+ *(short*)src
;
205 *(char*)dest
= *(char*)dest
+ *(char*)src
;
208 *(double*)dest
= *(double*)dest
+ *(double*)src
;
211 *(float*)dest
= *(float*)dest
+ *(float*)src
;
225 bool AllDataType::compareVal(void *val1
, void *val2
, ComparisionOp op
,
226 DataType type
, long length
)
228 //Performance optimization.
229 //do not convert compareXXXVal to virtual functions. it takes more time
232 //as int is the heavily used type, hardcoding the compare here itself
233 if (OpEquals
== op
) {
234 if (*(int*)val1
== *(int*)val2
) return true;
236 }else if (OpLessThan
== op
) {
237 if (*(int*)val1
< *(int*)val2
) return true;
239 }else if (OpGreaterThan
== op
) {
240 if (*(int*)val1
> *(int*)val2
) return true;
242 }else if (OpLessThanEquals
== op
) {
243 if (*(int*)val1
<= *(int*)val2
) return true;
245 }else if (OpGreaterThanEquals
== op
) {
246 if (*(int*)val1
>= *(int*)val2
) return true;
248 }else if (OpNotEquals
== op
) {
249 if (*(int*)val1
!= *(int*)val2
) return true;
253 }else if(typeString
== type
|| typeVarchar
== type
) {
254 return AllDataType::compareStringVal(val1
, val2
, op
);
255 } else if (typeShort
== type
) {
256 return AllDataType::compareShortVal(val1
, val2
, op
);
257 } else if (typeDouble
== type
) {
258 return AllDataType::compareDoubleVal(val1
, val2
, op
);
259 } else if (typeFloat
== type
) {
260 return AllDataType::compareFloatVal(val1
, val2
, op
);
261 } else if (typeLong
== type
) {
262 return AllDataType::compareLongVal(val1
, val2
, op
);
263 } else if (typeLongLong
== type
) {
264 return AllDataType::compareLongLongVal(val1
, val2
, op
);
265 } else if (typeByteInt
== type
) {
266 return AllDataType::compareByteIntVal(val1
, val2
, op
);
267 } else if (typeTimeStamp
== type
) {
268 return AllDataType::compareTimeStampVal(val1
, val2
, op
);
269 } else if (typeDate
== type
) {
270 return AllDataType::compareDateVal(val1
, val2
, op
);
271 } else if (typeTime
== type
) {
272 return AllDataType::compareTimeVal(val1
, val2
, op
);
273 } else if (typeBinary
== type
) {
274 return AllDataType::compareBinaryVal(val1
, val2
, op
, length
);
275 } else if (typeComposite
== type
) {
276 return AllDataType::compareBinaryVal(val1
, val2
, op
, length
);
279 ComparisionOp
AllDataType::getComparisionOperator(char *str
)
282 if (strcmp(str
, "<=") == 0)
283 op
= OpLessThanEquals
;
284 else if (strcmp(str
, ">=") == 0)
285 op
= OpGreaterThanEquals
;
286 else if (strcmp(str
, "<") == 0)
288 else if (strcmp(str
, ">") == 0)
290 else if (strcmp(str
, "=") == 0)
292 else if (strcmp(str
, "!=") == 0 || strcmp(str
, "<>") == 0 )
294 else if (strcasecmp(str
, "LIKE") == 0 )
297 op
= OpInvalidComparisionOp
;
301 bool AllDataType::isValidFieldForAvg(DataType type
)
304 case typeInt
: case typeLong
: case typeLongLong
: case typeShort
:
305 case typeByteInt
: case typeDouble
: case typeFloat
: case typeDecimal
: