@@ -293,15 +293,28 @@ impl<'a, 'b> NodeTranslator<'a, 'b> {
293293 let fields = self . process_edge_selections ( edge, & node, selection) ;
294294
295295 match sink {
296- RowSink :: AllRows ( field) | RowSink :: SingleRowArray ( field) => {
296+ RowSink :: All ( field) | RowSink :: ExactlyOne ( field ) | RowSink :: AtMostOne ( field) => {
297297 * field. node_input_field ( & mut node) = vec ! [ SelectionResult :: new( fields) ] ;
298298 }
299- RowSink :: SingleRow ( field) => {
299+ RowSink :: Single ( field) => {
300300 * field. node_input_field ( & mut node) = SelectionResult :: new ( fields) ;
301301 }
302- RowSink :: SingleRowFilter ( field) => {
302+ RowSink :: ExactlyOneFilter ( field) => {
303303 * field. node_input_field ( & mut node) = SelectionResult :: new ( fields) . filter ( ) ;
304304 }
305+ RowSink :: ExactlyOneWriteArgs ( selection, field) => {
306+ let result = SelectionResult :: new ( fields) ;
307+ let model = node. as_query ( ) . map ( Query :: model) ;
308+ let args = field. node_input_field ( & mut node) ;
309+ for arg in args {
310+ arg. inject ( selection. assimilate ( result. clone ( ) ) . map_err ( |err| {
311+ TranslateError :: GraphBuildError ( QueryGraphBuilderError :: DomainError ( err) )
312+ } ) ?) ;
313+ if let Some ( model) = & model {
314+ arg. update_datetimes ( model) ;
315+ }
316+ }
317+ }
305318 RowSink :: Discard => { }
306319 }
307320 }
@@ -432,11 +445,8 @@ impl<'a, 'b> NodeTranslator<'a, 'b> {
432445
433446 let requires_unique = matches ! (
434447 edge_content,
435- Some ( QueryGraphDependency :: ProjectedDataSinkDependency (
436- _,
437- RowSink :: SingleRow ( _) | RowSink :: SingleRowArray ( _) | RowSink :: SingleRowFilter ( _) ,
438- _
439- ) )
448+ Some ( QueryGraphDependency :: ProjectedDataSinkDependency ( _, sink, _) )
449+ if sink. is_unique( )
440450 ) ;
441451
442452 let source = self . graph . edge_source ( & edge) ;
0 commit comments