ArgumentException when no identification variable given in UPDATE clause
------------------------------------------------------------------------

                 Key: OPENJPA-216
                 URL: https://issues.apache.org/jira/browse/OPENJPA-216
             Project: OpenJPA
          Issue Type: Bug
          Components: query
    Affects Versions: 0.9.8
            Reporter: Jacek Laskowski


According to the spec - 4.10 Bulk Update and Delete Operations page 104:

update_statement ::= update_clause [where_clause]
update_clause ::= UPDATE abstract_schema_name [[AS] identification_variable] 
SET update_item {, update_item}*
update_item ::= [identification_variable.]{state_field | 
single_valued_association_field} = new_value

The identification_variable is optional, but it doesn't seem to be true for 
OpenJPA 0.9.8-SNAPSHOT rev 528437.

$ svn up
Updated to revision 528437.

$ mvn -Dtest=false clean install
...
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 minutes 12 seconds
[INFO] Finished at: Fri Apr 13 13:00:04 CEST 2007
[INFO] Final Memory: 35M/254M
[INFO] ------------------------------------------------------------------------

$ mvn -Dtest=OpenJPATest clean test
...
0  derbyPU  INFO   [main] openjpa.Runtime - Starting OpenJPA 
0.9.8-incubating-SNAPSHOT
...
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] There are test failures.
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 33 seconds
[INFO] Finished at: Fri Apr 13 13:02:11 CEST 2007
[INFO] Final Memory: 11M/254M
[INFO] ------------------------------------------------------------------------

$ cat target/surefire-reports/pl.jaceklaskowski.jpa.issue.OpenJPATest.txt
-------------------------------------------------------------------------------
Test set: pl.jaceklaskowski.jpa.issue.OpenJPATest
-------------------------------------------------------------------------------
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.437 sec <<< 
FAILURE!
testUpdate(pl.jaceklaskowski.jpa.issue.OpenJPATest)  Time elapsed: 0.063 sec  
<<< FAILURE!
<0.9.8-incubating-SNAPSHOT nonfatal user error> 
org.apache.openjpa.persistence.ArgumentException: An error occurred while 
parsing the query filter 'UPDATE Osoba SET imie = 'JACEK'
WHERE imie = 'Jacek''. Error message: <0.9.8-incubating-SNAPSHOT nonfatal user 
error> org.apache.openjpa.kernel.jpql.ParseException: Encountered "=" at 
character 23, but expected:
["."].
        at 
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.parse(JPQLExpressionBuilder.java:1656)
        at 
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.<init>(JPQLExpressionBuilder.java:1636)
        at org.apache.openjpa.kernel.jpql.JPQLParser.parse(JPQLParser.java:44)
        at 
org.apache.openjpa.kernel.ExpressionStoreQuery.newCompilation(ExpressionStoreQuery.java:141)
        at 
org.apache.openjpa.kernel.QueryImpl.newCompilation(QueryImpl.java:645)
        at 
org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:613)
        at 
org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:593)
        at 
org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:655)
        at org.apache.openjpa.kernel.QueryImpl.getOperation(QueryImpl.java:1480)
        at 
org.apache.openjpa.kernel.DelegatingQuery.getOperation(DelegatingQuery.java:120)
        at 
org.apache.openjpa.persistence.QueryImpl.executeUpdate(QueryImpl.java:297)
        at 
pl.jaceklaskowski.jpa.issue.OpenJPATest.testUpdate(OpenJPATest.java:23)

$ cat src/test/java/pl/jaceklaskowski/jpa/issue/OpenJPATest.java
package pl.jaceklaskowski.jpa.issue;

import javax.persistence.Query;

import org.testng.annotations.Test;

import pl.jaceklaskowski.jpa.BaseTest;

public class OpenJPATest extends BaseTest {

    @Test(dependsOnMethods = { "utworzPracownikow" })
    public void testUpdate() {
        Query query;

        em.getTransaction().begin();
        try {
            String identificationVariableUpdateQL = "UPDATE Osoba o SET o.imie 
= 'JACEK' WHERE o.imie = 'Jacek'";
            query = em.createQuery(identificationVariableUpdateQL);
            assert query.executeUpdate() == 1;

            String noIdentificationVariableUpdateQL = "UPDATE Osoba SET imie = 
'JACEK' WHERE imie = 'Jacek'";
            query = em.createQuery(noIdentificationVariableUpdateQL);
            assert query.executeUpdate() == 1;
        } finally {
            em.getTransaction().rollback();
        }
    }
}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to