Bug 309000 - CriteriaBuilder.coalesce() throws ArrayOutOfBoundsException
Summary: CriteriaBuilder.coalesce() throws ArrayOutOfBoundsException
Status: NEW
Alias: None
Product: z_Archived
Classification: Eclipse Foundation
Component: Eclipselink (show other bugs)
Version: unspecified   Edit
Hardware: Macintosh Mac OS X - Carbon (unsup.)
: P2 normal with 1 vote (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-04-13 09:28 EDT by Raja Perumal CLA
Modified: 2022-06-09 10:03 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 Raja Perumal CLA 2010-04-13 09:28:11 EDT
Build Identifier: 20100413

Converting following JPQL into CriteriaQuery as shown below throws ArrayOutofBoundException

// Select Distinct o FROM Order o  where coalesce (o.customer.name, o.customer.id)= 'Stephen J. Caruso'

----[ Begin code extract ]----------
      boolean pass = false;
        EntityManager em = getEntityManager();
        CriteriaBuilder cbuilder = em.getCriteriaBuilder();
        Metamodel mm = em.getMetamodel();

        EntityTransaction et = getEntityTransaction();

        et.begin();
        CriteriaQuery<Order> cquery = cbuilder.createQuery(Order.class);
        if (cquery != null) {
            TLogger.log("Obtained Non-null Criteria Query");
            Root<Order> order = cquery.from(Order.class);

            //Get Metamodel from Root
            EntityType<Order> Order_ = order.getModel();
            EntityType<Customer> Customer_ = mm.entity(com.sun.ts.tests.ejb30.persistence.criteriaapi.util.Customer.class);
            TLogger.log("Usage of Coalesce in Criteriabuilder");

            cquery.select(order);
            cquery.where(cbuilder.equal(
                    cbuilder.coalesce(
                    order.get(Order_.getSingularAttribute("customer", Customer.class)).get(Customer_.getSingularAttribute("name", String.class)),
                    order.get(Order_.getSingularAttribute("customer", Customer.class)).get(Customer_.getSingularAttribute("id", String.class))),
                    "Stephen J. Caruso"));

            cquery.distinct(true);

            TypedQuery<Order> tq = em.createQuery(cquery);

            List<Order> result = tq.getResultList();
...

----[ End code extract ]----------
----[ Begin Exception message ]-------------

[javatest.batch] Usage of Coalesce in Criteriabuilder
[javatest.batch] [EL Warning]: 2010-04-13 18:45:26.193--UnitOfWork(118331953)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.0.v20100413-r6957): org.eclipse.persistence.exceptions.DatabaseException
[javatest.batch] Internal Exception: java.sql.SQLException: The exception 'java.lang.ArrayIndexOutOfBoundsException: -1' was thrown while evaluating an expression.
[javatest.batch] Error Code: -1
[javatest.batch] Call: SELECT DISTINCT t1.ID, t1.TOTALPRICE, t1.FK4_FOR_CUSTOMER_TABLE, t1.FK0_FOR_LINEITEM_TABLE FROM CUSTOMER_TABLE t0, ORDER_TABLE t1 WHERE ((COALESCE(t0.NAME,t0.ID ) = ?) AND (t0.ID = t1.FK4_FOR_CUSTOMER_TABLE))
[javatest.batch]        bind => [Stephen J. Caruso]
[javatest.batch] Query: ReadAllQuery(referenceClass=Order sql="SELECT DISTINCT t1.ID, t1.TOTALPRICE, t1.FK4_FOR_CUSTOMER_TABLE, t1.FK0_FOR_LINEITEM_TABLE FROM CUSTOMER_TABLE t0, ORDER_TABLE t1 WHERE ((COALESCE(t0.NAME,t0.ID ) = ?) AND (t0.ID = t1.FK4_FOR_CUSTOMER_TABLE))")
[javatest.batch] 04-13-2010 18:45:26:  ERROR: Exception at:
[javatest.batch] 04-13-2010 18:45:26:  ERROR: Local Exception Stack:
[javatest.batch] Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.0.v20100413-r6957): org.eclipse.persistence.exceptions.DatabaseException
[javatest.batch] Internal Exception: java.sql.SQLException: The exception 'java.lang.ArrayIndexOutOfBoundsException: -1' was thrown while evaluating an expression.
[javatest.batch] Error Code: -1
[javatest.batch] Call: SELECT DISTINCT t1.ID, t1.TOTALPRICE, t1.FK4_FOR_CUSTOMER_TABLE, t1.FK0_FOR_LINEITEM_TABLE FROM CUSTOMER_TABLE t0, ORDER_TABLE t1 WHERE ((COALESCE(t0.NAME,t0.ID ) = ?) AND (t0.ID = t1.FK4_FOR_CUSTOMER_TABLE))
[javatest.batch]        bind => [Stephen J. Caruso]
[javatest.batch] Query: ReadAllQuery(referenceClass=Order sql="SELECT DISTINCT t1.ID, t1.TOTALPRICE, t1.FK4_FOR_CUSTOMER_TABLE, t1.FK0_FOR_LINEITEM_TABLE FROM CUSTOMER_TABLE t0, ORDER_TABLE t1 WHERE ((COALESCE(t0.NAME,t0.ID ) = ?) AND (t0.ID = t1.FK4_FOR_CUSTOMER_TABLE))")
[javatest.batch]        at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
[javatest.batch]        at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:687)
[javatest.batch]        at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:530)
[javatest.batch]        at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:529)
[javatest.batch]        at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:206)
[javatest.batch]        at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:192)
[javatest.batch]        at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:263)
[javatest.batch]        at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:619)
[javatest.batch]        at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2538)
[javatest.batch]        at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2497)
[javatest.batch]        at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:404)
[javatest.batch]        at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:989)
[javatest.batch]        at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:730)
[javatest.batch]        at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:949)
[javatest.batch]        at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:380)
[javatest.batch]        at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1013)
[javatest.batch]        at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2914)
[javatest.batch]        at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225)
[javatest.batch]        at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207)
[javatest.batch]        at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.executeQuery(UnitOfWorkImpl.java:1856)
[javatest.batch]        at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1181)
[javatest.batch]        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:460)
[javatest.batch]        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:687)
[javatest.batch]        at com.sun.ts.tests.ejb30.persistence.criteriaapi.criteriabuilder.Client.coalesce(Client.java:4229)
[javatest.batch]        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[javatest.batch]        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[javatest.batch]        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[javatest.batch]        at java.lang.reflect.Method.invoke(Method.java:597)
[javatest.batch]        at com.sun.ts.lib.harness.EETest.run(EETest.java:495)
[javatest.batch]        at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:113)
[javatest.batch]        at com.sun.ts.tests.common.vehicle.EmptyVehicleRunner.run(EmptyVehicleRunner.java:30)
[javatest.batch]        at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:102)
[javatest.batch]        at com.sun.ts.lib.harness.EETest.getPropsReady(EETest.java:392)
[javatest.batch]        at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:210)
[javatest.batch]        at com.sun.ts.lib.harness.EETest.run(EETest.java:204)
[javatest.batch]        at com.sun.ts.tests.common.vehicle.VehicleClient.main(VehicleClient.java:27)
[javatest.batch] Caused by: java.sql.SQLException: The exception 'java.lang.ArrayIndexOutOfBoundsException: -1' was thrown while evaluating an expression.
[javatest.batch]        at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
[javatest.batch]        at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
[javatest.batch]        at org.apache.derby.client.am.PreparedStatement.executeQuery(Unknown Source)
[javatest.batch]        at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:892)
[javatest.batch]        at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:602)
[javatest.batch]        ... 34 more
[javatest.batch] Caused by: org.apache.derby.client.am.SqlException: The exception 'java.lang.ArrayIndexOutOfBoundsException: -1' was thrown while evaluating an expression.
[javatest.batch]        at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source)
[javatest.batch]        at org.apache.derby.client.am.Statement.completeOpenQuery(Unknown Source)
[javatest.batch]        at org.apache.derby.client.net.NetStatementReply.parseOpenQueryFailure(Unknown Source)
[javatest.batch]        at org.apache.derby.client.net.NetStatementReply.parseOPNQRYreply(Unknown Source)
[javatest.batch]        at org.apache.derby.client.net.NetStatementReply.readOpenQuery(Unknown Source)
[javatest.batch]        at org.apache.derby.client.net.StatementReply.readOpenQuery(Unknown Source)
[javatest.batch]        at org.apache.derby.client.net.NetStatement.readOpenQuery_(Unknown Source)
[javatest.batch]        at org.apache.derby.client.am.Statement.readOpenQuery(Unknown Source)
[javatest.batch]        at org.apache.derby.client.am.PreparedStatement.flowExecute(Unknown Source)
[javatest.batch]        at org.apache.derby.client.am.PreparedStatement.executeQueryX(Unknown Source)
[javatest.batch]        ... 37 more
[javatest.batch] Caused by: org.apache.derby.client.am.SqlException: Java exception: '-1: java.lang.ArrayIndexOutOfBoundsException'.
[javatest.batch]        ... 47 more
[javatest.batch]




Reproducible: Always

Steps to Reproduce:
1. See bug description to reproduce this.
Comment 1 Tom Ware CLA 2010-04-22 10:50:36 EDT
Setting target and priority.  See the following page for the meanings of these settings:

http://wiki.eclipse.org/EclipseLink/Development/Bugs/Guidelines
Comment 2 Eclipse Webmaster CLA 2022-06-09 10:03:53 EDT
The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink