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

add parser-based validation for JPQL, SQL, HQL snippets #1236

Closed
martinlippert opened this issue Apr 18, 2024 · 10 comments
Closed

add parser-based validation for JPQL, SQL, HQL snippets #1236

martinlippert opened this issue Apr 18, 2024 · 10 comments
Assignees
Labels
for: eclipse something that is specific for Eclipse for: vscode something that is specific for VSCode theme: spring-data-support theme: validation type: enhancement

Comments

@martinlippert
Copy link
Member

Add validation logic to the language support for JPQL (etc.) wherever those languages are being used (annotations in Java source code, named query files, etc.).

The validation should report messages from the parser to the user in the form of diagnostics, as usual. The more detailed and fine-grained, the better - depending on that is possible using the parser at hand.

@martinlippert martinlippert added type: enhancement for: eclipse something that is specific for Eclipse theme: spring-data-support for: vscode something that is specific for VSCode theme: validation labels Apr 18, 2024
@martinlippert martinlippert added this to the 4.22.1.RELEASE milestone Apr 18, 2024
@BoykoAlex
Copy link
Contributor

I'd factor out SQL is a separate issue as we don't have SQL parser and semantic token syntax highlighting for SQL. At the moment all SQL support comes from upstream extensions and syntax highlighting for SQL is somewhat restricted by what upstream extensions/plugins provide. There is no semantic tokens syntax highlighting from Boot LS provided for native SQL (but we can change that of course)

@BoykoAlex
Copy link
Contributor

JPQL and HQL are in with 385c35e

@BoykoAlex
Copy link
Contributor

SQL was the last one. Went in with fe953bd

@pcdavid
Copy link

pcdavid commented Jun 13, 2024

It looks like the SQL parser only knows about MsySQL's syntax (from the file name)?

In our case we use PostreSQL-specific syntax and with the update to 4.23 I now have an error marker as the parser does not like/understand PG's type-cast syntax using :::

SQL: no viable alternative at input 'DELETE FROM Representation representation
            WHERE representation.project_id=?1
            AND NOT EXISTS (
                SELECT * FROM Document document
                WHERE document.project_id=?1
                AND jsonb_path_exists(document.content:'

Capture d’écran du 2024-06-13 13-50-39

Is there a way to disable these checks?

@martinlippert martinlippert reopened this Jun 13, 2024
@BoykoAlex
Copy link
Contributor

BoykoAlex commented Jun 13, 2024

@pcdavid I hate to say that but the release doesn't have a setting to switch this validation off unfortunately. The setting didn't get generated and it has gone unnoticed.
I have pushed the preferences/settings for SQL, HQL, JPQL syntax validation. Please try updating from the nightly build p2 repo:
for Eclipse 2024-06 (4.32): https://cdn.spring.io/spring-tools/snapshot/TOOLS/sts4/nightly/e4.32
for Eclipse 2024-03 (4.31): https://cdn.spring.io/spring-tools/snapshot/TOOLS/sts4/nightly/e4.31
for Eclipse 2023-12 (4.30): https://cdn.spring.io/spring-tools/snapshot/TOOLS/sts4/nightly/e4.30

It should be here. The drop down has an option IGNORE which should turn the validation off:
Screenshot 2024-06-13 at 11 25 58

Please let us know how it goes.

Otherwise, it might be best either don't syntax validate native query or looks at the classpath perhaps and figure out whether it is expected to be MySQL or PostGres or some other flavour of SQL... there are a couple of flavours of SQL... wonder if it makes sense to support all of them or none or some...

@BoykoAlex
Copy link
Contributor

For the MySQL parser issue: #1273

@pcdavid
Copy link

pcdavid commented Jun 13, 2024

Thanks for the fast response!
I've updated my install using the nightly (for 2024-06) and indeed, I can now disable this validation and get rid of the error (or turn it into a warning/info).

Strangely, I now see two such syntax issues, while there was only one with STS 4.23.0.
The second is in our IDocumentRepository interface (whose code did not change recently.

image

Anyway, the new setting fixes the issue for me. Thanks again.

@BoykoAlex
Copy link
Contributor

Thanks for reporting the issue. We'll look into MySQL parser thing and see if we can provider something for Postgres SQL flavour

@BoykoAlex
Copy link
Contributor

BoykoAlex commented Jul 17, 2024

@pcdavid I'm circling back to PostgreSQL support in STS and I see :::: in your queries... The ANTLR grammar doesn't support the 4 colons syntax... isn't supposed to be :: instead of ::::? Are you sure those queries are working fine?
(adding @schauder from spring data team)

@pcdavid
Copy link

pcdavid commented Jul 18, 2024

I think we don't use them anymore, but they were working fine for a long time.

The actual PostgreSQL syntax only uses two for type conversion (content::jsonb, where content is plain text but we needed to parse it as jsonb to apply JSON operators on it).

The doubling was required by the context, I think to avoid ambiguity with named parameters' syntax which also use colons.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
for: eclipse something that is specific for Eclipse for: vscode something that is specific for VSCode theme: spring-data-support theme: validation type: enhancement
Projects
None yet
Development

No branches or pull requests

3 participants