public Type toMetacatType()

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