Repository navigation
feat: diagnose untyped placeholders and suggest a cast - #75
Merged
Merged
Conversation
A placeholder that no clause types and no cast states the type of is now rejected as "Cannot infer the type of <placeholder> in <where>; state it with a cast, such as <placeholder>::text", naming the first such placeholder in textual order as the query spells it. A bare placeholder projection gets the same diagnostic. Clause rejections still come first, and the placeholder accounting check remains as an internal guard.
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
A placeholder that no clause types and no cast states the type of was rejected with a generic placeholder-accounting message that did not say which placeholder failed or how to fix it. It is now rejected as
Cannot infer the type of <placeholder> in <where>; state it with a cast, such as <placeholder>::text, naming the placeholder as the query spells it and where the query writes it.Changes
SELECT,DISTINCT ON,ON,WHERE,GROUP BY,HAVING,ORDER BY,LIMIT,OFFSET,FETCH,VALUES,SET, orRETURNING).$1and:nameforms.SELECT $1 AS x, gets the same diagnostic instead of the unsupported-expression rejection.Scope and non-goals
::text.LIKEpattern shape, an= ANYcolumn type, or an unsupported cast type in a clause, still come first.RETURNINGplaceholders and computed projections keep their current rejections, and the internal placeholder accounting check is unchanged.