1 // Copyright (c) 1999-2018 David Muse
2 // See the file COPYING for more information.
3
4 #ifndef DATATYPES_H
5 #define DATATYPES_H
6 #include <rudiments/charstring.h>
7
8 extern "C" {
9
10 #define COLUMN_TYPE_IDS 0
11 #define COLUMN_TYPE_NAMES 1
12
13 typedef enum {
14 UNKNOWN_DATATYPE=0,
15 // addded by freetds
16 CHAR_DATATYPE, // 1
17 INT_DATATYPE,
18 SMALLINT_DATATYPE,
19 TINYINT_DATATYPE,
20 MONEY_DATATYPE,
21 DATETIME_DATATYPE,
22 NUMERIC_DATATYPE,
23 DECIMAL_DATATYPE,
24 SMALLDATETIME_DATATYPE,
25 SMALLMONEY_DATATYPE,
26 IMAGE_DATATYPE,
27 BINARY_DATATYPE,
28 BIT_DATATYPE,
29 REAL_DATATYPE,
30 FLOAT_DATATYPE,
31 TEXT_DATATYPE,
32 VARCHAR_DATATYPE,
33 VARBINARY_DATATYPE,
34 LONGCHAR_DATATYPE,
35 LONGBINARY_DATATYPE,
36 LONG_DATATYPE,
37 ILLEGAL_DATATYPE,
38 SENSITIVITY_DATATYPE,
39 BOUNDARY_DATATYPE,
40 VOID_DATATYPE,
41 USHORT_DATATYPE,
42 // added by lago
43 UNDEFINED_DATATYPE, // 27
44 DOUBLE_DATATYPE,
45 DATE_DATATYPE,
46 TIME_DATATYPE,
47 TIMESTAMP_DATATYPE,
48 // added by msql
49 UINT_DATATYPE, // 32
50 LASTREAL_DATATYPE,
51 // added by mysql
52 STRING_DATATYPE, // 34
53 VARSTRING_DATATYPE,
54 LONGLONG_DATATYPE,
55 MEDIUMINT_DATATYPE,
56 YEAR_DATATYPE,
57 NEWDATE_DATATYPE,
58 NULL_DATATYPE,
59 ENUM_DATATYPE,
60 SET_DATATYPE,
61 TINY_BLOB_DATATYPE,
62 MEDIUM_BLOB_DATATYPE,
63 LONG_BLOB_DATATYPE,
64 BLOB_DATATYPE,
65 // added by oracle
66 VARCHAR2_DATATYPE, // 47
67 NUMBER_DATATYPE,
68 ROWID_DATATYPE,
69 RAW_DATATYPE,
70 LONG_RAW_DATATYPE,
71 MLSLABEL_DATATYPE,
72 CLOB_DATATYPE,
73 BFILE_DATATYPE,
74 // added by odbc
75 BIGINT_DATATYPE, // 55
76 INTEGER_DATATYPE,
77 LONGVARBINARY_DATATYPE,
78 LONGVARCHAR_DATATYPE,
79 // added by db2
80 GRAPHIC_DATATYPE, // 59
81 VARGRAPHIC_DATATYPE,
82 LONGVARGRAPHIC_DATATYPE,
83 DBCLOB_DATATYPE,
84 DATALINK_DATATYPE,
85 USER_DEFINED_TYPE_DATATYPE,
86 SHORT_DATATYPE,
87 TINY_DATATYPE,
88 // added by firebird
89 D_FLOAT_DATATYPE, // 67
90 ARRAY_DATATYPE,
91 QUAD_DATATYPE,
92 INT64_DATATYPE,
93 DOUBLE_PRECISION_DATATYPE,
94 // added by postgresql
95 BOOL_DATATYPE,
96 BYTEA_DATATYPE,
97 NAME_DATATYPE,
98 INT8_DATATYPE,
99 INT2_DATATYPE,
100 INT2VECTOR_DATATYPE,
101 INT4_DATATYPE,
102 REGPROC_DATATYPE,
103 OID_DATATYPE,
104 TID_DATATYPE,
105 XID_DATATYPE,
106 CID_DATATYPE,
107 OIDVECTOR_DATATYPE,
108 SMGR_DATATYPE,
109 POINT_DATATYPE,
110 LSEG_DATATYPE,
111 PATH_DATATYPE,
112 BOX_DATATYPE,
113 POLYGON_DATATYPE,
114 LINE_DATATYPE,
115 _LINE_DATATYPE,
116 FLOAT4_DATATYPE,
117 FLOAT8_DATATYPE,
118 ABSTIME_DATATYPE,
119 RELTIME_DATATYPE,
120 TINTERVAL_DATATYPE,
121 CIRCLE_DATATYPE,
122 _CIRCLE_DATATYPE,
123 _MONEY_DATATYPE,
124 MACADDR_DATATYPE,
125 INET_DATATYPE,
126 CIDR_DATATYPE,
127 _BOOL_DATATYPE,
128 _BYTEA_DATATYPE,
129 _CHAR_DATATYPE,
130 _NAME_DATATYPE,
131 _INT2_DATATYPE,
132 _INT2VECTOR_DATATYPE,
133 _INT4_DATATYPE,
134 _REGPROC_DATATYPE,
135 _TEXT_DATATYPE,
136 _OID_DATATYPE,
137 _TID_DATATYPE,
138 _XID_DATATYPE,
139 _CID_DATATYPE,
140 _OIDVECTOR_DATATYPE,
141 _BPCHAR_DATATYPE,
142 _VARCHAR_DATATYPE,
143 _INT8_DATATYPE,
144 _POINT_DATATYPE,
145 _LSEG_DATATYPE,
146 _PATH_DATATYPE,
147 _BOX_DATATYPE,
148 _FLOAT4_DATATYPE,
149 _FLOAT8_DATATYPE,
150 _ABSTIME_DATATYPE,
151 _RELTIME_DATATYPE,
152 _TINTERVAL_DATATYPE,
153 _POLYGON_DATATYPE,
154 ACLITEM_DATATYPE,
155 _ACLITEM_DATATYPE,
156 _MACADDR_DATATYPE,
157 _INET_DATATYPE,
158 _CIDR_DATATYPE,
159 BPCHAR_DATATYPE,
160 _TIMESTAMP_DATATYPE,
161 _DATE_DATATYPE,
162 _TIME_DATATYPE,
163 TIMESTAMPTZ_DATATYPE,
164 _TIMESTAMPTZ_DATATYPE,
165 INTERVAL_DATATYPE,
166 _INTERVAL_DATATYPE,
167 _NUMERIC_DATATYPE,
168 TIMETZ_DATATYPE,
169 _TIMETZ_DATATYPE,
170 _BIT_DATATYPE,
171 VARBIT_DATATYPE,
172 _VARBIT_DATATYPE,
173 REFCURSOR_DATATYPE,
174 _REFCURSOR_DATATYPE,
175 REGPROCEDURE_DATATYPE,
176 REGOPER_DATATYPE,
177 REGOPERATOR_DATATYPE,
178 REGCLASS_DATATYPE,
179 REGTYPE_DATATYPE,
180 _REGPROCEDURE_DATATYPE,
181 _REGOPER_DATATYPE,
182 _REGOPERATOR_DATATYPE,
183 _REGCLASS_DATATYPE,
184 _REGTYPE_DATATYPE,
185 RECORD_DATATYPE,
186 CSTRING_DATATYPE,
187 ANY_DATATYPE,
188 ANYARRAY_DATATYPE,
189 TRIGGER_DATATYPE,
190 LANGUAGE_HANDLER_DATATYPE,
191 INTERNAL_DATATYPE,
192 OPAQUE_DATATYPE,
193 ANYELEMENT_DATATYPE,
194 PG_TYPE_DATATYPE,
195 PG_ATTRIBUTE_DATATYPE,
196 PG_PROC_DATATYPE,
197 PG_CLASS_DATATYPE,
198 // none added by sqlite
199 // added by sqlserver
200 UBIGINT_DATATYPE,
201 UNIQUEIDENTIFIER_DATATYPE,
202 // added by informix
203 SMALLFLOAT_DATATYPE,
204 BYTE_DATATYPE,
205 BOOLEAN_DATATYPE,
206 // also added by mysql
207 TINYTEXT_DATATYPE,
208 MEDIUMTEXT_DATATYPE,
209 LONGTEXT_DATATYPE,
210 JSON_DATATYPE,
211 GEOMETRY_DATATYPE,
212 // also added by oracle
213 SDO_GEOMETRY_DATATYPE,
214 // added by mssql
215 NCHAR_DATATYPE,
216 NVARCHAR_DATATYPE,
217 NTEXT_DATATYPE,
218 XML_DATATYPE,
219 DATETIMEOFFSET_DATATYPE,
220 END_DATATYPE
221 } datatype;
222
223 #ifdef NEED_DATATYPESTRING
224 static const char *datatypestring[] = {
225 "UNKNOWN",
226 // addded by freetds
227 "CHAR", // 1
228 "INT",
229 "SMALLINT",
230 "TINYINT",
231 "MONEY",
232 "DATETIME",
233 "NUMERIC",
234 "DECIMAL",
235 "SMALLDATETIME",
236 "SMALLMONEY",
237 "IMAGE",
238 "BINARY",
239 "BIT",
240 "REAL",
241 "FLOAT",
242 "TEXT",
243 "VARCHAR",
244 "VARBINARY",
245 "LONGCHAR",
246 "LONGBINARY",
247 "LONG",
248 "ILLEGAL",
249 "SENSITIVITY",
250 "BOUNDARY",
251 "VOID",
252 "USHORT",
253 // added by lago
254 "UNDEFINED", // 27
255 "DOUBLE",
256 "DATE",
257 "TIME",
258 "TIMESTAMP",
259 // added by msql
260 "UINT", // 32
261 "LASTREAL",
262 // added by mysql
263 "STRING", // 34
264 "VARSTRING",
265 "LONGLONG",
266 "MEDIUMINT",
267 "YEAR",
268 "NEWDATE",
269 "NULL",
270 "ENUM",
271 "SET",
272 "TINYBLOB",
273 "MEDIUMBLOB",
274 "LONGBLOB",
275 "BLOB",
276 // added by oracle
277 "VARCHAR2", // 47
278 "NUMBER",
279 "ROWID",
280 "RAW",
281 "LONG_RAW",
282 "MLSLABEL",
283 "CLOB",
284 "BFILE",
285 // added by odbc
286 "BIGINT", // 55
287 "INTEGER",
288 "LONGVARBINARY",
289 "LONGVARCHAR",
290 // added by db2
291 "GRAPHIC", // 59
292 "VARGRAPHIC",
293 "LONGVARGRAPHIC",
294 "DBCLOB",
295 "DATALINK",
296 "USER_DEFINED_TYPE",
297 "SHORT",
298 "TINY",
299 // added by firebird
300 "D_FLOAT", // 67
301 "ARRAY",
302 "QUAD",
303 "INT64",
304 "DOUBLE PRECISION",
305 // added by postgresql
306 "BOOL",
307 "BYTEA",
308 "NAME",
309 "INT8",
310 "INT2",
311 "INT2VECTOR",
312 "INT4",
313 "REGPROC",
314 "OID",
315 "TID",
316 "XID",
317 "CID",
318 "OIDVECTOR",
319 "SMGR",
320 "POINT",
321 "LSEG",
322 "PATH",
323 "BOX",
324 "POLYGON",
325 "LINE",
326 "LINE_ARRAY",
327 "FLOAT4",
328 "FLOAT8",
329 "ABSTIME",
330 "RELTIME",
331 "TINTERVAL",
332 "CIRCLE",
333 "CIRCLE_ARRAY",
334 "MONEY_ARRAY",
335 "MACADDR",
336 "INET",
337 "CIDR",
338 "BOOL_ARRAY",
339 "BYTEA_ARRAY",
340 "CHAR_ARRAY",
341 "NAME_ARRAY",
342 "INT2_ARRAY",
343 "INT2VECTOR_ARRAY",
344 "INT4_ARRAY",
345 "REGPROC_ARRAY",
346 "TEXT_ARRAY",
347 "OID_ARRAY",
348 "TID_ARRAY",
349 "XID_ARRAY",
350 "CID_ARRAY",
351 "OIDVECTOR_ARRAY",
352 "BPCHAR_ARRAY",
353 "VARCHAR_ARRAY",
354 "INT8_ARRAY",
355 "POINT_ARRAY",
356 "LSEG_ARRAY",
357 "PATH_ARRAY",
358 "BOX_ARRAY",
359 "FLOAT4_ARRAY",
360 "FLOAT8_ARRAY",
361 "ABSTIME_ARRAY",
362 "RELTIME_ARRAY",
363 "TINTERVAL_ARRAY",
364 "POLYGON_ARRAY",
365 "ACLITEM",
366 "ACLITEM_ARRAY",
367 "MACADDR_ARRAY",
368 "INET_ARRAY",
369 "CIDR_ARRAY",
370 "BPCHAR",
371 "TIMESTAMP_ARRAY",
372 "DATE_ARRAY",
373 "TIME_ARRAY",
374 "TIMESTAMPTZ",
375 "TIMESTAMPTZ_ARRAY",
376 "INTERVAL",
377 "INTERVAL_ARRAY",
378 "NUMERIC_ARRAY",
379 "TIMETZ",
380 "TIMETZ_ARRAY",
381 "BIT_ARRAY",
382 "VARBIT",
383 "VARBIT_ARRAY",
384 "REFCURSOR",
385 "REFCURSOR_ARRAY",
386 "REGPROCEDURE",
387 "REGOPER",
388 "REGOPERATOR",
389 "REGCLASS",
390 "REGTYPE",
391 "REGPROCEDURE_ARRAY",
392 "REGOPER_ARRAY",
393 "REGOPERATOR_ARRAY",
394 "REGCLASS_ARRAY",
395 "REGTYPE_ARRAY",
396 "RECORD",
397 "CSTRING",
398 "ANY",
399 "ANYARRAY",
400 "TRIGGER",
401 "LANGUAGE_HANDLER",
402 "INTERNAL",
403 "OPAQUE",
404 "ANYELEMENT",
405 "PG_TYPE",
406 "PG_ATTRIBUTE",
407 "PG_PROC",
408 "PG_CLASS",
409 // none added by sqlite
410 // added by sqlserver
411 "UBIGINT",
412 "UNIQUEIDENTIFIER",
413 // added by informix
414 "SMALLFLOAT",
415 "BYTE",
416 "BOOLEAN",
417 // also added by mysql
418 "TINYTEXT",
419 "MEDIUMTEXT",
420 "LONGTEXT",
421 "JSON",
422 "GEOMETRY",
423 // also added by oracle
424 "SDO_GEOMETRY",
425 // added by mssql
426 "NCHAR",
427 "NVARCHAR",
428 "NTEXT",
429 "XML",
430 "DATETIMEOFFSET",
431 NULL
432 };
433 #endif
434
435 #ifdef NEED_IS_BIT_TYPE_CHAR
isBitTypeChar(const char * type)436 static bool isBitTypeChar(const char *type) {
437 return (!charstring::compareIgnoringCase(type,"BIT") ||
438 !charstring::compareIgnoringCase(type,"VARBIT"));
439 }
440 #endif
441
442 #ifdef NEED_IS_BIT_TYPE_INT
isBitTypeInt(int16_t type)443 static bool isBitTypeInt(int16_t type) {
444 return (type==BIT_DATATYPE ||
445 type==VARBIT_DATATYPE);
446 }
447 #endif
448
449 #ifdef NEED_IS_BOOL_TYPE_CHAR
isBoolTypeChar(const char * type)450 static bool isBoolTypeChar(const char *type) {
451 return !charstring::compareIgnoringCase(type,"BOOL");
452 }
453 #endif
454
455 #ifdef NEED_IS_BOOL_TYPE_INT
isBoolTypeInt(int16_t type)456 static bool isBoolTypeInt(int16_t type) {
457 return (type==BOOL_DATATYPE);
458 }
459 #endif
460
461 #ifdef NEED_IS_FLOAT_TYPE_CHAR
isFloatTypeChar(const char * type)462 static bool isFloatTypeChar(const char *type) {
463 return (!charstring::compareIgnoringCase(type,"NUMERIC") ||
464 !charstring::compareIgnoringCase(type,"REAL") ||
465 !charstring::compareIgnoringCase(type,"FLOAT") ||
466 !charstring::compareIgnoringCase(type,"DOUBLE") ||
467 !charstring::compareIgnoringCase(type,"D_FLOAT") ||
468 !charstring::compareIgnoringCase(type,"DECIMAL") ||
469 !charstring::compareIgnoringCase(type,"MONEY") ||
470 !charstring::compareIgnoringCase(type,"SMALLMONEY") ||
471 !charstring::compareIgnoringCase(type,"DOUBLE PRECISION") ||
472 !charstring::compareIgnoringCase(type,"FLOAT4") ||
473 !charstring::compareIgnoringCase(type,"FLOAT8") ||
474 !charstring::compareIgnoringCase(type,"_NUMERIC"));
475 }
476 #endif
477
478 #ifdef NEED_IS_NONSCALE_FLOAT_TYPE_CHAR
isNonScaleFloatTypeChar(const char * type)479 static bool isNonScaleFloatTypeChar(const char *type) {
480 return (!charstring::compareIgnoringCase(type,"REAL") ||
481 !charstring::compareIgnoringCase(type,"FLOAT") ||
482 !charstring::compareIgnoringCase(type,"DOUBLE") ||
483 !charstring::compareIgnoringCase(type,"D_FLOAT") ||
484 !charstring::compareIgnoringCase(type,"DOUBLE PRECISION") ||
485 !charstring::compareIgnoringCase(type,"FLOAT4") ||
486 !charstring::compareIgnoringCase(type,"FLOAT8"));
487 }
488 #endif
489
490 #ifdef NEED_IS_FLOAT_TYPE_INT
isFloatTypeInt(int16_t type)491 static bool isFloatTypeInt(int16_t type) {
492 return (type==NUMERIC_DATATYPE ||
493 type==REAL_DATATYPE ||
494 type==FLOAT_DATATYPE ||
495 type==DOUBLE_DATATYPE ||
496 type==D_FLOAT_DATATYPE ||
497 type==DECIMAL_DATATYPE ||
498 type==MONEY_DATATYPE ||
499 type==SMALLMONEY_DATATYPE ||
500 type==DOUBLE_PRECISION_DATATYPE ||
501 type==FLOAT4_DATATYPE ||
502 type==FLOAT8_DATATYPE ||
503 type==_NUMERIC_DATATYPE);
504 }
505 #endif
506
507 #ifdef NEED_BIT_STRING_TO_LONG
bitStringToLong(const char * str)508 static int32_t bitStringToLong(const char *str) {
509 uint32_t result=0;
510 size_t length=charstring::length(str);
511 for (size_t i=0; i<length; i++) {
512 result=(result<<1)|(str[i]=='1');
513 }
514 return result;
515 }
516 #endif
517
518 #ifdef NEED_IS_NUMBER_TYPE_CHAR
isNumberTypeChar(const char * type)519 static bool isNumberTypeChar(const char *type) {
520 return (!charstring::compareIgnoringCase(type,"NUMBER") ||
521 !charstring::compareIgnoringCase(type,"INT") ||
522 !charstring::compareIgnoringCase(type,"SMALLINT") ||
523 !charstring::compareIgnoringCase(type,"TINYINT") ||
524 !charstring::compareIgnoringCase(type,"REAL") ||
525 !charstring::compareIgnoringCase(type,"FLOAT") ||
526 !charstring::compareIgnoringCase(type,"USHORT") ||
527 !charstring::compareIgnoringCase(type,"DOUBLE") ||
528 !charstring::compareIgnoringCase(type,"UINT") ||
529 !charstring::compareIgnoringCase(type,"LASTREAL") ||
530 !charstring::compareIgnoringCase(type,"TINY") ||
531 !charstring::compareIgnoringCase(type,"SHORT") ||
532 !charstring::compareIgnoringCase(type,"LONGLONG") ||
533 !charstring::compareIgnoringCase(type,"MEDIUMINT") ||
534 !charstring::compareIgnoringCase(type,"YEAR") ||
535 !charstring::compareIgnoringCase(type,"BIGINT") ||
536 !charstring::compareIgnoringCase(type,"INTEGER") ||
537 !charstring::compareIgnoringCase(type,"D_FLOAT") ||
538 !charstring::compareIgnoringCase(type,"DECIMAL") ||
539 !charstring::compareIgnoringCase(type,"INT64") ||
540 !charstring::compareIgnoringCase(type,"MONEY") ||
541 !charstring::compareIgnoringCase(type,"SMALLMONEY") ||
542 !charstring::compareIgnoringCase(type,"DOUBLE PRECISION") ||
543 !charstring::compareIgnoringCase(type,"INT8") ||
544 !charstring::compareIgnoringCase(type,"INT2") ||
545 !charstring::compareIgnoringCase(type,"INT4") ||
546 !charstring::compareIgnoringCase(type,"OID") ||
547 !charstring::compareIgnoringCase(type,"TID") ||
548 !charstring::compareIgnoringCase(type,"XID") ||
549 !charstring::compareIgnoringCase(type,"CID") ||
550 !charstring::compareIgnoringCase(type,"FLOAT4") ||
551 !charstring::compareIgnoringCase(type,"FLOAT8") ||
552 !charstring::compareIgnoringCase(type,"TINTERVAL") ||
553 !charstring::compareIgnoringCase(type,"_MONEY") ||
554 !charstring::compareIgnoringCase(type,"_INT2") ||
555 !charstring::compareIgnoringCase(type,"_INT4") ||
556 !charstring::compareIgnoringCase(type,"_oid") ||
557 !charstring::compareIgnoringCase(type,"_TID") ||
558 !charstring::compareIgnoringCase(type,"_XID") ||
559 !charstring::compareIgnoringCase(type,"_CID") ||
560 !charstring::compareIgnoringCase(type,"_INT8") ||
561 !charstring::compareIgnoringCase(type,"_FLOAT4") ||
562 !charstring::compareIgnoringCase(type,"_FLOAT8") ||
563 !charstring::compareIgnoringCase(type,"_TINTERVAL") ||
564 !charstring::compareIgnoringCase(type,"INTERVAL") ||
565 !charstring::compareIgnoringCase(type,"_INTERVAL") ||
566 !charstring::compareIgnoringCase(type,"NUMERIC"));
567 }
568 #endif
569
570 #ifdef NEED_IS_NUMBER_TYPE_INT
isNumberTypeInt(int16_t type)571 static bool isNumberTypeInt(int16_t type) {
572 return (type==NUMBER_DATATYPE ||
573 type==INT_DATATYPE ||
574 type==SMALLINT_DATATYPE ||
575 type==TINYINT_DATATYPE ||
576 type==BIT_DATATYPE ||
577 type==REAL_DATATYPE ||
578 type==FLOAT_DATATYPE ||
579 type==USHORT_DATATYPE ||
580 type==DOUBLE_DATATYPE ||
581 type==UINT_DATATYPE ||
582 type==LASTREAL_DATATYPE ||
583 type==TINY_DATATYPE ||
584 type==SHORT_DATATYPE ||
585 type==LONGLONG_DATATYPE ||
586 type==MEDIUMINT_DATATYPE ||
587 type==YEAR_DATATYPE ||
588 type==BIGINT_DATATYPE ||
589 type==INTEGER_DATATYPE ||
590 type==D_FLOAT_DATATYPE ||
591 type==DECIMAL_DATATYPE ||
592 type==INT64_DATATYPE ||
593 type==MONEY_DATATYPE ||
594 type==SMALLMONEY_DATATYPE ||
595 type==DOUBLE_PRECISION_DATATYPE ||
596 type==INT8_DATATYPE ||
597 type==INT2_DATATYPE ||
598 type==INT4_DATATYPE ||
599 type==TID_DATATYPE ||
600 type==XID_DATATYPE ||
601 type==CID_DATATYPE ||
602 type==FLOAT4_DATATYPE ||
603 type==FLOAT8_DATATYPE ||
604 type==TINTERVAL_DATATYPE ||
605 type==_MONEY_DATATYPE ||
606 type==_INT2_DATATYPE ||
607 type==_INT4_DATATYPE ||
608 type==_TID_DATATYPE ||
609 type==_XID_DATATYPE ||
610 type==_CID_DATATYPE ||
611 type==_INT8_DATATYPE ||
612 type==_FLOAT4_DATATYPE ||
613 type==_FLOAT8_DATATYPE ||
614 type==_TINTERVAL_DATATYPE ||
615 type==INTERVAL_DATATYPE ||
616 type==_INTERVAL_DATATYPE ||
617 type==NUMERIC_DATATYPE);
618 }
619 #endif
620
621 #ifdef NEED_IS_BLOB_TYPE_CHAR
isBlobTypeChar(const char * type)622 static bool isBlobTypeChar(const char *type) {
623 return (!charstring::compareIgnoringCase(type,"IMAGE") ||
624 !charstring::compareIgnoringCase(type,"BINARY") ||
625 !charstring::compareIgnoringCase(type,"VARBINARY") ||
626 !charstring::compareIgnoringCase(type,"LONGCHAR") ||
627 !charstring::compareIgnoringCase(type,"LONGBINARY") ||
628 !charstring::compareIgnoringCase(type,"LONG") ||
629 !charstring::compareIgnoringCase(type,"TINYBLOB") ||
630 !charstring::compareIgnoringCase(type,"MEDIUMBLOB") ||
631 !charstring::compareIgnoringCase(type,"LONGBLOB") ||
632 !charstring::compareIgnoringCase(type,"BLOB") ||
633 !charstring::compareIgnoringCase(type,"LONGVARBINARY") ||
634 !charstring::compareIgnoringCase(type,"LONGVARCHAR") ||
635 !charstring::compareIgnoringCase(type,"RAW") ||
636 !charstring::compareIgnoringCase(type,"LONG_RAW") ||
637 !charstring::compareIgnoringCase(type,"CLOB") ||
638 !charstring::compareIgnoringCase(type,"BFILE") ||
639 !charstring::compareIgnoringCase(type,"DBCLOB") ||
640 !charstring::compareIgnoringCase(type,"TINYTEXT") ||
641 !charstring::compareIgnoringCase(type,"MEDIUMTEXT") ||
642 !charstring::compareIgnoringCase(type,"LONGTEXT") ||
643 !charstring::compareIgnoringCase(type,"JSON") ||
644 !charstring::compareIgnoringCase(type,"GEOMETRY") ||
645 !charstring::compareIgnoringCase(type,"SDO_GEOMETRY") ||
646 !charstring::compareIgnoringCase(type,"NTEXT") ||
647 !charstring::compareIgnoringCase(type,"XML") ||
648 !charstring::compareIgnoringCase(type,"GRAPHIC") ||
649 !charstring::compareIgnoringCase(type,"VARGRAPHIC") ||
650 !charstring::compareIgnoringCase(type,"LONGVARGRAPHIC") ||
651 !charstring::compareIgnoringCase(type,"DBCLOB"));
652 }
653 #endif
654
655 #ifdef NEED_IS_BLOB_TYPE_INT
isBlobTypeInt(int16_t type)656 static bool isBlobTypeInt(int16_t type) {
657 return (type==IMAGE_DATATYPE ||
658 type==BINARY_DATATYPE ||
659 type==VARBINARY_DATATYPE ||
660 type==LONGCHAR_DATATYPE ||
661 type==LONGBINARY_DATATYPE ||
662 type==LONG_DATATYPE ||
663 type==TINY_BLOB_DATATYPE ||
664 type==MEDIUM_BLOB_DATATYPE ||
665 type==LONG_BLOB_DATATYPE ||
666 type==BLOB_DATATYPE ||
667 type==RAW_DATATYPE ||
668 type==LONG_RAW_DATATYPE ||
669 type==CLOB_DATATYPE ||
670 type==BFILE_DATATYPE ||
671 type==DBCLOB_DATATYPE ||
672 type==TINYTEXT_DATATYPE ||
673 type==MEDIUMTEXT_DATATYPE ||
674 type==LONGTEXT_DATATYPE ||
675 type==JSON_DATATYPE ||
676 type==GEOMETRY_DATATYPE ||
677 type==SDO_GEOMETRY_DATATYPE);
678 }
679 #endif
680
681 #ifdef NEED_IS_UNSIGNED_TYPE_CHAR
isUnsignedTypeChar(const char * type)682 static bool isUnsignedTypeChar(const char *type) {
683 return (!charstring::compareIgnoringCase(type,"USHORT") ||
684 !charstring::compareIgnoringCase(type,"UINT")||
685 !charstring::compareIgnoringCase(type,"YEAR") ||
686 !charstring::compareIgnoringCase(type,"TIMESTAMP"));
687 }
688 #endif
689
690 #ifdef NEED_IS_UNSIGNED_TYPE_INT
isUnsignedTypeInt(int16_t type)691 static bool isUnsignedTypeInt(int16_t type) {
692 return (type==USHORT_DATATYPE ||
693 type==UINT_DATATYPE ||
694 type==YEAR_DATATYPE ||
695 type==TIMESTAMP_DATATYPE);
696 }
697 #endif
698
699 #ifdef NEED_IS_BINARY_TYPE_CHAR
isBinaryTypeChar(const char * type)700 static bool isBinaryTypeChar(const char *type) {
701 return (!charstring::compareIgnoringCase(type,"IMAGE") ||
702 !charstring::compareIgnoringCase(type,"BINARY") ||
703 !charstring::compareIgnoringCase(type,"VARBINARY") ||
704 !charstring::compareIgnoringCase(type,"LONGBINARY") ||
705 !charstring::compareIgnoringCase(type,"TINYBLOB") ||
706 !charstring::compareIgnoringCase(type,"MEDIUMBLOB") ||
707 !charstring::compareIgnoringCase(type,"LONGBLOB") ||
708 !charstring::compareIgnoringCase(type,"BLOB") ||
709 !charstring::compareIgnoringCase(type,"BFILE") ||
710 !charstring::compareIgnoringCase(type,"LONGVARBINARY") ||
711 !charstring::compareIgnoringCase(type,"GRAPHIC") ||
712 !charstring::compareIgnoringCase(type,"VARGRAPHIC") ||
713 !charstring::compareIgnoringCase(type,"LONGVARGRAPHIC") ||
714 !charstring::compareIgnoringCase(type,"OID") ||
715 !charstring::compareIgnoringCase(type,"_OID") ||
716 !charstring::compareIgnoringCase(type,"OIDVECTOR") ||
717 !charstring::compareIgnoringCase(type,"_BYTEA") ||
718 !charstring::compareIgnoringCase(type,"TIMESTAMP") ||
719 !charstring::compareIgnoringCase(type,"DATE") ||
720 !charstring::compareIgnoringCase(type,"TIME") ||
721 !charstring::compareIgnoringCase(type,"DATETIME") ||
722 !charstring::compareIgnoringCase(type,"NEWDATE"));
723 }
724 #endif
725
726 #ifdef NEED_IS_BINARY_TYPE_INT
isBinaryTypeInt(int16_t type)727 static bool isBinaryTypeInt(int16_t type) {
728 return (type==IMAGE_DATATYPE ||
729 type==BINARY_DATATYPE ||
730 type==VARBINARY_DATATYPE ||
731 type==LONGBINARY_DATATYPE ||
732 type==TINY_BLOB_DATATYPE ||
733 type==MEDIUM_BLOB_DATATYPE ||
734 type==LONG_BLOB_DATATYPE ||
735 type==BLOB_DATATYPE ||
736 type==BFILE_DATATYPE ||
737 type==LONGVARBINARY_DATATYPE ||
738 type==GRAPHIC_DATATYPE ||
739 type==VARGRAPHIC_DATATYPE ||
740 type==LONGVARGRAPHIC_DATATYPE ||
741 type==OID_DATATYPE ||
742 type==_OID_DATATYPE ||
743 type==OIDVECTOR_DATATYPE ||
744 type==_BYTEA_DATATYPE ||
745 type==TIMESTAMP_DATATYPE ||
746 type==DATE_DATATYPE ||
747 type==TIME_DATATYPE ||
748 type==DATETIME_DATATYPE ||
749 type==NEWDATE_DATATYPE);
750 }
751 #endif
752
753 #ifdef NEED_IS_DATETIME_TYPE_CHAR
isDateTimeTypeChar(const char * type)754 static bool isDateTimeTypeChar(const char *type) {
755 return (!charstring::compareIgnoringCase(type,"DATETIME") ||
756 !charstring::compareIgnoringCase(type,"SMALLDATETIME") ||
757 !charstring::compareIgnoringCase(type,"DATE") ||
758 !charstring::compareIgnoringCase(type,"TIME") ||
759 !charstring::compareIgnoringCase(type,"TIMESTAMP") ||
760 !charstring::compareIgnoringCase(type,"NEWDATE") ||
761 !charstring::compareIgnoringCase(type,"DATETIMEOFFSET"));
762 }
763 #endif
764
765 #ifdef NEED_IS_DATETIME_TYPE_INT
isDateTimeTypeInt(int16_t type)766 static bool isDateTimeTypeInt(int16_t type) {
767 return (type==DATETIME_DATATYPE ||
768 type==SMALLDATETIME_DATATYPE ||
769 type==DATE_DATATYPE ||
770 type==TIME_DATATYPE ||
771 type==TIMESTAMP_DATATYPE ||
772 type==NEWDATE_DATATYPE);
773 }
774 #endif
775
776 }
777
778 #endif
779