Skip to content

Commit 7d7e934

Browse files
committed
impl review suggestions
1 parent 3251d27 commit 7d7e934

File tree

8 files changed

+328
-475
lines changed

8 files changed

+328
-475
lines changed

raphtory/src/db/api/properties/temporal_props.rs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -92,18 +92,6 @@ impl<P: InternalPropertiesOps> TemporalPropertyView<P> {
9292
self.props.temporal_iter(self.id)
9393
}
9494

95-
#[inline]
96-
pub fn iter_window(&self, start: i64, end: i64) -> impl Iterator<Item = (i64, Prop)> + '_ {
97-
self.iter_indexed()
98-
.filter(move |(ti, _)| ti.t() >= start && ti.t() < end)
99-
.map(|(ti, p)| (ti.t(), p))
100-
}
101-
102-
#[inline]
103-
pub fn values_window(&self, start: i64, end: i64) -> impl Iterator<Item = Prop> + '_ {
104-
self.iter_window(start, end).map(|(_, p)| p)
105-
}
106-
10795
pub fn histories(&self) -> impl Iterator<Item = (i64, Prop)> + '_ {
10896
self.iter()
10997
}

raphtory/src/db/graph/views/filter/edge_property_filtered_graph.rs

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,18 @@ use crate::{
1010
InheritTimeSemantics, InternalEdgeFilterOps, Static,
1111
},
1212
},
13-
graph::views::filter::{
14-
internal::CreateFilter, model::edge_filter::EdgeFilter, PropertyFilter,
13+
graph::views::{
14+
filter::{
15+
internal::CreateFilter,
16+
model::{edge_filter::EdgeFilter, property_filter::PropertyFilter, Windowed},
17+
},
18+
window_graph::WindowedGraph,
1519
},
1620
},
1721
errors::GraphError,
18-
prelude::{GraphViewOps, LayerOps},
22+
prelude::{GraphViewOps, LayerOps, TimeOps},
1923
};
20-
use raphtory_api::inherit::Base;
24+
use raphtory_api::{core::storage::timeindex::AsTime, inherit::Base};
2125
use raphtory_storage::{core_ops::InheritCoreGraphOps, graph::edges::edge_ref::EdgeStorageRef};
2226

2327
#[derive(Debug, Clone)]
@@ -37,6 +41,30 @@ impl<G> EdgePropertyFilteredGraph<G> {
3741
}
3842
}
3943

44+
impl CreateFilter for PropertyFilter<Windowed<EdgeFilter>> {
45+
type EntityFiltered<'graph, G: GraphViewOps<'graph>> =
46+
EdgePropertyFilteredGraph<WindowedGraph<G>>;
47+
48+
fn create_filter<'graph, G: GraphViewOps<'graph>>(
49+
self,
50+
graph: G,
51+
) -> Result<Self::EntityFiltered<'graph, G>, GraphError> {
52+
let prop_id = self.resolve_prop_id(graph.edge_meta(), graph.num_layers() > 1)?;
53+
let filter = PropertyFilter {
54+
prop_ref: self.prop_ref,
55+
prop_value: self.prop_value,
56+
operator: self.operator,
57+
ops: self.ops,
58+
entity: EdgeFilter,
59+
};
60+
Ok(EdgePropertyFilteredGraph::new(
61+
graph.window(self.entity.start.t(), self.entity.end.t()),
62+
prop_id,
63+
filter,
64+
))
65+
}
66+
}
67+
4068
impl CreateFilter for PropertyFilter<EdgeFilter> {
4169
type EntityFiltered<'graph, G: GraphViewOps<'graph>> = EdgePropertyFilteredGraph<G>;
4270

raphtory/src/db/graph/views/filter/exploded_edge_property_filter.rs

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,23 @@ use crate::{
1010
InheritTimeSemantics, InternalExplodedEdgeFilterOps, Static,
1111
},
1212
},
13-
graph::views::filter::{internal::CreateFilter, model::edge_filter::ExplodedEdgeFilter},
13+
graph::views::{
14+
filter::{
15+
internal::CreateFilter,
16+
model::{
17+
edge_filter::ExplodedEdgeFilter, property_filter::PropertyFilter, Windowed,
18+
},
19+
},
20+
window_graph::WindowedGraph,
21+
},
1422
},
1523
errors::GraphError,
16-
prelude::{GraphViewOps, LayerOps, PropertyFilter},
24+
prelude::{GraphViewOps, LayerOps, TimeOps},
1725
};
1826
use raphtory_api::{
1927
core::{
2028
entities::{EID, ELID},
21-
storage::timeindex::TimeIndexEntry,
29+
storage::timeindex::{AsTime, TimeIndexEntry},
2230
},
2331
inherit::Base,
2432
};
@@ -53,22 +61,42 @@ impl<'graph, G: GraphViewOps<'graph>> ExplodedEdgePropertyFilteredGraph<G> {
5361
}
5462
}
5563

56-
impl CreateFilter for PropertyFilter<ExplodedEdgeFilter> {
57-
type EntityFiltered<'graph, G: GraphViewOps<'graph>> = ExplodedEdgePropertyFilteredGraph<G>;
64+
impl CreateFilter for PropertyFilter<Windowed<ExplodedEdgeFilter>> {
65+
type EntityFiltered<'graph, G: GraphViewOps<'graph>> =
66+
ExplodedEdgePropertyFilteredGraph<WindowedGraph<G>>;
5867

5968
fn create_filter<'graph, G: GraphViewOps<'graph>>(
6069
self,
6170
graph: G,
6271
) -> Result<Self::EntityFiltered<'graph, G>, GraphError> {
6372
let prop_id = self.resolve_prop_id(graph.edge_meta(), graph.num_layers() > 1)?;
73+
let filter = PropertyFilter {
74+
prop_ref: self.prop_ref,
75+
prop_value: self.prop_value,
76+
operator: self.operator,
77+
ops: self.ops,
78+
entity: ExplodedEdgeFilter,
79+
};
6480
Ok(ExplodedEdgePropertyFilteredGraph::new(
65-
graph.clone(),
81+
graph.window(self.entity.start.t(), self.entity.end.t()),
6682
prop_id,
67-
self,
83+
filter,
6884
))
6985
}
7086
}
7187

88+
impl CreateFilter for PropertyFilter<ExplodedEdgeFilter> {
89+
type EntityFiltered<'graph, G: GraphViewOps<'graph>> = ExplodedEdgePropertyFilteredGraph<G>;
90+
91+
fn create_filter<'graph, G: GraphViewOps<'graph>>(
92+
self,
93+
graph: G,
94+
) -> Result<Self::EntityFiltered<'graph, G>, GraphError> {
95+
let prop_id = self.resolve_prop_id(graph.edge_meta(), graph.num_layers() > 1)?;
96+
Ok(ExplodedEdgePropertyFilteredGraph::new(graph, prop_id, self))
97+
}
98+
}
99+
72100
impl<G> Base for ExplodedEdgePropertyFilteredGraph<G> {
73101
type Base = G;
74102

@@ -154,13 +182,9 @@ mod test_exploded_edge_property_filtered_graph {
154182
},
155183
views::{
156184
deletion_graph::PersistentGraph,
157-
filter::{
158-
exploded_edge_property_filter::ExplodedEdgePropertyFilteredGraph,
159-
internal::CreateFilter,
160-
model::{
161-
edge_filter::ExplodedEdgeFilter, property_filter::PropertyFilterOps,
162-
PropertyFilterFactory, TryAsCompositeFilter,
163-
},
185+
filter::model::{
186+
edge_filter::ExplodedEdgeFilter, property_filter::PropertyFilterOps,
187+
PropertyFilterFactory, TryAsCompositeFilter,
164188
},
165189
},
166190
},
@@ -177,7 +201,7 @@ mod test_exploded_edge_property_filtered_graph {
177201
use raphtory_api::core::{entities::properties::prop::PropType, storage::arc_str::ArcStr};
178202
use raphtory_core::entities::nodes::node_ref::AsNodeRef;
179203
use raphtory_storage::mutation::addition_ops::InternalAdditionOps;
180-
use std::collections::{HashMap, HashSet};
204+
use std::collections::HashMap;
181205

182206
fn build_filtered_graph(
183207
edges: &[(u64, u64, i64, String, i64)],

raphtory/src/db/graph/views/filter/model/edge_filter.rs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ use crate::{
44
graph::views::filter::{
55
internal::CreateFilter,
66
model::{
7-
node_filter::CompositeNodeFilter, property_filter::PropertyFilter, AndFilter,
8-
Filter, NotFilter, OrFilter, PropertyFilterFactory, TryAsCompositeFilter, Windowed,
7+
node_filter::CompositeNodeFilter,
8+
property_filter::{MetadataFilterBuilder, PropertyFilter, PropertyFilterBuilder},
9+
AndFilter, Filter, NotFilter, OrFilter, TryAsCompositeFilter, Windowed,
910
},
1011
},
1112
},
@@ -384,19 +385,35 @@ impl EdgeFilter {
384385
}
385386
}
386387

387-
impl PropertyFilterFactory<EdgeFilter> for EdgeFilter {}
388+
impl EdgeFilter {
389+
pub fn property(name: impl Into<String>) -> PropertyFilterBuilder<Self> {
390+
PropertyFilterBuilder::new(name, EdgeFilter)
391+
}
392+
393+
pub fn metadata(name: impl Into<String>) -> MetadataFilterBuilder<Self> {
394+
MetadataFilterBuilder::new(name, EdgeFilter)
395+
}
396+
}
388397

389398
#[derive(Clone, Debug, Copy, PartialEq, Eq)]
390399
pub struct ExplodedEdgeFilter;
391400

392-
impl PropertyFilterFactory<ExplodedEdgeFilter> for ExplodedEdgeFilter {}
393-
394401
impl ExplodedEdgeFilter {
395402
pub fn window<S: IntoTime, E: IntoTime>(start: S, end: E) -> Windowed<ExplodedEdgeFilter> {
396403
Windowed::from_times(start, end)
397404
}
398405
}
399406

407+
impl ExplodedEdgeFilter {
408+
pub fn property(name: impl Into<String>) -> PropertyFilterBuilder<Self> {
409+
PropertyFilterBuilder::new(name, ExplodedEdgeFilter)
410+
}
411+
412+
pub fn metadata(name: impl Into<String>) -> MetadataFilterBuilder<Self> {
413+
MetadataFilterBuilder::new(name, ExplodedEdgeFilter)
414+
}
415+
}
416+
400417
impl TryAsCompositeFilter for EdgeFieldFilter {
401418
fn try_as_composite_node_filter(&self) -> Result<CompositeNodeFilter, GraphError> {
402419
Err(GraphError::NotSupported)

raphtory/src/db/graph/views/filter/model/mod.rs

Lines changed: 26 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
pub(crate) use crate::db::graph::views::filter::model::and_filter::AndFilter;
22
use crate::{
33
db::graph::views::filter::model::{
4-
edge_filter::{CompositeEdgeFilter, CompositeExplodedEdgeFilter, EdgeFieldFilter},
4+
edge_filter::{
5+
CompositeEdgeFilter, CompositeExplodedEdgeFilter, EdgeFieldFilter, EdgeFilter,
6+
ExplodedEdgeFilter,
7+
},
58
filter_operator::FilterOperator,
6-
node_filter::{CompositeNodeFilter, NodeNameFilter, NodeTypeFilter},
9+
node_filter::{CompositeNodeFilter, NodeFilter, NodeNameFilter, NodeTypeFilter},
710
not_filter::NotFilter,
811
or_filter::OrFilter,
912
property_filter::{
1013
MetadataFilterBuilder, PropertyFilter, PropertyFilterBuilder, PropertyRef,
11-
WindowedPropertyRef,
1214
},
1315
},
1416
errors::GraphError,
@@ -55,31 +57,6 @@ impl<M> Windowed<M> {
5557
}
5658
}
5759

58-
impl<M> Windowed<M>
59-
where
60-
M: Send + Sync + Clone + 'static,
61-
{
62-
pub fn property(self, name: impl Into<String>) -> WindowedPropertyRef<M> {
63-
WindowedPropertyRef {
64-
prop_ref: PropertyRef::Property(name.into()),
65-
ops: vec![],
66-
start: self.start,
67-
end: self.end,
68-
_phantom: PhantomData,
69-
}
70-
}
71-
72-
pub fn metadata(self, name: impl Into<String>) -> WindowedPropertyRef<M> {
73-
WindowedPropertyRef {
74-
prop_ref: PropertyRef::Metadata(name.into()),
75-
ops: vec![],
76-
start: self.start,
77-
end: self.end,
78-
_phantom: PhantomData,
79-
}
80-
}
81-
}
82-
8360
#[derive(Debug, Clone, PartialEq, Eq)]
8461
pub enum FilterValue {
8562
Single(String),
@@ -387,12 +364,27 @@ impl<L, R> ComposableFilter for AndFilter<L, R> {}
387364
impl<L, R> ComposableFilter for OrFilter<L, R> {}
388365
impl<T> ComposableFilter for NotFilter<T> {}
389366

390-
pub trait PropertyFilterFactory<M> {
391-
fn property(name: impl Into<String>) -> PropertyFilterBuilder<M> {
392-
PropertyFilterBuilder::new(name)
393-
}
367+
trait EntityMarker: Clone + Send + Sync {}
394368

395-
fn metadata(name: impl Into<String>) -> MetadataFilterBuilder<M> {
396-
MetadataFilterBuilder::new(name)
369+
impl EntityMarker for NodeFilter {}
370+
371+
impl EntityMarker for EdgeFilter {}
372+
373+
impl EntityMarker for ExplodedEdgeFilter {}
374+
375+
impl<M: EntityMarker + Clone + Send + Sync + 'static> EntityMarker for Windowed<M> {}
376+
377+
pub trait PropertyFilterFactory: EntityMarker {
378+
fn property(&self, name: impl Into<String>) -> PropertyFilterBuilder<Self>;
379+
380+
fn metadata(&self, name: impl Into<String>) -> MetadataFilterBuilder<Self>;
381+
}
382+
383+
impl<M: EntityMarker> PropertyFilterFactory for M {
384+
fn property(&self, name: impl Into<String>) -> PropertyFilterBuilder<Self> {
385+
PropertyFilterBuilder::new(name, self.clone())
386+
}
387+
fn metadata(&self, name: impl Into<String>) -> MetadataFilterBuilder<Self> {
388+
MetadataFilterBuilder::new(name, self.clone())
397389
}
398390
}

raphtory/src/db/graph/views/filter/model/node_filter.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ use crate::{
66
model::{
77
edge_filter::{CompositeEdgeFilter, CompositeExplodedEdgeFilter},
88
filter_operator::FilterOperator,
9-
property_filter::PropertyFilter,
10-
AndFilter, Filter, FilterValue, NotFilter, OrFilter, PropertyFilterFactory,
11-
TryAsCompositeFilter, Windowed,
9+
property_filter::{MetadataFilterBuilder, PropertyFilter, PropertyFilterBuilder},
10+
AndFilter, Filter, FilterValue, NotFilter, OrFilter, TryAsCompositeFilter,
11+
Windowed,
1212
},
1313
},
1414
},
@@ -428,7 +428,15 @@ impl NodeFilter {
428428
}
429429
}
430430

431-
impl PropertyFilterFactory<NodeFilter> for NodeFilter {}
431+
impl NodeFilter {
432+
pub fn property(name: impl Into<String>) -> PropertyFilterBuilder<Self> {
433+
PropertyFilterBuilder::new(name, NodeFilter)
434+
}
435+
436+
pub fn metadata(name: impl Into<String>) -> MetadataFilterBuilder<Self> {
437+
MetadataFilterBuilder::new(name, NodeFilter)
438+
}
439+
}
432440

433441
impl TryAsCompositeFilter for NodeIdFilter {
434442
fn try_as_composite_node_filter(&self) -> Result<CompositeNodeFilter, GraphError> {

0 commit comments

Comments
 (0)