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 : }
|