You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2010/07/10 00:03:36 UTC

svn commit: r962708 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestJPQLScalarExpressions.java

Author: fancy
Date: Fri Jul  9 22:03:35 2010
New Revision: 962708

URL: http://svn.apache.org/viewvc?rev=962708&view=rev
Log:
OPENJPA-1715: OpenJPA generates wrong SQL for Oracle if a result variable that references an aggregate expression is used in ORDER BY clause

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestJPQLScalarExpressions.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java?rev=962708&r1=962707&r2=962708&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java Fri Jul  9 22:03:35 2010
@@ -330,11 +330,14 @@ public class OracleDictionary
         int i = 0;
         for (Iterator itr = aliases.iterator(); itr.hasNext(); i++) {
             alias = itr.next();
+            String asString = null;
             if (alias instanceof SQLBuffer)
-                selectSQL.append((SQLBuffer) alias);
+                asString = ((SQLBuffer) alias).getSQL();
             else
-                selectSQL.append(alias.toString());
-            selectSQL.append(" AS c").append(String.valueOf(i));
+                asString = alias.toString();
+            selectSQL.append(asString);
+            if (asString.indexOf(" AS ") == -1)
+                selectSQL.append(" AS c").append(String.valueOf(i));
             if (itr.hasNext())
                 selectSQL.append(", ");
         }

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestJPQLScalarExpressions.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestJPQLScalarExpressions.java?rev=962708&r1=962707&r2=962708&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestJPQLScalarExpressions.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestJPQLScalarExpressions.java Fri Jul  9 22:03:35 2010
@@ -75,6 +75,8 @@ public class TestJPQLScalarExpressions e
     public void testAggregateResultVariable() {
         EntityManager em = currentEntityManager();
         String querys[] = {
+            "SELECT c.name, AVG(c.age) as age, a.city FROM CompUser c left join c.address a " +
+            " group by c.name, a.city order by age desc, c.name",
             "SELECT c.name as name, SUM(c.age) as sage FROM CompUser c group by c.name order by sage desc, name",
             "SELECT c.name, AVG(c.age) as age FROM CompUser c group by c.name order by age desc, c.name",
         };