fix haversine, mul, stored views

main
Ziyang Hu 2 years ago
parent ecf6a4a4fb
commit 271387bc59

@ -95,7 +95,6 @@ fn astar(
!cost.is_nan(),
"got cost NaN for heuristic function of 'shortest_path_astar'"
);
// println!("{:?}: {}", t, cost);
Ok(cost)
};
let mut back_trace: BTreeMap<DataValue, DataValue> = Default::default();
@ -106,7 +105,7 @@ fn astar(
let mut sub_priority: usize = 0;
// let mut f_score: BTreeMap<DataValue, f64> =
// BTreeMap::from([(start_node.clone(), eval_heuristic(starting)?)]);
while let Some((node, _)) = open_set.pop() {
while let Some((node, (Reverse(OrderedFloat(cost)), _))) = open_set.pop() {
if node == *goal_node {
let mut current = node;
let mut ret = vec![];
@ -117,8 +116,7 @@ fn astar(
}
ret.push(current);
ret.reverse();
let cost = g_score.get(goal_node).unwrap();
return Ok((*cost, ret));
return Ok((cost, ret));
}
for edge in edges.prefix_iter(&node, tx, stores)? {
@ -143,7 +141,6 @@ fn astar(
back_trace.insert(edge_dst.clone(), node.clone());
g_score.insert(edge_dst.clone(), tentative_cost_to_dst);
dbg!(1);
let edge_dst_tuple = nodes
.prefix_iter(edge_dst, tx, stores)?
.next()
@ -153,7 +150,7 @@ fn astar(
edge_dst
)
})??;
dbg!(2);
let heuristic_cost = eval_heuristic(&edge_dst_tuple)?;
sub_priority += 1;
open_set.push_increase(
@ -166,6 +163,5 @@ fn astar(
}
}
}
dbg!(3);
Ok((f64::INFINITY, vec![]))
}

@ -503,7 +503,7 @@ fn op_mul(args: &[DataValue]) -> Result<DataValue> {
if f_accum == 1.0f64 {
Ok(DataValue::Number(Number::Int(i_accum)))
} else {
Ok(DataValue::Number(Number::Float(i_accum as f64 + f_accum)))
Ok(DataValue::Number(Number::Float(i_accum as f64 * f_accum)))
}
}
@ -1203,9 +1203,9 @@ fn op_haversine(args: &[DataValue]) -> Result<DataValue> {
let lat2 = args[2].get_float().ok_or_else(gen_err)?;
let lon2 = args[3].get_float().ok_or_else(gen_err)?;
let ret = 2.
* f64::acos(f64::sqrt(
f64::sin((lat1 - lon1) / 2.).powi(2)
+ f64::cos(lat1) * f64::cos(lon1) * f64::sin((lat2 - lon2) / 2.).powi(2),
* f64::asin(f64::sqrt(
f64::sin((lat1 - lat2) / 2.).powi(2)
+ f64::cos(lat1) * f64::cos(lat2) * f64::sin((lon1 - lon2) / 2.).powi(2),
));
Ok(DataValue::from(ret))
}
@ -1218,9 +1218,9 @@ fn op_haversine_deg_input(args: &[DataValue]) -> Result<DataValue> {
let lat2 = args[2].get_float().ok_or_else(gen_err)? * f64::PI() / 180.;
let lon2 = args[3].get_float().ok_or_else(gen_err)? * f64::PI() / 180.;
let ret = 2.
* f64::acos(f64::sqrt(
f64::sin((lat1 - lon1) / 2.).powi(2)
+ f64::cos(lat1) * f64::cos(lon1) * f64::sin((lat2 - lon2) / 2.).powi(2),
* f64::asin(f64::sqrt(
f64::sin((lat1 - lat2) / 2.).powi(2)
+ f64::cos(lat1) * f64::cos(lat2) * f64::sin((lon1 - lon2) / 2.).powi(2),
));
Ok(DataValue::from(ret))
}

@ -123,26 +123,26 @@ impl SessionTx {
vtx.commit()?;
} else {
let mut vtx = self.view_db.transact().start();
for data in res_iter {
let data = data?;
let encoded = data.encode_as_key(view_store.metadata.id);
vtx.put(&encoded, &[])?;
}
vtx.commit()?;
// let file = NamedTempFile::new()?;
// let path = file.into_temp_path();
// let path = path.to_string_lossy();
// let mut writer = self.view_db.get_sst_writer(&path)?;
// let mut vtx = self.view_db.transact().start();
//
// for data in res_iter {
// let data = data?;
// let encoded = data.encode_as_key(view_store.metadata.id);
// writer.put(&encoded, &[])?;
// vtx.put(&encoded, &[])?;
// }
// writer.finish()?;
// self.view_db.ingest_sst_file(&path)?;
//
// vtx.commit()?;
let file = NamedTempFile::new()?;
let path = file.into_temp_path();
let path = path.to_string_lossy();
let mut writer = self.view_db.get_sst_writer(&path)?;
for data in res_iter {
let data = data?;
let encoded = data.encode_as_key(view_store.metadata.id);
writer.put(&encoded, &[])?;
}
writer.finish()?;
self.view_db.ingest_sst_file(&path)?;
}
Ok(())
}

@ -87,10 +87,8 @@ impl ViewRelStore {
}
pub(crate) fn scan_prefix(&self, prefix: &Tuple) -> impl Iterator<Item = Result<Tuple>> {
dbg!(&prefix);
let mut upper = prefix.0.clone();
upper.push(DataValue::Bottom);
dbg!(&upper);
let prefix_encoded = prefix.encode_as_key(self.metadata.id);
let upper_encoded = Tuple(upper).encode_as_key(self.metadata.id);
ViewRelIterator::new(&self.view_db, &prefix_encoded, &upper_encoded)
@ -172,6 +170,10 @@ impl SessionTx {
let mut meta_val = vec![];
meta.serialize(&mut Serializer::new(&mut meta_val)).unwrap();
vtx.put(&name_key, &meta_val)?;
let tuple = Tuple(vec![DataValue::Null]);
let t_encoded = tuple.encode_as_key(ViewRelId::SYSTEM);
vtx.put(&t_encoded, &meta.id.raw_encode())?;
vtx.commit()?;
Ok(ViewRelStore {
view_db: self.view_db.clone(),

Loading…
Cancel
Save