Author: curtisr7
Date: Tue Aug  2 14:46:51 2011
New Revision: 1153150

URL: http://svn.apache.org/viewvc?rev=1153150&view=rev
Log:
OPENJPA-2029: Add additional tests for query named to positional parameter 
conversion. Patch contributed by Jacob Nowosatka.

Modified:
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/SimpleEntity.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestQueryConvertPositionalParameters.java

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/SimpleEntity.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/SimpleEntity.java?rev=1153150&r1=1153149&r2=1153150&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/SimpleEntity.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/SimpleEntity.java
 Tue Aug  2 14:46:51 2011
@@ -46,7 +46,7 @@ import javax.persistence.Table;
             query="select s from simple s where s.name = ?1"),
     @NamedQuery(name="FindAll", query="select s from simple s"),
     @NamedQuery(name="SelectWithPositionalParameterNonOneStart",
-        query="select a from simple a where a.id=?900 and a.name=?2")
+        query="select a from simple a where a.id=?900 and a.name=?2 and 
a.value=?54"),
 })
 
 @NamedNativeQueries( { 

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestQueryConvertPositionalParameters.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestQueryConvertPositionalParameters.java?rev=1153150&r1=1153149&r2=1153150&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestQueryConvertPositionalParameters.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestQueryConvertPositionalParameters.java
 Tue Aug  2 14:46:51 2011
@@ -19,7 +19,11 @@
 package org.apache.openjpa.persistence.query;
 
 import javax.persistence.EntityManager;
+import javax.persistence.Query;
 
+import org.apache.openjpa.kernel.QueryLanguages;
+import org.apache.openjpa.kernel.jpql.JPQLParser;
+import org.apache.openjpa.persistence.OpenJPAPersistence;
 import org.apache.openjpa.persistence.test.SingleEMFTestCase;
 
 /**
@@ -28,21 +32,39 @@ import org.apache.openjpa.persistence.te
  */
 public class TestQueryConvertPositionalParameters extends SingleEMFTestCase {
     EntityManager _em;
-    long _id;
-    String _name;
+    long _id1;
+    String _name1;
+    String _val1;
+    long _id2;
+    String _name2;
+    String _val2;
 
     @Override
     public void setUp() {
-        super.setUp(SimpleEntity.class, "openjpa.Compatibility", 
"ConvertPositionalParametersToNamed=true");
+        super.setUp(SimpleEntity.class, "openjpa.Compatibility", 
"ConvertPositionalParametersToNamed=true"
+        ,"openjpa.Log","SQL=trace"    
+        );
         _em = emf.createEntityManager();
         
         _em.getTransaction().begin();
-        SimpleEntity se = new SimpleEntity();
-        _name = "name--" + System.currentTimeMillis();
-        se.setName(_name);
-        _em.persist(se);
+        SimpleEntity se1 = new SimpleEntity();
+        _name1 = "name1";
+        _val1 = "val1";
+        se1.setName(_name1);
+        se1.setValue(_val1);
+        _em.persist(se1);
+        _id1 = se1.getId();
+        _em.getTransaction().commit();
+        
+        _em.getTransaction().begin();
+        SimpleEntity se2 = new SimpleEntity();
+        _name2 = "name2";
+        _val2 = "val2";
+        se2.setName(_name2);
+        se2.setValue(_val2);
+        _em.persist(se2);
+        _id2 = se2.getId();
         _em.getTransaction().commit();
-        _id = se.getId();
         _em.clear();
     }
 
@@ -58,18 +80,77 @@ public class TestQueryConvertPositionalP
 
     public void testNamedPositionalStartAtNonOne() {
         SimpleEntity se =
-            _em.createNamedQuery("SelectWithPositionalParameterNonOneStart", 
SimpleEntity.class).setParameter(900, _id)
-                .setParameter(2, _name).getSingleResult();
+            _em.createNamedQuery("SelectWithPositionalParameterNonOneStart", 
SimpleEntity.class)
+                .setParameter(900, _id1).setParameter(2, 
_name1).setParameter(54, _val1).getSingleResult();
         assertNotNull(se);
     }
 
     public void testJPQLPositionalStartAtNonOne() {
         int idPos = 7;
         int namePos = 908;
+        int valPos = 578;
+        SimpleEntity se =
+            _em.createQuery(
+                "Select s FROM simple s where s.id=?" + idPos + " and 
s.name=?" + namePos + " and s.value=?" + valPos,
+                SimpleEntity.class).setParameter(idPos, 
_id1).setParameter(namePos, _name1).setParameter(valPos, _val1)
+                .getSingleResult();
+        assertNotNull(se);
+    }
+
+    public void testJPQLWithSubQueryPositionalStartAtNonOne() {
+        int idPos = 7;
+        int namePos = 908;
+        int valPos = 578;
         SimpleEntity se =
-            _em.createQuery("Select s FROM simple s where s.id=?" + idPos + " 
and s.name=?" + namePos,
-                SimpleEntity.class).setParameter(idPos, 
_id).setParameter(namePos, _name).getSingleResult();
+            _em.createQuery(
+                "Select s FROM simple s where s.id = ?" + idPos
+                    + " and (SELECT se.value FROM simple se where se.name=?" + 
namePos + ")=?" + valPos,
+                SimpleEntity.class).setParameter(idPos, 
_id1).setParameter(namePos, _name1).setParameter(valPos, _val1)
+                .getSingleResult();
+        assertNotNull(se);
+    }
+
+    public void testPreparedQueryPositionalStartAtNonOne() {
+        int idPos = 54;
+        int namePos = 23;
+        int valPos = 42;
+        String jpql =
+            "Select s FROM simple s where s.id=?" + idPos + " and s.name=?" + 
namePos + " and s.value=?" + valPos;
+
+        Query q =
+            _em.createQuery(jpql).setParameter(idPos, 
_id1).setParameter(namePos, _name1).setParameter(valPos, _val1);
+        SimpleEntity se = (SimpleEntity) q.getSingleResult();
         assertNotNull(se);
+        assertEquals(JPQLParser.LANG_JPQL, 
OpenJPAPersistence.cast(q).getLanguage());
+
+        Query q2 =
+            _em.createQuery(jpql).setParameter(idPos, 
_id2).setParameter(namePos, _name2).setParameter(valPos, _val2);
+        SimpleEntity se2 = (SimpleEntity) q2.getSingleResult();
+        assertNotNull(se2);
+        assertEquals(QueryLanguages.LANG_PREPARED_SQL, 
OpenJPAPersistence.cast(q2).getLanguage());
     }
 
+    public void testPreparedQueryWithSubQueryPositionalStartAtNonOne() {
+        int idPos = 7;
+        int namePos = 908;
+        int valPos = 352;
+        String jpql =
+            "Select s FROM simple s where s.id = ?" + idPos + " and (SELECT 
se.value FROM simple se where se.name=?"
+                + namePos + ")=?" + valPos;
+        Query q =
+            _em.createQuery(jpql, SimpleEntity.class).setParameter(idPos, 
_id1).setParameter(namePos, _name1)
+                .setParameter(valPos, _val1);
+
+        SimpleEntity se = (SimpleEntity) q.getSingleResult();
+        assertNotNull(se);
+        assertEquals(JPQLParser.LANG_JPQL, 
OpenJPAPersistence.cast(q).getLanguage());
+
+        Query q2 =
+            _em.createQuery(jpql, SimpleEntity.class).setParameter(idPos, 
_id2).setParameter(namePos, _name2)
+                .setParameter(valPos, _val2);
+        SimpleEntity se2 = (SimpleEntity) q2.getSingleResult();
+        assertNotNull(se2);
+        assertEquals(QueryLanguages.LANG_PREPARED_SQL, 
OpenJPAPersistence.cast(q2).getLanguage());
+
+    }
 }


Reply via email to