@@ -140,7 +140,107 @@ class ArrowFragmentLoader {
140
140
return e_tables;
141
141
}
142
142
143
- boost::leaf::result<vineyard::ObjectID> AddVertices (
143
+ boost::leaf::result<vineyard::ObjectID> AddLabelsToGraph (
144
+ vineyard::ObjectID frag_id) {
145
+ if (!graph_info_->vertices .empty () && !graph_info_->edges .empty ()) {
146
+ return addVerticesAndEdges (frag_id);
147
+ } else if (!graph_info_->vertices .empty ()) {
148
+ return addVertices (frag_id);
149
+ } else {
150
+ return addEdges (frag_id);
151
+ }
152
+ return vineyard::InvalidObjectID ();
153
+ }
154
+
155
+ boost::leaf::result<vineyard::ObjectID> addVerticesAndEdges (
156
+ vineyard::ObjectID frag_id) {
157
+ BOOST_LEAF_AUTO (partitioner, initPartitioner ());
158
+ BOOST_LEAF_AUTO (partial_v_tables, LoadVertexTables ());
159
+ BOOST_LEAF_AUTO (partial_e_tables, LoadEdgeTables ());
160
+
161
+ auto basic_fragment_loader = std::make_shared<
162
+ vineyard::BasicEVFragmentLoader<OID_T, VID_T, partitioner_t >>(
163
+ client_, comm_spec_, partitioner, directed_, true , generate_eid_);
164
+ auto frag = std::static_pointer_cast<vineyard::ArrowFragment<oid_t , vid_t >>(
165
+ client_.GetObject (frag_id));
166
+ for (auto table : partial_v_tables) {
167
+ auto meta = table->schema ()->metadata ();
168
+ if (meta == nullptr ) {
169
+ RETURN_GS_ERROR (vineyard::ErrorCode::kInvalidValueError ,
170
+ " Metadata of input vertex tables shouldn't be empty." );
171
+ }
172
+ int label_meta_index = meta->FindKey (LABEL_TAG);
173
+ if (label_meta_index == -1 ) {
174
+ RETURN_GS_ERROR (
175
+ vineyard::ErrorCode::kInvalidValueError ,
176
+ " Metadata of input vertex tables should contain label name." );
177
+ }
178
+ std::string label_name = meta->value (label_meta_index);
179
+ BOOST_LEAF_CHECK (
180
+ basic_fragment_loader->AddVertexTable (label_name, table));
181
+ }
182
+ partial_v_tables.clear ();
183
+ auto old_vm_ptr = frag->GetVertexMap ();
184
+ BOOST_LEAF_CHECK (
185
+ basic_fragment_loader->ConstructVertices (old_vm_ptr->id ()));
186
+
187
+ label_id_t pre_label_num = old_vm_ptr->label_num ();
188
+ auto schema = frag->schema ();
189
+ std::map<std::string, label_id_t > vertex_label_to_index;
190
+ for (auto & entry : schema.vertex_entries ()) {
191
+ vertex_label_to_index[entry.label ] = entry.id ;
192
+ }
193
+ auto new_labels_index = basic_fragment_loader->get_vertex_label_to_index ();
194
+ for (auto & pair : new_labels_index) {
195
+ vertex_label_to_index[pair.first ] = pair.second + pre_label_num;
196
+ }
197
+ basic_fragment_loader->set_vertex_label_to_index (
198
+ std::move (vertex_label_to_index));
199
+ for (auto & table_vec : partial_e_tables) {
200
+ for (auto table : table_vec) {
201
+ auto meta = table->schema ()->metadata ();
202
+ if (meta == nullptr ) {
203
+ RETURN_GS_ERROR (vineyard::ErrorCode::kInvalidValueError ,
204
+ " Metadata of input edge tables shouldn't be empty." );
205
+ }
206
+
207
+ int label_meta_index = meta->FindKey (LABEL_TAG);
208
+ if (label_meta_index == -1 ) {
209
+ RETURN_GS_ERROR (
210
+ vineyard::ErrorCode::kInvalidValueError ,
211
+ " Metadata of input edge tables should contain label name." );
212
+ }
213
+ std::string label_name = meta->value (label_meta_index);
214
+
215
+ int src_label_meta_index = meta->FindKey (SRC_LABEL_TAG);
216
+ if (src_label_meta_index == -1 ) {
217
+ RETURN_GS_ERROR (
218
+ vineyard::ErrorCode::kInvalidValueError ,
219
+ " Metadata of input edge tables should contain src label name." );
220
+ }
221
+ std::string src_label_name = meta->value (src_label_meta_index);
222
+
223
+ int dst_label_meta_index = meta->FindKey (DST_LABEL_TAG);
224
+ if (dst_label_meta_index == -1 ) {
225
+ RETURN_GS_ERROR (
226
+ vineyard::ErrorCode::kInvalidValueError ,
227
+ " Metadata of input edge tables should contain dst label name." );
228
+ }
229
+ std::string dst_label_name = meta->value (dst_label_meta_index);
230
+
231
+ BOOST_LEAF_CHECK (basic_fragment_loader->AddEdgeTable (
232
+ src_label_name, dst_label_name, label_name, table));
233
+ }
234
+ }
235
+
236
+ partial_e_tables.clear ();
237
+
238
+ BOOST_LEAF_CHECK (basic_fragment_loader->ConstructEdges (
239
+ schema.all_edge_label_num (), schema.all_vertex_label_num ()));
240
+ return basic_fragment_loader->AddVerticesAndEdgesToFragment (frag);
241
+ }
242
+
243
+ boost::leaf::result<vineyard::ObjectID> addVertices (
144
244
vineyard::ObjectID frag_id) {
145
245
BOOST_LEAF_AUTO (partitioner, initPartitioner ());
146
246
BOOST_LEAF_AUTO (partial_v_tables, LoadVertexTables ());
@@ -175,7 +275,7 @@ class ArrowFragmentLoader {
175
275
return basic_fragment_loader->AddVerticesToFragment (frag);
176
276
}
177
277
178
- boost::leaf::result<vineyard::ObjectID> AddEdges (vineyard::ObjectID frag_id) {
278
+ boost::leaf::result<vineyard::ObjectID> addEdges (vineyard::ObjectID frag_id) {
179
279
BOOST_LEAF_AUTO (partitioner, initPartitioner ());
180
280
BOOST_LEAF_AUTO (partial_e_tables, LoadEdgeTables ());
181
281
@@ -366,16 +466,9 @@ class ArrowFragmentLoader {
366
466
}
367
467
}
368
468
369
- boost::leaf::result<vineyard::ObjectID> AddVerticesAsFragmentGroup (
370
- vineyard::ObjectID frag_id) {
371
- BOOST_LEAF_AUTO (new_frag_id, AddVertices (frag_id));
372
- VY_OK_OR_RAISE (client_.Persist (new_frag_id));
373
- return vineyard::ConstructFragmentGroup (client_, new_frag_id, comm_spec_);
374
- }
375
-
376
- boost::leaf::result<vineyard::ObjectID> AddEdgesAsFragmentGroup (
469
+ boost::leaf::result<vineyard::ObjectID> AddLabelsToGraphAsFragmentGroup (
377
470
vineyard::ObjectID frag_id) {
378
- BOOST_LEAF_AUTO (new_frag_id, AddEdges (frag_id));
471
+ BOOST_LEAF_AUTO (new_frag_id, AddLabelsToGraph (frag_id));
379
472
VY_OK_OR_RAISE (client_.Persist (new_frag_id));
380
473
return vineyard::ConstructFragmentGroup (client_, new_frag_id, comm_spec_);
381
474
}
0 commit comments