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

Question mark not escaped in a query (using PostgreSQL JSON data) #2012

Open
s4iko opened this issue Nov 8, 2024 · 3 comments
Open

Question mark not escaped in a query (using PostgreSQL JSON data) #2012

s4iko opened this issue Nov 8, 2024 · 3 comments

Comments

@s4iko
Copy link

s4iko commented Nov 8, 2024

Hello,

I tried to do a query on a PostgresSQL database with JSON content, something like:
select * from mytable where mytable -> 'myelement' ? 'key123';
It doesn't work as this in a native query because the question mark is interpreted as a parameter.
I searched for help on this and apparently, the question mark could be escaped using one of:

  • ?? to escape in JDBC
  • \\?\\? to escape in Hibernate

None of those 2 solutions worked but should it really work ? I didn't see anything about this in the documentation... may be I missed something.

If escaping the character is not an acceptable solution, may be it is possible to add a parameter in a future version to disable the "JDBC-style parameters" and force to use :myparam or ?1 ?
I saw in the documentation that "JDBC-style parameters" have a skull head, it probably means it is a devil feature or at least a feature that we should not use so optionally not interpreting this seems to be an acceptable solution ?

As a reference, the same issue fixed in Spring Data JPA: spring-projects/spring-data-jpa#2551

Quarkus: 3.15.1
Hibernate Reactive: 2.4.0

Thank you for your help.

@DavideD
Copy link
Member

DavideD commented Nov 8, 2024

Doesn't this work?

select * from mytable where mytable -> 'myelement' \\? 'key123'

@gavinking
Copy link
Member

I just tried it in Hibernate ORM 7, and \\?\\? appears to work as expected.

@s4iko
Copy link
Author

s4iko commented Nov 12, 2024

Thanks for all your answers.

I confirm that it works with hibernate ORM but not with Hibernate Reactive.
I made 2 reproducers by generating new projects using Quarkus starter, 1st for ORM, 2nd for Reactive version.
Both contains those tests:

1- query with ?
2- query with \\?
3- query with \\?\\?
4- query with \\\\?\\\\?

The #3 work with Hibernate ORM.
Unfortunately, none work with Hibernate Reactive.

I attached the reproducers I hope it can help :)

code-with-quarkus-postgres.zip
code-with-quarkus-postgres-reactive.zip

You can run ITs with the command: mvn verify -DskipITs=false

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants