1 /***************************************************************************
2 * Copyright (C) 2007 by www.databasecache.com *
3 * Contact: praba_tuty@databasecache.com *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 ***************************************************************************/
20 #define SmallestValJulDate (1721426)
26 Date::Date(int year
, int month
, int day
)
27 { YMDToJulian(year
, month
, day
, julianDate
); }
28 int Date::set(int year
, int month
, int day
)
29 { return YMDToJulian(year
,month
,day
,julianDate
); }
30 int Date::get(int &year
, int &month
, int &day
) const
31 { return julianToYMD(julianDate
,year
,month
,day
); }
33 int Date::parseFrom(const char *s
) {
36 if(strcmp(s
,"now")==0 || strcmp(s
,"NOW")==0){
37 time_t cnow
= ::time(NULL
);
38 #if defined(SOLARIS) && defined(REMOTE_SOLARIS)
39 struct std::tm
*tmval
= (struct std::tm
*) localtime(&cnow
);
40 return set(year
=tmval
->tm_year
+1900, month
=tmval
->tm_mon
+1, day
=tmval
->tm_mday
);
42 struct tm
*tmval
= localtime(&cnow
);
43 return set(year
=tmval
->tm_year
+1900,month
=tmval
->tm_mon
+1,day
=tmval
->tm_mday
);
50 count
= sscanf(s
,"%d-%d-%d",&year
,&month
,&day
);
54 count
= sscanf(s
,"%d/%d/%d",&year
,&month
,&day
);
59 if (count
< 3) return -1;
60 if (year
< 100) year
+= 1900;
61 if (!isValidDate(year
, month
, day
))
63 return set(year
,month
,day
);
67 void Date::changeToCsqlFormat(char *src
)
74 strncpy(dstPtr
, srcPtr
, 4);
78 if(strncasecmp(srcPtr
,"JAN",3) == 0) strncpy(dstPtr
, "01", 2);
79 else if(strncasecmp(srcPtr
,"FEB",3)== 0) strncpy(dstPtr
, "02", 2);
80 else if(strncasecmp(srcPtr
,"MAR",3)== 0) strncpy(dstPtr
, "03", 2);
81 else if(strncasecmp(srcPtr
,"APR",3)== 0) strncpy(dstPtr
, "04", 2);
82 else if(strncasecmp(srcPtr
,"MAY",3)== 0) strncpy(dstPtr
, "05", 2);
83 else if(strncasecmp(srcPtr
,"JUN",3)== 0) strncpy(dstPtr
, "06", 2);
84 else if(strncasecmp(srcPtr
,"JUL",3)== 0) strncpy(dstPtr
, "07", 2);
85 else if(strncasecmp(srcPtr
,"AUG",3)== 0) strncpy(dstPtr
, "08", 2);
86 else if(strncasecmp(srcPtr
,"SEP",3)== 0) strncpy(dstPtr
, "09", 2);
87 else if(strncasecmp(srcPtr
,"OCT",3)== 0) strncpy(dstPtr
, "10", 2);
88 else if(strncasecmp(srcPtr
,"NOV",3)== 0) strncpy(dstPtr
, "11", 2);
89 else if(strncasecmp(srcPtr
,"DEC",3)== 0) strncpy(dstPtr
, "12", 2);
92 strncpy(dstPtr
, src
, 2);
99 int Date::dayOfMonth() const {
100 int year
, month
, day
;
104 int Date::month() const {
105 int year
, month
, day
;
109 int Date::year() const {
110 int year
, month
, day
;
115 int Date::dayOfWeek() const { return dayOfWeek(julianDate
); }
117 const char *Date::dayOfWeekName() const
118 { return dayOfWeekName(dayOfWeek(julianDate
)); }
120 const char *Date::dayOfWeekAbbr() const
121 { return dayOfWeekAbbr(dayOfWeek(julianDate
)); }
123 static const char *day_names
[] = {
124 "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
126 static const char *day_abbrs
[] = {
127 "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
130 static const char *month_names
[] = {
131 "January", "February", "March", "April", "May", "June",
132 "July", "August", "September", "October", "November", "December"
134 static const char *month_abbrs
[] = {
135 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
136 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
140 static int daysBeforeMonth
[] = {
141 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
143 static int days_per_month
[] = {
144 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
147 const char * Date::dayOfWeekName(int day
)
148 { return (day
< 1 || day
> 7) ? 0 : day_names
[day
-1]; }
150 const char * Date::dayOfWeekAbbr(int day
)
151 { return (day
< 1 || day
> 7) ? 0 : day_abbrs
[day
-1]; }
153 const char * Date::monthName() const { return monthName(month()); }
154 const char * Date::monthAbbr() const { return monthAbbr(month()); }
155 const char * Date::monthName(int month
)
156 { return (month
< 1 || month
> 12) ? 0 : month_names
[month
-1]; }
157 const char * Date::monthAbbr(int month
)
158 { return (month
< 1 || month
> 12) ? 0 : month_abbrs
[month
-1]; }
159 Date
operator+(const Date
&d1
, int days
)
160 { return Date(d1
.julianDate
+ days
); }
161 Date
operator+(int days
, const Date
&d1
)
162 { return Date(d1
.julianDate
+ days
); }
163 Date
operator-(const Date
&d1
, int days
)
164 { return Date(d1
.julianDate
- days
); }
166 int operator-(const Date
&d1
, const Date
& d2
)
167 { return d1
.julianDate
- d2
.julianDate
; }
169 int operator<(const Date
&d1
,const Date
&d2
)
170 { return d1
.julianDate
< d2
.julianDate
; }
171 int operator>(const Date
&d1
,const Date
&d2
)
172 { return d1
.julianDate
> d2
.julianDate
; }
173 int operator<=(const Date
&d1
,const Date
&d2
)
174 { return d1
.julianDate
<= d2
.julianDate
; }
175 int operator>=(const Date
&d1
,const Date
&d2
)
176 { return d1
.julianDate
>= d2
.julianDate
; }
177 int operator==(const Date
&d1
,const Date
&d2
)
178 { return d1
.julianDate
== d2
.julianDate
; }
179 int operator!=(const Date
&d1
,const Date
&d2
)
180 { return d1
.julianDate
!= d2
.julianDate
; }
182 bool Date::isValid() const
183 { return julianDate
>= SmallestValJulDate
; }
185 bool Date::isLeapYear(int year
)
187 return (year
% 400 == 0) || ((year
% 4 == 0) && !(year
% 100 == 0));
190 int Date::dayOfYear() const {
193 int tmp
= daysBeforeMonth
[month
-1];
194 if (month
>= 3 && isLeapYear(year
))
199 int Date::daysInMonth(int month
, int year
) {
201 int tmp
= days_per_month
[month
];
202 if (month
== 1 && isLeapYear(year
)) tmp
++;
206 bool Date::isValidDate(int year
, int month
, int day
) {
208 if (year
< 1 || year
>= 9999) return false;
209 if (month
< 1 || month
> 12) return false;
210 return (day
>= 1) && (day
<= daysInMonth(month
,year
));
213 // Algorithm Author: Robert G. Tantzen
214 int Date::YMDToJulian(int year
, int mon
, int day
, JulianRep
&jul
) {
215 if (!isValidDate(year
, mon
, day
))
216 { jul
= (JulianRep
)0; return -1; }
218 // year, month, day are assumed to be valid
219 int m
= mon
, d
= day
, y
= year
;
223 else { m
+= 9; --y
; }
226 j
= (146097*c
)/4 + (1461*ya
)/4 + (153*m
+2)/5 + d
+ 1721119;
231 // Julian date converter. Takes a julian date (the number of days since some
232 // distant epoch or other), and returns month, day of month, and year in
233 // integer references.
234 // Algorithm Author: Robert G. Tantzen
235 int Date::dayOfWeek(JulianRep jul
) {
236 return (int)((jul
+1)%7+1);
239 int Date::julianToYMD(JulianRep jul
, int &year
, int &month
, int &day
) {
243 if (j
< SmallestValJulDate
)
244 { year
= month
= day
= 0; return -1; }
247 y
= (4 * j
- 1)/146097;
248 j
= 4 * j
- 1 - 146097 * y
;
250 j
= (4 * d
+ 3)/1461;
251 d
= 4 * d
+ 3 - 1461 * j
;
254 d
= 5 * d
- 3 - 153 * m
;
258 else { m
-= 9; ++y
; }
265 #define MAX_VALID_SECONDS (60 * 60 * 24 -1)
266 Time::Time(int hours
, int mins
, int secs
, int usec
)
267 { set(hours
,mins
,secs
, usec
); }
269 int Time::set(int hours
, int mins
, int secs
, int usec
) {
270 if((hours
| mins
| secs
| usec
) < 0) { timeVal
= -1; return -1; }
271 if(hours
>= 24 | mins
>= 60 | secs
>= 62)
272 { timeVal
= -1; return -1; }
273 timeVal
= secs
+ mins
* 60 + hours
* 3600;
275 if(usec
) timeVal
+= usec
/100;
279 int Time::get(int &hours
, int &mins
, int &secs
) const {
280 if (timeVal
< 0) return -1;
281 int s
= timeVal
/10000;
290 int Time::seconds() const { return (timeVal
/10000) % 60; }
291 int Time::minutes() const { return (timeVal
/(60*10000)) % 60; }
292 int Time::hours() const { return timeVal
/ (3600*10000); }
293 int Time::msec() const { return (timeVal
% 10000) / 10; }
294 int Time::usec() const { return (timeVal
% 10000) * 100; }
296 int Time::setMsec(int ms
) {
297 if(ms
< 0 || ms
>= 1000) return -1;
298 timeVal
= timeVal
+(10*ms
);
301 int Time::setUsec(int us
) {
302 if(us
< 0 || us
>= 1000000) return -1;
303 timeVal
= timeVal
+us
/100;
307 bool Time::isValid() const
308 { return timeVal
>= 0 && timeVal
<= (10000*(MAX_VALID_SECONDS
+1)-1); }
310 bool Time::isValidTime(int hours
, int mins
, int secs
) {
311 return (hours
>= 0 && hours
< 24) &&
312 (mins
>= 0 && mins
< 60) &&
313 (secs
>= 0 && secs
< 60);
316 Time
operator+(const Time
&t1
, int seconds
)
317 { return Time(t1
.timeVal
+ seconds
*10000); }
318 Time
operator+(int seconds
, const Time
&t1
)
319 { return Time(t1
.timeVal
+ seconds
*10000); }
320 Time
operator-(const Time
&t1
, int seconds
)
321 { return Time(t1
.timeVal
- seconds
*10000); }
323 int operator-(const Time
&t1
, const Time
& t2
)
324 { return (t1
.timeVal
- t2
.timeVal
)/10000; }
326 int operator<(const Time
&t1
,const Time
&t2
)
327 { return t1
.timeVal
< t2
.timeVal
; }
328 int operator>(const Time
&t1
,const Time
&t2
)
329 { return t1
.timeVal
> t2
.timeVal
; }
330 int operator<=(const Time
&t1
,const Time
&t2
)
331 { return t1
.timeVal
<= t2
.timeVal
; }
332 int operator>=(const Time
&t1
,const Time
&t2
)
333 { return t1
.timeVal
>= t2
.timeVal
; }
334 int operator==(const Time
&t1
,const Time
&t2
)
335 { return t1
.timeVal
== t2
.timeVal
; }
336 int operator!=(const Time
&t1
,const Time
&t2
)
337 { return t1
.timeVal
!= t2
.timeVal
; }
339 int Time::parseFrom(const char *s
) {
342 if(strcmp(s
,"now")==0 || strcmp(s
,"NOW")==0){
343 time_t cnow
= ::time(NULL
);
344 #if defined(SOLARIS) && defined(REMOTE_SOLARIS)
345 struct std::tm
*tmval
= (struct std::tm
*) localtime(&cnow
);
346 return set(hours
=tmval
->tm_hour
,mins
=tmval
->tm_min
,secs
=tmval
->tm_sec
);
348 struct tm
*tmval
= localtime(&cnow
);
349 return set(hours
=tmval
->tm_hour
,mins
=tmval
->tm_min
,secs
=tmval
->tm_sec
);
353 count
= sscanf(s
,"%d:%d:%d",&hours
,&mins
,&secs
);
354 if (count
< 2) return -1;
355 if (count
== 2) secs
= 0;
357 if (!isValidTime(hours
,mins
,secs
))
359 return set(hours
,mins
,secs
);
362 int TimeStamp::parseFrom(const char *s
) {
366 if(strcmp(s
,"now")==0 || strcmp(s
,"NOW")==0){
367 time_t cnow
= ::time(NULL
);
368 #if defined(SOLARIS) && defined(REMOTE_SOLARIS)
369 struct std::tm
*tmval
= (struct std::tm
*) localtime(&cnow
);
370 setDate(year
=tmval
->tm_year
+1900,month
=tmval
->tm_mon
+1,day
=tmval
->tm_mday
);
371 return setTime(hours
=tmval
->tm_hour
,mins
=tmval
->tm_min
,secs
=tmval
->tm_sec
);
373 struct tm
*tmval
= localtime(&cnow
);
374 setDate(year
=tmval
->tm_year
+1900,month
=tmval
->tm_mon
+1,day
=tmval
->tm_mday
);
375 return setTime(hours
=tmval
->tm_hour
,mins
=tmval
->tm_min
,secs
=tmval
->tm_sec
);
382 count
= sscanf(s
,"%d-%d-%d %d:%d:%d",&year
,&month
,&day
, &hours
, &mins
, &secs
);
386 count
= sscanf(s
,"%d/%d/%d %d:%d:%d",&year
,&month
,&day
, &hours
, &mins
, &secs
);
391 if (count
< 5) return -1;
392 if (count
== 5) secs
= 0;
393 if (year
< 100) year
+= 1900;
395 if (!date
.isValidDate(year
, month
, day
))
398 setDate(year
,month
,day
);
401 if (!time
.isValidTime(hours
,mins
,secs
))
403 return setTime(hours
,mins
,secs
);
407 void TimeStamp::changeToCsqlFormat(char *src
)
414 strncpy(dstPtr
, srcPtr
, 4);
418 if(strncasecmp(srcPtr
,"JAN",3) == 0) strncpy(dstPtr
, "01", 2);
419 else if(strncasecmp(srcPtr
,"FEB",3)== 0) strncpy(dstPtr
, "02", 2);
420 else if(strncasecmp(srcPtr
,"MAR",3)== 0) strncpy(dstPtr
, "03", 2);
421 else if(strncasecmp(srcPtr
,"APR",3)== 0) strncpy(dstPtr
, "04", 2);
422 else if(strncasecmp(srcPtr
,"MAY",3)== 0) strncpy(dstPtr
, "05", 2);
423 else if(strncasecmp(srcPtr
,"JUN",3)== 0) strncpy(dstPtr
, "06", 2);
424 else if(strncasecmp(srcPtr
,"JUL",3)== 0) strncpy(dstPtr
, "07", 2);
425 else if(strncasecmp(srcPtr
,"AUG",3)== 0) strncpy(dstPtr
, "08", 2);
426 else if(strncasecmp(srcPtr
,"SEP",3)== 0) strncpy(dstPtr
, "09", 2);
427 else if(strncasecmp(srcPtr
,"OCT",3)== 0) strncpy(dstPtr
, "10", 2);
428 else if(strncasecmp(srcPtr
,"NOV",3)== 0) strncpy(dstPtr
, "11", 2);
429 else if(strncasecmp(srcPtr
,"DEC",3)== 0) strncpy(dstPtr
, "12", 2);
432 strncpy(dstPtr
, src
, 2);
435 strncpy(dstPtr
, srcPtr
, 9);
440 int operator< (const TimeStamp
&d1
, const TimeStamp
&d2
)
441 { return (d1
.date
!= d2
.date
) ? d1
.date
< d2
.date
: d1
.time
< d2
.time
; }
442 int operator> (const TimeStamp
&d1
, const TimeStamp
&d2
)
443 { return (d1
.date
!= d2
.date
) ? d1
.date
> d2
.date
: d1
.time
> d2
.time
; }
444 int operator<=(const TimeStamp
&d1
, const TimeStamp
&d2
)
445 { return (d1
.date
!= d2
.date
) ? d1
.date
< d2
.date
: d1
.time
<= d2
.time
; }
446 int operator>=(const TimeStamp
&d1
, const TimeStamp
&d2
)
447 { return (d1
.date
!= d2
.date
) ? d1
.date
> d2
.date
: d1
.time
>= d2
.time
; }
448 int operator==(const TimeStamp
&d1
, const TimeStamp
&d2
)
449 { return d1
.date
== d2
.date
&& d1
.time
== d2
.time
; }
450 int operator!=(const TimeStamp
&d1
, const TimeStamp
&d2
)
451 { return d1
.date
!= d2
.date
|| d1
.time
!= d2
.time
; }
454 char* AllDataType::getSQLString(DataType type
)
458 case typeInt
: return "INT";
459 case typeLong
: return "INT";
460 case typeLongLong
: return "BIGINT";
461 case typeShort
: return "SMALLINT";
462 case typeByteInt
: return "TINYINT";
463 case typeDouble
: return "REAL";
464 case typeFloat
: return "FLOAT";
465 case typeDate
: return "DATE";
466 case typeTime
: return "TIME";
467 case typeTimeStamp
: return "TIMESTAMP";
468 case typeString
: return "CHAR";
469 case typeBinary
: return "BINARY";
470 default: return "UNKNOWN";
475 SQLSMALLINT
AllDataType::convertToSQLType(DataType type
)
499 return SQL_TYPE_DATE
;
501 return SQL_TYPE_TIME
;
503 return SQL_TYPE_TIMESTAMP
;
511 SQLSMALLINT
AllDataType::convertToCSQLSQLType(DataType type
)
535 return SQL_TYPE_DATE
;
537 return SQL_TYPE_TIME
;
539 return SQL_TYPE_TIMESTAMP
;
548 SQLSMALLINT
AllDataType::convertToSQL_C_Type(DataType type
,TDBInfo tdbname
)
558 if(tdbname
== postgres
)
561 return SQL_C_SBIGINT
;
566 return SQL_C_STINYINT
;
575 return SQL_C_TYPE_DATE
;
577 return SQL_C_TYPE_TIME
;
579 return SQL_C_TYPE_TIMESTAMP
;
588 DataType
AllDataType::convertFromSQLType(SQLSMALLINT type
,int length
,int scale
,TDBInfo tdbname
)
590 if(tdbname
==postgres
)
609 case SQL_TYPE_TIMESTAMP
:
610 return typeTimeStamp
;
613 case SQL_LONGVARCHAR
:
641 case SQL_TYPE_TIMESTAMP
:
642 return typeTimeStamp
;
645 case SQL_LONGVARCHAR
:
654 void AllDataType::subVal(void* dest
, void *src
, DataType type
)
659 *(int*)dest
= *(int*)dest
- *(int*)src
;
662 *(long*)dest
= *(long*)dest
- *(long*)src
;
665 *(long long*)dest
= *(long long*)dest
- *(long long*)src
;
668 *(short*)dest
= *(short*)dest
- *(short*)src
;
671 *(char*)dest
= *(char*)dest
- *(char*)src
;
674 *(double*)dest
= *(double*)dest
- *(double*)src
;
677 *(float*)dest
= *(float*)dest
- *(float*)src
;
689 void AllDataType::mulVal(void* dest
, void *src
, DataType type
)
694 *(int*)dest
= *(int*)dest
* (*(int*)src
);
697 *(long*)dest
= *(long*)dest
* (*(long*)src
);
700 *(long long*)dest
= *(long long*)dest
* (*(long long*)src
);
703 *(short*)dest
= *(short*)dest
* (*(short*)src
);
706 *(char*)dest
= *(char*)dest
* (*(char*)src
);
709 *(double*)dest
= *(double*)dest
* (*(double*)src
);
712 *(float*)dest
= *(float*)dest
* (*(float*)src
);
724 void AllDataType::mudVal(void* dest
, void *src
, DataType type
)
728 *(int*)dest
= *(int*)dest
% (*(int*)src
);
734 *(int*)dest
= *(int*)dest
% (*(int*)src
);
737 *(long*)dest
= *(long*)dest
% (*(long*)src
);
740 *(long long*)dest
= *(long long*)dest
% (*(long long*)src
);
743 *(short*)dest
= *(short*)dest
% (*(short*)src
);
746 *(char*)dest
= *(char*)dest
% (*(char*)src
);
749 *(double*)dest
= *(long long*)dest
% (*(long long*)src
);
752 *(float*)dest
= *(int*)dest
% (*(int*)src
);
764 void AllDataType::divVal(void* dest
, void *src
, DataType type
)
768 *(int*)dest
= *(int*)dest
/ (*(int*)src
);
774 *(int*)dest
= *(int*)dest
/ (*(int*)src
);
777 *(long*)dest
= *(long*)dest
/ (*(long*)src
);
780 *(long long*)dest
= *(long long*)dest
/ (*(long long*)src
);
783 *(short*)dest
= *(short*)dest
/ (*(short*)src
);
786 *(char*)dest
= *(char*)dest
/ (*(char*)src
);
789 *(double*)dest
= *(double *)dest
/ (*(double*)src
);
792 *(float*)dest
= *(float*)dest
/ (*(float*)src
);
804 void AllDataType::divVal(double* dest
, int src
, DataType type
)
829 void AllDataType::increment(void* dest
, void *src
, DataType type
)
834 *(int*)dest
= *(int*)src
+ 1;
837 *(long*)dest
= *(long*)src
+ 1;
840 *(long long*)dest
= *(long long*)src
+ 1;
843 *(char*)dest
= *(char*)src
+ 1;
846 *(short*)dest
= *(short*)src
+ 1;
849 *(double*)dest
= *(double*)src
+ 1;
852 *(float*)dest
= *(float*)src
+ 1;
859 bool AllDataType::isValueZero(void *src
, DataType type
)
864 if (*(int*)src
== 0) return true;
867 if (*(int*)src
== 0) return true;
870 if (*(int*)src
== 0) return true;
873 if (*(int*)src
== 0) return true;
876 if (*(int*)src
== 0) return true;
879 if (*(int*)src
== 0) return true;
887 bool AllDataType::compareIntVal(void* src1
, void *src2
, ComparisionOp op
)
889 printf("This function should never be called by anyone\n");
890 if (OpEquals
== op
) {
891 if (*(int*)src1
== *(int*)src2
) return true;
893 }else if (OpGreaterThan
== op
) {
894 if (*(int*)src1
> *(int*)src2
) return true;
896 }else if (OpLessThan
== op
) {
897 if (*(int*)src1
< *(int*)src2
) return true;
899 }else if (OpLessThanEquals
== op
) {
900 if (*(int*)src1
<= *(int*)src2
) return true;
902 }else if (OpGreaterThanEquals
== op
) {
903 if (*(int*)src1
>= *(int*)src2
) return true;
905 }else if (OpNotEquals
== op
) {
906 if (*(int*)src1
!= *(int*)src2
) return true;
912 bool AllDataType::compareLongVal(void* src1
, void *src2
, ComparisionOp op
)
918 if (*(long*)src1
== *(long*)src2
) result
= true;
922 if (*(long*)src1
!= *(long*)src2
) result
= true;
926 if (*(long*)src1
< *(long*)src2
) result
= true;
929 case OpLessThanEquals
:
930 if (*(long*)src1
<= *(long*)src2
) result
= true;
934 if (*(long*)src1
> *(long*)src2
) result
= true;
937 case OpGreaterThanEquals
:
938 if (*(long*)src1
>= *(long*)src2
) result
= true;
945 bool AllDataType::compareLongLongVal(void* src1
, void *src2
,
952 if (*(long long*)src1
== *(long long*)src2
) result
= true;
956 if (*(long long*)src1
!= *(long long*)src2
) result
= true;
960 if (*(long long*)src1
< *(long long*)src2
) result
= true;
963 case OpLessThanEquals
:
964 if (*(long long*)src1
<= *(long long*)src2
) result
= true;
968 if (*(long long*)src1
> *(long long*)src2
) result
= true;
971 case OpGreaterThanEquals
:
972 if (*(long long*)src1
>= *(long long*)src2
) result
= true;
979 bool AllDataType::compareShortVal(void* src1
, void *src2
, ComparisionOp op
)
985 if (*(short*)src1
== *(short*)src2
) result
= true;
989 if (*(short*)src1
!= *(short*)src2
) result
= true;
993 if (*(short*)src1
< *(short*)src2
) result
= true;
996 case OpLessThanEquals
:
997 if (*(short*)src1
<= *(short*)src2
) result
= true;
1001 if (*(short*)src1
> *(short*)src2
) result
= true;
1002 else result
= false;
1004 case OpGreaterThanEquals
:
1005 if (*(short*)src1
>= *(short*)src2
) result
= true;
1006 else result
= false;
1012 bool AllDataType::compareByteIntVal(void* src1
, void *src2
, ComparisionOp op
)
1014 bool result
= false;
1018 if (*(ByteInt
*)src1
== *(ByteInt
*)src2
) result
= true;
1019 else result
= false;
1022 if (*(ByteInt
*)src1
!= *(ByteInt
*)src2
) result
= true;
1023 else result
= false;
1026 if (*(ByteInt
*)src1
< *(ByteInt
*)src2
) result
= true;
1027 else result
= false;
1029 case OpLessThanEquals
:
1030 if (*(ByteInt
*)src1
<= *(ByteInt
*)src2
) result
= true;
1031 else result
= false;
1034 if (*(ByteInt
*)src1
> *(ByteInt
*)src2
) result
= true;
1035 else result
= false;
1037 case OpGreaterThanEquals
:
1038 if (*(ByteInt
*)src1
>= *(ByteInt
*)src2
) result
= true;
1039 else result
= false;
1045 bool AllDataType::compareDoubleVal(void* src1
, void *src2
, ComparisionOp op
)
1047 bool result
= false;
1051 if (*(double*)src1
== *(double*)src2
) result
= true;
1052 else result
= false;
1055 if (*(double*)src1
!= *(double*)src2
) result
= true;
1056 else result
= false;
1059 if (*(double*)src1
< *(double*)src2
) result
= true;
1060 else result
= false;
1062 case OpLessThanEquals
:
1063 if (*(double*)src1
<= *(double*)src2
) result
= true;
1064 else result
= false;
1067 if (*(double*)src1
> *(double*)src2
) result
= true;
1068 else result
= false;
1070 case OpGreaterThanEquals
:
1071 if (*(double*)src1
>= *(double*)src2
) result
= true;
1072 else result
= false;
1078 bool AllDataType::compareFloatVal(void* src1
, void *src2
, ComparisionOp op
)
1080 bool result
= false;
1084 if (*(float*)src1
== *(float*)src2
) result
= true;
1085 else result
= false;
1088 if (*(float*)src1
!= *(float*)src2
) result
= true;
1089 else result
= false;
1092 if (*(float*)src1
< *(float*)src2
) result
= true;
1093 else result
= false;
1095 case OpLessThanEquals
:
1096 if (*(float*)src1
<= *(float*)src2
) result
= true;
1097 else result
= false;
1100 if (*(float*)src1
> *(float*)src2
) result
= true;
1101 else result
= false;
1103 case OpGreaterThanEquals
:
1104 if (*(float*)src1
>= *(float*)src2
) result
= true;
1105 else result
= false;
1111 bool AllDataType::compareDateVal(void* src1
, void *src2
, ComparisionOp op
)
1113 bool result
= false;
1117 if (*(Date
*)src1
== *(Date
*)src2
) result
= true;
1118 else result
= false;
1121 if (*(Date
*)src1
!= *(Date
*)src2
) result
= true;
1122 else result
= false;
1125 if (*(Date
*)src1
< *(Date
*)src2
) result
= true;
1126 else result
= false;
1128 case OpLessThanEquals
:
1129 if (*(Date
*)src1
<= *(Date
*)src2
) result
= true;
1130 else result
= false;
1133 if (*(Date
*)src1
> *(Date
*)src2
) result
= true;
1134 else result
= false;
1136 case OpGreaterThanEquals
:
1137 if (*(Date
*)src1
>= *(Date
*)src2
) result
= true;
1138 else result
= false;
1144 bool AllDataType::compareTimeVal(void* src1
, void *src2
, ComparisionOp op
)
1146 bool result
= false;
1150 if (*(Time
*)src1
== *(Time
*)src2
) result
= true;
1151 else result
= false;
1154 if (*(Time
*)src1
!= *(Time
*)src2
) result
= true;
1155 else result
= false;
1158 if (*(Time
*)src1
< *(Time
*)src2
) result
= true;
1159 else result
= false;
1161 case OpLessThanEquals
:
1162 if (*(Time
*)src1
<= *(Time
*)src2
) result
= true;
1163 else result
= false;
1166 if (*(Time
*)src1
> *(Time
*)src2
) result
= true;
1167 else result
= false;
1169 case OpGreaterThanEquals
:
1170 if (*(Time
*)src1
>= *(Time
*)src2
) result
= true;
1171 else result
= false;
1177 bool AllDataType::compareTimeStampVal(void* src1
, void *src2
, ComparisionOp op
)
1179 bool result
= false;
1183 if (*(TimeStamp
*)src1
== *(TimeStamp
*)src2
) result
= true;
1184 else result
= false;
1187 if (*(TimeStamp
*)src1
!= *(TimeStamp
*)src2
) result
= true;
1188 else result
= false;
1191 if (*(TimeStamp
*)src1
< *(TimeStamp
*)src2
) result
= true;
1192 else result
= false;
1194 case OpLessThanEquals
:
1195 if (*(TimeStamp
*)src1
<= *(TimeStamp
*)src2
) result
= true;
1196 else result
= false;
1199 if (*(TimeStamp
*)src1
> *(TimeStamp
*)src2
) result
= true;
1200 else result
= false;
1202 case OpGreaterThanEquals
:
1203 if (*(TimeStamp
*)src1
>= *(TimeStamp
*)src2
) result
= true;
1204 else result
= false;
1210 bool AllDataType::compareStringVal(void* src1
, void *src2
, ComparisionOp op
)
1212 if (OpEquals
== op
) {
1213 if (strcmp((char*)src1
, (char*)src2
) ==0) return true;
1215 }else if (OpGreaterThan
== op
) {
1216 if (strcmp((char*)src1
, (char*)src2
) >0) return true;
1218 }else if (OpLessThan
== op
) {
1219 if (strcmp((char*)src1
, (char*)src2
) <0 ) return true;
1221 }else if (OpLessThanEquals
== op
) {
1222 // printf("Illegal Operator:Not Supported for String\n");
1224 if (strcmp((char*)src1
, (char*)src2
)<= 0) return true;
1226 }else if (OpGreaterThanEquals
== op
) {
1227 // printf("Illegal Operator:Not Supported for String\n");
1229 if (strcmp((char*)src1
, (char*)src2
) >=0) return true;
1231 }else if (OpNotEquals
== op
) {
1232 if (strcmp((char*)src1
, (char*)src2
) != 0) return true;
1234 }else if (OpLike
== op
) {
1235 return !os::strmatch((char*)src2
, (char*)src1
);
1237 printf("Illegeal Operator:Not supported for String\n");
1241 bool AllDataType::compareBinaryVal(void* src1
, void *src2
,
1242 ComparisionOp op
, int length
)
1244 bool result
= false;
1245 int ret
= os::memcmp(src1
, src2
, length
);
1249 if (ret
== 0 ) result
= true; else result
= false;
1252 if (ret
!= 0 ) result
= true; else result
= false;
1255 if (ret
< 0 ) result
= true; else result
= false;
1257 case OpLessThanEquals
:
1258 printf("Illegal Operator:Not Supported for Binary\n");
1261 if (ret
> 0 ) result
= true; else result
= false;
1263 case OpGreaterThanEquals
:
1264 printf("Illegal Operator:Not Supported for Binary\n");
1270 void* AllDataType::alloc(DataType type
, int length
)
1276 dest
= malloc(sizeof(int));
1279 dest
= malloc(sizeof(long));
1282 dest
= malloc(sizeof(long long));
1285 dest
= malloc(sizeof(short));
1288 dest
= malloc(sizeof(char));
1291 dest
= malloc(sizeof(double));
1294 dest
= malloc(sizeof(float));
1298 //fldDef.length_ = sizeof(long double);
1301 if (length
== 0 ) return NULL
;
1302 dest
= malloc(length
);
1305 if (length
== 0 || length
> 512) return NULL
;
1306 dest
= malloc(length
);
1307 memset(dest
, 0, length
);
1310 dest
= malloc(sizeof(Date
));
1313 dest
= malloc(sizeof(Time
));
1316 dest
= malloc(sizeof(TimeStamp
));
1322 void AllDataType::memoryset(void *value
,DataType type
)
1327 value
= ::memset(value
, 0, sizeof(int));
1330 value
= ::memset(value
, 0, sizeof(long));
1333 value
=::memset(value
, 0, sizeof(long long));
1336 value
= ::memset(value
, 0, sizeof(short));
1339 value
= ::memset(value
, 0, sizeof(char));
1342 value
= ::memset(value
, 0, sizeof(double));
1345 value
= ::memset(value
, 0, sizeof(float));
1350 *(char*)value
= '\0';
1351 //if (length == 0 ) return NULL;
1352 //dest = malloc(length);
1355 /* if (length == 0 || length > 256 ) return NULL;
1357 memset(dest, 0, length);*/
1360 value
= ::memset(value
, 0, sizeof(Date
));
1363 value
= ::memset(value
, 0, sizeof(Time
));
1366 value
= ::memset(value
, 0, sizeof(TimeStamp
));
1374 DbRetVal
AllDataType::strToValue(void* dest
, char *src
, DataType type
, int length
)
1380 sscanf( src
, "%d", &val
);
1385 sscanf( src
, "%ld", &val
);
1388 case typeLongLong
: {
1390 sscanf( src
, "%lld", &val
);
1391 *(long long*)dest
= val
;
1395 sscanf( src
, "%hd", &val
);
1396 *(short*)dest
= val
;
1400 sscanf( src
, "%hhd", &val
);
1401 *(char*)dest
= *(char *)&val
;
1405 sscanf( src
, "%lg", &val
);
1406 *(double*)dest
= val
;
1410 sscanf( src
, "%f", &val
);
1411 *(float*)dest
= val
;
1416 strncpy((char*)dest
, (char*)src
, length
);
1417 char *d
=(char*)dest
;
1422 if (strlen(src
) == 11) {
1423 if ( src
[6] == '-' || src
[6] == '/' ) {
1424 Date::changeToCsqlFormat(src
);
1427 res
= sscanf( src
, "%d-%d-%d", &y
, &m
, &d
);
1429 res
= sscanf( src
, "%d/%d/%d", &y
, &m
, &d
);
1430 if (strcmp(src
,"now")==0 || strcmp(src
,"NOW")==0){
1431 Date
*dt
= (Date
*) dest
;
1432 dt
->parseFrom((char*)src
);
1437 fprintf(stderr
,"Error reading date. yyyy{-/}mm{-/}dd is the valid format.");
1440 Date
dateObj(y
,m
,d
);
1441 *(Date
*)dest
= dateObj
;
1445 res
= sscanf( src
, "%d:%d:%d", &h
, &m
, &s
);
1446 if(strcmp(src
,"now")==0 || strcmp(src
,"NOW")==0){
1447 Time
*dt
= (Time
*) dest
;
1448 dt
->parseFrom((char*)src
);
1453 fprintf(stderr
, "Error reading time, hh:mm:ss is the valid format.");
1456 Time
timeObj(h
,m
,s
);
1457 *(Time
*)dest
= timeObj
;
1459 case typeTimeStamp
: {
1460 int d
,m
,y
, h
,mn
,s
, res
=0;
1461 bool isNow
= ( strcasecmp(src
,"now")==0 );
1462 if(!isNow
&& isalpha(int(src
[5]))) {
1463 TimeStamp::changeToCsqlFormat(src
);
1465 res
= sscanf( src
, "%d-%d-%d %d:%d:%d", &y
, &m
, &d
, &h
, &mn
, &s
);
1467 res
= sscanf( src
, "%d-%d-%d, %d:%d:%d", &y
, &m
, &d
, &h
, &mn
, &s
);
1469 res
= sscanf( src
, "%d/%d/%d %d:%d:%d", &y
, &m
, &d
, &h
, &mn
, &s
);
1471 res
= sscanf( src
, "%d/%d/%d, %d:%d:%d", &y
, &m
, &d
, &h
, &mn
, &s
);
1474 TimeStamp
*dt
= (TimeStamp
*) dest
;
1475 dt
->parseFrom((char*)src
);
1480 fprintf(stderr
, "Error reading timestamp, yyyy{-/}mm{-/}dd[,] hh:mm:ss is the valid format.");
1483 TimeStamp
timeStampObj(y
,m
,d
,h
,mn
,s
);
1484 *(TimeStamp
*)dest
= timeStampObj
;
1487 memset ((void *) dest
, 0, length
);
1488 unsigned char c
= 0;
1489 const char *str
= (const char *)src
;
1492 if( i
> (length
*2)-1 ){ i
= (length
*2)-1 ; }
1493 bool evenlegth
=false;
1494 if(i
%2){ evenlegth
=true;}
1495 unsigned char *val
= (unsigned char *)dest
+(length
-1);
1498 if (!isxdigit((int)c
)) {
1499 printError(ErrBadArg
, "Invalid hexadecimal value");
1502 if (c
<= '9') c
-= '0';
1503 else if (c
>= 'a') c
= c
- 'a' + 10;
1504 else c
= c
- 'A' + 10;
1507 if ((i
+1) % 2) { *val
= *val
| (c
<<4); val
--;}
1510 if (i
% 2) { *val
= *val
| (c
<<4); val
--;}
1524 void AllDataType::convert(DataType srcType
, void *src
,
1525 DataType destType
, void *dest
, int length
)
1527 switch ((DataType
) destType
)
1529 case typeInt
: convertToInt(dest
, src
, srcType
); break;
1530 case typeLong
: convertToLong(dest
, src
, srcType
); break;
1531 case typeLongLong
: convertToLongLong(dest
, src
, srcType
); break;
1532 case typeShort
: convertToShort(dest
, src
, srcType
); break;
1533 case typeByteInt
: convertToByteInt(dest
, src
, srcType
); break;
1535 case typeFloat
: convertToFloat(dest
, src
, srcType
); break;
1536 case typeDouble
: convertToDouble(dest
, src
, srcType
); break;
1539 case typeDecimal
: convertToDouble(dest
, src
, srcType
); break;
1541 case typeString
: convertToString(dest
, src
, srcType
); break;
1542 case typeBinary
: convertToBinary(dest
, src
, srcType
,length
); break;
1543 case typeDate
: convertToDate(dest
, src
, srcType
); break;
1544 case typeTime
: convertToTime(dest
, src
, srcType
); break;
1545 case typeTimeStamp
: convertToTimeStamp(dest
, src
, srcType
); break;
1550 void AllDataType::convertToInt( void* dest
, void* src
, DataType srcType
)
1554 case typeInt
: *(int *)dest
= *(int *)src
; break;
1555 case typeLong
: *(int *)dest
=(int) *(long *)src
; break;
1556 case typeLongLong
: *(int *)dest
=(int) *(long long *)src
; break;
1557 case typeShort
: *(int *)dest
=(int) *(short *)src
; break;
1558 case typeByteInt
: *(int *)dest
=(int) *(char *)src
; break;
1560 case typeFloat
: *(int *)dest
= (int) *(float *)src
; break;
1561 case typeDouble
: *(int *)dest
=(int) *(double *)src
; break;
1563 case typeString
: sscanf((const char*)src
, "%d", (int*) dest
); break;
1569 default: *(int *)dest
= (int) 0;
1573 void AllDataType::convertToLong( void* dest
, void* src
, DataType srcType
)
1577 case typeInt
: *(long *)dest
=(long) *(int *)src
; break;
1578 case typeLong
: *(long *)dest
= *(long *)src
; break;
1579 case typeLongLong
: *(long *)dest
=(long) *(long long *)src
; break;
1580 case typeShort
: *(long *)dest
=(long) *(short *)src
; break;
1581 case typeByteInt
: *(long *)dest
=(long) *(char *)src
; break;
1583 case typeFloat
: *(long *)dest
= (long) *(float *)src
; break;
1584 case typeDouble
: *(long *)dest
=(long) *(double *)src
; break;
1586 case typeString
: sscanf((const char*)src
, "%ld", (long*) dest
); break;
1592 default: *(long *)dest
= (long) 0;
1597 void AllDataType::convertToLongLong( void* dest
, void* src
, DataType srcType
)
1601 case typeInt
: *(long long *)dest
=(long long) *(int *)src
; break;
1602 case typeLong
: *(long long *)dest
= (long long) *(long *)src
; break;
1603 case typeLongLong
: *(long long *)dest
= *(long long *)src
; break;
1604 case typeShort
: *(long long *)dest
=(long long) *(short *)src
; break;
1605 case typeByteInt
: *(long long *)dest
=(long long) *(char *)src
; break;
1607 case typeFloat
: *(long long *)dest
= (long long) *(float *)src
; break;
1608 case typeDouble
: *(long long *)dest
=(long long) *(double *)src
; break;
1610 case typeString
: sscanf((const char*)src
, "%lld", (long long*) dest
); break;
1616 default: *(long long *)dest
= (long long) 0;
1620 void AllDataType::convertToShort( void* dest
, void* src
, DataType srcType
)
1624 case typeInt
: *(short*)dest
=(short) *(int*)src
; break;
1625 case typeLong
: *(short*)dest
= (short) *(long*)src
; break;
1626 case typeLongLong
: *(short*)dest
= (short) *(long long*)src
; break;
1627 case typeShort
: *(short*)dest
= *(short*)src
; break;
1628 case typeByteInt
: *(short*)dest
=(short) *(char *)src
; break;
1630 case typeFloat
: *(short*)dest
= (short) *(float *)src
; break;
1631 case typeDouble
: *(short*)dest
=(short) *(double *)src
; break;
1633 case typeString
: sscanf((const char*)src
, "%hd", (short*) dest
); break;
1639 default: *(short*)dest
= (short) 0;
1643 void AllDataType::convertToByteInt( void* dest
, void* src
, DataType srcType
)
1647 case typeInt
: *(char*)dest
= (char) *(int*)src
; break;
1648 case typeLong
: *(char*)dest
= (char) *(long*)src
; break;
1649 case typeLongLong
: *(char*)dest
= (char) *(long long*)src
; break;
1650 case typeShort
: *(char*)dest
= (char) *(short*)src
; break;
1651 case typeByteInt
: *(char*)dest
= *(char *)src
; break;
1653 case typeFloat
: *(char*)dest
= (char) *(float *)src
; break;
1654 case typeDouble
: *(char*)dest
=(char) *(double *)src
; break;
1656 case typeString
: sscanf((const char*)src
, "%hhd", (char*) dest
); break;
1662 default: *(char*)dest
= (char) 0;
1666 void AllDataType::convertToFloat( void* dest
, void* src
, DataType srcType
)
1670 case typeInt
: *(float *)dest
=(float) *(int *)src
; break;
1671 case typeLong
: *(float *)dest
=(float) *(long *)src
; break;
1672 case typeLongLong
: *(float *)dest
=(float) *(long long *)src
; break;
1673 case typeShort
: *(float *)dest
=(float) *(short *)src
; break;
1674 case typeByteInt
: *(float *)dest
=(float) *(char *)src
; break;
1676 case typeFloat
: *(float *)dest
= *(float *)src
; break;
1677 case typeDouble
: *(float *)dest
=(float) *(double *)src
; break;
1679 case typeString
: sscanf((const char*)src
, "%f", (float*) dest
); break;
1685 default: *(float *)dest
= (float) 0;
1689 void AllDataType::convertToDouble( void* dest
, void* src
, DataType srcType
)
1693 case typeInt
: *(double *)dest
=(double) *(int *)src
; break;
1694 case typeLong
: *(double *)dest
=(double) *(long *)src
; break;
1695 case typeLongLong
: *(double *)dest
=(double) *(long long *)src
; break;
1696 case typeShort
: *(double *)dest
=(double) *(short *)src
; break;
1697 case typeByteInt
: *(double *)dest
=(double) *(char *)src
; break;
1699 case typeFloat
: *(double *)dest
=(double) *(float *)src
; break;
1700 case typeDouble
: *(double *)dest
= *(double *)src
; break;
1702 case typeString
: sscanf((const char*)src
, "%lf", (double*) dest
); break;
1708 default: *(double *)dest
= (double) 0;
1712 void AllDataType::convertToString( void* dest
, void* src
, DataType srcType
, int length
,TDBInfo tdbname
)
1718 Util::itoa(*(int*)src
, (char*)dest
);
1723 sprintf ((char *)dest
, "%ld", *(long *)src
);
1728 sprintf ((char *)dest
, "%lld", *(long long *)src
);
1733 sprintf ((char *)dest
, "%hd", *(short *)src
);
1738 sprintf ((char *)dest
, "%hhd", *(char *)src
);
1744 sprintf ((char *)dest
, "%f", *(float *)src
);
1749 sprintf ((char *) dest
, "%lf", *(double *)src
);
1755 strcpy((char*)dest
, (char*)src
);
1760 Date
* dt
= (Date
*)src
;
1761 sprintf((char*) dest
, "%d/%d/%d", dt
->year(),dt
->month(), dt
->dayOfMonth());
1766 Time
* tm
= (Time
*)src
;
1767 sprintf((char*)dest
,"%d:%d:%d.%d", tm
->hours(), tm
->minutes(), tm
->seconds(), 0);
1772 TimeStamp
* tm
= (TimeStamp
*)src
;
1773 sprintf((char*)dest
, "%d/%d/%d %d:%d:%d.%d", tm
->year(),tm
->month(), tm
->dayOfMonth(), tm
->hours(),tm
->minutes(), tm
->seconds(), 0 );
1778 unsigned char *c
= (unsigned char *) src
;
1779 unsigned char *str
= (unsigned char *) dest
;
1780 unsigned char p
= 0;
1782 while (i
< length
) {
1784 if (p
< 10) sprintf ((char *)str
++, "%c", '0' + p
);
1785 else sprintf((char *)str
++, "%c", 'A' + p
- 10);
1787 if (p
< 10) sprintf ((char *)str
++, "%c", '0' + p
);
1788 else sprintf((char *)str
++, "%c", 'A' + p
- 10);
1794 default: ((char*)dest
)[0] = '\0';
1798 void AllDataType::convertToDate( void* dest
, void* src
, DataType srcType
)
1814 Date
*dt
= (Date
*) dest
;
1815 dt
->parseFrom((char*)src
);
1818 default: ((char*)dest
)[0] = '\0';
1822 void AllDataType::convertToTime( void* dest
, void* src
, DataType srcType
)
1838 Time
*dt
= (Time
*) dest
;
1839 dt
->parseFrom((char*)src
);
1842 default: ((char*)dest
)[0] = '\0';
1846 void AllDataType::convertToTimeStamp( void* dest
, void* src
, DataType srcType
)
1862 TimeStamp
*dt
= (TimeStamp
*) dest
;
1863 dt
->parseFrom((char*)src
);
1866 default: ((char*)dest
)[0] = '\0';
1870 void AllDataType::convertToBinary(void *dest
, void *src
, DataType srcType
, int length
)
1876 memset ((void *) dest
, 0, length
);
1877 unsigned char c
= 0;
1878 const char *str
= (const char *)src
;
1880 i
= strlen((char*)src
)-1;
1881 if( i
> (length
*2)-1 ){ i
= (length
*2)-1 ; }
1882 bool evenlegth
=false;
1883 if(i
%2){ evenlegth
=true;}
1884 unsigned char *val
= (unsigned char *)dest
+(length
-1);
1887 if (c
<= '9') c
-= '0';
1888 else if (c
>= 'a') c
= c
- 'a' + 10;
1889 else c
= c
- 'A' + 10;
1892 if ((i
+1) % 2) { *val
= *val
| (c
<<4); val
--;}
1895 if (i
% 2) { *val
= *val
| (c
<<4); val
--;}
1904 int AllDataType::printVal(void* src
, DataType srcType
, int length
,int dbFlag
)
1906 //dbFlag is the database flag 0:mysql (default), 1:postgres
1912 count
= printf ("%d", *(int *)src
);
1917 count
= printf ("%ld", *(long *)src
);
1924 convertToLongLong((void*)&temp
, src
,typeString
);
1925 count
= printf ("%lld", temp
);
1927 else count
= printf ("%lld", *(long long *)src
);
1932 count
= printf("%hd", *(short *)src
);
1937 count
= printf("%hhd", *(char *)src
);
1943 count
= printf("%f", *(float *)src
);
1948 if (*(double*)src
> 9999999999999999.0F
)
1949 count
= printf("%g", *(double *)src
);
1951 count
= printf("%lf", *(double *)src
);
1957 count
= printf("%s", (char*)src
);
1962 Date
* dt
= (Date
*)src
;
1963 count
= printf("%d/%d/%d", dt
->year(),
1964 dt
->month(), dt
->dayOfMonth());
1969 Time
* tm
= (Time
*)src
;
1970 count
= printf("%d:%d:%d.%d", tm
->hours(), tm
->minutes(), tm
->seconds(), 0);
1975 TimeStamp
* tm
= (TimeStamp
*)src
;
1976 count
= printf("%d/%d/%d %d:%d:%d.%d", tm
->year(),
1977 tm
->month(), tm
->dayOfMonth(), tm
->hours(),
1978 tm
->minutes(), tm
->seconds(), 0 );
1983 unsigned char *c
= (unsigned char *) src
;
1984 unsigned char p
= 0;
1986 bool isDigitFound
=false;
1987 while (i
< length
) {
1989 if(('0'+p
)!='0'|| isDigitFound
){
1990 if (p
< 10) printf ("%c", '0' + p
);
1991 else printf("%c", 'A' + p
- 10);
1995 if(('0'+p
)!='0' || isDigitFound
){
1996 if (p
< 10) printf ("%c", '0' + p
);
1997 else printf("%c", 'A' + p
- 10);
2005 default: { printf("DataType not supported\n"); break; }