Skip to content
Merged
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 @@ -416,7 +416,9 @@ private CopyInResult doCopyIn(Plan plan, @Nullable Group targetGroup, @Nullable
throw new IllegalStateException("Insert a plan into targetGroup but differ in logicalproperties");
}
// TODO Support sync materialized view in the future
if (plan instanceof CatalogRelation && ((CatalogRelation) plan).getTable() instanceof MTMV) {
if (plan instanceof LogicalPlan && plan instanceof CatalogRelation
&& ((CatalogRelation) plan).getTable() instanceof MTMV
&& !plan.getGroupExpression().isPresent()) {
refreshVersion.incrementAndGet();
}
Optional<GroupExpression> groupExpr = plan.getGroupExpression();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public class StructInfoMap {
return structInfo;
}
if (groupExpressionMap.isEmpty() || !groupExpressionMap.containsKey(tableMap)) {
refresh(group, memo.getRefreshVersion(), foldTableMap);
refresh(group, memo.getRefreshVersion());
group.getstructInfoMap().setRefreshVersion(memo.getRefreshVersion());
}
if (groupExpressionMap.containsKey(tableMap)) {
Expand Down Expand Up @@ -118,7 +118,10 @@ private Plan constructPlan(GroupExpression groupExpression, List<BitSet> childre
* @param group the root group
*
*/
public void refresh(Group group, long refreshVersion, BitSet targetBitSet) {
public void refresh(Group group, long memoVersion) {
if (memoVersion == group.getstructInfoMap().refreshVersion) {
return;
}
Set<Integer> refreshedGroup = new HashSet<>();
for (GroupExpression groupExpression : group.getLogicalExpressions()) {
List<Set<BitSet>> childrenTableMap = new LinkedList<>();
Expand All @@ -129,10 +132,9 @@ public void refresh(Group group, long refreshVersion, BitSet targetBitSet) {
}
for (Group child : groupExpression.children()) {
StructInfoMap childStructInfoMap = child.getstructInfoMap();
if (!refreshedGroup.contains(child.getGroupId().asInt())
&& refreshVersion != childStructInfoMap.getRefreshVersion()) {
childStructInfoMap.refresh(child, refreshVersion, targetBitSet);
childStructInfoMap.setRefreshVersion(refreshVersion);
if (!refreshedGroup.contains(child.getGroupId().asInt())) {
childStructInfoMap.refresh(child, memoVersion);
childStructInfoMap.setRefreshVersion(memoVersion);
}
refreshedGroup.add(child.getGroupId().asInt());
childrenTableMap.add(child.getstructInfoMap().getTableMaps());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,7 @@ public static List<StructInfo> extractStructInfo(Plan plan, CascadesContext casc
StructInfoMap structInfoMap = ownerGroup.getstructInfoMap();
if (cascadesContext.getMemo().getRefreshVersion() != structInfoMap.getRefreshVersion()
|| structInfoMap.getTableMaps().isEmpty()) {
structInfoMap.refresh(ownerGroup, cascadesContext.getMemo().getRefreshVersion(),
materializedViewTableSet);
structInfoMap.refresh(ownerGroup, cascadesContext.getMemo().getRefreshVersion());
structInfoMap.setRefreshVersion(cascadesContext.getMemo().getRefreshVersion());
}
Set<BitSet> queryTableSets = structInfoMap.getTableMaps();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ void testTableMap() throws Exception {
Group root = c1.getMemo().getRoot();
Set<BitSet> tableMaps = root.getstructInfoMap().getTableMaps();
Assertions.assertTrue(tableMaps.isEmpty());
root.getstructInfoMap().refresh(root, 1, new BitSet());
root.getstructInfoMap().refresh(root, 1);
Assertions.assertEquals(1, tableMaps.size());
new MockUp<MTMVRelationManager>() {
@Mock
Expand All @@ -76,7 +76,7 @@ public boolean isMVPartitionValid(MTMV mtmv, ConnectContext ctx) {
.optimize()
.printlnBestPlanTree();
root = c1.getMemo().getRoot();
root.getstructInfoMap().refresh(root, 1, new BitSet());
root.getstructInfoMap().refresh(root, 1);
tableMaps = root.getstructInfoMap().getTableMaps();
Assertions.assertEquals(2, tableMaps.size());
dropMvByNereids("drop materialized view mv1");
Expand All @@ -97,8 +97,8 @@ void testLazyRefresh() throws Exception {
Group root = c1.getMemo().getRoot();
Set<BitSet> tableMaps = root.getstructInfoMap().getTableMaps();
Assertions.assertTrue(tableMaps.isEmpty());
root.getstructInfoMap().refresh(root, 1, new BitSet());
root.getstructInfoMap().refresh(root, 1, new BitSet());
root.getstructInfoMap().refresh(root, 1);
root.getstructInfoMap().refresh(root, 1);
Assertions.assertEquals(1, tableMaps.size());
new MockUp<MTMVRelationManager>() {
@Mock
Expand All @@ -124,8 +124,8 @@ public boolean isMVPartitionValid(MTMV mtmv, ConnectContext ctx) {
.optimize()
.printlnBestPlanTree();
root = c1.getMemo().getRoot();
root.getstructInfoMap().refresh(root, 1, new BitSet());
root.getstructInfoMap().refresh(root, 1, new BitSet());
root.getstructInfoMap().refresh(root, 1);
root.getstructInfoMap().refresh(root, 1);
tableMaps = root.getstructInfoMap().getTableMaps();
Assertions.assertEquals(2, tableMaps.size());
dropMvByNereids("drop materialized view mv1");
Expand Down Expand Up @@ -162,7 +162,7 @@ public boolean isMVPartitionValid(MTMV mtmv, ConnectContext ctx) {
.rewrite()
.optimize();
Group root = c1.getMemo().getRoot();
root.getstructInfoMap().refresh(root, 1, new BitSet());
root.getstructInfoMap().refresh(root, 1);
StructInfoMap structInfoMap = root.getstructInfoMap();
Assertions.assertEquals(2, structInfoMap.getTableMaps().size());
BitSet mvMap = structInfoMap.getTableMaps().stream()
Expand Down