blob: 4e71644f474655b0a556f74e3849467981f950a8 [file] [log] [blame]
/*
* 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.persistence.common.apps.*;
import org.apache.openjpa.persistence.common.utils.AbstractTestCase;
public class TestEJBQLCondExpression extends AbstractTestCase {
private int userid1, userid2, userid3, userid4, userid5;
public TestEJBQLCondExpression(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", "USA", "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", "NIGERIA", "02000") };
CompUser user1 = createUser("Seetha", "MAC", add[0], 40, 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);
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();
endTx(em);
endEm(em);
}
public void testNothing() {
EntityManager em = currentEntityManager();
String query = "SELECT o FROM CompUser o";
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
assertEquals("the size of the list is not 5", 5, result.size());
endEm(em);
}
public void testBetweenExpr() {
EntityManager em = currentEntityManager();
String query =
"SELECT o.name FROM CompUser o WHERE o.age BETWEEN 19 AND 40 AND o.computerName = 'PC'";
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
assertEquals("they are not equal", 2, result.size());
assertTrue("result dont contain shannon", result.contains("Shannon"));
assertTrue("result dont contain ugo", result.contains("Ugo"));
endEm(em);
}
public void testNotBetweenExpr() {
EntityManager em = currentEntityManager();
String query =
"SELECT o.name FROM CompUser o WHERE o.age NOT BETWEEN 19 AND 40 AND o.computerName= 'PC'";
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
assertEquals("they are not equal", 0, result.size());
endEm(em);
}
public void testInExpr() {
EntityManager em = currentEntityManager();
String query =
"SELECT o.name FROM CompUser o WHERE o.age IN (29, 40, 10)";
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
assertEquals(3, result.size());
assertTrue("seetha is not in the list", result.contains("Seetha"));
assertTrue("jacob is not in the list", result.contains("Jacob"));
assertTrue("famzy is not in the list", result.contains("Famzy"));
endEm(em);
}
public void testNotInExpr() {
EntityManager em = currentEntityManager();
String query =
"SELECT o.name FROM CompUser o WHERE o.age NOT IN (29, 40, 10)";
List result = em.createQuery(query).getResultList();
assertNotNull(result);
assertEquals(2, result.size());
assertTrue(result.contains("Ugo"));
assertTrue(result.contains("Shannon"));
endEm(em);
}
public void testLikeExpr() {
EntityManager em = currentEntityManager();
String query =
"SELECT o.computerName FROM CompUser o WHERE o.name LIKE 'Sha%' AND o.computerName NOT IN ('PC')";
List result = em.createQuery(query).getResultList();
assertNotNull(result);
assertEquals(0, result.size());
query =
"SELECT o.computerName FROM CompUser o WHERE o.name LIKE 'Sha%o_' AND o.computerName NOT IN ('UNIX')";
result = em.createQuery(query).getResultList();
assertNotNull(result);
assertEquals(1, result.size());
query = "SELECT o.name FROM CompUser o WHERE o.name LIKE '_J%'";
result = em.createQuery(query).getResultList();
assertNotNull(result);
assertEquals(0, result.size());
query = "SELECT o.name FROM CompUser o WHERE o.name LIKE ?1 ESCAPE '|'";
result = em.createQuery(query).setParameter(1, "%|_%").getResultList();
assertNotNull(result);
assertEquals(0, result.size());
endEm(em);
}
public void testNullExpr() {
EntityManager em = currentEntityManager();
String query =
"SELECT o.name FROM CompUser o WHERE o.age IS NOT NULL AND o.computerName = 'PC' ";
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
assertEquals("the list size is not 2", 2, result.size());
assertTrue("the result doesnt contain ugo", result.contains("Ugo"));
assertTrue("the result doesnt contain shannon",
result.contains("Shannon"));
endEm(em);
}
public void testNullExpr2() {
EntityManager em = currentEntityManager();
String query =
"SELECT o.name FROM CompUser o WHERE o.address.country IS NULL";
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
assertEquals("they are not equal", 0, result.size());
endEm(em);
}
public void testIsEmptyExpr() {
EntityManager em = currentEntityManager();
String query =
"SELECT o.name FROM CompUser o WHERE o.nicknames IS NOT EMPTY";
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
assertEquals("they are not equal", 0, result.size());
endEm(em);
}
public void testIsEmptyExpr2() {
EntityManager em = currentEntityManager();
String query =
"SELECT o.name FROM CompUser o WHERE o.nicknames IS EMPTY";
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
assertEquals("they are not equal", 5, result.size());
endEm(em);
}
/**
* TO BE TESTED LATER WITH A DIFF DATABASE
* public void testMemberOfExpr(){}
*/
public void testExistExpr() {
EntityManager em = currentEntityManager();
String query = "SELECT DISTINCT o.name FROM CompUser o WHERE EXISTS" +
" (SELECT c FROM Address c WHERE c = o.address )";
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
assertEquals("they are not equal", 5, result.size());
assertTrue("Seetha is not list", result.contains("Seetha"));
assertTrue("Shannon is not list", result.contains("Shannon"));
assertTrue("jacob is not list", result.contains("Jacob"));
assertTrue("ugo is not list", result.contains("Ugo"));
endEm(em);
}
public void testNotExistExpr() {
EntityManager em = currentEntityManager();
String query =
"SELECT DISTINCT o.name FROM CompUser o WHERE NOT EXISTS" +
" (SELECT s FROM CompUser s WHERE s.address.country = o.address.country)";
List result = em.createQuery(query).getResultList();
assertNotNull("list is null", result);
assertEquals("they are not equal", 0, result.size());
endEm(em);
}
public void testAnyExpr() {
EntityManager em = currentEntityManager();
String query =
"SELECT o.name FROM CompUser o WHERE o.address.zipcode = ANY (" +
" SELECT s.computerName FROM CompUser s WHERE s.address.country IS NOT NULL )";
List result = em.createQuery(query).getResultList();
assertNotNull("list is null", result);
assertEquals("they are not equal", 0, result.size());
endEm(em);
}
public void testConstructorExpr() {
EntityManager em = currentEntityManager();
String query =
"SELECT NEW org.apache.openjpa.persistence.common.apps.MaleUser(c.name, c.computerName, c.address, c.age, c.userid)" +
" FROM CompUser c WHERE c.name = 'Seetha'";
MaleUser male = (MaleUser) em.createQuery(query).getSingleResult();
assertNotNull("the list is null", male);
assertEquals("the names dont match", "Seetha", male.getName());
assertEquals("computer names dont match", "MAC",
male.getComputerName());
assertEquals("the ages dont match", 40, male.getAge());
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;
}
}