Bug 305865 - jpa.fieldaccess.advanced.AdvancedJPAJunitTest.testPessimisticLockingNamedQuery failed on Derby
Summary: jpa.fieldaccess.advanced.AdvancedJPAJunitTest.testPessimisticLockingNamedQuer...
Status: RESOLVED FIXED
Alias: None
Product: z_Archived
Classification: Eclipse Foundation
Component: Eclipselink (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Nobody - feel free to take it CLA
QA Contact:
URL:
Whiteboard: derby
Keywords: test
Depends on:
Blocks:
 
Reported: 2010-03-15 11:14 EDT by Edwin Tang CLA
Modified: 2022-06-09 10:33 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Edwin Tang CLA 2010-03-15 11:14:24 EDT
This is not regression. The test was enabled by Yiping recently, see bug 301837 for details. 

org.eclipse.persistence.testing.tests.jpa.fieldaccess.advanced.AdvancedJPAJunitTest.testPessimisticLockingNamedQuery failed on Derby. Looks like Derby doesn't supportpessimistic locking, the test need to be skipped when running with Derby.

Stack Trace:
============
Internal Exception: java.sql.SQLSyntaxErrorException: FOR UPDATE is not permitted in this type of statement. Error Code: -1 Call: SELECT t1.EMP_ID, t2.EMP_ID, t1.PAY_SCALE, t1.L_NAME, t1.STATUS, t1.VERSION, t1.ROOM_NUM, t1.GENDER, t2.SALARY, t1.F_NAME, t1.MANAGER_EMP_ID, t1.DEPT_ID, t1.ADDR_ID, t1.FORMER_COMPANY, t1.FORMER_START_DATE, t1.FORMER_END_DATE, t1.START_DATE, t1.END_DATE, t0.ID, t0.NAME FROM CMP3_FA_EMPLOYEE t1 LEFT OUTER JOIN CMP3_FA_DEPT t0 ON (t0.ID = t1.DEPT_ID), CMP3_FA_SALARY t2 WHERE ((t1.EMP_ID = ?) AND (t2.EMP_ID = t1.EMP_ID)) FOR UPDATE WITH RS bind => [341] Query: ReadAllQuery(name="findFieldAccessEmployeeByPK" referenceClass=Employee sql="SELECT t1.EMP_ID, t2.EMP_ID, t1.PAY_SCALE, t1.L_NAME, t1.STATUS, t1.VERSION, t1.ROOM_NUM, t1.GENDER, t2.SALARY, t1.F_NAME, t1.MANAGER_EMP_ID, t1.DEPT_ID, t1.ADDR_ID, t1.FORMER_COMPANY, t1.FORMER_START_DATE, t1.FORMER_END_DATE, t1.START_DATE, t1.END_DATE, t0.ID, t0.NAME FROM CMP3_FA_EMPLOYEE t1 LEFT OUTER JOIN CMP3_FA_DEPT t0 ON (t0.ID = t1.DEPT_ID), CMP3_FA_SALARY t2 WHERE ((t1.EMP_ID = ?) AND (t2.EMP_ID = t1.EMP_ID)) FOR UPDATE WITH RS")

Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.0.v20100313-r6796): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: FOR UPDATE is not permitted in this type of statement.
Error Code: -1
Call: SELECT t1.EMP_ID, t2.EMP_ID, t1.PAY_SCALE, t1.L_NAME, t1.STATUS, t1.VERSION, t1.ROOM_NUM, t1.GENDER, t2.SALARY, t1.F_NAME, t1.MANAGER_EMP_ID, t1.DEPT_ID, t1.ADDR_ID, t1.FORMER_COMPANY, t1.FORMER_START_DATE, t1.FORMER_END_DATE, t1.START_DATE, t1.END_DATE, t0.ID, t0.NAME FROM CMP3_FA_EMPLOYEE t1 LEFT OUTER JOIN CMP3_FA_DEPT t0 ON (t0.ID = t1.DEPT_ID), CMP3_FA_SALARY t2 WHERE ((t1.EMP_ID = ?) AND (t2.EMP_ID = t1.EMP_ID)) FOR UPDATE WITH RS
bind => [341]
Query: ReadAllQuery(name="findFieldAccessEmployeeByPK" referenceClass=Employee sql="SELECT t1.EMP_ID, t2.EMP_ID, t1.PAY_SCALE, t1.L_NAME, t1.STATUS, t1.VERSION, t1.ROOM_NUM, t1.GENDER, t2.SALARY, t1.F_NAME, t1.MANAGER_EMP_ID, t1.DEPT_ID, t1.ADDR_ID, t1.FORMER_COMPANY, t1.FORMER_START_DATE, t1.FORMER_END_DATE, t1.START_DATE, t1.END_DATE, t0.ID, t0.NAME FROM CMP3_FA_EMPLOYEE t1 LEFT OUTER JOIN CMP3_FA_DEPT t0 ON (t0.ID = t1.DEPT_ID), CMP3_FA_SALARY t2 WHERE ((t1.EMP_ID = ?) AND (t2.EMP_ID = t1.EMP_ID)) FOR UPDATE WITH RS")
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:687)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:530)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeCall(AbstractSession.java:914)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:206)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:192)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:263)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:619)
at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2538)
at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2497)
at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:405)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:989)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:728)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:949)
at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:382)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1013)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2869)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1181)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:460)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:719)
at org.eclipse.persistence.testing.tests.jpa.fieldaccess.advanced.AdvancedJPAJunitTest.testPessimisticLockingNamedQuery(AdvancedJPAJunitTest.java:867)
at org.eclipse.persistence.testing.framework.junit.JUnitTestCase.runBare(JUnitTestCase.java:457)
at org.eclipse.persistence.testing.framework.TestExecutor.execute(TestExecutor.java:248)
at org.eclipse.persistence.testing.framework.TestModel.execute(TestModel.java:208)
at org.eclipse.persistence.testing.framework.TestCollection.run(TestCollection.java:313)
Caused by: java.sql.SQLSyntaxErrorException: FOR UPDATE is not permitted in this type of statement.
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1404)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1353)
at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:652)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:580)
Caused by: org.apache.derby.client.am.SqlException: FOR UPDATE is not permitted in this type of statement.
at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source)
at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source)
at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown Source)
at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown Source)
at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown Source)
at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown Source)
at org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown Source)
at org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInputOutput(Unknown Source)
at org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown Source)
at org.apache.derby.client.am.PreparedStatement.prepare(Unknown Source)
at org.apache.derby.client.am.Connection.prepareStatementX(Unknown Source)
Comment 1 Yiping Zhao CLA 2010-03-15 14:18:46 EDT
modify the condition for running the test to be "if (! isOnServer() && isSelectForUpateSupported()) {" as we know that more database platforms don't support "SELECT...FOR UPDATE".

The change has been checked in Main as revision 6811, code is reviewed by Edwin Tang.
Comment 2 Eclipse Webmaster CLA 2022-06-09 10:33:44 EDT
The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink