@@ -93,7 +93,7 @@ UpdateTransaction::UpdateTransaction(const GraphDBSession& session,
9393 extra_vertex_properties_[i].resize (4096 );
9494 }
9595
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 () ;
9797 added_edges_.resize (csr_num);
9898 updated_edge_data_.resize (csr_num);
9999}
@@ -560,7 +560,6 @@ void UpdateTransaction::IngestWal(MutablePropertyFragment& graph,
560560 updated_edge_data;
561561
562562 size_t vertex_label_num = graph.schema ().vertex_label_num ();
563- size_t edge_label_num = graph.schema ().edge_label_num ();
564563
565564 for (label_t idx = 0 ; idx < vertex_label_num; ++idx) {
566565 if (graph.lf_indexers_ [idx].get_type () == PropertyType::kInt64 ) {
@@ -603,7 +602,7 @@ void UpdateTransaction::IngestWal(MutablePropertyFragment& graph,
603602 extra_vertex_properties[i].resize (4096 );
604603 }
605604
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 () ;
607606 added_edges.resize (csr_num);
608607 updated_edge_data.resize (csr_num);
609608
@@ -681,16 +680,14 @@ void UpdateTransaction::IngestWal(MutablePropertyFragment& graph,
681680
682681size_t UpdateTransaction::get_in_csr_index (label_t src_label, label_t dst_label,
683682 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);
686684}
687685
688686size_t UpdateTransaction::get_out_csr_index (label_t src_label,
689687 label_t dst_label,
690688 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 ();
694691}
695692
696693bool UpdateTransaction::oid_to_lid (label_t label, const Any& oid,
@@ -820,89 +817,89 @@ void UpdateTransaction::applyVerticesUpdates() {
820817}
821818
822819void 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+ }
833832
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 " ;
851848 }
852849 }
850+ }
851+ }
853852
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 ;
857856
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_);
875872 }
876873 }
877874 }
878875
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 " ;
906903 }
907904 }
908905 }
0 commit comments