Conversation
A filter segment now matches only a public property or a public field, ignoring case. An internal, protected, or private member is an unknown property. This reverts the non-public lookup that the v1.14.2 restore brought back. An indexer stays an unknown property. BREAKING CHANGE: a filter on an internal, protected, or private member now throws UnknownFilterPropertyException, also through a query name. With AllowUnknownProperties, the clause becomes True == True and does not filter. Make the member public to filter on it.
pdevito3
force-pushed
the
fm/qk-restore-d1-d5-d1-break
branch
from
October 1, 2026 21:41
d501fbb to
8784984
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
For later consideration in a major version. Do not merge now.
Summary
This PR brings back the public-only member lookup that the D1 restore (#155) removed. It is a breaking change, so it needs a major version. The captain decides if and when it merges.
#155 merged into main. This PR is rebased on current main and holds only the break commit. The diff reverts only the member lookup of the D1 restore.
Change
A filter segment matches only a public property or a public field, ignoring case:
UnknownFilterPropertyException.UnknownFilterPropertyException.AllowUnknownProperties, a clause on a non-public member becomesTrue == Trueand does not filter.This is the main behavior before #155, with one exception. An indexer stays an unknown property, like on current main and v1.14.2. On main before #155, an indexer threw
ArgumentException. That error was a fault and not part of the public-only design, so this PR does not bring it back.Results
InternalScore > 30(internal property)x.InternalScore > 30UnknownFilterPropertyExceptionsecretRank == 7(private field)x.secretRank == 7UnknownFilterPropertyExceptionOwner.InternalAlias == "Ann"UnknownFilterPropertyExceptionscore > 30, query name onInternalScorex.InternalScore > 30UnknownFilterPropertyExceptionsecretRank > 100withAllowUnknownPropertiesx.secretRank > 100True == TrueItem == "x"(indexer)UnknownFilterPropertyExceptionUnknownFilterPropertyExceptionMigration
Make a member public to filter on it.
Tests
QueryKit.UnitTests/PropertyResolverTests.csnow expect the public-only result. The indexer pins do not change.QueryKit.IntegrationTests/Tests/PropertyResolverTests.csnow expectUnknownFilterPropertyExceptionfor the internalNicknameproperty, and no filter from the clause withAllowUnknownProperties.dotnet test: unit 469 passed, integration 297 passed, 0 failures.