From 6f9c58fcc9304a1e8eca954c9b4a6e69bdc71641 Mon Sep 17 00:00:00 2001 From: Jiaqi Zhang Date: Thu, 13 Nov 2025 22:21:48 -0800 Subject: [PATCH] [do not merge] testing pr (#26622) Summary: Pull Request resolved: https://github.com/prestodb/presto/pull/26622 Differential Revision: D87036805 --- .../sql/analyzer/StatementAnalyzer.java | 29 ++++++--- .../memory/TestMemoryMaterializedViews.java | 61 ------------------- 2 files changed, 22 insertions(+), 68 deletions(-) diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java b/presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java index 56ba447d30fe3..b3ceb03408ccd 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java @@ -2089,15 +2089,30 @@ protected Scope visitTable(Table table, Optional scope) optionalMaterializedView.get().getTable()); } Statement statement = analysis.getStatement(); - if (isMaterializedViewDataConsistencyEnabled(session) && optionalMaterializedView.isPresent() && statement instanceof Query) { - // When the materialized view has already been expanded, do not process it. Just use it as a table. - MaterializedViewAnalysisState materializedViewAnalysisState = analysis.getMaterializedViewAnalysisState(table); + if (optionalMaterializedView.isPresent() && statement instanceof Query) { + if (isMaterializedViewDataConsistencyEnabled(session)) { + // When the materialized view has already been expanded, do not process it. Just use it as a table. + MaterializedViewAnalysisState materializedViewAnalysisState = analysis.getMaterializedViewAnalysisState(table); - if (materializedViewAnalysisState.isNotVisited()) { - return processMaterializedView(table, name, scope, optionalMaterializedView.get()); + if (materializedViewAnalysisState.isNotVisited()) { + return processMaterializedView(table, name, scope, optionalMaterializedView.get()); + } + if (materializedViewAnalysisState.isVisited()) { + throw new SemanticException(MATERIALIZED_VIEW_IS_RECURSIVE, table, "Materialized view is recursive"); + } } - if (materializedViewAnalysisState.isVisited()) { - throw new SemanticException(MATERIALIZED_VIEW_IS_RECURSIVE, table, "Materialized view is recursive"); + else { + // when stitching is not enabled, still check permission of each base table + MaterializedViewDefinition materializedViewDefinition = optionalMaterializedView.get(); + analysis.getAccessControlReferences().addMaterializedViewDefinitionReference(name, materializedViewDefinition); + + Query viewQuery = (Query) sqlParser.createStatement( + materializedViewDefinition.getOriginalSql(), + createParsingOptions(session, warningCollector)); + + analysis.registerMaterializedViewForAnalysis(name, table, materializedViewDefinition.getOriginalSql()); + process(viewQuery, scope); + analysis.unregisterMaterializedViewForAnalysis(table); } } diff --git a/presto-memory/src/test/java/com/facebook/presto/plugin/memory/TestMemoryMaterializedViews.java b/presto-memory/src/test/java/com/facebook/presto/plugin/memory/TestMemoryMaterializedViews.java index ea9423cd94bfe..92bd9d12605d0 100644 --- a/presto-memory/src/test/java/com/facebook/presto/plugin/memory/TestMemoryMaterializedViews.java +++ b/presto-memory/src/test/java/com/facebook/presto/plugin/memory/TestMemoryMaterializedViews.java @@ -532,67 +532,6 @@ public void testMaterializedViewBecomesUnqueryableAfterBaseTableRenamed() assertUpdate("DROP TABLE rename_base_new"); } - @Test - public void testMaterializedViewWithDataConsistencyDisabledAfterBaseTableDropped() - { - assertUpdate("CREATE TABLE drop_consistency_test (id BIGINT, value VARCHAR)"); - assertUpdate("INSERT INTO drop_consistency_test VALUES (1, 'initial'), (2, 'data')", 2); - - assertUpdate("CREATE MATERIALIZED VIEW mv_drop_consistency AS SELECT id, value FROM drop_consistency_test"); - - assertUpdate("REFRESH MATERIALIZED VIEW mv_drop_consistency", 2); - - Session session = Session.builder(getSession()) - .setSystemProperty("materialized_view_data_consistency_enabled", "false") - .build(); - - assertQuery(session, "SELECT COUNT(*) FROM mv_drop_consistency", "SELECT 2"); - assertQuery(session, "SELECT * FROM mv_drop_consistency ORDER BY id", - "VALUES (1, 'initial'), (2, 'data')"); - - assertUpdate("DROP TABLE drop_consistency_test"); - - assertQuery(session, "SELECT COUNT(*) FROM mv_drop_consistency", "SELECT 2"); - assertQuery(session, "SELECT * FROM mv_drop_consistency ORDER BY id", - "VALUES (1, 'initial'), (2, 'data')"); - - assertQueryFails("REFRESH MATERIALIZED VIEW mv_drop_consistency", - ".*Table .* does not exist.*"); - - assertUpdate("DROP MATERIALIZED VIEW mv_drop_consistency"); - } - - @Test - public void testMaterializedViewWithDataConsistencyDisabledAfterBaseTableRenamed() - { - assertUpdate("CREATE TABLE rename_consistency_test (id BIGINT, value VARCHAR)"); - assertUpdate("INSERT INTO rename_consistency_test VALUES (1, 'initial'), (2, 'data')", 2); - - assertUpdate("CREATE MATERIALIZED VIEW mv_rename_consistency AS SELECT id, value FROM rename_consistency_test"); - - assertUpdate("REFRESH MATERIALIZED VIEW mv_rename_consistency", 2); - - Session session = Session.builder(getSession()) - .setSystemProperty("materialized_view_data_consistency_enabled", "false") - .build(); - - assertQuery(session, "SELECT COUNT(*) FROM mv_rename_consistency", "SELECT 2"); - assertQuery(session, "SELECT * FROM mv_rename_consistency ORDER BY id", - "VALUES (1, 'initial'), (2, 'data')"); - - assertUpdate("ALTER TABLE rename_consistency_test RENAME TO rename_consistency_test_new"); - - assertQuery(session, "SELECT COUNT(*) FROM mv_rename_consistency", "SELECT 2"); - assertQuery(session, "SELECT * FROM mv_rename_consistency ORDER BY id", - "VALUES (1, 'initial'), (2, 'data')"); - - assertQueryFails("REFRESH MATERIALIZED VIEW mv_rename_consistency", - ".*Table .* does not exist.*"); - - assertUpdate("DROP MATERIALIZED VIEW mv_rename_consistency"); - assertUpdate("DROP TABLE rename_consistency_test_new"); - } - @Test public void testRefreshMaterializedViewWithWhereClause() {