public static String toPostgresTypeString()

in baremaps-calcite/src/main/java/org/apache/baremaps/calcite/postgres/PostgresTypeConversion.java [106:164]


  public static String toPostgresTypeString(RelDataType type) {
    // Handle record types (structs)
    if (type.isStruct()) {
      // For struct types, use JSONB in PostgreSQL
      return "JSONB";
    }

    SqlTypeName typeName = type.getSqlTypeName();
    switch (typeName) {
      case INTEGER:
        return "INTEGER";
      case BIGINT:
        return "BIGINT";
      case SMALLINT:
        return "SMALLINT";
      case TINYINT:
        return "SMALLINT";
      case FLOAT:
        return "REAL";
      case DOUBLE:
      case DECIMAL:
        return "DOUBLE PRECISION";
      case BOOLEAN:
        return "BOOLEAN";
      case VARCHAR:
      case CHAR:
        int precision = type.getPrecision();
        if (precision == RelDataType.PRECISION_NOT_SPECIFIED) {
          return "TEXT";
        } else {
          return typeName == SqlTypeName.VARCHAR
              ? "VARCHAR(" + precision + ")"
              : "CHAR(" + precision + ")";
        }
      case DATE:
        return "DATE";
      case TIMESTAMP:
        return "TIMESTAMP";
      case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
        return "TIMESTAMP WITH TIME ZONE";
      case TIME:
        return "TIME";
      case TIME_WITH_LOCAL_TIME_ZONE:
        return "TIME WITH LOCAL TIME ZONE";
      case BINARY:
      case VARBINARY:
        return "BYTEA";
      case GEOMETRY:
        return "GEOMETRY";
      case ARRAY:
        return toPostgresTypeString(type.getComponentType()) + "[]";
      case OTHER:
        // For JSON/JSONB and other types
        return "JSONB";
      default:
        // Default to TEXT for unknown types
        return "TEXT";
    }
  }