MCPcopy Create free account
hub / github.com/MaterializeInc/materialize / optimize_order_for

Method optimize_order_for

src/transform/src/join_implementation.rs:1112–1258  ·  view source on GitHub ↗
(
        &mut self,
        start: usize,
    )

Source from the content-addressed store, hash-verified

1110 }
1111
1112 fn optimize_order_for(
1113 &mut self,
1114 start: usize,
1115 ) -> Result<Vec<(JoinInputCharacteristics, Vec<MirScalarExpr>, usize)>, TransformError> {
1116 self.order.clear();
1117 self.priority_queue.clear();
1118 for input in 0..self.inputs {
1119 self.placed[input] = false;
1120 self.bound[input].clear();
1121 self.arrangement_active[input].clear();
1122 }
1123 for index in 0..self.equivalences.len() {
1124 self.equivalences_active[index] = false;
1125 }
1126
1127 // Introduce cross joins as a possibility.
1128 for input in 0..self.inputs {
1129 let cardinality = self.cardinalities[input];
1130
1131 let is_unique = self.unique_keys[input].iter().any(|cols| cols.is_empty());
1132 if let Some(pos) = self.arrangements[input]
1133 .iter()
1134 .position(|key| key.is_empty())
1135 {
1136 self.arrangement_active[input].push(pos);
1137 self.priority_queue.push((
1138 JoinInputCharacteristics::new(
1139 is_unique,
1140 0,
1141 true,
1142 cardinality,
1143 self.filters[input].clone(),
1144 input,
1145 self.enable_join_prioritize_arranged,
1146 ),
1147 vec![],
1148 input,
1149 ));
1150 } else {
1151 self.priority_queue.push((
1152 JoinInputCharacteristics::new(
1153 is_unique,
1154 0,
1155 false,
1156 cardinality,
1157 self.filters[input].clone(),
1158 input,
1159 self.enable_join_prioritize_arranged,
1160 ),
1161 vec![],
1162 input,
1163 ));
1164 }
1165 }
1166
1167 // Main loop, ordering all the inputs.
1168 if self.inputs > 1 {
1169 self.order_input(start);

Callers 1

optimize_ordersFunction · 0.80

Calls 15

anyMethod · 0.80
order_inputMethod · 0.80
unwrapMethod · 0.80
map_expr_to_globalMethod · 0.80
find_bound_exprMethod · 0.80
map_expr_to_localMethod · 0.80
allMethod · 0.80
is_someMethod · 0.80
replaceFunction · 0.50
clearMethod · 0.45
lenMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected