Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix cache pollution for in/nin filter expressions #6711

Merged
merged 1 commit into from
Nov 21, 2023
Merged

Fix cache pollution for in/nin filter expressions #6711

merged 1 commit into from
Nov 21, 2023

Conversation

nikolai-mb
Copy link
Contributor

@nikolai-mb nikolai-mb commented Nov 21, 2023

Closes #6091

Changes FilterExpressionBuilder to use lambda expression for in/nin instead of constant.

Fixes cache pollution for EF Core queries using IN and NIN filter operators as well as database query plan pollution.

EF now creates properly parameterised queries when using these filter operators.

Example query:

query {
  cars(where: { id: { in: [ 1, 2, 3 ] } } ) {
    id
  }
}

SQL generated before this change:

      SELECT c."Id"
      FROM "Cars" AS c
      WHERE c."Id" IN (1, 2, 3)
      LIMIT @__p_0

SQL generated with changes proposed:

      SELECT c."Id"
      FROM "Cars" AS c
      WHERE c."Id" = ANY (@__p_0)
      LIMIT @__p_1

SQL samples are from postgres. This fix also applies to SQL Server which now leverages OPENJSON to parameterize arrays.

@CLAassistant
Copy link

CLAassistant commented Nov 21, 2023

CLA assistant check
All committers have signed the CLA.

Copy link

codecov bot commented Nov 21, 2023

Codecov Report

Attention: 13 lines in your changes are missing coverage. Please review.

Comparison is base (6965960) 78.98% compared to head (d92f981) 63.45%.
Report is 77 commits behind head on main.

Files Patch % Lines
...rization.Opa/Request/DefaultQueryRequestFactory.cs 0.00% 3 Missing ⚠️
...Abstractions/Serialization/Utf8JsonWriterHelper.cs 40.00% 3 Missing ⚠️
.../Transport.Http/GraphQLHttpEventStreamProcessor.cs 92.10% 3 Missing ⚠️
...AspNetCore/src/Transport.Http/GraphQLHttpClient.cs 71.42% 2 Missing ⚠️
...Core/Serialization/DefaultHttpResponseFormatter.cs 0.00% 1 Missing ⚠️
...pNetCore/src/Transport.Http/GraphQLHttpResponse.cs 0.00% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##             main    #6711       +/-   ##
===========================================
- Coverage   78.98%   63.45%   -15.53%     
===========================================
  Files        2903     2324      -579     
  Lines      139771   114620    -25151     
===========================================
- Hits       110397    72737    -37660     
- Misses      29374    41883    +12509     
Flag Coverage Δ
unittests 63.45% <80.88%> (-15.53%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@nikolai-mb nikolai-mb changed the title Fixed cache pollution for in/nin filter expressions Fix cache pollution for in/nin filter expressions Nov 21, 2023
@michaelstaib
Copy link
Member

Hey,

thanks for contributing.

Copy link
Member

@PascalSenn PascalSenn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@michaelstaib michaelstaib merged commit 5a80c80 into ChilliCream:main Nov 21, 2023
64 of 97 checks passed
@PascalSenn
Copy link
Member

@nikolai-mb Thanks for the contribution!

@MelGrubb
Copy link

MelGrubb commented Dec 5, 2023

Will this fix make it back to v13? We're not ready to move to 14 yet, and we're being affected by this.

renovate bot referenced this pull request in orso-co/Orso.Arpa.Api Dec 22, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [HotChocolate.Abstractions](https://chillicream.com/)
([source](https://github.com/ChilliCream/graphql-platform)) | `13.7.0`
-> `13.8.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/HotChocolate.Abstractions/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/HotChocolate.Abstractions/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/HotChocolate.Abstractions/13.7.0/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/HotChocolate.Abstractions/13.7.0/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [HotChocolate.AspNetCore](https://chillicream.com/)
([source](https://github.com/ChilliCream/graphql-platform)) | `13.7.0`
-> `13.8.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/HotChocolate.AspNetCore/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/HotChocolate.AspNetCore/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/HotChocolate.AspNetCore/13.7.0/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/HotChocolate.AspNetCore/13.7.0/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [HotChocolate.AspNetCore.Authorization](https://chillicream.com/)
([source](https://github.com/ChilliCream/graphql-platform)) | `13.7.0`
-> `13.8.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/HotChocolate.AspNetCore.Authorization/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/HotChocolate.AspNetCore.Authorization/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/HotChocolate.AspNetCore.Authorization/13.7.0/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/HotChocolate.AspNetCore.Authorization/13.7.0/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [HotChocolate.Data](https://chillicream.com/)
([source](https://github.com/ChilliCream/graphql-platform)) | `13.7.0`
-> `13.8.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/HotChocolate.Data/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/HotChocolate.Data/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/HotChocolate.Data/13.7.0/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/HotChocolate.Data/13.7.0/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [HotChocolate.Data.EntityFramework](https://chillicream.com/)
([source](https://github.com/ChilliCream/graphql-platform)) | `13.7.0`
-> `13.8.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/HotChocolate.Data.EntityFramework/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/HotChocolate.Data.EntityFramework/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/HotChocolate.Data.EntityFramework/13.7.0/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/HotChocolate.Data.EntityFramework/13.7.0/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [HotChocolate.Types](https://chillicream.com/)
([source](https://github.com/ChilliCream/graphql-platform)) | `13.7.0`
-> `13.8.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/HotChocolate.Types/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/HotChocolate.Types/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/HotChocolate.Types/13.7.0/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/HotChocolate.Types/13.7.0/13.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>ChilliCream/graphql-platform
(HotChocolate.Abstractions)</summary>

###
[`v13.8.0`](https://github.com/ChilliCream/graphql-platform/releases/tag/13.8.0)

[Compare
Source](https://github.com/ChilliCream/graphql-platform/compare/13.7.0...13.8.0)

##### What's Changed

- Fixed issue with the fusion configuration rewriter.
([https://github.com/ChilliCream/graphql-platform/pull/6670](https://github.com/ChilliCream/graphql-platform/pull/6670))
- Adds example for failing error interface
([https://github.com/ChilliCream/graphql-platform/pull/6665](https://github.com/ChilliCream/graphql-platform/pull/6665))
- Set limit on serialized message size in Subscriptions.Postgres
([https://github.com/ChilliCream/graphql-platform/pull/6678](https://github.com/ChilliCream/graphql-platform/pull/6678))
-   Fix JsonElement serialization for StrawberryShake
- Reworked JSON scalar usage with StrawberryShake.
([https://github.com/ChilliCream/graphql-platform/pull/6683](https://github.com/ChilliCream/graphql-platform/pull/6683))
- Updated BananaCakePop Default Version
([https://github.com/ChilliCream/graphql-platform/pull/6687](https://github.com/ChilliCream/graphql-platform/pull/6687))
- Make postgres subscription provider compatible with npgsql 8
([https://github.com/ChilliCream/graphql-platform/pull/6686](https://github.com/ChilliCream/graphql-platform/pull/6686))
- Handle JsonElement JsonValueKind.Null when deserializing
([https://github.com/ChilliCream/graphql-platform/pull/6481](https://github.com/ChilliCream/graphql-platform/pull/6481))
- Fixed Utf8JsonWriterHelper to not ignore null dictionary values
([https://github.com/ChilliCream/graphql-platform/pull/6689](https://github.com/ChilliCream/graphql-platform/pull/6689))
- Fixed the ghost files in Rider when using strawberyy shake
([https://github.com/ChilliCream/graphql-platform/pull/6693](https://github.com/ChilliCream/graphql-platform/pull/6693))
- Fixed dotnet version check filter non version output for Strawberry
Shake
([https://github.com/ChilliCream/graphql-platform/pull/6699](https://github.com/ChilliCream/graphql-platform/pull/6699))
- Fixed argument naming conventions for mutation conventions.
([https://github.com/ChilliCream/graphql-platform/pull/6705](https://github.com/ChilliCream/graphql-platform/pull/6705))
- Fixed cache pollution for in/nin filter expressions
([https://github.com/ChilliCream/graphql-platform/pull/6711](https://github.com/ChilliCream/graphql-platform/pull/6711))
- Fixed large json read corruption
([https://github.com/ChilliCream/graphql-platform/pull/6713](https://github.com/ChilliCream/graphql-platform/pull/6713))
- Fixed typo in Banana Cake Pop docs
([https://github.com/ChilliCream/graphql-platform/pull/6715](https://github.com/ChilliCream/graphql-platform/pull/6715))
- Update open api schema snapshot to fix unit tests
([https://github.com/ChilliCream/graphql-platform/pull/6708](https://github.com/ChilliCream/graphql-platform/pull/6708))
- Fixed array writer reset
([https://github.com/ChilliCream/graphql-platform/pull/6719](https://github.com/ChilliCream/graphql-platform/pull/6719))
- \[maintenance] Empty type termination using semicolon.
[https://github.com/ChilliCream/graphql-platform/pull/6725](https://github.com/ChilliCream/graphql-platform/pull/6725)5)
- Added apollo federation docs
([https://github.com/ChilliCream/graphql-platform/pull/5791](https://github.com/ChilliCream/graphql-platform/pull/5791))
- Fixed example in docs
([https://github.com/ChilliCream/graphql-platform/pull/6733](https://github.com/ChilliCream/graphql-platform/pull/6733))
- StrawberryShake documentation fixes
([https://github.com/ChilliCream/graphql-platform/pull/6742](https://github.com/ChilliCream/graphql-platform/pull/6742))
- Adds more documentation for BCP
([https://github.com/ChilliCream/graphql-platform/pull/6709](https://github.com/ChilliCream/graphql-platform/pull/6709))
- Avoid writing BOM in StrawberryShake Tools
([https://github.com/ChilliCream/graphql-platform/pull/6751](https://github.com/ChilliCream/graphql-platform/pull/6751))
- Fixed transport layer byte-array handling.
([https://github.com/ChilliCream/graphql-platform/pull/6763](https://github.com/ChilliCream/graphql-platform/pull/6763))
- Fixed SSE message corruption
([https://github.com/ChilliCream/graphql-platform/pull/6642](https://github.com/ChilliCream/graphql-platform/pull/6642))
- Do not send omitted arguments with default values to subgraph
([https://github.com/ChilliCream/graphql-platform/pull/6767](https://github.com/ChilliCream/graphql-platform/pull/6767))
- Fixed mutation error dependency registration.
([https://github.com/ChilliCream/graphql-platform/pull/6674](https://github.com/ChilliCream/graphql-platform/pull/6674))
- Fixed issue with default values on mutations.
([https://github.com/ChilliCream/graphql-platform/pull/6776](https://github.com/ChilliCream/graphql-platform/pull/6776))
- Fixed CostAttribute multiplier path signature.
([https://github.com/ChilliCream/graphql-platform/pull/6777](https://github.com/ChilliCream/graphql-platform/pull/6777))
- Fixed issue that caused the tag directive to be ignored.
([https://github.com/ChilliCream/graphql-platform/pull/6746](https://github.com/ChilliCream/graphql-platform/pull/6746))
- Fixed broken postgres tests
([https://github.com/ChilliCream/graphql-platform/pull/6779](https://github.com/ChilliCream/graphql-platform/pull/6779))
- Fixed Keyed Services
([https://github.com/ChilliCream/graphql-platform/pull/6782](https://github.com/ChilliCream/graphql-platform/pull/6782))
- Fixed Tag Composition Tooling
([https://github.com/ChilliCream/graphql-platform/pull/6783](https://github.com/ChilliCream/graphql-platform/pull/6783))
- EF Core middleware must check for IAsyncEnumerable.
([https://github.com/ChilliCream/graphql-platform/pull/6784](https://github.com/ChilliCream/graphql-platform/pull/6784))

**Full Changelog**:
ChilliCream/graphql-platform@13.7.0...13.8.0-preview.8

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 10pm every weekday,every
weekend,before 5am every weekday" in timezone Europe/Berlin, Automerge -
At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/orso-co/Orso.Arpa.Api).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMDMuMSIsInVwZGF0ZWRJblZlciI6IjM3LjEwMy4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@PascalSenn PascalSenn mentioned this pull request Feb 19, 2024
@PascalSenn PascalSenn mentioned this pull request May 22, 2024
@PascalSenn PascalSenn mentioned this pull request Jun 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Performance issues with in / nin filter operators and EF Core (Cache pollution)
5 participants