no more strange edge encoding

main
Ziyang Hu 2 years ago
parent 06f93e8259
commit 4a27d519e6

@ -109,7 +109,7 @@ pub(crate) fn build_chain<'a>(ctx: &'a TempDbContext<'a>, arg: Pair) -> Result<R
right: table_info.clone(),
right_binding: cur_el.binding.clone(),
left_outer_join: false,
join_key_extracter: left_join_keys,
join_key_extractor: left_join_keys,
key_is_prefix: false,
}));
@ -122,25 +122,19 @@ pub(crate) fn build_chain<'a>(ctx: &'a TempDbContext<'a>, arg: Pair) -> Result<R
.resolve_table(&cur_el.target)
.ok_or_else(|| AlgebraParseError::TableNotFound(cur_el.target.clone()))?;
let table_info = ctx.get_table_info(edge_id)?;
let mut left_join_keys: Vec<StaticExpr> =
vec![Expr::Const(Value::from(prev_tid.int_for_storage()))];
let mut left_join_keys: Vec<StaticExpr> = vec![Expr::Const(match dir {
ChainPartEdgeDir::Fwd => true.into(),
ChainPartEdgeDir::Bwd => false.into(),
ChainPartEdgeDir::Bidi => {
todo!()
}
})];
for key in prev_info.as_node()?.keys.iter() {
left_join_keys.push(Expr::FieldAcc(
key.name.to_string(),
Expr::Variable(prev_el.binding.clone()).into(),
))
}
match dir {
ChainPartEdgeDir::Fwd => {
left_join_keys.push(Expr::Const(true.into()));
}
ChainPartEdgeDir::Bwd => {
left_join_keys.push(Expr::Const(false.into()));
}
ChainPartEdgeDir::Bidi => {
todo!()
}
}
ret = RaBox::NestedLoopLeft(Box::new(NestedLoopLeft {
ctx,
left: ret,
@ -151,7 +145,7 @@ pub(crate) fn build_chain<'a>(ctx: &'a TempDbContext<'a>, arg: Pair) -> Result<R
JoinType::Left => true,
JoinType::Right => todo!(),
},
join_key_extracter: left_join_keys,
join_key_extractor: left_join_keys,
key_is_prefix: true,
}));
prev_info = table_info;

@ -222,27 +222,17 @@ impl<'a> Insertion<'a> {
TableInfo::Edge(e) => {
let src = self.ctx.get_table_info(e.src_id)?.into_node()?;
let dst = self.ctx.get_table_info(e.dst_id)?.into_node()?;
let src_key_part = [(
Expr::Const(Value::Int(e.src_id.int_for_storage())),
Typing::Any,
)];
let dst_key_part = [(
Expr::Const(Value::Int(e.dst_id.int_for_storage())),
Typing::Any,
)];
let fwd_edge_part = [(Expr::Const(Value::Bool(true)), Typing::Any)];
let bwd_edge_part = [(Expr::Const(Value::Bool(true)), Typing::Any)];
let key_builder = src_key_part
let bwd_edge_part = [(Expr::Const(Value::Bool(false)), Typing::Any)];
let key_builder = fwd_edge_part
.into_iter()
.chain(src.keys.iter().map(|v| v.make_extractor(extract_map)))
.chain(fwd_edge_part.into_iter())
.chain(dst.keys.iter().map(|v| v.make_extractor(extract_map)))
.chain(e.keys.iter().map(|v| v.make_extractor(extract_map)))
.collect::<Vec<_>>();
let inv_key_builder = dst_key_part
let inv_key_builder = bwd_edge_part
.into_iter()
.chain(dst.keys.iter().map(|v| v.make_extractor(extract_map)))
.chain(bwd_edge_part.into_iter())
.chain(src.keys.iter().map(|v| v.make_extractor(extract_map)))
.chain(e.keys.iter().map(|v| v.make_extractor(extract_map)))
.collect::<Vec<_>>();

@ -23,7 +23,7 @@ pub(crate) struct NestedLoopLeft<'a> {
pub(crate) right: TableInfo,
pub(crate) right_binding: String,
pub(crate) left_outer_join: bool,
pub(crate) join_key_extracter: Vec<StaticExpr>,
pub(crate) join_key_extractor: Vec<StaticExpr>,
pub(crate) key_is_prefix: bool,
}
@ -66,7 +66,7 @@ impl<'b> RelationalAlgebra for NestedLoopLeft<'b> {
parent: self.ctx,
};
let key_extractors = self
.join_key_extracter
.join_key_extractor
.iter()
.map(|ex| {
ex.clone()
@ -128,6 +128,7 @@ impl<'b> RelationalAlgebra for NestedLoopLeft<'b> {
};
match result {
None => {
dbg!(&key_tuple);
if left_join {
tset.push_key(key_tuple.clone().into());
tset.push_val(Tuple::empty_tuple().into());
@ -211,7 +212,6 @@ impl<'a> NestLoopLeftPrefixIter<'a> {
self.started = false;
left_tset.push_key(OwnTuple::empty_tuple().into());
left_tset.push_val(OwnTuple::empty_tuple().into());
dbg!(&left_tset);
return Ok(Some(left_tset));
} else {
self.left_cache.take();

@ -189,7 +189,7 @@ pub(crate) fn build_binding_map_from_info(
TupleSetIdx {
is_key: true,
t_set: 0,
col_idx: i + 2 + src.keys.len(),
col_idx: i + 1 + src.keys.len(),
},
);
}
@ -199,7 +199,7 @@ pub(crate) fn build_binding_map_from_info(
TupleSetIdx {
is_key: true,
t_set: 0,
col_idx: i + 2 + src.keys.len() + dst.keys.len(),
col_idx: i + 1 + src.keys.len() + dst.keys.len(),
},
);
}

@ -147,9 +147,9 @@ impl<'a> TaggedInsertion<'a> {
let src = id_cache.get_info(e.src_id)?;
let dst = id_cache.get_info(e.dst_id)?;
let mut key_tuple = OwnTuple::with_prefix(e.tid.id);
key_tuple.push_int(e.src_id.int_for_storage());
key_tuple.push_bool(true);
let mut inv_key_tuple = OwnTuple::with_prefix(e.tid.id);
inv_key_tuple.push_int(e.dst_id.int_for_storage());
inv_key_tuple.push_bool(false);
let mut val_tuple = OwnTuple::with_data_prefix(DataKind::Data);
for col in &src.as_node()?.keys {
@ -163,8 +163,6 @@ impl<'a> TaggedInsertion<'a> {
key_tuple.push_value(&val);
}
key_tuple.push_bool(true);
for col in &dst.as_node()?.keys {
key_buffer.clear();
key_buffer += "_dst_";
@ -177,8 +175,6 @@ impl<'a> TaggedInsertion<'a> {
inv_key_tuple.push_value(&val);
}
inv_key_tuple.push_bool(false);
for col in &src.as_node()?.keys {
key_buffer.clear();
key_buffer += "_src_";
@ -208,7 +204,7 @@ impl<'a> TaggedInsertion<'a> {
val_tuple.push_value(&val);
}
(key_tuple, val_tuple, Some(inv_key_tuple))
dbg!((key_tuple, val_tuple, Some(inv_key_tuple)))
}
_ => return Err(AlgebraParseError::WrongTableKind(main_info.table_id()).into()),
};

Loading…
Cancel
Save