[ 
https://issues.apache.org/jira/browse/OPENJPA-597?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Patrick Linskey resolved OPENJPA-597.
-------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.1.0

> JPQL delete query with an alias for tablename and without any further clauses 
> gives an error on MySQL
> -----------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-597
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-597
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc
>    Affects Versions: 1.1.0
>         Environment: OpenJPA 1.1.0-SNAPSHOT
> version id: openjpa-1.1.0-SNAPSHOT-r422266:653008
> Apache svn revision: 422266:653008
> os.name: Windows XP
> os.version: 5.1
> os.arch: x86
> java.version: 1.6.0_05
> java.vendor: BEA Systems, Inc.
>            Reporter: Sandeep Shrivastava
>             Fix For: 1.1.0
>
>         Attachments: OPENJPA-597.patch
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> If we have a JPQL query like this:
> int countDeleted = em.createQuery('Delete from Person o').executeUpdate();
> We get an exception on MySQL because the converted SQL with an alias gives a 
> syntax error :
> [testlogic] java.lang.Exception: 
> org.apache.openjpa.lib.jdbc.ReportingSQLException: 
> You have an error in your SQL syntax; check the manual that corresponds to 
> your MySQL server version 
> for the right syntax to use near '' at line 1 {prepstmnt 2137108 DELETE FROM 
> DYN_DESC_PERSON t0 [reused=0]} [code=1064, state=42000]
> [testlogic]   at 
> org.apache.openjpa.util.Exceptions.replaceNestedThrowables(Exceptions.java:242)
> [testlogic]   at 
> org.apache.openjpa.persistence.PersistenceException.writeObject(PersistenceException.java:100)
> For mySQL version 5.0 the MySQLDBDictionary defaults for supportsSubselect 
> and allowsAliasInBulkClause are both true. For these params the 
> DBDictionary.toBulkOperation() generates a sql like DELETE FROM 
> DYN_DESC_PERSON t0 which does not work in mySQL. 
> The syntax for DELETE statements that use table aliases changed between MySQL 
> 4.0 and 4.1. In MySQL 4.0, you should use the true table name to refer to any 
> table from which rows should be deleted: 
> DELETE test FROM test AS t1, test2 WHERE ...
> In MySQL 4.1, if you declare an alias for a table, you must use the alias 
> when referring to the table: 
> DELETE t1 FROM test AS t1, test2 WHERE ...

-- 
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