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:
Catalina Wei 2008-12-18 01:30:00 +00:00
parent ead852dc38
commit e63fbd5226
1 changed files with 187 additions and 0 deletions

View File

@ -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;
}
}