145 lines
3.0 KiB
C
145 lines
3.0 KiB
C
/* src/interfaces/ecpg/ecpglib/typename.c */
|
|
|
|
#define POSTGRES_ECPG_INTERNAL
|
|
#include "postgres_fe.h"
|
|
|
|
#include "catalog/pg_type_d.h"
|
|
#include "ecpglib.h"
|
|
#include "ecpglib_extern.h"
|
|
#include "ecpgtype.h"
|
|
#include "sql3types.h"
|
|
#include "sqltypes.h"
|
|
|
|
/*
|
|
* This function is used to generate the correct type names.
|
|
*/
|
|
const char *
|
|
ecpg_type_name(enum ECPGttype typ)
|
|
{
|
|
switch (typ)
|
|
{
|
|
case ECPGt_char:
|
|
case ECPGt_string:
|
|
return "char";
|
|
case ECPGt_unsigned_char:
|
|
return "unsigned char";
|
|
case ECPGt_short:
|
|
return "short";
|
|
case ECPGt_unsigned_short:
|
|
return "unsigned short";
|
|
case ECPGt_int:
|
|
return "int";
|
|
case ECPGt_unsigned_int:
|
|
return "unsigned int";
|
|
case ECPGt_long:
|
|
return "long";
|
|
case ECPGt_unsigned_long:
|
|
return "unsigned long";
|
|
case ECPGt_long_long:
|
|
return "long long";
|
|
case ECPGt_unsigned_long_long:
|
|
return "unsigned long long";
|
|
case ECPGt_float:
|
|
return "float";
|
|
case ECPGt_double:
|
|
return "double";
|
|
case ECPGt_bool:
|
|
return "bool";
|
|
case ECPGt_varchar:
|
|
return "varchar";
|
|
case ECPGt_bytea:
|
|
return "bytea";
|
|
case ECPGt_char_variable:
|
|
return "char";
|
|
case ECPGt_decimal:
|
|
return "decimal";
|
|
case ECPGt_numeric:
|
|
return "numeric";
|
|
case ECPGt_date:
|
|
return "date";
|
|
case ECPGt_timestamp:
|
|
return "timestamp";
|
|
case ECPGt_interval:
|
|
return "interval";
|
|
case ECPGt_const:
|
|
return "Const";
|
|
default:
|
|
abort();
|
|
}
|
|
return ""; /* keep MSC compiler happy */
|
|
}
|
|
|
|
int
|
|
ecpg_dynamic_type(Oid type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case BOOLOID:
|
|
return SQL3_BOOLEAN; /* bool */
|
|
case INT2OID:
|
|
return SQL3_SMALLINT; /* int2 */
|
|
case INT4OID:
|
|
return SQL3_INTEGER; /* int4 */
|
|
case TEXTOID:
|
|
return SQL3_CHARACTER; /* text */
|
|
case FLOAT4OID:
|
|
return SQL3_REAL; /* float4 */
|
|
case FLOAT8OID:
|
|
return SQL3_DOUBLE_PRECISION; /* float8 */
|
|
case BPCHAROID:
|
|
return SQL3_CHARACTER; /* bpchar */
|
|
case VARCHAROID:
|
|
return SQL3_CHARACTER_VARYING; /* varchar */
|
|
case DATEOID:
|
|
return SQL3_DATE_TIME_TIMESTAMP; /* date */
|
|
case TIMEOID:
|
|
return SQL3_DATE_TIME_TIMESTAMP; /* time */
|
|
case TIMESTAMPOID:
|
|
return SQL3_DATE_TIME_TIMESTAMP; /* datetime */
|
|
case NUMERICOID:
|
|
return SQL3_NUMERIC; /* numeric */
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
int
|
|
sqlda_dynamic_type(Oid type, enum COMPAT_MODE compat)
|
|
{
|
|
switch (type)
|
|
{
|
|
case CHAROID:
|
|
case VARCHAROID:
|
|
case BPCHAROID:
|
|
case TEXTOID:
|
|
return ECPGt_char;
|
|
case INT2OID:
|
|
return ECPGt_short;
|
|
case INT4OID:
|
|
return ECPGt_int;
|
|
case FLOAT8OID:
|
|
return ECPGt_double;
|
|
case FLOAT4OID:
|
|
return ECPGt_float;
|
|
case NUMERICOID:
|
|
return INFORMIX_MODE(compat) ? ECPGt_decimal : ECPGt_numeric;
|
|
case DATEOID:
|
|
return ECPGt_date;
|
|
case TIMESTAMPOID:
|
|
case TIMESTAMPTZOID:
|
|
return ECPGt_timestamp;
|
|
case INTERVALOID:
|
|
return ECPGt_interval;
|
|
case INT8OID:
|
|
#ifdef HAVE_LONG_LONG_INT_64
|
|
return ECPGt_long_long;
|
|
#endif
|
|
#ifdef HAVE_LONG_INT_64
|
|
return ECPGt_long;
|
|
#endif
|
|
/* Unhandled types always return a string */
|
|
default:
|
|
return ECPGt_char;
|
|
}
|
|
}
|