Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2089,15 +2089,30 @@ protected Scope visitTable(Table table, Optional<Scope> 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);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down
Loading