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