mirror of https://github.com/apache/openjpa.git
OPENJPA-805 JPQL updates iteration 1
add in-memory query testcase for Case, Coalesce, and NullIf expressions git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@727611 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ead852dc38
commit
e63fbd5226
|
@ -0,0 +1,187 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.openjpa.persistence.jpql.expressions;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
|
||||||
|
import org.apache.openjpa.kernel.Query;
|
||||||
|
import org.apache.openjpa.kernel.QueryImpl;
|
||||||
|
import org.apache.openjpa.persistence.common.apps.*;
|
||||||
|
import org.apache.openjpa.persistence.common.utils.AbstractTestCase;
|
||||||
|
|
||||||
|
public class TestInMemoryScalarExpressions extends AbstractTestCase {
|
||||||
|
|
||||||
|
private int userid1, userid2, userid3, userid4, userid5, userid6;
|
||||||
|
|
||||||
|
public TestInMemoryScalarExpressions(String name) {
|
||||||
|
super(name, "jpqlclausescactusapp");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUp() {
|
||||||
|
deleteAll(CompUser.class);
|
||||||
|
EntityManager em = currentEntityManager();
|
||||||
|
startTx(em);
|
||||||
|
|
||||||
|
Address[] add = new Address[]{
|
||||||
|
new Address("43 Sansome", "SF", "United-Kingdom", "94104"),
|
||||||
|
new Address("24 Mink", "ANTIOCH", "USA", "94513"),
|
||||||
|
new Address("23 Ogbete", "CoalCamp", "NIGERIA", "00000"),
|
||||||
|
new Address("10 Wilshire", "Worcester", "CANADA", "80080"),
|
||||||
|
new Address("23 Bellflower", "Ogui", null, "02000"),
|
||||||
|
new Address("22 Montgomery", "SF", null, "50054") };
|
||||||
|
|
||||||
|
CompUser user1 = createUser("Seetha", "MAC", add[0], 36, true);
|
||||||
|
CompUser user2 = createUser("Shannon ", "PC", add[1], 36, false);
|
||||||
|
CompUser user3 = createUser("Ugo", "PC", add[2], 19, true);
|
||||||
|
CompUser user4 = createUser("_Jacob", "LINUX", add[3], 10, true);
|
||||||
|
CompUser user5 = createUser("Famzy", "UNIX", add[4], 29, false);
|
||||||
|
CompUser user6 = createUser("Shade", "UNIX", add[5], 23, false);
|
||||||
|
|
||||||
|
em.persist(user1);
|
||||||
|
userid1 = user1.getUserid();
|
||||||
|
em.persist(user2);
|
||||||
|
userid2 = user2.getUserid();
|
||||||
|
em.persist(user3);
|
||||||
|
userid3 = user3.getUserid();
|
||||||
|
em.persist(user4);
|
||||||
|
userid4 = user4.getUserid();
|
||||||
|
em.persist(user5);
|
||||||
|
userid5 = user5.getUserid();
|
||||||
|
em.persist(user6);
|
||||||
|
userid6 = user6.getUserid();
|
||||||
|
|
||||||
|
endTx(em);
|
||||||
|
endEm(em);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCoalesceExpressions() {
|
||||||
|
EntityManager em = currentEntityManager();
|
||||||
|
List rsall = em.createQuery("SELECT e from CompUser e")
|
||||||
|
.getResultList();
|
||||||
|
|
||||||
|
String query = "SELECT e.name as name, " +
|
||||||
|
" COALESCE (e.address.country, 'Unknown')" +
|
||||||
|
" FROM CompUser e ORDER BY name";
|
||||||
|
org.apache.openjpa.persistence.QueryImpl q1 =
|
||||||
|
(org.apache.openjpa.persistence.QueryImpl) em.createQuery(query);
|
||||||
|
Query q2 = q1.getDelegate();
|
||||||
|
Query qi = (QueryImpl) q2;
|
||||||
|
qi.setCandidateCollection(rsall);
|
||||||
|
List rs = q1.getResultList();
|
||||||
|
Object[] result = (Object[]) rs.get(0);
|
||||||
|
assertEquals("the name is not famzy", "Famzy", result[0]);
|
||||||
|
assertEquals("Unknown", result[1]);
|
||||||
|
|
||||||
|
endEm(em);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testNullIfExpressions() {
|
||||||
|
EntityManager em = currentEntityManager();
|
||||||
|
List rsall = em.createQuery("SELECT e from CompUser e")
|
||||||
|
.getResultList();
|
||||||
|
|
||||||
|
String query = "SELECT e.name, " +
|
||||||
|
" NULLIF (e.address.country, 'USA'), " +
|
||||||
|
" e.address.country as res " +
|
||||||
|
" FROM CompUser e ORDER BY res";
|
||||||
|
|
||||||
|
org.apache.openjpa.persistence.QueryImpl q1 =
|
||||||
|
(org.apache.openjpa.persistence.QueryImpl) em.createQuery(query);
|
||||||
|
Query q2 = q1.getDelegate();
|
||||||
|
Query qi = (QueryImpl) q2;
|
||||||
|
qi.setCandidateCollection(rsall);
|
||||||
|
List rs = q1.getResultList();
|
||||||
|
Object[] result = (Object[]) rs.get(2);
|
||||||
|
assertEquals("the name is not shannon ", "Shannon ", result[0]);
|
||||||
|
assertNull("is not null", result[1]);
|
||||||
|
|
||||||
|
endEm(em);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSimpleCaseExpression() {
|
||||||
|
EntityManager em = currentEntityManager();
|
||||||
|
List rsall = em.createQuery("SELECT e from CompUser e")
|
||||||
|
.getResultList();
|
||||||
|
|
||||||
|
String query = "SELECT e.name, " +
|
||||||
|
" CASE e.address.country WHEN 'USA' " +
|
||||||
|
" THEN 'us' " +
|
||||||
|
" ELSE 'non-us' END as d2, " +
|
||||||
|
" e.address.country " +
|
||||||
|
" FROM CompUser e order by d2";
|
||||||
|
|
||||||
|
org.apache.openjpa.persistence.QueryImpl q1 =
|
||||||
|
(org.apache.openjpa.persistence.QueryImpl) em.createQuery(query);
|
||||||
|
Query q2 = q1.getDelegate();
|
||||||
|
Query qi = (QueryImpl) q2;
|
||||||
|
qi.setCandidateCollection(rsall);
|
||||||
|
List rs = q1.getResultList();
|
||||||
|
Object[] result = (Object[]) rs.get(5);
|
||||||
|
assertEquals("the name is not shannon ", "Shannon ", result[0]);
|
||||||
|
assertEquals("is not 'us'", "us", result[1]);
|
||||||
|
|
||||||
|
endEm(em);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGeneralCaseExpression() {
|
||||||
|
EntityManager em = currentEntityManager();
|
||||||
|
List rsall = em.createQuery("SELECT e from CompUser e")
|
||||||
|
.getResultList();
|
||||||
|
|
||||||
|
String query = "SELECT e.name as name, " +
|
||||||
|
" CASE WHEN e.age > 30 THEN 30 " +
|
||||||
|
" WHEN e.age < 15 THEN 15 " +
|
||||||
|
" ELSE 20 " +
|
||||||
|
" END, " +
|
||||||
|
" e.age " +
|
||||||
|
" FROM CompUser e ORDER BY name";
|
||||||
|
|
||||||
|
org.apache.openjpa.persistence.QueryImpl q1 =
|
||||||
|
(org.apache.openjpa.persistence.QueryImpl) em.createQuery(query);
|
||||||
|
Query q2 = q1.getDelegate();
|
||||||
|
Query qi = (QueryImpl) q2;
|
||||||
|
qi.setCandidateCollection(rsall);
|
||||||
|
List rs = q1.getResultList();
|
||||||
|
Object[] result = (Object[]) rs.get(3);
|
||||||
|
assertEquals("the name is not shannon ", "Shannon ", result[0]);
|
||||||
|
assertEquals("not 30", "30", result[1].toString());
|
||||||
|
|
||||||
|
endEm(em);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompUser createUser(String name, String cName, Address add, int age,
|
||||||
|
boolean isMale) {
|
||||||
|
CompUser user = null;
|
||||||
|
if (isMale) {
|
||||||
|
user = new MaleUser();
|
||||||
|
user.setName(name);
|
||||||
|
user.setComputerName(cName);
|
||||||
|
user.setAddress(add);
|
||||||
|
user.setAge(age);
|
||||||
|
} else {
|
||||||
|
user = new FemaleUser();
|
||||||
|
user.setName(name);
|
||||||
|
user.setComputerName(cName);
|
||||||
|
user.setAddress(add);
|
||||||
|
user.setAge(age);
|
||||||
|
}
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue