Skip to content

Commit b5735cd

Browse files
authored
feat(interactive): ImmutableCsr support multiple properties (#4505)
Fixes
1 parent 40c93d1 commit b5735cd

File tree

14 files changed

+760
-157
lines changed

14 files changed

+760
-157
lines changed

.github/workflows/interactive.yml

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ jobs:
533533
SCHEMA_FILE=../tests/rt_mutable_graph/modern_graph_string_edge.yaml
534534
BULK_LOAD_FILE=../interactive/examples/modern_graph/bulk_load.yaml
535535
GLOG_v=10 ./bin/bulk_loader -g ${SCHEMA_FILE} -l ${BULK_LOAD_FILE} -d /tmp/csr-data-dir/
536-
GLOG_v=10 ./tests/rt_mutable_graph/string_edge_property_test ${SCHEMA_FILE} /tmp/csr-data-dir/
536+
GLOG_v=10 ./tests/rt_mutable_graph/string_edge_property_test /tmp/csr-data-dir/
537537
538538

539539
- name: Test update transaction
@@ -545,7 +545,7 @@ jobs:
545545
SCHEMA_FILE=../tests/rt_mutable_graph/modern_graph_string_edge.yaml
546546
BULK_LOAD_FILE=../interactive/examples/modern_graph/bulk_load.yaml
547547
GLOG_v=10 ./bin/bulk_loader -g ${SCHEMA_FILE} -l ${BULK_LOAD_FILE} -d /tmp/csr-data-dir/
548-
GLOG_v=10 ./tests/rt_mutable_graph/test_update_transaction ${SCHEMA_FILE} /tmp/csr-data-dir/
548+
GLOG_v=10 ./tests/rt_mutable_graph/test_update_transaction /tmp/csr-data-dir/
549549
550550
- name: Test multiple properties edge
551551
env:
@@ -556,7 +556,18 @@ jobs:
556556
SCHEMA_FILE=../tests/rt_mutable_graph/modern_graph_multiple_props_edge.yaml
557557
BULK_LOAD_FILE=../tests/rt_mutable_graph/modern_graph_multiple_props_edge_import.yaml
558558
GLOG_v=10 ./bin/bulk_loader -g ${SCHEMA_FILE} -l ${BULK_LOAD_FILE} -d /tmp/csr-data-dir/
559-
GLOG_v=10 ./tests/rt_mutable_graph/multiple_props_edge_test ${SCHEMA_FILE} /tmp/csr-data-dir/
559+
GLOG_v=10 ./tests/rt_mutable_graph/multiple_props_edge_test /tmp/csr-data-dir/
560+
561+
- name: Test immutable csr
562+
env:
563+
FLEX_DATA_DIR: ${{ github.workspace }}/flex/interactive/examples/modern_graph/
564+
run: |
565+
rm -rf /tmp/csr-data-dir/
566+
cd ${GITHUB_WORKSPACE}/flex/build/
567+
SCHEMA_FILE=../tests/rt_mutable_graph/modern_graph_immutable_csr.yaml
568+
BULK_LOAD_FILE=../tests/rt_mutable_graph/modern_graph_multiple_props_edge_import.yaml
569+
GLOG_v=10 ./bin/bulk_loader -g ${SCHEMA_FILE} -l ${BULK_LOAD_FILE} -d /tmp/csr-data-dir/
570+
GLOG_v=10 ./tests/rt_mutable_graph/immutable_csr_test /tmp/csr-data-dir/
560571
561572
- name: Test schema parsing and loading on modern graph
562573
env:

flex/engines/graph_db/database/read_transaction.h

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,57 @@ class AdjListView {
8989
timestamp_t timestamp_;
9090
};
9191

92+
template <typename EDATA_T>
93+
class ImmutableAdjListView {
94+
class nbr_iterator {
95+
using const_nbr_t = typename ImmutableNbrSlice<EDATA_T>::const_nbr_t;
96+
using const_nbr_ptr_t =
97+
typename ImmutableNbrSlice<EDATA_T>::const_nbr_ptr_t;
98+
99+
public:
100+
nbr_iterator(const_nbr_ptr_t ptr, const_nbr_ptr_t end)
101+
: ptr_(ptr), end_(end) {}
102+
103+
inline const_nbr_t& operator*() const { return *ptr_; }
104+
105+
inline const_nbr_ptr_t operator->() const { return ptr_; }
106+
107+
inline nbr_iterator& operator++() {
108+
++ptr_;
109+
return *this;
110+
}
111+
112+
inline bool operator==(const nbr_iterator& rhs) const {
113+
return (ptr_ == rhs.ptr_);
114+
}
115+
116+
inline bool operator!=(const nbr_iterator& rhs) const {
117+
return (ptr_ != rhs.ptr_);
118+
}
119+
120+
private:
121+
const_nbr_ptr_t ptr_;
122+
const_nbr_ptr_t end_;
123+
};
124+
125+
public:
126+
using slice_t = ImmutableNbrSlice<EDATA_T>;
127+
128+
ImmutableAdjListView(const slice_t& slice) : edges_(slice) {}
129+
130+
inline nbr_iterator begin() const {
131+
return nbr_iterator(edges_.begin(), edges_.end());
132+
}
133+
inline nbr_iterator end() const {
134+
return nbr_iterator(edges_.end(), edges_.end());
135+
}
136+
137+
inline int estimated_degree() const { return edges_.size(); }
138+
139+
private:
140+
slice_t edges_;
141+
};
142+
92143
template <typename EDATA_T>
93144
class GraphView {
94145
public:
@@ -233,6 +284,19 @@ class GraphView {
233284
timestamp_t unsorted_since_;
234285
};
235286

287+
template <typename EDATA_T>
288+
class ImmutableGraphView {
289+
public:
290+
ImmutableGraphView(const ImmutableCsr<EDATA_T>& csr) : csr_(csr) {}
291+
292+
inline ImmutableAdjListView<EDATA_T> get_edges(vid_t v) const {
293+
return ImmutableAdjListView<EDATA_T>(csr_.get_edges(v));
294+
}
295+
296+
private:
297+
const ImmutableCsr<EDATA_T>& csr_;
298+
};
299+
236300
template <typename EDATA_T>
237301
class SingleGraphView {
238302
public:
@@ -497,6 +561,22 @@ class ReadTransaction {
497561
return SingleImmutableGraphView<EDATA_T>(*csr);
498562
}
499563

564+
template <typename EDATA_T>
565+
ImmutableGraphView<EDATA_T> GetOutgoingImmutableGraphView(
566+
label_t v_label, label_t neighbor_label, label_t edge_label) const {
567+
auto csr = dynamic_cast<const ImmutableCsr<EDATA_T>*>(
568+
graph_.get_oe_csr(v_label, neighbor_label, edge_label));
569+
return ImmutableGraphView<EDATA_T>(*csr);
570+
}
571+
572+
template <typename EDATA_T>
573+
ImmutableGraphView<EDATA_T> GetIncomingImmutableGraphView(
574+
label_t v_label, label_t neighbor_label, label_t edge_label) const {
575+
auto csr = dynamic_cast<const ImmutableCsr<EDATA_T>*>(
576+
graph_.get_ie_csr(v_label, neighbor_label, edge_label));
577+
return ImmutableGraphView<EDATA_T>(*csr);
578+
}
579+
500580
const GraphDBSession& GetSession() const;
501581

502582
private:

flex/storages/rt_mutable_graph/csr/csr_base.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,13 +142,10 @@ class TypedMutableCsrBase : public TypedCsrBase<EDATA_T> {
142142
template <>
143143
class TypedCsrBase<RecordView> : public CsrBase {
144144
public:
145-
using slice_t = MutableNbrSlice<RecordView>;
146-
147145
virtual void batch_put_edge_with_index(vid_t src, vid_t dst, size_t index,
148146
timestamp_t ts = 0) = 0;
149147
virtual void put_edge_with_index(vid_t src, vid_t dst, size_t index,
150148
timestamp_t ts, Allocator& alloc) = 0;
151-
virtual slice_t get_edges(vid_t v) const = 0;
152149
};
153150

154151
} // namespace gs

0 commit comments

Comments
 (0)