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());
+
+ }
}