in src/odbc/rsodbc/rslibpq.c [1362:1559]
short mapPgTypeToSqlType(Oid pgType, short *phRsSpecialType)
{
short sqlType;
if(phRsSpecialType)
*phRsSpecialType = 0;
switch(pgType)
{
case BOOLOID:
{
sqlType = SQL_BIT;
break;
}
case CHAROID:
case BPCHAROID:
{
sqlType = SQL_CHAR;
break;
}
case INT8OID:
case XIDOID:
{
sqlType = SQL_BIGINT;
break;
}
case INT2OID:
{
sqlType = SQL_SMALLINT;
break;
}
case INT4OID:
case OIDOID:
case CIDOID:
{
sqlType = SQL_INTEGER;
break;
}
case FLOAT4OID:
{
sqlType = SQL_REAL;
break;
}
case FLOAT8OID:
{
sqlType = SQL_DOUBLE;
break;
}
case VARCHAROID:
case NAMEOID:
case VOIDOID:
case INT2VECTOROID:
case REGPROCOID:
case TIDOID:
case OIDVECTOROID:
case ABSTIMEOID:
case INT2ARRAYOID:
case INT4ARRAYOID:
case NAMEARRAYOID:
case TEXTARRAYOID:
case FLOAT4ARRAYOID:
case ACLITEMARRAYOID:
case ANYARRAYOID:
case INTERVALOID:
case TEXTOID:
{
sqlType = SQL_VARCHAR;
break;
}
case DATEOID:
{
sqlType = SQL_TYPE_DATE; // SQL_DATE
break;
}
case TIMESTAMPOID:
{
sqlType = SQL_TYPE_TIMESTAMP; // SQL_TIMESTAMP
break;
}
case NUMERICOID:
{
sqlType = SQL_NUMERIC;
break;
}
case REFCURSOROID:
{
sqlType = SQL_VARCHAR;
break;
}
case TIMEOID:
{
sqlType = SQL_TYPE_TIME; // SQL_TIME
break;
}
case TIMETZOID:
{
if(phRsSpecialType)
*phRsSpecialType = TIMETZOID;
sqlType = SQL_TYPE_TIME;
break;
}
case TIMESTAMPTZOID:
{
if (phRsSpecialType)
*phRsSpecialType = TIMESTAMPTZOID;
sqlType = SQL_TYPE_TIMESTAMP;
break;
}
case INTERVALY2MOID:
{
sqlType = SQL_INTERVAL_YEAR_TO_MONTH;
break;
}
case INTERVALD2SOID:
{
sqlType = SQL_INTERVAL_DAY_TO_SECOND;
break;
}
case SUPER:
{
if (phRsSpecialType)
*phRsSpecialType = SUPER;
sqlType = SQL_LONGVARCHAR;
break;
}
case VARBYTE:
{
if (phRsSpecialType)
*phRsSpecialType = VARBYTE;
sqlType = SQL_LONGVARBINARY;
break;
}
case GEOGRAPHY:
{
if (phRsSpecialType)
*phRsSpecialType = GEOGRAPHY;
sqlType = SQL_LONGVARBINARY;
break;
}
case GEOMETRY:
{
if (phRsSpecialType)
*phRsSpecialType = GEOMETRY;
sqlType = SQL_LONGVARBINARY;
break;
}
case GEOMETRYHEX:
{
if (phRsSpecialType)
*phRsSpecialType = GEOMETRYHEX;
sqlType = SQL_LONGVARBINARY;
break;
}
case UNKNOWNOID: // This happens when SELECT as parameter. e.g SELECT $1
{
sqlType = SQL_VARCHAR;
break;
}
default: // Some pg data type in catalog table as such not supported by PADB (e.g. aclitem[]), so map not supported as SQL_VARCHAR.
{
sqlType = SQL_UNKNOWN_TYPE; // SQL_UNKNOWN_TYPE SQL_VARCHAR
break;
}
} // Switch
return sqlType;
}