From 45d1217bc3ba76ef1922e388d36241d2088d8d3d Mon Sep 17 00:00:00 2001 From: Jack Klamer Date: Thu, 8 Dec 2022 12:59:11 -0600 Subject: [PATCH] Unified Materialized View Table Type in information_schema Co-authored-by: liul --- .../InformationSchemaPageSource.java | 13 ++++++++++--- .../java/io/trino/testing/BaseConnectorTest.java | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/core/trino-main/src/main/java/io/trino/connector/informationschema/InformationSchemaPageSource.java b/core/trino-main/src/main/java/io/trino/connector/informationschema/InformationSchemaPageSource.java index 29998ce48fad..c1c5ca958a99 100644 --- a/core/trino-main/src/main/java/io/trino/connector/informationschema/InformationSchemaPageSource.java +++ b/core/trino-main/src/main/java/io/trino/connector/informationschema/InformationSchemaPageSource.java @@ -54,6 +54,7 @@ import static io.trino.connector.informationschema.InformationSchemaMetadata.defaultPrefixes; import static io.trino.connector.informationschema.InformationSchemaMetadata.isTablesEnumeratingTable; import static io.trino.metadata.MetadataListing.getViews; +import static io.trino.metadata.MetadataListing.listMaterializedViews; import static io.trino.metadata.MetadataListing.listSchemas; import static io.trino.metadata.MetadataListing.listTableColumns; import static io.trino.metadata.MetadataListing.listTablePrivileges; @@ -271,12 +272,18 @@ private void addColumnsRecords(QualifiedTablePrefix prefix) private void addTablesRecords(QualifiedTablePrefix prefix) { Set tables = listTables(session, metadata, accessControl, prefix); + Set materializedViews = listMaterializedViews(session, metadata, accessControl, prefix); Set views = listViews(session, metadata, accessControl, prefix); - // TODO (https://github.com/trinodb/trino/issues/8207) define a type for materialized views - for (SchemaTableName name : union(tables, views)) { + for (SchemaTableName name : union(union(tables, materializedViews), views)) { // if table and view names overlap, the view wins - String type = views.contains(name) ? "VIEW" : "BASE TABLE"; + String type = "BASE TABLE"; + if (materializedViews.contains(name)) { + type = "MATERIALIZED VIEW"; + } + else if (views.contains(name)) { + type = "VIEW"; + } addRecord( prefix.getCatalogName(), name.getSchemaName(), diff --git a/testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java b/testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java index 602dbae260b7..1c3399a2da90 100644 --- a/testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java +++ b/testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java @@ -1017,12 +1017,12 @@ public void testMaterializedView() "SELECT table_name, table_type FROM information_schema.tables " + "WHERE table_schema = '" + view.getSchemaName() + "'")) .skippingTypesCheck() - .containsAll("VALUES ('" + view.getObjectName() + "', 'BASE TABLE')"); // TODO table_type should probably be "* VIEW" + .containsAll("VALUES ('" + view.getObjectName() + "', 'MATERIALIZED VIEW')"); // information_schema.tables with table_name filter assertQuery( "SELECT table_name, table_type FROM information_schema.tables " + "WHERE table_schema = '" + view.getSchemaName() + "' and table_name = '" + view.getObjectName() + "'", - "VALUES ('" + view.getObjectName() + "', 'BASE TABLE')"); + "VALUES ('" + view.getObjectName() + "', 'MATERIALIZED VIEW')"); // system.jdbc.tables without filter assertThat(query("SELECT table_schem, table_name, table_type FROM system.jdbc.tables"))