Branch data Line data Source code
1 : : /* src/interfaces/ecpg/ecpglib/typename.c */
2 : :
3 : : #define POSTGRES_ECPG_INTERNAL
4 : : #include "postgres_fe.h"
5 : :
6 : : #include "catalog/pg_type_d.h"
7 : : #include "ecpglib.h"
8 : : #include "ecpglib_extern.h"
9 : : #include "ecpgtype.h"
10 : : #include "sql3types.h"
11 : : #include "sqltypes.h"
12 : :
13 : : /*
14 : : * This function is used to generate the correct type names.
15 : : */
16 : : const char *
17 : 0 : ecpg_type_name(enum ECPGttype typ)
18 : : {
19 [ # # # # : 0 : switch (typ)
# # # # #
# # # # #
# # # # #
# # # # ]
20 : : {
21 : 0 : case ECPGt_char:
22 : : case ECPGt_string:
23 : 0 : return "char";
24 : 0 : case ECPGt_unsigned_char:
25 : 0 : return "unsigned char";
26 : 0 : case ECPGt_short:
27 : 0 : return "short";
28 : 0 : case ECPGt_unsigned_short:
29 : 0 : return "unsigned short";
30 : 0 : case ECPGt_int:
31 : 0 : return "int";
32 : 0 : case ECPGt_unsigned_int:
33 : 0 : return "unsigned int";
34 : 0 : case ECPGt_long:
35 : 0 : return "long";
36 : 0 : case ECPGt_unsigned_long:
37 : 0 : return "unsigned long";
38 : 0 : case ECPGt_long_long:
39 : 0 : return "long long";
40 : 0 : case ECPGt_unsigned_long_long:
41 : 0 : return "unsigned long long";
42 : 0 : case ECPGt_float:
43 : 0 : return "float";
44 : 0 : case ECPGt_double:
45 : 0 : return "double";
46 : 0 : case ECPGt_bool:
47 : 0 : return "bool";
48 : 0 : case ECPGt_varchar:
49 : 0 : return "varchar";
50 : 0 : case ECPGt_bytea:
51 : 0 : return "bytea";
52 : 0 : case ECPGt_char_variable:
53 : 0 : return "char";
54 : 0 : case ECPGt_decimal:
55 : 0 : return "decimal";
56 : 0 : case ECPGt_numeric:
57 : 0 : return "numeric";
58 : 0 : case ECPGt_date:
59 : 0 : return "date";
60 : 0 : case ECPGt_timestamp:
61 : 0 : return "timestamp";
62 : 0 : case ECPGt_interval:
63 : 0 : return "interval";
64 : 0 : case ECPGt_const:
65 : 0 : return "Const";
66 : 0 : default:
67 : 0 : abort();
68 : : }
69 : : return ""; /* keep MSC compiler happy */
70 : : }
71 : :
72 : : int
73 : 76 : ecpg_dynamic_type(Oid type)
74 : : {
75 [ + - + + : 76 : switch (type)
- + + - +
- - - + ]
76 : : {
77 : 8 : case BOOLOID:
78 : 8 : return SQL3_BOOLEAN; /* bool */
79 : 0 : case INT2OID:
80 : 0 : return SQL3_SMALLINT; /* int2 */
81 : 8 : case INT4OID:
82 : 8 : return SQL3_INTEGER; /* int4 */
83 : 8 : case TEXTOID:
84 : 8 : return SQL3_CHARACTER; /* text */
85 : 0 : case FLOAT4OID:
86 : 0 : return SQL3_REAL; /* float4 */
87 : 8 : case FLOAT8OID:
88 : 8 : return SQL3_DOUBLE_PRECISION; /* float8 */
89 : 8 : case BPCHAROID:
90 : 8 : return SQL3_CHARACTER; /* bpchar */
91 : 0 : case VARCHAROID:
92 : 0 : return SQL3_CHARACTER_VARYING; /* varchar */
93 : 8 : case DATEOID:
94 : 8 : return SQL3_DATE_TIME_TIMESTAMP; /* date */
95 : 0 : case TIMEOID:
96 : 0 : return SQL3_DATE_TIME_TIMESTAMP; /* time */
97 : 0 : case TIMESTAMPOID:
98 : 0 : return SQL3_DATE_TIME_TIMESTAMP; /* datetime */
99 : 0 : case NUMERICOID:
100 : 0 : return SQL3_NUMERIC; /* numeric */
101 : 28 : default:
102 : 28 : return 0;
103 : : }
104 : : }
105 : :
106 : : int
107 : 504 : sqlda_dynamic_type(Oid type, enum COMPAT_MODE compat)
108 : : {
109 [ + - + + : 504 : switch (type)
- + - - -
+ - ]
110 : : {
111 : 188 : case CHAROID:
112 : : case VARCHAROID:
113 : : case BPCHAROID:
114 : : case TEXTOID:
115 : 188 : return ECPGt_char;
116 : 0 : case INT2OID:
117 : 0 : return ECPGt_short;
118 : 104 : case INT4OID:
119 : 104 : return ECPGt_int;
120 : 80 : case FLOAT8OID:
121 : 80 : return ECPGt_double;
122 : 0 : case FLOAT4OID:
123 : 0 : return ECPGt_float;
124 : 84 : case NUMERICOID:
125 [ + + - + ]: 84 : return INFORMIX_MODE(compat) ? ECPGt_decimal : ECPGt_numeric;
126 : 0 : case DATEOID:
127 : 0 : return ECPGt_date;
128 : 0 : case TIMESTAMPOID:
129 : : case TIMESTAMPTZOID:
130 : 0 : return ECPGt_timestamp;
131 : 0 : case INTERVALOID:
132 : 0 : return ECPGt_interval;
133 : 48 : case INT8OID:
134 : : #if SIZEOF_LONG == 8
135 : 48 : return ECPGt_long;
136 : : #elif SIZEOF_LONG_LONG == 8
137 : : return ECPGt_long_long;
138 : : #else
139 : : #error "cannot find integer type of the same size as INT8OID"
140 : : #endif
141 : : /* Unhandled types always return a string */
142 : 0 : default:
143 : 0 : return ECPGt_char;
144 : : }
145 : : }
|