fix(clause-builder): drop predicate when field isn't on the active table#13
Merged
Merged
Conversation
addCondition() calls getFieldString() which returns null for any field not declared on the bound table — a legitimate filter to drop unknown fields silently. But the rest of addCondition still pushed the operator and placeholder onto the clauses array regardless, producing invalid SQL like `WHERE = 'value'` (or `WHERE AND = 'value'` chained). Skip the entire predicate when fieldStr is null, matching the apparent intent of getFieldString returning null in the first place. Caught while porting the clause builder to phpnomad/sqlite-integration — the SQLite port carries the same fix.
1fb13d9 to
5090f04
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.
Summary
addCondition()callsgetFieldString(), which returnsnullfor any field not declared on the bound table — a legitimate filter to drop unknown fields silently. But the rest ofaddConditionstill pushes the operator and placeholder onto the clauses array regardless, producing invalid SQL like `WHERE = 'value'` (or `WHERE AND = 'value'` when chained).This skips the entire predicate when `fieldStr` is null, which matches the apparent intent of `getFieldString` returning null in the first place.
Why this matters
Caught while porting the clause builder to `phpnomad/sqlite-integration`. Wrote a test asserting that unknown fields silently no-op the predicate; instead the test produced a SQL syntax error from the engine. The SQLite port carries the same fix.
Test plan
The fix is one branch — no behavior change for valid fields, only fixes the broken silent-filter path.