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 : case ECPGt_char:
22 : case ECPGt_string:
23 0 : return "char";
24 : case ECPGt_unsigned_char:
25 0 : return "unsigned char";
26 : case ECPGt_short:
27 0 : return "short";
28 : case ECPGt_unsigned_short:
29 0 : return "unsigned short";
30 : case ECPGt_int:
31 0 : return "int";
32 : case ECPGt_unsigned_int:
33 0 : return "unsigned int";
34 : case ECPGt_long:
35 0 : return "long";
36 : case ECPGt_unsigned_long:
37 0 : return "unsigned long";
38 : case ECPGt_long_long:
39 0 : return "long long";
40 : case ECPGt_unsigned_long_long:
41 0 : return "unsigned long long";
42 : case ECPGt_float:
43 0 : return "float";
44 : case ECPGt_double:
45 0 : return "double";
46 : case ECPGt_bool:
47 0 : return "bool";
48 : case ECPGt_varchar:
49 0 : return "varchar";
50 : case ECPGt_bytea:
51 0 : return "bytea";
52 : case ECPGt_char_variable:
53 0 : return "char";
54 : case ECPGt_decimal:
55 0 : return "decimal";
56 : case ECPGt_numeric:
57 0 : return "numeric";
58 : case ECPGt_date:
59 0 : return "date";
60 : case ECPGt_timestamp:
61 0 : return "timestamp";
62 : case ECPGt_interval:
63 0 : return "interval";
64 : case ECPGt_const:
65 0 : return "Const";
66 : default:
67 0 : abort();
68 : }
69 : return ""; /* keep MSC compiler happy */
70 0 : }
71 :
72 : int
73 0 : ecpg_dynamic_type(Oid type)
74 : {
75 0 : switch (type)
76 : {
77 : case BOOLOID:
78 0 : return SQL3_BOOLEAN; /* bool */
79 : case INT2OID:
80 0 : return SQL3_SMALLINT; /* int2 */
81 : case INT4OID:
82 0 : return SQL3_INTEGER; /* int4 */
83 : case TEXTOID:
84 0 : return SQL3_CHARACTER; /* text */
85 : case FLOAT4OID:
86 0 : return SQL3_REAL; /* float4 */
87 : case FLOAT8OID:
88 0 : return SQL3_DOUBLE_PRECISION; /* float8 */
89 : case BPCHAROID:
90 0 : return SQL3_CHARACTER; /* bpchar */
91 : case VARCHAROID:
92 0 : return SQL3_CHARACTER_VARYING; /* varchar */
93 : case DATEOID:
94 0 : return SQL3_DATE_TIME_TIMESTAMP; /* date */
95 : case TIMEOID:
96 0 : return SQL3_DATE_TIME_TIMESTAMP; /* time */
97 : case TIMESTAMPOID:
98 0 : return SQL3_DATE_TIME_TIMESTAMP; /* datetime */
99 : case NUMERICOID:
100 0 : return SQL3_NUMERIC; /* numeric */
101 : default:
102 0 : return 0;
103 : }
104 0 : }
105 :
106 : int
107 0 : sqlda_dynamic_type(Oid type, enum COMPAT_MODE compat)
108 : {
109 0 : switch (type)
110 : {
111 : case CHAROID:
112 : case VARCHAROID:
113 : case BPCHAROID:
114 : case TEXTOID:
115 0 : return ECPGt_char;
116 : case INT2OID:
117 0 : return ECPGt_short;
118 : case INT4OID:
119 0 : return ECPGt_int;
120 : case FLOAT8OID:
121 0 : return ECPGt_double;
122 : case FLOAT4OID:
123 0 : return ECPGt_float;
124 : case NUMERICOID:
125 0 : return INFORMIX_MODE(compat) ? ECPGt_decimal : ECPGt_numeric;
126 : case DATEOID:
127 0 : return ECPGt_date;
128 : case TIMESTAMPOID:
129 : case TIMESTAMPTZOID:
130 0 : return ECPGt_timestamp;
131 : case INTERVALOID:
132 0 : return ECPGt_interval;
133 : case INT8OID:
134 : #if SIZEOF_LONG == 8
135 0 : 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 : default:
143 0 : return ECPGt_char;
144 : }
145 0 : }
|