short mapPgTypeToSqlType()

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;
}