Skip to content

Commit

Permalink
fix: compacting should only be done on findUnique queries (#3375)
Browse files Browse the repository at this point in the history
  • Loading branch information
Weakky committed Nov 9, 2022
1 parent 3728447 commit 8b67711
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
Expand Up @@ -34,7 +34,7 @@ mod compound_batch {

// With non unique filters
let queries = vec![
r#"query { findUniqueArtist(where: { firstName_lastName: { firstName:"Musti", lastName:"Naukio", non_unique: 0 }}) { firstName lastName non_unique }}"#.to_string()
r#"query { findUniqueArtist(where: { firstName_lastName: { firstName:"Musti", lastName:"Naukio" }, non_unique: 0}) { firstName lastName non_unique }}"#.to_string()
];
let batch_results = runner.batch(queries, false, None).await?;
insta::assert_snapshot!(
Expand Down Expand Up @@ -62,9 +62,9 @@ mod compound_batch {

// With non unique filters
let queries = vec![
r#"query {findUniqueArtist(where:{firstName_lastName:{firstName:"Musti",lastName:"Naukio", non_unique: 0}}) {firstName lastName}}"#.to_string(),
r#"query {findUniqueArtist(where:{firstName_lastName:{firstName:"Musti",lastName:"Naukio", non_unique: 1}}) {firstName lastName}}"#.to_string(),
r#"query {findUniqueArtist(where:{firstName_lastName:{firstName:"Naukio",lastName:"Musti", non_unique: null}}) {firstName lastName}}"#.to_string(),
r#"query {findUniqueArtist(where:{firstName_lastName:{firstName:"Musti",lastName:"Naukio"}, non_unique: 0}) {firstName lastName}}"#.to_string(),
r#"query {findUniqueArtist(where:{firstName_lastName:{firstName:"Musti",lastName:"Naukio"}, non_unique: 1}) {firstName lastName}}"#.to_string(),
r#"query {findUniqueArtist(where:{firstName_lastName:{firstName:"Naukio",lastName:"Musti"}, non_unique: null}) {firstName lastName}}"#.to_string(),
];
let batch_results = runner.batch(queries, false, None).await?;
insta::assert_snapshot!(
Expand Down Expand Up @@ -305,6 +305,13 @@ mod compound_batch {
]).await?;
assert!(doc.is_compact() == false);

// NO COMPACT: One of the query is not a findUnique
let doc = compact_batch(&runner, vec![
r#"query {findUniqueArtist(where:{firstName_lastName:{firstName:"NO",lastName:"AVAIL"}, non_unique: 1 }) {firstName lastName}}"#.to_string(),
r#"query {findManyArtist {firstName lastName}}"#.to_string(),
]).await?;
assert!(doc.is_compact() == false);

Ok(())
}

Expand Down Expand Up @@ -338,11 +345,14 @@ mod compound_batch {
}

async fn compact_batch(runner: &Runner, queries: Vec<String>) -> TestResult<BatchDocument> {
// Ensure queries are valid
// Ensure individual queries are valid. Helps to debug tests when writing them.
for q in queries.iter() {
run_query!(runner, q.to_string());
}

// Ensure batched queries are valid
runner.batch(queries.clone(), false, None).await?.assert_success();

let doc = GraphQlBody::Multi(MultiQuery::new(
queries.into_iter().map(Into::into).collect(),
false,
Expand Down
4 changes: 4 additions & 0 deletions query-engine/core/src/query_document/mod.rs
Expand Up @@ -71,6 +71,10 @@ impl BatchDocument {
/// - non scalar filters (ie: relation filters, boolean operators...)
/// - any scalar filters that is not `EQUALS`
fn invalid_compact_filter(op: &Operation, schema: &QuerySchemaRef) -> bool {
if !op.is_find_unique() {
return true;
}

let where_obj = op.as_read().unwrap().arguments()[0].1.clone().into_object().unwrap();
let field = schema.find_query_field(op.name()).unwrap();
let model = field.model().unwrap();
Expand Down

0 comments on commit 8b67711

Please sign in to comment.