cartesian join needs elimination as well

main
Ziyang Hu 2 years ago
parent f52f328915
commit 78e49e4a52

@ -674,7 +674,7 @@ impl TripleRelation {
eliminate_indices: BTreeSet<usize>, eliminate_indices: BTreeSet<usize>,
) -> TupleIter<'a> { ) -> TupleIter<'a> {
match right_join_indices.len() { match right_join_indices.len() {
0 => self.cartesian_join(left_iter, tx), 0 => self.cartesian_join(left_iter, tx, eliminate_indices),
2 => { 2 => {
let right_first = *right_join_indices.first().unwrap(); let right_first = *right_join_indices.first().unwrap();
let right_second = *right_join_indices.last().unwrap(); let right_second = *right_join_indices.last().unwrap();
@ -704,7 +704,12 @@ impl TripleRelation {
_ => unreachable!(), _ => unreachable!(),
} }
} }
fn cartesian_join<'a>(&'a self, left_iter: TupleIter<'a>, tx: &'a SessionTx) -> TupleIter<'a> { fn cartesian_join<'a>(
&'a self,
left_iter: TupleIter<'a>,
tx: &'a SessionTx,
eliminate_indices: BTreeSet<usize>,
) -> TupleIter<'a> {
// [f, f] not really a join // [f, f] not really a join
let it = left_iter let it = left_iter
.map_ok(|tuple| { .map_ok(|tuple| {
@ -718,7 +723,7 @@ impl TripleRelation {
}) })
.flatten_ok() .flatten_ok()
.map(flatten_err); .map(flatten_err);
self.return_filtered_iter(it, Default::default()) self.return_filtered_iter(it, eliminate_indices)
} }
fn neg_ev_join<'a>( fn neg_ev_join<'a>(
&'a self, &'a self,
@ -1577,7 +1582,6 @@ impl InnerJoin {
&self.right.bindings_after_eliminate(), &self.right.bindings_after_eliminate(),
) )
.unwrap(); .unwrap();
// println!("{:?}, {:?}, {:?}, {:?}", self, join_indices, self.left.bindings_after_eliminate(), self.right.bindings_after_eliminate());
r.join( r.join(
self.left.iter(tx, epoch, use_delta), self.left.iter(tx, epoch, use_delta),
join_indices, join_indices,

Loading…
Cancel
Save