Skip to content

Commit e1b354e

Browse files
authored
1 parent 4e1b41c commit e1b354e

3 files changed

Lines changed: 17 additions & 54 deletions

File tree

query-engine/core/src/query_ast/write.rs

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -46,27 +46,6 @@ impl WriteQuery {
4646
}
4747
}
4848

49-
/// Takes a SelectionResult and writes its contents into the write arguments of the underlying query.
50-
pub fn inject_result_into_args(&mut self, result: SelectionResult) {
51-
let model = self.model();
52-
53-
let inject = |args: &mut WriteArgs| {
54-
args.inject(result.clone());
55-
args.update_datetimes(&model);
56-
};
57-
58-
match self {
59-
Self::CreateRecord(ref mut x) => inject(&mut x.args),
60-
Self::CreateManyRecords(ref mut x) => x.args.iter_mut().map(inject).collect(),
61-
Self::UpdateRecord(ref mut x) => match x {
62-
UpdateRecord::WithSelection(u) => inject(&mut u.args),
63-
UpdateRecord::WithoutSelection(u) => inject(&mut u.args),
64-
},
65-
Self::UpdateManyRecords(x) => inject(&mut x.args),
66-
_ => (),
67-
};
68-
}
69-
7049
pub fn set_selectors(&mut self, selectors: Vec<SelectionResult>) {
7150
match self {
7251
Self::UpdateManyRecords(x) => x.set_selectors(selectors),

query-engine/core/src/query_graph_builder/write/nested/disconnect_nested.rs

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
use super::*;
22
use crate::{
3-
query_graph::{Node, NodeRef, QueryGraph, QueryGraphDependency},
4-
ParsedInputMap, ParsedInputValue, Query, WriteQuery,
3+
inputs::UpdateManyRecordsSelectorsInput,
4+
query_graph::{NodeRef, QueryGraph, QueryGraphDependency},
5+
ParsedInputMap, ParsedInputValue, RowSink,
56
};
67
use itertools::Itertools;
7-
use query_structure::{Filter, Model, PrismaValue, RelationCompare, RelationFieldRef, SelectionResult};
8+
use query_structure::{Filter, Model, PrismaValue, RelationCompare, RelationFieldRef, SelectionResult, WriteArgs};
89
use std::convert::TryInto;
910

1011
/// Handles nested disconnect cases.
@@ -194,27 +195,16 @@ fn handle_one_to_x(
194195
)
195196
};
196197

197-
let update_node = utils::update_records_node_placeholder(graph, filter, model_to_update);
198+
let write_args = WriteArgs::from_result(null_record_id, crate::executor::get_request_now());
199+
let update_node = utils::update_records_node_placeholder_with_args(graph, filter, model_to_update, write_args);
198200

199201
// Edge to inject the correct data into the update (either from the parent or child).
200202
graph.create_edge(
201203
node_to_attach,
202204
&update_node,
203-
QueryGraphDependency::ProjectedDataDependency(
205+
QueryGraphDependency::ProjectedDataSinkDependency(
204206
extractor_model_id,
205-
Box::new(move |mut update_node, links| {
206-
if links.is_empty() {
207-
return Ok(update_node);
208-
}
209-
210-
// Handle filter & arg injection
211-
if let Node::Query(Query::Write(ref mut wq @ WriteQuery::UpdateManyRecords(_))) = update_node {
212-
wq.set_selectors(links);
213-
wq.inject_result_into_args(null_record_id);
214-
};
215-
216-
Ok(update_node)
217-
}),
207+
RowSink::All(&UpdateManyRecordsSelectorsInput),
218208
None,
219209
),
220210
)?;

query-engine/core/src/query_graph_builder/write/nested/set_nested.rs

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
use super::*;
22
use crate::{
3-
inputs::{IfInput, LeftSideDiffInput, RightSideDiffInput, UpdateOrCreateArgsInput},
3+
inputs::{
4+
IfInput, LeftSideDiffInput, RightSideDiffInput, UpdateManyRecordsSelectorsInput, UpdateOrCreateArgsInput,
5+
},
46
query_ast::*,
57
query_graph::*,
68
ParsedInputValue,
79
};
810
use itertools::Itertools;
9-
use query_structure::{Filter, Model, RelationFieldRef, SelectionResult};
11+
use query_structure::{Filter, Model, RelationFieldRef, SelectionResult, WriteArgs};
1012
use std::convert::TryInto;
1113

1214
/// Only for x-to-many relations.
@@ -321,7 +323,9 @@ fn handle_one_to_many(
321323

322324
// Update (disconnect) case: Check right diff IDs.
323325
let disconnect_if_node = graph.create_node(Node::Flow(Flow::if_non_empty()));
324-
let update_disconnect_node = utils::update_records_node_placeholder(graph, Filter::empty(), child_model);
326+
let write_args = WriteArgs::from_result(empty_child_link, crate::executor::get_request_now());
327+
let update_disconnect_node =
328+
utils::update_records_node_placeholder_with_args(graph, Filter::empty(), child_model, write_args);
325329

326330
let child_side_required = parent_relation_field.related_field().is_required();
327331
let rf = parent_relation_field.clone();
@@ -341,19 +345,9 @@ fn handle_one_to_many(
341345
graph.create_edge(
342346
&diff_right_to_left_node,
343347
&update_disconnect_node,
344-
QueryGraphDependency::ProjectedDataDependency(
348+
QueryGraphDependency::ProjectedDataSinkDependency(
345349
child_model_identifier,
346-
Box::new(move |mut node, diff_right_result| {
347-
if let Node::Query(Query::Write(WriteQuery::UpdateManyRecords(ref mut ur))) = node {
348-
ur.record_filter = diff_right_result.to_vec().into();
349-
}
350-
351-
if let Node::Query(Query::Write(ref mut wq)) = node {
352-
wq.inject_result_into_args(empty_child_link);
353-
}
354-
355-
Ok(node)
356-
}),
350+
RowSink::All(&UpdateManyRecordsSelectorsInput),
357351
None,
358352
),
359353
)?;

0 commit comments

Comments
 (0)