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)17ecpg_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)73ecpg_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)107sqlda_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