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

length entity attribute misinterpreted as LENGTH(...) operation in JPQL #28909

Closed
njr-11 opened this issue Jun 26, 2024 · 1 comment
Closed
Labels
bug This bug is not present in a released version of Open Liberty in:JPA team:Blizzard

Comments

@njr-11
Copy link
Contributor

njr-11 commented Jun 26, 2024

EclipseLink is misterpreting the length entity attribute as a LENGTH(...) operation in,

UPDATE Box SET length = length + ?1, width = width - ?1, height = height * ?2

If "length" were followed by an open parenthesis, then it would be a LENGTH(string_expression) operation, but it is not followed by ( in this query. The correct parsing ought to be an entity attribute named length which has the optional entity identification variable omitted.

[6/26/24, 14:31:58:458 CDT] 00000051 id=0458cc71 io.openliberty.data.internal.persistence.RepositoryImpl      3 QueryInfo@3ce96da9 long resizeAll(int, int) UPDATE Box SET length = length + ?1, width = width - ?1, height = height * ?2 [2 positional params]
[6/26/24, 14:31:58:458 CDT] 00000051 id=6f99ba0f enliberty.data.internal.persistence.service.DBStoreEMBuilder > createEntityManager Entry 
[6/26/24, 14:31:58:458 CDT] 00000051 id=4f7ca5d3 om.ibm.wsspi.persistence.internal.PersistenceServiceUnitImpl > createEntityManager Entry 
[6/26/24, 14:31:58:458 CDT] 00000051 id=4f7ca5d3 om.ibm.wsspi.persistence.internal.PersistenceServiceUnitImpl < createEntityManager Exit  
                                                                                                               org.eclipse.persistence.internal.jpa.EntityManagerImpl@63c97bfc
[6/26/24, 14:31:58:458 CDT] 00000051 id=6f99ba0f enliberty.data.internal.persistence.service.DBStoreEMBuilder < createEntityManager Exit  
                                                                                                               org.eclipse.persistence.internal.jpa.EntityManagerImpl@63c97bfc
[6/26/24, 14:31:58:461 CDT] 00000051 id=00000000 io.openliberty.data.internal.persistence.RepositoryImpl      3 java.lang.IllegalArgumentException replaced with jakarta.data.exceptions.MappingException
[6/26/24, 14:31:58:461 CDT] 00000051 id=0458cc71 io.openliberty.data.internal.persistence.RepositoryImpl      < invoke MultipleEntityRepo.resizeAll Exit  
                                                                                                               jakarta.data.exceptions.MappingException: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing [UPDATE Box SET length = length + ?1, width = width - ?1, height = height * ?2]. 
[30, 30] The left parenthesis is missing from the LENGTH expression.
[45, 50] The left expression is not an arithmetic expression.
[66, 72] The left expression is not an arithmetic expression.
	at io.openliberty.data.internal.persistence.RepositoryImpl.failure(RepositoryImpl.java:302)
	at io.openliberty.data.internal.persistence.RepositoryImpl.invoke(RepositoryImpl.java:1256)
	at jdk.proxy11/jdk.proxy11.$Proxy96.resizeAll(Unknown Source)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:38)
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:109)
	at ee.jakarta.tck.data.standalone.entity.MultipleEntityRepo$1282971833$Proxy$_$$_WeldClientProxy.resizeAll(Unknown Source)
	at ee.jakarta.tck.data.standalone.entity.EntityTest.testUpdateQueryWithoutWhereClause(EntityTest.java:1701)
	at ee.jakarta.tck.data.standalone.entity.EntityTest$Proxy$_$$_WeldClientProxy.testUpdateQueryWithoutWhereClause(Unknown Source)
	at ee.jakarta.tck.data.standalone.entity.EntityTestServlet.testUpdateQueryWithoutWhereClause(EntityTestServlet.java:379)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at componenttest.app.FATServlet.doGet(FATServlet.java:74)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:633)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723)
	at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1266)
	at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:754)
	at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:451)
	at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1362)
	at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1078)
	at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:77)
	at com.ibm.ws.webcontainer40.servlet.CacheServletWrapper40.handleRequest(CacheServletWrapper40.java:87)
	at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:978)
	at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:293)
	at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1260)
	at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:476)
	at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:435)
	at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:569)
	at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:503)
	at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:363)
	at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:330)
	at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:169)
	at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:77)
	at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:516)
	at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:586)
	at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:970)
	at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1059)
	at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:280)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing [UPDATE Box SET length = length + ?1, width = width - ?1, height = height * ?2]. 
[30, 30] The left parenthesis is missing from the LENGTH expression.
[45, 50] The left expression is not an arithmetic expression.
[66, 72] The left expression is not an arithmetic expression.
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1848)
	at io.openliberty.data.internal.persistence.RepositoryImpl.invoke(RepositoryImpl.java:1079)
	... 40 more
Caused by: Exception [EclipseLink-0] (Eclipse Persistence Services - 5.0.0-B02.v202404111748): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing [UPDATE Box SET length = length + ?1, width = width - ?1, height = height * ?2]. 
[30, 30] The left parenthesis is missing from the LENGTH expression.
[45, 50] The left expression is not an arithmetic expression.
[66, 72] The left expression is not an arithmetic expression.
	at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildException(HermesParser.java:169)
	at org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate(HermesParser.java:345)
	at org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp(HermesParser.java:292)
	at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery(HermesParser.java:174)
	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:144)
	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:120)
	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:107)
	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:91)
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1846)
	... 41 more
@njr-11 njr-11 added bug This bug is not present in a released version of Open Liberty in:JPA team:Blizzard labels Jun 26, 2024
@njr-11 njr-11 changed the title EclipseLink misinterprets length attribute in JPQL as LENGTH(...) operation length entity attribute misinterpreted as LENGTH(...) operation in JPQL Jun 26, 2024
@Riva-Tholoor-Philip
Copy link
Contributor

See EclipseLink Issue : 2187

KyleAure added a commit to KyleAure/open-liberty that referenced this issue Jul 22, 2024
KyleAure added a commit to KyleAure/open-liberty that referenced this issue Jul 23, 2024
KyleAure added a commit to KyleAure/open-liberty that referenced this issue Jul 24, 2024
@njr-11 njr-11 closed this as completed Dec 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug This bug is not present in a released version of Open Liberty in:JPA team:Blizzard
Projects
None yet
Development

No branches or pull requests

2 participants