in metacat-connector-postgresql/src/main/java/com/netflix/metacat/connector/postgresql/PostgreSqlTypeConverter.java [52:177]
public Type toMetacatType(@Nonnull @NonNull final String type) {
// See: https://www.postgresql.org/docs/current/static/datatype.html
final String lowerType = type.toLowerCase();
// Split up the possible type: TYPE[(size, magnitude)] EXTRA
final String[] splitType = this.splitType(lowerType);
final Type elementType;
switch (splitType[0]) {
case "smallint":
case "int2":
elementType = BaseType.SMALLINT;
break;
case "int":
case "integer":
case "int4":
elementType = BaseType.INT;
break;
case "int8":
case "bigint":
elementType = BaseType.BIGINT;
break;
case "decimal":
case "numeric":
elementType = this.toMetacatDecimalType(splitType);
break;
case "real":
case "float4":
elementType = BaseType.FLOAT;
break;
case "double precision":
case "float8":
elementType = BaseType.DOUBLE;
break;
case "character varying":
case "varchar":
elementType = this.toMetacatVarcharType(splitType);
break;
case "character":
case "char":
elementType = this.toMetacatCharType(splitType);
break;
case "text":
elementType = BaseType.STRING;
break;
case "bytea":
elementType = VarbinaryType.createVarbinaryType(Integer.MAX_VALUE);
break;
case "timestamp":
elementType = this.toMetacatTimestampType(splitType);
break;
case "timestampz":
elementType = BaseType.TIMESTAMP_WITH_TIME_ZONE;
break;
case "date":
elementType = BaseType.DATE;
break;
case "time":
elementType = this.toMetacatTimeType(splitType);
break;
case "timez":
elementType = BaseType.TIME_WITH_TIME_ZONE;
break;
case "boolean":
case "bool":
elementType = BaseType.BOOLEAN;
break;
case "bit":
case "bit varying":
case "varbit":
elementType = this.toMetacatBitType(splitType);
break;
case "json":
elementType = BaseType.JSON;
break;
case "smallserial":
case "serial2":
case "serial":
case "serial4":
case "bigserial":
case "serial8":
case "money":
case "interval":
case "enum":
case "point":
case "line":
case "lseg":
case "box":
case "path":
case "polygon":
case "circle":
case "cidr":
case "inet":
case "macaddr":
case "tsvector":
case "tsquery":
case "uuid":
case "xml":
case "int4range":
case "int8range":
case "numrange":
case "tsrange":
case "tstzrange":
case "daterange":
case "oid":
case "regproc":
case "regprocedure":
case "regoper":
case "regoperator":
case "regclass":
case "regtype":
case "regrole":
case "regnamespace":
case "regconfig":
case "regdictionary":
case "pg_lsn":
case "jsonb":
case "txid_snapshot":
default:
// TODO: Will catch complex types but not sure how to parse beyond that right now, may be recursive?
// https://www.postgresql.org/docs/current/static/rowtypes.html
log.info("Encountered {} type. Returning unknown type", splitType[0]);
return BaseType.UNKNOWN;
}
return this.checkForArray(splitType, elementType);
}