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 ***************************************************************************/
22 DataType
AllDataType::getCsqlTypeFromFunctionType(FunctionType type
)
26 case DATEDIFF
: return typeDate
;
27 case TIMEDIFF
: return typeTime
;
39 case TIMESUBWITHSEC
: return typeInt
;
40 case TIMESTAMPADDWITHYEAR
:
41 case TIMESTAMPADDWITHMON
:
42 case TIMESTAMPADDWITHDAY
:
43 case TIMESTAMPSUBWITHYEAR
:
44 case TIMESTAMPSUBWITHMON
:
45 case TIMESTAMPSUBWITHDAY
:
46 case TIMESTAMPADDWITHHOUR
:
47 case TIMESTAMPADDWITHMIN
:
48 case TIMESTAMPADDWITHSEC
:
49 case TIMESTAMPSUBWITHHOUR
:
50 case TIMESTAMPSUBWITHMIN
:
51 case TIMESTAMPSUBWITHSEC
: return typeInt
;
52 case TIMESTAMPDIFFYEAR
:
53 case TIMESTAMPDIFFMON
:
54 case TIMESTAMPDIFFDAY
:
55 case TIMESTAMPDIFFHOUR
:
56 case TIMESTAMPDIFFMIN
:
57 case TIMESTAMPDIFFSEC
: return typeTimeStamp
;
58 case EXTRACTYEARFROMDAY
:
59 case EXTRACTMONFROMDAY
:
60 case EXTRACTDAYFROMDAY
:return typeDate
;
61 case EXTRACTHOURFROMTIME
:
62 case EXTRACTMINFROMTIME
:
63 case EXTRACTSECFROMTIME
: return typeTime
;
64 case EXTRACTYEARFROMTIMESTAMP
:
65 case EXTRACTMONFROMTIMESTAMP
:
66 case EXTRACTDAYFROMTIMESTAMP
:
67 case EXTRACTHOURFROMTIMESTAMP
:
68 case EXTRACTMINFROMTIMESTAMP
:
69 case EXTRACTSECFROMTIMESTAMP
: return typeTimeStamp
;
70 case DATEFROMTIMESTAMP
: return typeTimeStamp
;
71 case TIMEFROMTIMESTAMP
: return typeTimeStamp
;
72 default: return typeInt
;
75 DataType
AllDataType::getCsqlTypeFromFunctionTypeForComparision(FunctionType type
)
79 case DATEDIFF
: return typeInt
;
80 case DATEADDWITHYEAR
: return typeDate
;
81 case DATEADDWITHMON
: return typeDate
;
82 case DATEADDWITHDAY
: return typeDate
;
83 case DATESUBWITHYEAR
: return typeDate
;
84 case DATESUBWITHMON
: return typeDate
;
85 case DATESUBWITHDAY
: return typeDate
;
86 case TIMEDIFF
: return typeInt
;
87 case TIMEADDWITHHOUR
: return typeTime
;
88 case TIMEADDWITHMIN
: return typeTime
;
89 case TIMEADDWITHSEC
: return typeTime
;
90 case TIMESUBWITHHOUR
: return typeTime
;
91 case TIMESUBWITHMIN
: return typeTime
;
92 case TIMESUBWITHSEC
: return typeTime
;
93 case TIMESTAMPADDWITHYEAR
: return typeTimeStamp
;
94 case TIMESTAMPADDWITHMON
: return typeTimeStamp
;
95 case TIMESTAMPADDWITHDAY
: return typeTimeStamp
;
96 case TIMESTAMPSUBWITHYEAR
: return typeTimeStamp
;
97 case TIMESTAMPSUBWITHMON
: return typeTimeStamp
;
98 case TIMESTAMPSUBWITHDAY
: return typeTimeStamp
;
99 case TIMESTAMPADDWITHHOUR
: return typeTimeStamp
;
100 case TIMESTAMPADDWITHMIN
: return typeTimeStamp
;
101 case TIMESTAMPADDWITHSEC
: return typeTimeStamp
;
102 case TIMESTAMPSUBWITHHOUR
: return typeTimeStamp
;
103 case TIMESTAMPSUBWITHMIN
: return typeTimeStamp
;
104 case TIMESTAMPSUBWITHSEC
: return typeTimeStamp
;
105 case TIMESTAMPDIFFYEAR
:
106 case TIMESTAMPDIFFMON
:
107 case TIMESTAMPDIFFDAY
:
108 case TIMESTAMPDIFFHOUR
:
109 case TIMESTAMPDIFFMIN
:
110 case TIMESTAMPDIFFSEC
:
111 case EXTRACTYEARFROMDAY
:
112 case EXTRACTMONFROMDAY
:
113 case EXTRACTDAYFROMDAY
:
114 case EXTRACTHOURFROMTIME
:
115 case EXTRACTMINFROMTIME
:
116 case EXTRACTSECFROMTIME
:
117 case EXTRACTYEARFROMTIMESTAMP
:
118 case EXTRACTMONFROMTIMESTAMP
:
119 case EXTRACTDAYFROMTIMESTAMP
:
120 case EXTRACTHOURFROMTIMESTAMP
:
121 case EXTRACTMINFROMTIMESTAMP
:
122 case EXTRACTSECFROMTIMESTAMP
:return typeInt
;
123 case DATEFROMTIMESTAMP
: return typeDate
;
124 case TIMEFROMTIMESTAMP
: return typeTime
;
125 default: return typeInt
;
130 char* AllDataType::getSQLString(DataType type
)
134 case typeInt
: return "INT";
135 case typeLong
: return "INT";
136 case typeLongLong
: return "BIGINT";
137 case typeShort
: return "SMALLINT";
138 case typeByteInt
: return "TINYINT";
139 case typeDouble
: return "REAL";
140 case typeFloat
: return "FLOAT";
141 case typeDate
: return "DATE";
142 case typeTime
: return "TIME";
143 case typeTimeStamp
: return "TIMESTAMP";
144 case typeString
: return "CHAR";
145 case typeVarchar
: return "VARCHAR";
146 case typeBinary
: return "BINARY";
147 default: return "UNKNOWN";
152 short AllDataType::convertToSQLType(DataType type
)
176 return SQL_TYPE_DATE
;
178 return SQL_TYPE_TIME
;
180 return SQL_TYPE_TIMESTAMP
;
190 SQLSMALLINT
AllDataType::convertToCSQLSQLType(DataType type
)
214 return SQL_TYPE_DATE
;
216 return SQL_TYPE_TIME
;
218 return SQL_TYPE_TIMESTAMP
;
229 SQLSMALLINT
AllDataType::convertToSQL_C_Type(DataType type
,TDBInfo tdbname
)
239 if(tdbname
== postgres
)
242 return SQL_C_SBIGINT
;
247 return SQL_C_STINYINT
;
256 return SQL_C_TYPE_DATE
;
258 return SQL_C_TYPE_TIME
;
260 return SQL_C_TYPE_TIMESTAMP
;
270 DataType
AllDataType::convertFromSQLType(SQLSMALLINT type
,int length
,int scale
,TDBInfo tdbname
)
272 if(tdbname
==postgres
)
291 case SQL_TYPE_TIMESTAMP
:
292 return typeTimeStamp
;
295 case SQL_LONGVARCHAR
:
323 case SQL_TYPE_TIMESTAMP
:
324 return typeTimeStamp
;
327 case SQL_LONGVARCHAR
:
336 void AllDataType::subVal(void* dest
, void *src
, DataType type
)
341 *(int*)dest
= *(int*)dest
- *(int*)src
;
344 *(long*)dest
= *(long*)dest
- *(long*)src
;
347 *(long long*)dest
= *(long long*)dest
- *(long long*)src
;
350 *(short*)dest
= *(short*)dest
- *(short*)src
;
353 *(char*)dest
= *(char*)dest
- *(char*)src
;
356 *(double*)dest
= *(double*)dest
- *(double*)src
;
359 *(float*)dest
= *(float*)dest
- *(float*)src
;
371 void AllDataType::mulVal(void* dest
, void *src
, DataType type
)
376 *(int*)dest
= *(int*)dest
* (*(int*)src
);
379 *(long*)dest
= *(long*)dest
* (*(long*)src
);
382 *(long long*)dest
= *(long long*)dest
* (*(long long*)src
);
385 *(short*)dest
= *(short*)dest
* (*(short*)src
);
388 *(char*)dest
= *(char*)dest
* (*(char*)src
);
391 *(double*)dest
= *(double*)dest
* (*(double*)src
);
394 *(float*)dest
= *(float*)dest
* (*(float*)src
);
406 void AllDataType::mudVal(void* dest
, void *src
, DataType type
)
410 *(int*)dest
= *(int*)dest
% (*(int*)src
);
416 *(int*)dest
= *(int*)dest
% (*(int*)src
);
419 *(long*)dest
= *(long*)dest
% (*(long*)src
);
422 *(long long*)dest
= *(long long*)dest
% (*(long long*)src
);
425 *(short*)dest
= *(short*)dest
% (*(short*)src
);
428 *(char*)dest
= *(char*)dest
% (*(char*)src
);
431 *(double*)dest
= *(long long*)dest
% (*(long long*)src
);
434 *(float*)dest
= *(int*)dest
% (*(int*)src
);
446 void AllDataType::divVal(void* dest
, void *src
, DataType type
)
450 *(int*)dest
= *(int*)dest
/ (*(int*)src
);
456 *(int*)dest
= *(int*)dest
/ (*(int*)src
);
459 *(long*)dest
= *(long*)dest
/ (*(long*)src
);
462 *(long long*)dest
= *(long long*)dest
/ (*(long long*)src
);
465 *(short*)dest
= *(short*)dest
/ (*(short*)src
);
468 *(char*)dest
= *(char*)dest
/ (*(char*)src
);
471 *(double*)dest
= *(double *)dest
/ (*(double*)src
);
474 *(float*)dest
= *(float*)dest
/ (*(float*)src
);
486 void AllDataType::divVal(double* dest
, int src
, DataType type
)
511 void AllDataType::increment(void* dest
, void *src
, DataType type
)
516 *(int*)dest
= *(int*)src
+ 1;
519 *(long*)dest
= *(long*)src
+ 1;
522 *(long long*)dest
= *(long long*)src
+ 1;
525 *(char*)dest
= *(char*)src
+ 1;
528 *(short*)dest
= *(short*)src
+ 1;
531 *(double*)dest
= *(double*)src
+ 1;
534 *(float*)dest
= *(float*)src
+ 1;
541 bool AllDataType::isValueZero(void *src
, DataType type
)
546 if (*(int*)src
== 0) return true;
549 if (*(int*)src
== 0) return true;
552 if (*(int*)src
== 0) return true;
555 if (*(int*)src
== 0) return true;
558 if (*(int*)src
== 0) return true;
561 if (*(int*)src
== 0) return true;
569 void* AllDataType::alloc(DataType type
, int length
)
575 dest
= malloc(sizeof(int));
578 dest
= malloc(sizeof(long));
581 dest
= malloc(sizeof(long long));
584 dest
= malloc(sizeof(short));
587 dest
= malloc(sizeof(char));
590 dest
= malloc(sizeof(double));
593 dest
= malloc(sizeof(float));
597 //fldDef.length_ = sizeof(long double);
601 if (length
== 0 ) return NULL
;
602 dest
= malloc(length
);
605 if (length
== 0 || length
> 512) return NULL
;
606 dest
= malloc(length
);
607 memset(dest
, 0, length
);
610 dest
= malloc(sizeof(Date
));
613 dest
= malloc(sizeof(Time
));
616 dest
= malloc(sizeof(TimeStamp
));
622 void AllDataType::memoryset(void *value
,DataType type
)
627 value
= ::memset(value
, 0, sizeof(int));
630 value
= ::memset(value
, 0, sizeof(long));
633 value
=::memset(value
, 0, sizeof(long long));
636 value
= ::memset(value
, 0, sizeof(short));
639 value
= ::memset(value
, 0, sizeof(char));
642 value
= ::memset(value
, 0, sizeof(double));
645 value
= ::memset(value
, 0, sizeof(float));
651 *(char*)value
= '\0';
652 //if (length == 0 ) return NULL;
653 //dest = malloc(length);
656 /* if (length == 0 || length > 256 ) return NULL;
658 memset(dest, 0, length);*/
661 value
= ::memset(value
, 0, sizeof(Date
));
664 value
= ::memset(value
, 0, sizeof(Time
));
667 value
= ::memset(value
, 0, sizeof(TimeStamp
));
674 int AllDataType::printVal(void* src
, DataType srcType
, int length
,int dbFlag
)
676 //dbFlag is the database flag 0:mysql (default), 1:postgres
682 count
= printf ("%d", *(int *)src
);
687 count
= printf ("%ld", *(long *)src
);
694 convertToLongLong((void*)&temp
, src
,typeString
);
695 count
= printf ("%lld", temp
);
697 else count
= printf ("%lld", *(long long *)src
);
702 count
= printf("%hd", *(short *)src
);
707 count
= printf("%hhd", *(char *)src
);
713 count
= printf("%f", *(float *)src
);
718 if (*(double*)src
> 9999999999999999.0F
)
719 count
= printf("%g", *(double *)src
);
721 count
= printf("%lf", *(double *)src
);
728 count
= printf("%s", (char*)src
);
733 Date
* dt
= (Date
*)src
;
734 count
= printf("%d/%d/%d", dt
->year(),
735 dt
->month(), dt
->dayOfMonth());
740 Time
* tm
= (Time
*)src
;
741 count
= printf("%d:%d:%d.%d", tm
->hours(), tm
->minutes(), tm
->seconds(), 0);
746 TimeStamp
* tm
= (TimeStamp
*)src
;
747 count
= printf("%d/%d/%d %d:%d:%d.%d", tm
->year(),
748 tm
->month(), tm
->dayOfMonth(), tm
->hours(),
749 tm
->minutes(), tm
->seconds(), 0 );
754 unsigned char *c
= (unsigned char *) src
;
757 bool isDigitFound
=false;
760 if(('0'+p
)!='0'|| isDigitFound
){
761 if (p
< 10) printf ("%c", '0' + p
);
762 else printf("%c", 'A' + p
- 10);
766 if(('0'+p
)!='0' || isDigitFound
){
767 if (p
< 10) printf ("%c", '0' + p
);
768 else printf("%c", 'A' + p
- 10);
776 default: { printf("DataType not supported\n"); break; }