Skip to content

Commit

Permalink
Fixed skip bug
Browse files Browse the repository at this point in the history
using builder
  • Loading branch information
Druue committed Nov 30, 2023
1 parent 90b35f3 commit 8401c12
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ mod distinct {
{ id }
}")
),
// r#"{"data":{"findManyUser":[{"id":1},{"id":2}]}}"#
@r###"{"data":{"findManyUser":[{"id":2},{"id":1}]}}"###
);

Expand Down Expand Up @@ -102,9 +101,7 @@ mod distinct {
{ id, first_name, last_name }
}")
),
// r#"{"data":{"findManyUser":[{"id":2,"first_name":"Hans","last_name":"Wurst"}]}}"#
// ! SELECT DISTINCT ON expressions must match initial ORDER BY expressions
@r###"{"data":{"findManyUser":[{"id":2,"first_name":"Hans","last_name":"Wurst"},{"id":3,"first_name":"Joe","last_name":"Doe"}]}}"###
@r###"{"data":{"findManyUser":[{"id":2,"first_name":"Hans","last_name":"Wurst"}]}}"###
);

Ok(())
Expand Down Expand Up @@ -156,8 +153,6 @@ mod distinct {
{ id, first_name, last_name }
}")
),
// r#"{"data":{"findManyUser":[{"id":3,"first_name":"Joe","last_name":"Doe"},{"id":2,"first_name":"Hans","last_name":"Wurst"}]}}"#
// ! SELECT DISTINCT ON expressions must match initial ORDER BY expressions
@r###"{"data":{"findManyUser":[{"id":3,"first_name":"Joe","last_name":"Doe"},{"id":2,"first_name":"Hans","last_name":"Wurst"}]}}"###
);

Expand Down Expand Up @@ -185,8 +180,6 @@ mod distinct {
}
}}")
),
// {"data":{"findManyUser":[{"id":1,"posts":[{"title":"3"},{"title":"1"},{"title":"2"}]},{"id":3,"posts":[]},{"id":4,"posts":[{"title":"1"}]},{"id":5,"posts":[{"title":"2"},{"title":"3"}]}]}}
// ! SELECT DISTINCT ON expressions must match initial ORDER BY expressions
@r###"{"data":{"findManyUser":[{"id":1,"posts":[{"title":"3"},{"title":"1"},{"title":"2"}]},{"id":4,"posts":[{"title":"1"}]},{"id":3,"posts":[]},{"id":5,"posts":[{"title":"2"},{"title":"3"}]}]}}"###
);

Expand Down Expand Up @@ -216,8 +209,6 @@ mod distinct {
}
}"}
),
// {"data":{"findManyUser":[{"id":5,"posts":[{"title":"2"},{"title":"3"}]},{"id":4,"posts":[{"title":"1"}]},{"id":3,"posts":[]},{"id":2,"posts":[{"title":"2"},{"title":"1"}]}]}}
// ! SELECT DISTINCT ON expressions must match initial ORDER BY expressions
@r###"{"data":{"findManyUser":[{"id":5,"posts":[{"title":"2"},{"title":"3"}]},{"id":4,"posts":[{"title":"1"}]},{"id":3,"posts":[]},{"id":2,"posts":[{"title":"2"},{"title":"1"}]}]}}"###
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,38 +199,46 @@ pub struct InMemoryRecordProcessorBuilder {
}

impl InMemoryRecordProcessorBuilder {
pub fn new(model: Model, order_by: Vec<OrderBy>, ignore_skip: bool, ignore_take: bool) -> Self {
pub fn new(model: Model) -> Self {
Self {
args: QueryArguments {
model,
cursor: None,
take: None,
skip: None,
filter: None,
order_by,
order_by: Default::default(),
distinct: None,
ignore_skip,
ignore_take,
ignore_skip: false,
ignore_take: false,
},
}
}
pub fn _cursor(mut self, cursor: SelectionResult) -> Self {
self.args.cursor = Some(cursor);

pub fn cursor(mut self, cursor: &mut Option<SelectionResult>) -> Self {
self.args.cursor = cursor.clone();
self
}

pub fn take(mut self, args: &mut QueryArguments) -> Self {
self.args.take = args.take;
args.ignore_take = true;
self
}

pub fn _take(mut self, take: i64) -> Self {
self.args.take = Some(take);
pub fn skip(mut self, args: &mut QueryArguments) -> Self {
self.args.skip = args.skip;
args.ignore_skip = true;
self
}

pub fn _skip(mut self, skip: i64) -> Self {
self.args.skip = Some(skip);
pub fn filter(mut self, filter: Option<Filter>) -> Self {
self.args.filter = filter;
self
}

pub fn _filter(mut self, filter: Filter) -> Self {
self.args.filter = Some(filter);
pub fn order_by(mut self, order_by: Vec<OrderBy>) -> Self {
self.args.order_by = order_by;
self
}

Expand Down
29 changes: 16 additions & 13 deletions query-engine/core/src/interpreter/query_interpreters/nested_read.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,21 @@ pub(crate) async fn m2m(
parent_result: Option<&ManyRecords>,
trace_id: Option<String>,
) -> InterpretationResult<(ManyRecords, Option<Vec<RelAggregationRow>>)> {
let inm_builder = InMemoryRecordProcessorBuilder::new(
query.args.model.clone(),
query.args.order_by.clone(),
query.args.ignore_skip,
query.args.ignore_take,
);
let inm_builder = InMemoryRecordProcessorBuilder::new(query.args.model.clone());

let inm_builder = if query.args.requires_inmemory_distinct() {
inm_builder.distinct(&mut query.args.distinct.clone())
} else {
inm_builder
};

let processor = inm_builder.build();
let processor = inm_builder
.cursor(&mut query.args.cursor)
.take(&mut query.args)
.skip(&mut query.args)
.filter(query.args.filter.clone())
.order_by(query.args.order_by.clone())
.build();

let parent_field = &query.parent_field;
let child_link_id = parent_field.related_field().linking_fields();
Expand Down Expand Up @@ -209,19 +210,21 @@ pub async fn one2m(
let processor = if uniq_selections.len() == 1 && !query_args.requires_inmemory_processing() {
None
} else {
let inm_builder = InMemoryRecordProcessorBuilder::new(
query_args.model.clone(),
query_args.order_by.clone(),
query_args.ignore_skip,
query_args.ignore_take,
);
let inm_builder = InMemoryRecordProcessorBuilder::new(query_args.model.clone());

let inm_builder = if req_inmem_distinct {
inm_builder.distinct(&mut query_args.distinct)
} else {
inm_builder
};

let inm_builder = inm_builder
.cursor(&mut query_args.cursor)
.take(&mut query_args)
.skip(&mut query_args)
.filter(query_args.filter.clone())
.order_by(query_args.order_by.clone());

Some(inm_builder.build())
};

Expand Down
17 changes: 9 additions & 8 deletions query-engine/core/src/interpreter/query_interpreters/read.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,20 +91,21 @@ fn read_many(
let req_inmem_distinct = query.args.requires_inmemory_distinct();

let processor = if query.args.requires_inmemory_processing() {
let inm_builder = InMemoryRecordProcessorBuilder::new(
query.args.model.clone(),
query.args.order_by.clone(),
query.args.ignore_skip,
query.args.ignore_take,
);

dbg!(req_inmem_distinct);
let inm_builder = InMemoryRecordProcessorBuilder::new(query.args.model.clone());

let inm_builder = if req_inmem_distinct {
inm_builder.distinct(&mut query.args.distinct)
} else {
inm_builder
};

let inm_builder = inm_builder
.cursor(&mut query.args.cursor)
.take(&mut query.args)
.skip(&mut query.args)
.filter(query.args.filter.clone())
.order_by(query.args.order_by.clone());

Some(inm_builder.build())
} else {
None
Expand Down

0 comments on commit 8401c12

Please sign in to comment.