@@ -93,7 +93,7 @@ UpdateTransaction::UpdateTransaction(const GraphDBSession& session,
93
93
extra_vertex_properties_[i].resize (4096 );
94
94
}
95
95
96
- size_t csr_num = 2 * vertex_label_num_ * vertex_label_num_ * edge_label_num_ ;
96
+ size_t csr_num = 2 * schema (). get_edge_triplet_num () ;
97
97
added_edges_.resize (csr_num);
98
98
updated_edge_data_.resize (csr_num);
99
99
}
@@ -560,7 +560,6 @@ void UpdateTransaction::IngestWal(MutablePropertyFragment& graph,
560
560
updated_edge_data;
561
561
562
562
size_t vertex_label_num = graph.schema ().vertex_label_num ();
563
- size_t edge_label_num = graph.schema ().edge_label_num ();
564
563
565
564
for (label_t idx = 0 ; idx < vertex_label_num; ++idx) {
566
565
if (graph.lf_indexers_ [idx].get_type () == PropertyType::kInt64 ) {
@@ -603,7 +602,7 @@ void UpdateTransaction::IngestWal(MutablePropertyFragment& graph,
603
602
extra_vertex_properties[i].resize (4096 );
604
603
}
605
604
606
- size_t csr_num = 2 * vertex_label_num * vertex_label_num * edge_label_num ;
605
+ size_t csr_num = 2 * graph. schema (). get_edge_triplet_num () ;
607
606
added_edges.resize (csr_num);
608
607
updated_edge_data.resize (csr_num);
609
608
@@ -681,16 +680,14 @@ void UpdateTransaction::IngestWal(MutablePropertyFragment& graph,
681
680
682
681
size_t UpdateTransaction::get_in_csr_index (label_t src_label, label_t dst_label,
683
682
label_t edge_label) const {
684
- return src_label * vertex_label_num_ * edge_label_num_ +
685
- dst_label * edge_label_num_ + edge_label;
683
+ return graph_.schema ().get_edge_triplet_id (src_label, dst_label, edge_label);
686
684
}
687
685
688
686
size_t UpdateTransaction::get_out_csr_index (label_t src_label,
689
687
label_t dst_label,
690
688
label_t edge_label) const {
691
- return src_label * vertex_label_num_ * edge_label_num_ +
692
- dst_label * edge_label_num_ + edge_label +
693
- vertex_label_num_ * vertex_label_num_ * edge_label_num_;
689
+ return graph_.schema ().get_edge_triplet_id (dst_label, src_label, edge_label) +
690
+ graph_.schema ().get_edge_triplet_num ();
694
691
}
695
692
696
693
bool UpdateTransaction::oid_to_lid (label_t label, const Any& oid,
@@ -820,89 +817,89 @@ void UpdateTransaction::applyVerticesUpdates() {
820
817
}
821
818
822
819
void UpdateTransaction::applyEdgesUpdates () {
823
- for (label_t src_label = 0 ; src_label < vertex_label_num_; ++src_label) {
824
- for (label_t dst_label = 0 ; dst_label < vertex_label_num_; ++dst_label) {
825
- for (label_t edge_label = 0 ; edge_label < edge_label_num_; ++edge_label) {
826
- size_t oe_csr_index =
827
- get_out_csr_index (src_label, dst_label, edge_label);
828
- for (auto & pair : updated_edge_data_[oe_csr_index]) {
829
- auto & updates = pair.second ;
830
- if (updates.empty ()) {
831
- continue ;
832
- }
820
+ for (size_t index = 0 ; index < graph_.schema ().get_edge_triplet_num ();
821
+ ++index ) {
822
+ auto edge_triplet = graph_.schema ().get_edge_triplet (index );
823
+ label_t src_label = std::get<0 >(edge_triplet);
824
+ label_t dst_label = std::get<1 >(edge_triplet);
825
+ label_t edge_label = std::get<2 >(edge_triplet);
826
+ size_t oe_csr_index = get_out_csr_index (src_label, dst_label, edge_label);
827
+ for (auto & pair : updated_edge_data_[oe_csr_index]) {
828
+ auto & updates = pair.second ;
829
+ if (updates.empty ()) {
830
+ continue ;
831
+ }
833
832
834
- std::shared_ptr<CsrEdgeIterBase> edge_iter =
835
- graph_.get_outgoing_edges_mut (src_label, pair.first , dst_label,
836
- edge_label);
837
- for (auto & edge : updates) {
838
- if (edge.second .second != std::numeric_limits<size_t >::max ()) {
839
- auto & iter = *edge_iter;
840
- iter += edge.second .second ;
841
- if (iter.is_valid () && iter.get_neighbor () == edge.first ) {
842
- iter.set_data (edge.second .first , timestamp_);
843
- } else if (iter.is_valid () && iter.get_neighbor () != edge.first ) {
844
- LOG (FATAL) << " Inconsistent neighbor id:" << iter.get_neighbor ()
845
- << " " << edge.first << " \n " ;
846
- } else {
847
- LOG (FATAL) << " Illegal offset: " << edge.first << " "
848
- << edge.second .second << " \n " ;
849
- }
850
- }
833
+ std::shared_ptr<CsrEdgeIterBase> edge_iter =
834
+ graph_.get_outgoing_edges_mut (src_label, pair.first , dst_label,
835
+ edge_label);
836
+ for (auto & edge : updates) {
837
+ if (edge.second .second != std::numeric_limits<size_t >::max ()) {
838
+ auto & iter = *edge_iter;
839
+ iter += edge.second .second ;
840
+ if (iter.is_valid () && iter.get_neighbor () == edge.first ) {
841
+ iter.set_data (edge.second .first , timestamp_);
842
+ } else if (iter.is_valid () && iter.get_neighbor () != edge.first ) {
843
+ LOG (FATAL) << " Inconsistent neighbor id:" << iter.get_neighbor ()
844
+ << " " << edge.first << " \n " ;
845
+ } else {
846
+ LOG (FATAL) << " Illegal offset: " << edge.first << " "
847
+ << edge.second .second << " \n " ;
851
848
}
852
849
}
850
+ }
851
+ }
853
852
854
- for (auto & pair : added_edges_[oe_csr_index]) {
855
- vid_t v = pair.first ;
856
- auto & add_list = pair.second ;
853
+ for (auto & pair : added_edges_[oe_csr_index]) {
854
+ vid_t v = pair.first ;
855
+ auto & add_list = pair.second ;
857
856
858
- if (add_list.empty ()) {
859
- continue ;
860
- }
861
- std::sort (add_list.begin (), add_list.end ());
862
- auto & edge_data = updated_edge_data_[oe_csr_index].at (v);
863
- for (size_t idx = 0 ; idx < add_list.size (); ++idx) {
864
- if (idx && add_list[idx] == add_list[idx - 1 ])
865
- continue ;
866
- auto u = add_list[idx];
867
- auto value = edge_data.at (u).first ;
868
- grape::InArchive iarc;
869
- serialize_field (iarc, value);
870
- grape::OutArchive oarc (std::move (iarc));
871
- graph_.IngestEdge (src_label, v, dst_label, u, edge_label,
872
- timestamp_, oarc, alloc_);
873
- }
874
- }
857
+ if (add_list.empty ()) {
858
+ continue ;
859
+ }
860
+ std::sort (add_list.begin (), add_list.end ());
861
+ auto & edge_data = updated_edge_data_[oe_csr_index].at (v);
862
+ for (size_t idx = 0 ; idx < add_list.size (); ++idx) {
863
+ if (idx && add_list[idx] == add_list[idx - 1 ])
864
+ continue ;
865
+ auto u = add_list[idx];
866
+ auto value = edge_data.at (u).first ;
867
+ grape::InArchive iarc;
868
+ serialize_field (iarc, value);
869
+ grape::OutArchive oarc (std::move (iarc));
870
+ graph_.IngestEdge (src_label, v, dst_label, u, edge_label, timestamp_,
871
+ oarc, alloc_);
875
872
}
876
873
}
877
874
}
878
875
879
- for (label_t src_label = 0 ; src_label < vertex_label_num_; ++src_label) {
880
- for ( label_t dst_label = 0 ; dst_label < vertex_label_num_; ++dst_label ) {
881
- for ( label_t edge_label = 0 ; edge_label < edge_label_num_; ++edge_label) {
882
- size_t ie_csr_index =
883
- get_in_csr_index (src_label, dst_label, edge_label );
884
- for ( auto & pair : updated_edge_data_[ie_csr_index]) {
885
- auto & updates = pair. second ;
886
- if (updates. empty () ) {
887
- continue ;
888
- }
889
- std::shared_ptr<CsrEdgeIterBase> edge_iter =
890
- graph_. get_incoming_edges_mut (dst_label, pair. first , src_label,
891
- edge_label);
892
- for ( auto & edge : updates) {
893
- if (edge. second . second != std::numeric_limits< size_t >:: max ()) {
894
- auto & iter = *edge_iter;
895
- iter += edge.second .second ;
896
- if (iter. is_valid () && iter. get_neighbor () == edge. first ) {
897
- iter. set_data ( edge.second .first , timestamp_) ;
898
- } else if (iter.is_valid () && iter.get_neighbor () ! = edge.first ) {
899
- LOG (FATAL) << " Inconsistent neighbor id: " << iter.get_neighbor ()
900
- << " " << edge.first << " \n " ;
901
- } else {
902
- LOG (FATAL) << " Illegal offset: " << edge.first << " "
903
- << edge. second . second << " \n " ;
904
- }
905
- }
876
+ for (size_t index = 0 ; index < graph_. schema (). get_edge_triplet_num ();
877
+ ++ index ) {
878
+ auto edge_triplet = graph_. schema (). get_edge_triplet ( index );
879
+ label_t src_label = std::get< 0 >(edge_triplet);
880
+ label_t dst_label = std::get< 1 >(edge_triplet );
881
+ label_t edge_label = std::get< 2 >(edge_triplet);
882
+ size_t ie_csr_index = get_in_csr_index (src_label, dst_label, edge_label) ;
883
+ for ( auto & pair : updated_edge_data_[ie_csr_index] ) {
884
+ auto & updates = pair. second ;
885
+ if (updates. empty ()) {
886
+ continue ;
887
+ }
888
+ std::shared_ptr<CsrEdgeIterBase> edge_iter =
889
+ graph_. get_incoming_edges_mut (dst_label, pair. first , src_label,
890
+ edge_label);
891
+ for ( auto & edge : updates) {
892
+ if ( edge.second .second != std::numeric_limits< size_t >:: max ()) {
893
+ auto & iter = *edge_iter;
894
+ iter += edge.second .second ;
895
+ if (iter.is_valid () && iter.get_neighbor () = = edge.first ) {
896
+ iter.set_data (edge. second . first , timestamp_);
897
+ } else if (iter. is_valid () && iter. get_neighbor () != edge.first ) {
898
+ LOG (FATAL) << " Inconsistent neighbor id: " << iter. get_neighbor ()
899
+ << " " << edge.first << " \n " ;
900
+ } else {
901
+ LOG (FATAL) << " Illegal offset: " << edge. first << " "
902
+ << edge. second . second << " \n " ;
906
903
}
907
904
}
908
905
}
0 commit comments