@@ -1122,6 +1122,7 @@ impl<'a> DependentNodeLabelAnalyzer<'a> {
11221122#[ async_trait]
11231123impl StorageFactoryBase for Factory {
11241124 type Spec = Spec ;
1125+ type DeclarationSpec = ( ) ;
11251126 type SetupState = RelationshipSetupState ;
11261127 type Key = GraphElement ;
11271128 type ExportContext = ExportContext ;
@@ -1132,82 +1133,89 @@ impl StorageFactoryBase for Factory {
11321133
11331134 fn build (
11341135 self : Arc < Self > ,
1135- _name : String ,
1136- spec : Spec ,
1137- key_fields_schema : Vec < FieldSchema > ,
1138- value_fields_schema : Vec < FieldSchema > ,
1139- index_options : IndexOptions ,
1136+ data_collections : Vec < TypedExportDataCollectionSpec < Self > > ,
1137+ _declarations : Vec < ( ) > ,
11401138 context : Arc < FlowInstanceContext > ,
1141- ) -> Result < TypedExportTargetBuildOutput < Self > > {
1142- let setup_key = GraphElement :: from_spec ( & spec) ;
1143-
1144- let ( value_fields_info, rel_end_label_info) = match & spec. mapping {
1145- GraphElementMapping :: Node ( _) => (
1146- value_fields_schema
1147- . into_iter ( )
1148- . enumerate ( )
1149- . map ( |( field_idx, field_schema) | AnalyzedGraphFieldMapping {
1150- field_idx,
1151- field_name : field_schema. name . clone ( ) ,
1152- value_type : field_schema. value_type . typ . clone ( ) ,
1153- } )
1154- . collect ( ) ,
1155- None ,
1156- ) ,
1157- GraphElementMapping :: Relationship ( rel_spec) => {
1158- let mut src_label_analyzer =
1159- DependentNodeLabelAnalyzer :: new ( & rel_spec, & rel_spec. source ) ?;
1160- let mut tgt_label_analyzer =
1161- DependentNodeLabelAnalyzer :: new ( & rel_spec, & rel_spec. target ) ?;
1162- let mut value_fields_info = vec ! [ ] ;
1163- for ( field_idx, field_schema) in value_fields_schema. iter ( ) . enumerate ( ) {
1164- if !src_label_analyzer. process_field ( field_idx, field_schema)
1165- && !tgt_label_analyzer. process_field ( field_idx, field_schema)
1166- {
1167- value_fields_info. push ( AnalyzedGraphFieldMapping {
1168- field_idx,
1169- field_name : field_schema. name . clone ( ) ,
1170- value_type : field_schema. value_type . typ . clone ( ) ,
1171- } ) ;
1139+ ) -> Result < (
1140+ Vec < TypedExportDataCollectionBuildOutput < Self > > ,
1141+ Vec < ( GraphElement , RelationshipSetupState ) > ,
1142+ ) > {
1143+ let data_coll_output = data_collections
1144+ . into_iter ( )
1145+ . map ( |d| {
1146+ let setup_key = GraphElement :: from_spec ( & d. spec ) ;
1147+
1148+ let ( value_fields_info, rel_end_label_info) = match & d. spec . mapping {
1149+ GraphElementMapping :: Node ( _) => (
1150+ d. value_fields_schema
1151+ . into_iter ( )
1152+ . enumerate ( )
1153+ . map ( |( field_idx, field_schema) | AnalyzedGraphFieldMapping {
1154+ field_idx,
1155+ field_name : field_schema. name . clone ( ) ,
1156+ value_type : field_schema. value_type . typ . clone ( ) ,
1157+ } )
1158+ . collect ( ) ,
1159+ None ,
1160+ ) ,
1161+ GraphElementMapping :: Relationship ( rel_spec) => {
1162+ let mut src_label_analyzer =
1163+ DependentNodeLabelAnalyzer :: new ( & rel_spec, & rel_spec. source ) ?;
1164+ let mut tgt_label_analyzer =
1165+ DependentNodeLabelAnalyzer :: new ( & rel_spec, & rel_spec. target ) ?;
1166+ let mut value_fields_info = vec ! [ ] ;
1167+ for ( field_idx, field_schema) in d. value_fields_schema . iter ( ) . enumerate ( ) {
1168+ if !src_label_analyzer. process_field ( field_idx, field_schema)
1169+ && !tgt_label_analyzer. process_field ( field_idx, field_schema)
1170+ {
1171+ value_fields_info. push ( AnalyzedGraphFieldMapping {
1172+ field_idx,
1173+ field_name : field_schema. name . clone ( ) ,
1174+ value_type : field_schema. value_type . typ . clone ( ) ,
1175+ } ) ;
1176+ }
1177+ }
1178+ let src_label_info = src_label_analyzer. build ( ) ?;
1179+ let tgt_label_info = tgt_label_analyzer. build ( ) ?;
1180+ ( value_fields_info, Some ( ( src_label_info, tgt_label_info) ) )
11721181 }
1173- }
1174- let src_label_info = src_label_analyzer. build ( ) ?;
1175- let tgt_label_info = tgt_label_analyzer. build ( ) ?;
1176- ( value_fields_info, Some ( ( src_label_info, tgt_label_info) ) )
1177- }
1178- } ;
1179-
1180- let desired_setup_state = RelationshipSetupState :: new (
1181- & spec,
1182- key_fields_schema. iter ( ) . map ( |f| f. name . clone ( ) ) . collect ( ) ,
1183- & index_options,
1184- & value_fields_info,
1185- rel_end_label_info. as_ref ( ) ,
1186- ) ?;
1182+ } ;
11871183
1188- let conn_spec = context
1189- . auth_registry
1190- . get :: < ConnectionSpec > ( & spec. connection ) ?;
1191- let executors = async move {
1192- let graph = self . graph_pool . get_graph ( & conn_spec) . await ?;
1193- let executor = Arc :: new ( ExportContext :: new (
1194- graph,
1195- spec,
1196- key_fields_schema,
1197- value_fields_info,
1198- rel_end_label_info,
1199- ) ?) ;
1200- Ok ( TypedExportTargetExecutors {
1201- export_context : executor,
1202- query_target : None ,
1184+ let desired_setup_state = RelationshipSetupState :: new (
1185+ & d. spec ,
1186+ d. key_fields_schema . iter ( ) . map ( |f| f. name . clone ( ) ) . collect ( ) ,
1187+ & d. index_options ,
1188+ & value_fields_info,
1189+ rel_end_label_info. as_ref ( ) ,
1190+ ) ?;
1191+
1192+ let conn_spec = context
1193+ . auth_registry
1194+ . get :: < ConnectionSpec > ( & d. spec . connection ) ?;
1195+ let factory = self . clone ( ) ;
1196+ let executors = async move {
1197+ let graph = factory. graph_pool . get_graph ( & conn_spec) . await ?;
1198+ let executor = Arc :: new ( ExportContext :: new (
1199+ graph,
1200+ d. spec ,
1201+ d. key_fields_schema ,
1202+ value_fields_info,
1203+ rel_end_label_info,
1204+ ) ?) ;
1205+ Ok ( TypedExportTargetExecutors {
1206+ export_context : executor,
1207+ query_target : None ,
1208+ } )
1209+ }
1210+ . boxed ( ) ;
1211+ Ok ( TypedExportDataCollectionBuildOutput {
1212+ executors,
1213+ setup_key,
1214+ desired_setup_state,
1215+ } )
12031216 } )
1204- }
1205- . boxed ( ) ;
1206- Ok ( TypedExportTargetBuildOutput {
1207- executors,
1208- setup_key,
1209- desired_setup_state,
1210- } )
1217+ . collect :: < Result < Vec < _ > > > ( ) ?;
1218+ Ok ( ( data_coll_output, vec ! [ ] ) )
12111219 }
12121220
12131221 fn check_setup_status (
0 commit comments