Skip to content

Commit ef25363

Browse files
committed
Filter duplicate edges during preparation
1 parent 12b53e9 commit ef25363

File tree

1 file changed

+14
-1
lines changed
  • rust/cubesql/cubesql/egraph-debug-template/src

1 file changed

+14
-1
lines changed

rust/cubesql/cubesql/egraph-debug-template/src/index.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ function prepareStates(states: InputData): Array<PreparedStateData> {
113113
}),
114114
);
115115

116-
let edges = egraph.enodes
116+
const allEdges = egraph.enodes
117117
.map((node) => {
118118
return {
119119
source: node.eclass.toString(),
@@ -130,6 +130,19 @@ function prepareStates(states: InputData): Array<PreparedStateData> {
130130
});
131131
}),
132132
);
133+
// Same eclass can be present as child for a single enode multiple times
134+
// E.g. CubeScanFilters([CubeScanFilters([]), CubeScanFilters([])])
135+
// Both internal nodes are same eclass
136+
// This will lead to duplicated edges and non-uniq ids
137+
const uniqueEdges = new Map();
138+
for (const edge of allEdges) {
139+
const key = JSON.stringify(edge);
140+
if (uniqueEdges.get(key)) {
141+
continue;
142+
}
143+
uniqueEdges.set(key, edge);
144+
}
145+
let edges = [...uniqueEdges.values()];
133146

134147
let combos = egraph.eclasses.map((eclass) => {
135148
return {

0 commit comments

Comments
 (0)