private void listIndexColumns()

in v1/src/main/java/com/google/cloud/teleport/spanner/ddl/InformationSchemaScanner.java [544:614]


  private void listIndexColumns(
      Ddl.Builder builder, Map<String, NavigableMap<String, Index.Builder>> indexes) {
    Statement statement = listIndexColumnsSQL();

    ResultSet resultSet = context.executeQuery(statement);
    while (resultSet.next()) {
      String tableName = getQualifiedName(resultSet.getString(0), resultSet.getString(1));
      String columnName = resultSet.getString(2);
      String ordering = resultSet.isNull(3) ? null : resultSet.getString(3);
      String indexLocalName = resultSet.getString(4);
      String indexType = resultSet.getString(5);
      String spannerType = resultSet.getString(6);

      if (indexLocalName.equals("PRIMARY_KEY")) {
        IndexColumn.IndexColumnsBuilder<Table.Builder> pkBuilder =
            builder.createTable(tableName).primaryKey();
        if (ordering.equalsIgnoreCase("ASC")) {
          pkBuilder.asc(columnName).end();
        } else {
          pkBuilder.desc(columnName).end();
        }
        pkBuilder.end().endTable();
      } else {
        String tokenlistType = dialect == Dialect.POSTGRESQL ? "spanner.tokenlist" : "TOKENLIST";
        if (indexType != null && ordering != null) {
          // Non-tokenlist columns should not be included in the key for Search Indexes.
          if ((indexType.equals("SEARCH") && !spannerType.contains(tokenlistType))
              || (indexType.equals("VECTOR") && !spannerType.startsWith("ARRAY"))) {
            continue;
          }
        }
        Map<String, Index.Builder> tableIndexes = indexes.get(tableName);
        if (tableIndexes == null) {
          continue;
        }
        String indexName =
            dialect == Dialect.POSTGRESQL
                ? indexLocalName
                : getQualifiedName(resultSet.getString(0), indexLocalName);
        Index.Builder indexBuilder = tableIndexes.get(indexName);
        if (indexBuilder == null) {
          LOG.warn("Can not find index using name {}", indexName);
          continue;
        }
        IndexColumn.IndexColumnsBuilder<Index.Builder> indexColumnsBuilder =
            indexBuilder.columns().create().name(columnName);
        // Tokenlist columns do not have ordering.
        if (spannerType != null
            && (spannerType.equals(tokenlistType) || spannerType.startsWith("ARRAY"))) {
          indexColumnsBuilder.none();
        } else if (ordering == null) {
          indexColumnsBuilder.storing();
        } else {
          ordering = ordering.toUpperCase();
          if (ordering.startsWith("ASC")) {
            indexColumnsBuilder.asc();
          }
          if (ordering.startsWith("DESC")) {
            indexColumnsBuilder.desc();
          }
          if (ordering.endsWith("NULLS FIRST")) {
            indexColumnsBuilder.nullsFirst();
          }
          if (ordering.endsWith("NULLS LAST")) {
            indexColumnsBuilder.nullsLast();
          }
        }
        indexColumnsBuilder.endIndexColumn().end();
      }
    }
  }