private static String replaceGetTablesQuery()

in src/main/java/com/google/cloud/spanner/pgadapter/statements/JdbcMetadataStatementHelper.java [244:326]


  private static String replaceGetTablesQuery(String sql, String replacedSql) {
    int startIndex;
    String wherePrefix = "WHERE c.relnamespace = n.oid";
    if (sql.contains(wherePrefix)) {
      startIndex = sql.indexOf(wherePrefix) + wherePrefix.length();
    } else {
      return sql;
    }
    replacedSql += " WHERE TRUE " + sql.substring(startIndex);
    return replacedSql
        .replaceFirst(" AND current_database\\(\\) = '.*?'", "")
        .replace(" AND n.nspname LIKE ", " AND TABLE_SCHEMA LIKE ")
        .replace(" AND c.relname LIKE ", " AND TABLE_NAME LIKE ")
        .replace(
            "c.relkind = 'r' AND n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'TABLE'")
        .replace(
            "c.relkind = 'p' AND n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'TABLE'")
        .replace(
            "c.relkind IN ('r','p') AND n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'TABLE'")
        .replace(
            "c.relkind = 'p' AND n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'TABLE'")
        .replace(
            "c.relkind = 'v' AND n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'VIEW'")
        .replace(
            "c.relkind = 'i' AND n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'INDEX'")
        .replace(
            "c.relkind = 'I' AND n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'INDEX'")
        .replace(
            "c.relkind = 'S' AND n.nspname ~ '^pg_temp_'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'TEMP SEQUENCE'")
        .replace(
            "c.relkind = 'S'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'SEQUENCE'")
        .replace(
            "c.relkind = 'c' AND n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'TYPE'")
        .replace(
            "c.relkind = 'r' AND (n.nspname = 'pg_catalog' OR n.nspname = 'information_schema')",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'SYSTEM TABLE'")
        .replace(
            "c.relkind = 'r' AND n.nspname = 'pg_toast'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'SYSTEM TOAST TABLE'")
        .replace(
            "c.relkind = 'i' AND n.nspname = 'pg_toast'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'SYSTEM TOAST INDEX'")
        .replace(
            "c.relkind = 'v' AND (n.nspname = 'pg_catalog' OR n.nspname = 'information_schema')",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'SYSTEM VIEW'")
        .replace(
            "c.relkind = 'i' AND (n.nspname = 'pg_catalog' OR n.nspname = 'information_schema')",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'SYSTEM INDEX'")
        .replace(
            "c.relkind IN ('r','p') AND n.nspname ~ '^pg_temp_'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'TEMP TABLE'")
        .replace(
            "c.relkind = 'r' AND n.nspname ~ '^pg_temp_'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'TEMP TABLE'")
        .replace(
            "c.relkind = 'i' AND n.nspname ~ '^pg_temp_'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'TEMP INDEX'")
        .replace(
            "c.relkind = 'v' AND n.nspname ~ '^pg_temp_'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'TEMP VIEW'")
        .replace(
            "c.relkind = 'S' AND n.nspname ~ '^pg_temp_'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'TEMP SEQUENCE'")
        .replace(
            "c.relkind = 'f'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'FOREIGN TABLE'")
        .replace(
            "c.relkind = 'm'",
            "(CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'TABLE' ELSE TABLE_TYPE END) = 'MATERIALIZED VIEW'")
        .replace(
            "ORDER BY TABLE_TYPE,TABLE_SCHEM,TABLE_NAME",
            "ORDER BY TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME");
  }