|
35 | 35 | import io.trino.spi.connector.ConnectorTableMetadata; |
36 | 36 | import io.trino.spi.connector.ConnectorTableVersion; |
37 | 37 | import io.trino.spi.connector.ConnectorViewDefinition; |
| 38 | +import io.trino.spi.connector.RelationColumnsMetadata; |
38 | 39 | import io.trino.spi.connector.RetryMode; |
39 | 40 | import io.trino.spi.connector.RowChangeParadigm; |
40 | 41 | import io.trino.spi.connector.SaveMode; |
|
54 | 55 |
|
55 | 56 | import java.util.ArrayList; |
56 | 57 | import java.util.Collection; |
| 58 | +import java.util.HashMap; |
57 | 59 | import java.util.Iterator; |
58 | 60 | import java.util.List; |
59 | 61 | import java.util.Map; |
|
62 | 64 | import java.util.Set; |
63 | 65 | import java.util.concurrent.ConcurrentHashMap; |
64 | 66 | import java.util.function.Function; |
| 67 | +import java.util.function.UnaryOperator; |
65 | 68 |
|
66 | 69 | import static com.google.common.base.Preconditions.checkArgument; |
67 | 70 | import static com.google.common.base.Verify.verify; |
@@ -185,9 +188,32 @@ public Map<SchemaTableName, List<ColumnMetadata>> listTableColumns(ConnectorSess |
185 | 188 | @Override |
186 | 189 | public Iterator<TableColumnsMetadata> streamTableColumns(ConnectorSession session, SchemaTablePrefix prefix) |
187 | 190 | { |
188 | | - return tables.values().stream() |
| 191 | + throw new UnsupportedOperationException("The deprecated streamTableColumns is not supported because streamRelationColumns is implemented instead"); |
| 192 | + } |
| 193 | + |
| 194 | + @Override |
| 195 | + public Iterator<RelationColumnsMetadata> streamRelationColumns( |
| 196 | + ConnectorSession session, |
| 197 | + Optional<String> schemaName, |
| 198 | + UnaryOperator<Set<SchemaTableName>> relationFilter) |
| 199 | + { |
| 200 | + Map<SchemaTableName, RelationColumnsMetadata> relationColumns = new HashMap<>(); |
| 201 | + SchemaTablePrefix prefix = schemaName.map(SchemaTablePrefix::new).orElseGet(SchemaTablePrefix::new); |
| 202 | + |
| 203 | + tables.values().stream() |
189 | 204 | .filter(table -> prefix.matches(table.toSchemaTableName())) |
190 | | - .map(handle -> TableColumnsMetadata.forTable(handle.toSchemaTableName(), handle.toTableMetadata().getColumns())) |
| 205 | + .map(BlackHoleTableHandle::toTableMetadata) |
| 206 | + .forEach(columnsMetadata -> { |
| 207 | + SchemaTableName name = columnsMetadata.getTable(); |
| 208 | + relationColumns.put(name, RelationColumnsMetadata.forTable(name, columnsMetadata.getColumns())); |
| 209 | + }); |
| 210 | + |
| 211 | + for (Map.Entry<SchemaTableName, ConnectorViewDefinition> entry : getViews(session, schemaName).entrySet()) { |
| 212 | + relationColumns.put(entry.getKey(), RelationColumnsMetadata.forView(entry.getKey(), entry.getValue().getColumns())); |
| 213 | + } |
| 214 | + |
| 215 | + return relationFilter.apply(relationColumns.keySet()).stream() |
| 216 | + .map(relationColumns::get) |
191 | 217 | .iterator(); |
192 | 218 | } |
193 | 219 |
|
|
0 commit comments