From 271387bc593a33a07dad4a7282b48549610d3769 Mon Sep 17 00:00:00 2001 From: Ziyang Hu Date: Mon, 29 Aug 2022 18:32:07 +0800 Subject: [PATCH] fix haversine, mul, stored views --- src/algo/astar.rs | 10 +++------- src/data/expr.rs | 14 +++++++------- src/query/pull.rs | 32 ++++++++++++++++---------------- src/runtime/view.rs | 6 ++++-- 4 files changed, 30 insertions(+), 32 deletions(-) diff --git a/src/algo/astar.rs b/src/algo/astar.rs index 0fbfde9d..52a97b49 100644 --- a/src/algo/astar.rs +++ b/src/algo/astar.rs @@ -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 = Default::default(); @@ -106,7 +105,7 @@ fn astar( let mut sub_priority: usize = 0; // let mut f_score: BTreeMap = // 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![])) } diff --git a/src/data/expr.rs b/src/data/expr.rs index 7b6e82ab..936280c3 100644 --- a/src/data/expr.rs +++ b/src/data/expr.rs @@ -503,7 +503,7 @@ fn op_mul(args: &[DataValue]) -> Result { 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 { 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 { 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)) } diff --git a/src/query/pull.rs b/src/query/pull.rs index af501665..22bffd7d 100644 --- a/src/query/pull.rs +++ b/src/query/pull.rs @@ -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(()) } diff --git a/src/runtime/view.rs b/src/runtime/view.rs index 936f61ef..e654d3e8 100644 --- a/src/runtime/view.rs +++ b/src/runtime/view.rs @@ -87,10 +87,8 @@ impl ViewRelStore { } pub(crate) fn scan_prefix(&self, prefix: &Tuple) -> impl Iterator> { - 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(),