rename to regular temp store; make it the public interface

main
Ziyang Hu 2 years ago
parent b45a1ce939
commit 5bc0219b07

@ -25,7 +25,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct BetweennessCentrality;
@ -36,7 +36,7 @@ impl AlgoImpl for BetweennessCentrality {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation(0)?;
@ -110,7 +110,7 @@ impl AlgoImpl for ClosenessCentrality {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation(0)?;

@ -22,7 +22,7 @@ use crate::data::tuple::Tuple;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct ShortestPathAStar;
@ -33,7 +33,7 @@ impl AlgoImpl for ShortestPathAStar {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation_with_min_len(0, 3, tx, stores)?;

@ -18,7 +18,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct Bfs;
@ -29,7 +29,7 @@ impl AlgoImpl for Bfs {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation_with_min_len(0, 2, tx, stores)?;

@ -19,7 +19,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct Constant;
@ -30,7 +30,7 @@ impl AlgoImpl for Constant {
_tx: &SessionTx<'_>,
algo: &MagicAlgoApply,
_stores: &BTreeMap<MagicSymbol, EpochStore>,
out: &mut NormalTempStore,
out: &mut RegularTempStore,
_poison: Poison,
) -> Result<()> {
let data = algo.expr_option("data", None).unwrap();

@ -25,7 +25,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::{parse_type, SourceSpan};
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct CsvReader;
@ -36,7 +36,7 @@ impl AlgoImpl for CsvReader {
_tx: &SessionTx<'_>,
algo: &MagicAlgoApply,
_stores: &BTreeMap<MagicSymbol, EpochStore>,
out: &mut NormalTempStore,
out: &mut RegularTempStore,
_poison: Poison,
) -> Result<()> {
let delimiter = algo.string_option("delimiter", Some(","))?;

@ -18,7 +18,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct DegreeCentrality;
@ -29,7 +29,7 @@ impl AlgoImpl for DegreeCentrality {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let it = algo

@ -18,7 +18,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct Dfs;
@ -29,7 +29,7 @@ impl AlgoImpl for Dfs {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation_with_min_len(0, 2, tx, stores)?;

@ -28,7 +28,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct JsonReader;
@ -39,7 +39,7 @@ impl AlgoImpl for JsonReader {
_tx: &SessionTx<'_>,
algo: &MagicAlgoApply,
_stores: &BTreeMap<MagicSymbol, EpochStore>,
out: &mut NormalTempStore,
out: &mut RegularTempStore,
_poison: Poison,
) -> Result<()> {
let url = algo.string_option("url", None)?;

@ -22,7 +22,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct MinimumSpanningForestKruskal;
@ -33,7 +33,7 @@ impl AlgoImpl for MinimumSpanningForestKruskal {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation(0)?;

@ -20,7 +20,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct LabelPropagation;
@ -31,7 +31,7 @@ impl AlgoImpl for LabelPropagation {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation(0)?;

@ -20,7 +20,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct CommunityDetectionLouvain;
@ -31,7 +31,7 @@ impl AlgoImpl for CommunityDetectionLouvain {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation(0)?;

@ -55,7 +55,7 @@ use crate::data::tuple::TupleIter;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
#[cfg(feature = "graph-algo")]
@ -94,13 +94,19 @@ pub(crate) mod triangles;
#[cfg(feature = "graph-algo")]
pub(crate) mod yen;
pub struct AlgoPayload<'a> {
manifest: MagicAlgoApply,
params: Vec<&'a EpochStore>,
tx: &'a SessionTx<'a>
}
pub(crate) trait AlgoImpl {
fn run<'a>(
&mut self,
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()>;
fn arity(

@ -24,7 +24,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct PageRank;
@ -35,7 +35,7 @@ impl AlgoImpl for PageRank {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
_poison: Poison,
) -> Result<()> {
let edges = algo.relation(0)?;

@ -23,7 +23,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct MinimumSpanningTreePrim;
@ -34,7 +34,7 @@ impl AlgoImpl for MinimumSpanningTreePrim {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation(0)?;

@ -21,7 +21,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct RandomWalk;
@ -32,7 +32,7 @@ impl AlgoImpl for RandomWalk {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation_with_min_len(0, 2, tx, stores)?;

@ -20,7 +20,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct ReorderSort;
@ -31,7 +31,7 @@ impl AlgoImpl for ReorderSort {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let in_rel = algo.relation(0)?;

@ -26,7 +26,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct ShortestPathDijkstra;
@ -37,7 +37,7 @@ impl AlgoImpl for ShortestPathDijkstra {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation(0)?;

@ -22,7 +22,7 @@ use crate::data::tuple::Tuple;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
#[cfg(feature = "graph-algo")]
@ -43,7 +43,7 @@ impl AlgoImpl for StronglyConnectedComponent {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation(0)?;

@ -18,7 +18,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct TopSort;
@ -29,7 +29,7 @@ impl AlgoImpl for TopSort {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation(0)?;

@ -20,7 +20,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct ClusteringCoefficients;
@ -31,7 +31,7 @@ impl AlgoImpl for ClusteringCoefficients {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation(0)?;

@ -22,7 +22,7 @@ use crate::data::symb::Symbol;
use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct KShortestPathYen;
@ -33,7 +33,7 @@ impl AlgoImpl for KShortestPathYen {
tx: &'a SessionTx<'_>,
algo: &'a MagicAlgoApply,
stores: &'a BTreeMap<MagicSymbol, EpochStore>,
out: &'a mut NormalTempStore,
out: &'a mut RegularTempStore,
poison: Poison,
) -> Result<()> {
let edges = algo.relation(0)?;

@ -61,6 +61,7 @@ pub use storage::sqlite::{new_cozo_sqlite, SqliteStorage};
#[cfg(feature = "storage-tikv")]
pub use storage::tikv::{new_cozo_tikv, TiKvStorage};
pub use storage::{Storage, StoreTx};
pub use runtime::temp_store::RegularTempStore;
use crate::data::json::JsonValue;

@ -21,7 +21,7 @@ use crate::data::value::DataValue;
use crate::parse::SourceSpan;
use crate::query::compile::{AggrKind, CompiledProgram, CompiledRule, CompiledRuleSet};
use crate::runtime::db::Poison;
use crate::runtime::temp_store::{EpochStore, MeetAggrStore, NormalTempStore};
use crate::runtime::temp_store::{EpochStore, MeetAggrStore, RegularTempStore};
use crate::runtime::transact::SessionTx;
pub(crate) struct QueryLimiter {
@ -153,7 +153,7 @@ impl<'a> SessionTx<'a> {
},
CompiledRuleSet::Algo(algo_apply) => {
let mut algo_impl = algo_apply.algo.get_impl()?;
let mut out = NormalTempStore::default();
let mut out = RegularTempStore::default();
algo_impl.run(self, algo_apply, stores, &mut out, poison.clone())?;
out.wrap()
}
@ -188,14 +188,14 @@ impl<'a> SessionTx<'a> {
}
AggrKind::Normal => {
// not doing anything
NormalTempStore::default().wrap()
RegularTempStore::default().wrap()
}
}
}
CompiledRuleSet::Algo(_) => {
// no need to do anything, algos are only calculated once
NormalTempStore::default().wrap()
RegularTempStore::default().wrap()
}
};
to_merge.insert(k, new_store);
@ -222,8 +222,8 @@ impl<'a> SessionTx<'a> {
stores: &mut BTreeMap<MagicSymbol, EpochStore>,
limiter: &mut QueryLimiter,
poison: Poison,
) -> Result<(bool, NormalTempStore)> {
let mut out_store = NormalTempStore::default();
) -> Result<(bool, RegularTempStore)> {
let mut out_store = RegularTempStore::default();
let should_check_limit = limiter.total.is_some() && rule_symb.is_prog_entry();
for (rule_n, rule) in ruleset.iter().enumerate() {
@ -298,8 +298,8 @@ impl<'a> SessionTx<'a> {
stores: &mut BTreeMap<MagicSymbol, EpochStore>,
limiter: &mut QueryLimiter,
poison: Poison,
) -> Result<(bool, NormalTempStore)> {
let mut out_store = NormalTempStore::default();
) -> Result<(bool, RegularTempStore)> {
let mut out_store = RegularTempStore::default();
let should_check_limit = limiter.total.is_some() && rule_symb.is_prog_entry();
let mut aggr_work: BTreeMap<Vec<DataValue>, Vec<Aggregation>> = BTreeMap::new();
@ -425,9 +425,9 @@ impl<'a> SessionTx<'a> {
stores: &mut BTreeMap<MagicSymbol, EpochStore>,
limiter: &mut QueryLimiter,
poison: Poison,
) -> Result<(bool, NormalTempStore)> {
) -> Result<(bool, RegularTempStore)> {
let prev_store = stores.get(rule_symb).unwrap();
let mut out_store = NormalTempStore::default();
let mut out_store = RegularTempStore::default();
let should_check_limit = limiter.total.is_some() && rule_symb.is_prog_entry();
for (rule_n, rule) in ruleset.iter().enumerate() {
let dependencies_changed = rule

@ -21,18 +21,21 @@ use crate::data::aggr::Aggregation;
use crate::data::tuple::Tuple;
use crate::data::value::DataValue;
/// A store holding temp data during evaluation of queries.
/// The public interface is used in custom implementations of algorithms/utilities.
#[derive(Default, Debug)]
pub(crate) struct NormalTempStore {
pub struct RegularTempStore {
inner: BTreeMap<Tuple, bool>,
}
const EMPTY_TUPLE_REF: &Tuple = &vec![];
impl NormalTempStore {
impl RegularTempStore {
pub(crate) fn wrap(self) -> TempStore {
TempStore::Normal(self)
}
pub(crate) fn exists(&self, key: &Tuple) -> bool {
/// Tests if a key already exists in the store.
pub fn exists(&self, key: &Tuple) -> bool {
self.inner.contains_key(key)
}
@ -52,11 +55,10 @@ impl NormalTempStore {
.range((lower_bound, upper_bound))
.map(|(t, skip)| TupleInIter(t, EMPTY_TUPLE_REF, *skip))
}
// must check prev_store for existence before putting here!
pub(crate) fn put(&mut self, tuple: Tuple) {
/// Add a tuple to the store
pub fn put(&mut self, tuple: Tuple) {
self.inner.insert(tuple, false);
}
// must check prev_store for existence before putting here!
pub(crate) fn put_with_skip(&mut self, tuple: Tuple) {
self.inner.insert(tuple, true);
}
@ -215,7 +217,7 @@ impl MeetAggrStore {
#[derive(Debug)]
pub(crate) enum TempStore {
Normal(NormalTempStore),
Normal(RegularTempStore),
MeetAggr(MeetAggrStore),
}
@ -259,8 +261,8 @@ impl EpochStore {
}
pub(crate) fn new_normal(arity: usize) -> Self {
Self {
total: TempStore::Normal(NormalTempStore::default()),
delta: TempStore::Normal(NormalTempStore::default()),
total: TempStore::Normal(RegularTempStore::default()),
delta: TempStore::Normal(RegularTempStore::default()),
use_total_for_delta: true,
arity,
}

Loading…
Cancel
Save