spring-projects / spring-projects/spring-data-commons
SpelQueryContext errors on unbalanced quotes in SQL statement comments
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 838
- Forks
- 730
- PR merge metrics
- No merged PRs in 30d
Description
Given the following Kotlin @Repository query for spring-data-jdbc:
@Query(
"""
-- don't do this
SELECT 1
"""
)
fun test(): Int
We get the following error after upgrading from Spring Boot 2.x to 3.x:
java.lang.IllegalArgumentException: The string <
-- don't do this
SELECT 1
> starts a quoted range at 15, but never ends it.
at org.springframework.data.repository.query.SpelQueryContext$QuotationMap.<init>(SpelQueryContext.java:341) ~[spring-data-commons-3.1.3.jar:3.1.3]
at org.springframework.data.repository.query.SpelQueryContext$SpelExtractor.<init>(SpelQueryContext.java:209) ~[spring-data-commons-3.1.3.jar:3.1.3]
at org.springframework.data.repository.query.SpelQueryContext.parse(SpelQueryContext.java:113) ~[spring-data-commons-3.1.3.jar:3.1.3]
at org.springframework.data.repository.query.SpelQueryContext$EvaluatingSpelQueryContext.parse(SpelQueryContext.java:172) ~[spring-data-commons-3.1.3.jar:3.1.3]
at org.springframework.data.jdbc.repository.query.StringBasedJdbcQuery.processSpelExpressions(StringBasedJdbcQuery.java:163) ~[spring-data-jdbc-3.1.3.jar:3.1.3]
at org.springframework.data.jdbc.repository.query.StringBasedJdbcQuery.execute(StringBasedJdbcQuery.java:140) ~[spring-data-jdbc-3.1.3.jar:3.1.3]
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:136) ~[spring-data-commons-3.1.3.jar:3.1.3]
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:120) ~[spring-data-commons-3.1.3.jar:3.1.3]
I know it's pretty unusual to have comments in production queries, but if the query becomes long (e.g. 50 lines), adding a Java / Kotlin comment above said query is too non-local, our use case comments a specific condition which is hard to understand without such a local comment.
Nevertheless, this is a regression from Spring Boot 2.x which should be fixed or documented to not work anymore.
EDIT: This will probably also error in /* */ SQL comments.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.