blob: fce7895e88545305120ec8b332f522e13795efab [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.testing.tests.expressions;
import org.eclipse.persistence.testing.models.employee.domain.*;
import org.eclipse.persistence.exceptions.*;
import org.eclipse.persistence.expressions.*;
import org.eclipse.persistence.internal.helper.Helper;
import org.eclipse.persistence.platform.database.*;
import org.eclipse.persistence.queries.*;
import org.eclipse.persistence.testing.models.collections.Restaurant;
import org.eclipse.persistence.testing.models.multipletable.LargeBusinessProject;
import org.eclipse.persistence.testing.models.ownership.*;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.tools.schemaframework.PopulationManager;
import java.util.*;
import org.eclipse.persistence.testing.models.inheritance.SalesRep;
import org.eclipse.persistence.testing.models.inheritance.Engineer;
import org.eclipse.persistence.testing.models.inheritance.Computer;
import org.eclipse.persistence.testing.models.inheritance.Vehicle;
import org.eclipse.persistence.testing.models.inheritance.NonFueledVehicle;
public class ExpressionTestSuite extends TestSuite {
protected PopulationManager manager;
public ExpressionTestSuite() {
setDescription("This suite tests expressions.");
}
public ExpressionTestSuite(boolean isSRG) {
super(isSRG);
setDescription("This suite tests expressions.");
}
private void addAdvancedExpressionFunctionTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression exp = builder.get("salary").lessThan(100000);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(1993, 5, 1, 0, 0, 0);
exp = exp.and(builder.get("period").get("startDate").dateName("year").equal("1993"));
exp = exp.and(builder.get("period").get("startDate").addMonths(1).equal(new java.sql.Date(calendar.getTime().getTime())));
exp = exp.and(builder.get("lastName").asciiValue().equal("84"));
exp = exp.and(builder.get("period").get("endDate").dateToString().equal("1999-6-12 10:10:10.0"));
exp = exp.and(builder.get("period").get("endDate").toChar().equal("1999-6-12 10:10:10.0"));
exp = exp.and(builder.get("period").get("endDate").toChar("day").equal("monday"));
calendar.set(1999, 1, 1, 0, 0, 0);
exp = exp.and(builder.get("period").get("startDate").toDate().equal(new java.sql.Date(calendar.getTime().getTime())));
exp = exp.and(builder.get("period").get("startDate").lastDay().equal(new java.sql.Date(calendar.getTime().getTime())));
calendar.set(1993, 1, 1, 0, 0, 0);
exp = exp.and(builder.get("period").get("startDate").truncateDate("year").equal(new java.sql.Date(calendar.getTime().getTime())));
exp = exp.and(builder.get("period").get("endDate").newTime("EST", "CST").dateToString().equal("1999-6-12 9:10:10.0"));
exp = exp.and(builder.get("firstName").leftPad(1, " ").equal(" Bob"));
exp = exp.and(builder.get("firstName").replace("B", "C").equal("Cob"));
exp = exp.and(builder.get("firstName").rightPad(1, " ").equal("Bob "));
exp = exp.and(builder.get("salary").toNumber().lessThan(100000));
exp = exp.and(builder.get("firstName").substring(1, 1).equal("B"));
exp = exp.and(builder.get("firstName").translate("Bo", "bo").equal("bob"));
exp = exp.and(builder.get("firstName").trim().equal("b"));
Hashtable decodeTable = new Hashtable(3);
decodeTable.put("Bob", "Bobby");
decodeTable.put("Susan", "Susie");
decodeTable.put("Eldrick", "Tiger");
exp = exp.and(builder.get("firstName").ifNull("Bob").decode(decodeTable, "No-Nickname").equal("Bobby"));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(exp);
test.setName("AdvancedExpressionFunctionTest");
test.setDescription("advanced expression function test");
test.addSupportedPlatform(OraclePlatform.class);
addTest(test);
}
private void addRegexpTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression exp = builder.get("firstName").regexp("^B.*");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 2);
test.setExpression(exp);
test.setName("RegexpTest");
test.setDescription("Regexp test");
test.addSupportedPlatform(OraclePlatform.class);
test.addSupportedPlatform(MySQLPlatform.class);
test.addSupportedPlatform(PostgreSQLPlatform.class);
addTest(test);
}
/**
* TODO:
* This tests seems to have been removed? Should be added back, for DB2 platform.
*/
private void addAdvancedDB2ExpressionFunctionTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression exp = builder.get("salary").lessThan(100000);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(1993, 5, 1, 0, 0, 0);
exp = exp.and(builder.get("lastName").asciiValue().equal(84));
exp = exp.and(builder.get("period").get("endDate").dateToString().equal("1999-6-12 10:10:10.0"));
calendar.set(1999, 1, 1, 0, 0, 0);
exp = exp.and(builder.get("period").get("startDate").toDate().equal(new java.sql.Date(calendar.getTime().getTime())));
calendar.set(1993, 1, 1, 0, 0, 0);
exp = exp.and(builder.get("firstName").replace("B", "C").equal("Cob"));
exp = exp.and(builder.get("salary").toNumber().lessThan(100000));
exp = exp.and(builder.get("firstName").substring(1, 1).equal("B"));
exp = exp.and(builder.get("firstName").translate(new String("Bo"), new String("bo")).equal("bob"));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(exp);
test.setName("AdvancedDB2ExpressionFunctionTest");
test.setDescription("advanced expression function test");
test.addSupportedPlatform(DB2Platform.class);
test.addUnsupportedPlatform(DerbyPlatform.class);
addTest(test);
}
private void addAdvancedExpressionMathTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("salary").greaterThanEqual(1000);
expression = expression.and((ExpressionMath.ln(builder.get("salary"))).lessThan(10));
expression = expression.and((ExpressionMath.mod(builder.get("salary"), new Integer(107)).lessThan(10)));
expression = expression.and((ExpressionMath.floor(builder.get("salary"))).lessThan(45000));
expression = expression.and((ExpressionMath.ceil(builder.get("salary"))).lessThan(10000));
expression = expression.and(ExpressionMath.round(builder.get("salary"), 2).equal(40000));
expression = expression.and(ExpressionMath.min(builder.get("salary"), new Integer(30000)).greaterThan(30000));
expression = expression.and(ExpressionMath.max(builder.get("salary"), new Integer(30000)).lessThan(50000));
expression = expression.and((ExpressionMath.sinh(ExpressionMath.divide(builder.get("salary"), new Integer(10000000))).lessThanEqual(100)));
expression = expression.and((ExpressionMath.cosh(ExpressionMath.divide(builder.get("salary"), new Integer(10000000))).lessThanEqual(100)));
expression = expression.and((ExpressionMath.tanh(ExpressionMath.divide(builder.get("salary"), new Integer(10000000))).lessThanEqual(1)));
expression = expression.and((ExpressionMath.acos(ExpressionMath.power(builder.get("salary"), 0)).lessThanEqual(100)));
expression = expression.and((ExpressionMath.asin(ExpressionMath.power(builder.get("salary"), 0)).lessThanEqual(100)));
expression = expression.and((ExpressionMath.atan(ExpressionMath.power(builder.get("salary"), 0)).lessThanEqual(100)));
expression = expression.and((ExpressionMath.atan2(ExpressionMath.power(builder.get("salary"), 0), 2).lessThanEqual(100)));
expression = expression.and(ExpressionMath.power(builder.get("salary"), 1).equal(40000));
expression = expression.and((ExpressionMath.trunc(builder.get("salary"), 2).equal(50000)));
expression = expression.and((ExpressionMath.chr(builder.get("salary"))).equal('b'));
expression = expression.and(ExpressionMath.round(builder.get("salary"), 2).equal(40000));
expression = expression.and((ExpressionMath.sign(builder.get("salary"))).greaterThan(0));
expression = expression.and((ExpressionMath.exp(ExpressionMath.min(builder.get("salary"), 5))).lessThan(1000000));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(expression);
test.setName("AdvancedExpressionMathTest");
test.setDescription("Test advanced expression math package");
test.addSupportedPlatform(OraclePlatform.class);
addTest(test);
}
private void addAdvancedSybaseExpressionFunctionTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression exp = builder.get("period").get("startDate").datePart("year").equal(1993);
exp = exp.and(builder.get("period").get("startDate").dateName("year").equal("1993"));
exp = exp.and(builder.get("period").get("startDate").equal(builder.currentDate()));
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(1994, 1, 1, 0, 0, 0);
exp = exp.and(builder.get("period").get("startDate").dateDifference("year", new java.sql.Date(calendar.getTime().getTime())).equal(1));
exp = exp.and(builder.get("period").get("startDate").addDate("year", 1).dateDifference("year", builder.value(new java.sql.Date(calendar.getTime().getTime()))).equal(2));
exp = exp.and(builder.get("firstName").difference("Bob").greaterThan(1));
exp = exp.and(builder.get("firstName").indexOf("o").greaterThan(0));
exp = exp.and(builder.get("firstName").length().lessThan(6));
exp = exp.and(builder.get("firstName").reverse().equal("boB"));
exp = exp.and(builder.get("firstName").replicate(2).equal("BobBob"));
exp = exp.and(builder.get("firstName").right(2).equal("ob"));
exp = exp.and(builder.get("salary").toNumber().lessThan(100000));
// bug 3061144
exp = exp.and(builder.get("firstName").ifNull("Frank").equal("Bob"));
exp = exp.and(builder.get("period").get("endDate").dateToString().equal("1999-6-12 10:10:10.0"));
exp = exp.and(builder.get("period").get("startDate").toDate().equal(new java.sql.Date(calendar.getTime().getTime())));
exp = exp.and(builder.get("period").get("endDate").toChar().equal("1999-6-12 10:10:10.0"));
exp = exp.and(ExpressionMath.cot(builder.get("salary")).greaterThan(0));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(exp);
test.setName("AdvancedSybaseExpressionFunctionTest");
test.setDescription("advanced sybase expression function test");
test.addSupportedPlatform(SybasePlatform.class);
test.addSupportedPlatform(SQLAnywherePlatform.class);
test.addSupportedPlatform(SQLServerPlatform.class);
addTest(test);
}
private void addAggregateQueryTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0003");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("period").get("startDate").equal(employee.getPeriod().getStartDate());
SearchTest test = new SearchTest();
test.setExpression(expression);
test.setErrorMessage("Failed to match an aggregate attribute (get('period').get('startDate').equals(dateObject)");
test.setName("AggregateQueryTest");
test.setDescription("Test for mateching of aggregate properties");
addTest(test);
}
private void addAggregeateCollectionJoinTest(Class cls) {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.anyOf("customers").anyOf("dependants").get("firstName").equal("Kyle");
ReadAllExpressionTest test = new ReadAllExpressionTest(cls, 1);
test.setExpression(expression);
test.setName("Aggregate Colection Join Test " + Helper.getShortClassName(cls));
test.setDescription("Test aggregate collection join with 2 anyOf clauses");
addTest(test);
}
private void addAndNullTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0003");
ExpressionBuilder builder = new ExpressionBuilder();
Expression exp1 = builder.get("lastName").equal("Chanley");
Expression exp2 = builder.get("firstName").equal("Charles");
Expression expression = exp1.and(exp2).and(null);
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("AndNullExpressionTest");
test.setDescription("Test AND expression with NULL");
addTest(test);
}
private void addAndTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0003");
ExpressionBuilder builder = new ExpressionBuilder();
Expression exp1 = builder.get("lastName").equal("Chanley");
Expression exp2 = builder.get("firstName").equal("Charles");
Expression expression = exp1.and(exp2);
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("AndExpressionTest");
test.setDescription("Test AND expression");
addTest(test);
}
private void addBadFieldWithTableTest() {
Expression expression = new ExpressionBuilder().getField("ADDRESS.STREET").equal("blee");
BadExpressionTest test = new BadExpressionTest();
test.setDescription("Test that fields with an invalid table are error handled correctly");
test.setExceptionCode(QueryException.INVALID_TABLE_FOR_FIELD_IN_EXPRESSION);
test.setExpression(expression);
test.setName("BadFieldTableTest");
addTest(test);
}
private void addBadQueryKeyTest() {
Expression expression = new ExpressionBuilder().get("foofoo").equal("blee");
BadExpressionTest test = new BadExpressionTest();
test.setDescription("Test that wrong query keys are error handled correctly");
test.setExceptionCode(QueryException.INVALID_QUERY_KEY_IN_EXPRESSION);
test.setExpression(expression);
test.setName("BadQueryKeyTest");
addTest(test);
}
private void addBadQueryTableTest() {
Expression expression = new ExpressionBuilder().getTable("foofoo").equal("blee");
BadExpressionTest test = new BadExpressionTest();
test.setDescription("Test that the comparison of tables is error handled correctly");
test.setExceptionCode(QueryException.CANNOT_COMPARE_TABLES_IN_EXPRESSION);
test.setExpression(expression);
test.setName("BadQueryTableTest");
addTest(test);
}
private void addBadToManyQueryKeyTest() {
Expression expression = new ExpressionBuilder().get("managedEmployees").get("firstName").equal("blee");
BadExpressionTest test = new BadExpressionTest();
test.setDescription("Test that to-many query keys cannot be gotten with 'get', must use 'anyOf'");
test.setExceptionCode(QueryException.INVALID_USE_OF_TO_MANY_QUERY_KEY_IN_EXPRESSION);
test.setExpression(expression);
test.setName("BadToManyQueryKeyTest");
addTest(test);
}
private void addBadAnyOfTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("firstName").equal("blee").and(builder.anyOf("managedEmployees"));
BadExpressionTest test = new BadExpressionTest();
test.setDescription("Test and with an anyof.");
test.setExceptionCode(QueryException.INVALID_EXPRESSION);
test.setExpression(expression);
test.setName("BadAnyOfTest");
addTest(test);
}
private void addBetweenTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("salary").between(33000, 36000);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression);
test.setName("BetweenExpressionTest");
test.setDescription("Test BETWEEN expression");
addTest(test);
}
private void addBetweenTest2() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("salary").between(builder.get("manager").get("salary"), new Integer(500000));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 5);
test.setExpression(expression);
test.setName("BetweenExpressionTest 2");
test.setDescription("Test BETWEEN expression 2");
addTest(test);
}
protected void addBuilderEqualParameterTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0002");
ExpressionBuilder emp = new ExpressionBuilder();
Expression expression = emp.equal(emp.getParameter("employee"));
ReadAllQuery query = new ReadAllQuery(Employee.class, expression);
query.addArgument("employee");
//query.setShouldPrepare(false);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression);
test.setQuery(query);
test.getArguments().add(employee);
test.setName("BuilderEqualParameter");
test.setDescription("For bug 3003399 tests ExpressionBuilder.equal(ParameterExpression).");
addTest(test);
}
private void addComplexBooleanTest() {
ExpressionBuilder emp = new ExpressionBuilder();
java.util.Calendar c = Calendar.getInstance();
c.set(1992, 0, 1);
java.sql.Date lowDate = new java.sql.Date(c.getTime().getTime());
c.set(1994, 0, 1);
java.sql.Date highDate = new java.sql.Date(c.getTime().getTime());
Expression exp = emp.get("firstName").equal("Fred").and(emp.get("lastName").like("Jo%"));
Expression subExp1 = emp.get("gender").equal("Female").and(emp.get("period").get("startDate").greaterThan(lowDate).and(emp.get("period").get("startDate").lessThan(highDate)));
Expression subExp2 = emp.get("salary").greaterThan(400000).and(emp.get("firstName").notEqual("Fred"));
exp = exp.or(subExp1.or(subExp2));
//Thats either Fred Jones, or a woman with hired 92-94, or someone who's salary is >400K, except fred jones
//expect fred, sarah-loo, nancy, betty
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 2);
test.setExpression(exp);
test.setName("Complex Boolean Test");
test.setDescription("Test expression with complicated ands/ors");
addTest(test);
}
private void addComputerViewCursoredStreamTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("memory").greaterThan(100);
ReadAllExpressionTest test = new ReadAllExpressionTest(Computer.class, 2);
ReadAllQuery query = new ReadAllQuery(Computer.class, expression);
query.useCursoredStream(1, 1);
test.setExpression(expression);
test.setQuery(query);
test.setName("ComputerViewCursoredStreamTest");
test.setDescription("Test query using cursors with inheritance, supported if using views. For bug 2718118.");
test.addSupportedPlatform(OraclePlatform.class);
test.addSupportedPlatform(SybasePlatform.class);
test.addSupportedPlatform(SQLAnywherePlatform.class);
//Uncomment it when we support MySQL 5. Please refer to the comments in InheritanceSystem
//test.addSupportedPlatform(MySQLPlatform.class);
addTest(test);
}
private void addComputerViewTest1() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("memory").greaterThan(100);
ReadAllExpressionTest test = new ReadAllExpressionTest(Computer.class, 2);
test.setExpression(expression);
test.setName("ComputerViewTest1");
test.setDescription("Test expression against view, or multiple table subclass read.");
addTest(test);
}
/**
* For bug 3107049 test a potential infinite loop on constantExp.equal(constantExp).
*/
private void addConstantEqualConstantTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.value(1).equal(1);
expression = expression.and(builder.value(1).equal(builder.value(1)));
expression = expression.and(builder.value(1).equal(builder.getParameter("1")));
ReadAllQuery query = new ReadAllQuery(Employee.class, expression);
query.addArgument("1", Integer.class);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 12);
test.setExpression(expression);
test.setQuery(query);
test.getArguments().add(new Integer(1));
test.setName("ConstantEqualConstantTest");
test.setDescription("Test meaningless selection criteria like 1 == 1.");
addTest(test);
}
/* Test that when the user uses getFunction(FOO) we will print it as a function
* FOO, even though we've never heard of it before.
*/
private void addCustomDefaultExpressionTest() {
ReadAllExpressionTest test = new DefaultingFunctionsExpressionTest(Employee.class, 1);
test.setDescription("Test a database function we don't know about that is generated dynamically from the user expression");
test.setName("Custom Default Expression Test");
test.setSupportedInMemory(false);
addTest(test);
}
private void addCustomQKJoinTest1() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("owner").get("name").equal("A1");
ReadAllExpressionTest test = new ReadAllExpressionTest(ObjectB.class, 1);
test.setExpression(expression);
test.setSupportedInMemory(false);
test.setName("CustomQKJoinExpressionTest1");
test.setDescription("Test expression with user define query key joins.");
addTest(test);
}
private void addCustomQKJoinTest2() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("root").get("name").equal("A1");
ReadAllExpressionTest test = new ReadAllExpressionTest(ObjectC.class, 2);
test.setExpression(expression);
test.setSupportedInMemory(false);
test.setName("CustomQKJoinExpressionTest2");
test.setDescription("Test expression with user define query key joins.");
addTest(test);
}
private void addCustomQKTest1() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("id").greaterThan(0);
ReadAllExpressionTest test = new ReadAllExpressionTest(PhoneNumber.class, 26);
test.setExpression(expression);
test.setSupportedInMemory(false);
test.setName("CustomQKExpressionTest1");
test.setDescription("Test expression with user defined direct query key.");
addTest(test);
}
private void addDirectCollectionJoinTest1() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.anyOf("responsibilitiesList").like("%coffe%");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression);
test.setName("DirectCollectionJoinTest1");
test.setDescription("Test a join across a direct collection relation");
addTest(test);
}
private void addEqualDoubleTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0001");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("salary").equal((double)35000);
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("EqualDoubleExpressionTest");
test.setDescription("Test = expression");
addTest(test);
}
private void addEqualTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0003");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("lastName").equal("Chanley");
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("EqualExpressionTest");
test.setDescription("Test = expression");
addTest(test);
}
/*
* bug 5683148/2380: Reducing unnecessary joins on an equality check between the a statement
* and itself
*/
private void addEqualUnneccessaryJoinTest() {
Employee employee = (Employee)getManager().getObject(new Employee().getClass(), "0008");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("firstName").equal("Fred").or(builder.get("manager").notEqual(builder.get("manager")));
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("EqualUnneccessaryJoinTest");
test.setDescription("Test = expression does not create an extra unneccessary join");
addTest(test);
}
private void addExpressionFunctionTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression exp = builder.get("salary").lessThan(100000);
exp = exp.and(builder.get("firstName").toUpperCase().equal("BOB"));
exp = exp.and(builder.get("firstName").toLowerCase().equal("bob"));
exp = exp.and(builder.get("firstName").leftTrim().equal("Bob"));
exp = exp.and(builder.get("firstName").rightTrim().equal("Bob"));
exp = exp.and(builder.get("firstName").cast("CHAR(3)").equal("Bob"));
exp = exp.and(builder.get("period").get("startDate").extract("YEAR").equal(1996));
exp = exp.and(builder.get("firstName").concat(builder.get("lastName")).equal("BobSmith"));
exp = exp.and(builder.get("firstName").substring(2).equal("ob"));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(exp);
test.setName("ExpressionFunctionTest");
test.setSupportedInMemory(false);
test.setDescription("expression function test");
test.addUnsupportedPlatform(TimesTenPlatform.class);
addTest(test);
}
private void addExpressionMathTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("salary").greaterThanEqual(1000);
expression = expression.and((ExpressionMath.add(builder.get("salary"), new Integer(3000))).lessThan(90000));
expression = expression.and((ExpressionMath.subtract(builder.get("salary"), new Integer(1000))).greaterThan(1000));
expression = expression.and((ExpressionMath.multiply(builder.get("salary"), new Integer(3))).greaterThan(50000));
expression = expression.and((ExpressionMath.divide(builder.get("salary"), new Integer(3))).lessThan(100000));
expression = expression.and((ExpressionMath.abs(builder.get("salary"))).lessThan(100000));
expression = expression.and((ExpressionMath.cos(builder.get("salary")).lessThanEqual(1)));
expression = expression.and((ExpressionMath.sin(builder.get("salary")).lessThanEqual(1)));
expression = expression.and((ExpressionMath.tan(builder.get("salary")).lessThanEqual(1)));
expression = expression.and((ExpressionMath.log(builder.get("salary"))).greaterThan(4));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 6);
test.setExpression(expression);
test.setName("ExpressionMathTest");
test.setDescription("Test expression math package");
test.addUnsupportedPlatform(TimesTenPlatform.class);
test.addUnsupportedPlatform(SymfowarePlatform.class);
addTest(test);
}
private void addExpressionsDefaultingFieldTest() {
Expression expression = new ExpressionBuilder().getField("L_NAME").equal("Way");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 2);
test.setExpression(expression);
test.setDescription("Test that field references without a table default correctly");
test.setName("FieldDefaultingTest");
addTest(test);
}
private void addGetFunctionWithTwoArgumentsTest() {
GetFunctionWithTwoArgumentsTest test = new GetFunctionWithTwoArgumentsTest(Employee.class, 1);
test.setDescription("Tests a database function with two arguments");
test.setName("GetFunction() With Two Arguments Test");
test.setSupportedInMemory(false);
addTest(test);
}
private void addGreaterThanEqualTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("salary").greaterThanEqual(99999.99);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 2);
test.setExpression(expression);
test.setName("GreaterThanEqualExpressionTest");
test.setDescription("Test >= expression");
addTest(test);
}
private void addGreaterThanTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("lastName").greaterThan("N");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 7);
test.setExpression(expression);
test.setName("GreaterThanExpressionTest");
test.setDescription("Test > expression");
addTest(test);
}
private void addInConversionTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("gender").in(new String[] { "Male", "Female" });
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 12);
test.setExpression(expression);
test.setName("InConversionTest");
test.setDescription("Test that in converts correctly");
addTest(test);
}
/*
* added for bug 5842913 - tests JPAQL usage of 'in', testing that in takes
* a collection containing multiple parameter expressions.
*/
private void addInMultipleExpressionParameterTest() {
ExpressionBuilder ex = new ExpressionBuilder();
Vector vec = new Vector();
vec.add(ex.getParameter("salary1"));
vec.add(ex.getParameter("salary2"));
vec.add(ex.getParameter("salary3"));
Expression exp = ex.get("salary").in(vec);
ReadAllQuery rq = new ReadAllQuery(Employee.class);
rq.setSelectionCriteria(exp);
rq.addArgument("salary1");
rq.addArgument("salary2");
rq.addArgument("salary3");
Vector vect = new Vector();
vect.add(87000);
vect.add(31000);
vect.add(500001);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 3);
test.setQuery(rq);
test.setArguments(vect);
test.setName("InMultipleExpressionParameterTest");
test.setDescription("Test Expression IN with multiple parameters");
addTest(test);
}
/*
* added for bug 235340 - parameters in named query are not transformed when IN is used
*/
private void addInMultipleExpressionWithConvertionParameterTest() {
ExpressionBuilder ex = new ExpressionBuilder();
Vector vec = new Vector();
vec.add(ex.getParameter("gender1"));
vec.add(ex.getParameter("gender2"));
Expression exp = ex.get("gender").in(vec);
ReadAllQuery rq = new ReadAllQuery(Employee.class);
rq.setSelectionCriteria(exp);
rq.addArgument("gender1");
rq.addArgument("gender2");
Vector vect = new Vector();
vect.add("Male");
vect.add("Female");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 12);
test.setQuery(rq);
test.setArguments(vect);
test.setName("InMultipleExpressionWithConversionParameterTest");
test.setDescription("Test Expression IN with multiple parameters that require convertion");
addTest(test);
}
/*
* added for bug 5842913 - tests backward compatibility of using 'in' with
* a parameter representing a collection
*/
private void addInSingleVectorParameterTest() {
ExpressionBuilder ex = new ExpressionBuilder();
Vector vec = new Vector();
vec.add(ex.getParameter("salary1"));
Expression exp = ex.get("salary").in(ex.getParameter("list"));
ReadAllQuery rq = new ReadAllQuery(Employee.class);
rq.setSelectionCriteria(exp);
rq.addArgument("list");
Vector vect1 = new Vector();
vect1.add(87000);
vect1.add(31000);
vect1.add(500001);
Vector vect = new Vector();
vect.add(vect1);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 3);
test.setQuery(rq);
test.setArguments(vect);
test.setName("InSingleVectorParameterTest");
test.setDescription("Test Expression IN with one list parameter");
addTest(test);
}
private void addInTest() {
Employee employee = (Employee)getManager().getObject(new Employee().getClass(), "0003");
Vector names = new Vector();
names.addElement("Jennifer");
names.addElement("Chanley");
names.addElement("Beavis");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("lastName").in(names);
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("InExpressionTest");
test.setDescription("Test IN expression");
addTest(test);
}
private void addInCollectionTest() {
Employee employee = (Employee)getManager().getObject(new Employee().getClass(), "0003");
Set names = new HashSet();
names.add("Jennifer");
names.add("Chanley");
names.add("Beavis");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("lastName").in(names);
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("InCollectionExpressionTest");
test.setDescription("Test IN expression");
addTest(test);
}
private void addIsNotNullTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("firstName").notEqual(null);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 12);
test.setExpression(expression);
test.setName("IsNotNullExpressionTest");
test.setDescription("Test IS NOT NULL expression");
addTest(test);
}
private void addIsNotNullWithJoinTest() {
//This test case was added for cr2334. Previously notNull
//would build statements with a single where condition only.
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.anyOf("projects").get("teamLeader").notEqual(null);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 3);
test.setExpression(expression);
test.setName("IsNotNullWithJoinExpressionTest");
test.setDescription("Test IS NOT NULL expression with an additional join (for cr2334).");
addTest(test);
}
private void addIsNullTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("firstName").equal(null);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(expression);
test.setName("IsNullExpressionTest");
test.setDescription("Test IS NULL expression");
addTest(test);
}
private void addIsNullWithJoinTest() {
//This test case was added for cr2334. Previously isNull
//would build statements with a single where condition only.
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.anyOf("projects").get("teamLeader").equal(null);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 6);
test.setExpression(expression);
test.setName("IsNullWithJoinExpressionTest");
test.setDescription("Test IS NULL expression with an additional join (for cr2334).");
addTest(test);
}
private void addJoinsShrinkResultSetSizeTest() {
Expression builder = new ExpressionBuilder();
Expression expression = builder.anyOf("managedEmployees").get("firstName").notEqual("Zanthara").not();
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(expression);
test.setName("JoinsShrinkResultSetSizeTest");
test.setDescription("Tests that joins shrink the size of a result set. Exclusively added to break in memory querying.");
addTest(test);
}
private void addJoinsShrinkResultSetSizeTest2() {
Expression builder = new ExpressionBuilder();
Expression expression = builder.get("manager").get("firstName").notEqual("Zanthara").not();
addTruncCurrentDateTest();
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(expression);
test.setName("JoinsShrinkResultSetSizeTest2");
test.setDescription("Tests that joins shrink the size of a result set. Exclusively added to break in memory querying.");
addTest(test);
}
private void addLessThanEqualTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("salary").lessThanEqual(99999.99);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 10);
test.setExpression(expression);
test.setName("LessThanEqualExpressionTest");
test.setDescription("Test <= expression");
addTest(test);
}
private void addLessThanTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("firstName").lessThan("B");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(expression);
test.setName("LessThanExpressionTest");
test.setDescription("Test < expression");
addTest(test);
}
private void addLikeEscapeTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0003");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("lastName").like("/%han", "/");
ReadAllExpressionTest test = new ReadAllExpressionTest(employee.getClass(), 0);
test.setExpression(expression);
test.setName("LikeEscapeExpressionTest");
test.setDescription("Test LIKE ESCAPE expression");
test.addSupportedPlatform(OraclePlatform.class);
test.addSupportedPlatform(SybasePlatform.class);
test.addSupportedPlatform(SQLAnywherePlatform.class);
test.addSupportedPlatform(SQLServerPlatform.class);
test.addSupportedPlatform(DB2Platform.class);
test.addSupportedPlatform(MySQLPlatform.class);
addTest(test);
}
/**
* This method was created in VisualAge.
*/
public void addLikeIgnoreCaseTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0003");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("lastName").likeIgnoreCase("%haNLey");
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("LikeIgnoreCaseExpressionTest");
test.setDescription("Test LIKEIGNORECASE expression");
addTest(test);
}
private void addLikeIgnoringCaseTest1() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0003");
ExpressionBuilder builder = new ExpressionBuilder();
Expression exp1 = builder.get("lastName").likeIgnoreCase("cHANley");
Expression exp2 = builder.get("firstName").likeIgnoreCase("%arles");
Expression expression = exp1.and(exp2);
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("LikeIgnoreCaseTest");
test.setDescription("Test likeIgnoreCase expression");
addTest(test);
}
private void addLikeIgnoringCaseTest2() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0003");
ExpressionBuilder builder = new ExpressionBuilder();
Expression exp1 = builder.get("lastName").likeIgnoreCase("cHANlEy");
Expression exp2 = builder.get("firstName").likeIgnoreCase("%harles");
//test to see if object type mappings are handled properly
Expression exp3 = builder.get("gender").likeIgnoreCase("m");
Expression expression = exp1.and(exp2).and(exp3);
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("LikeIgnoreCaseTest2");
test.setDescription("Test likeIgnoreCase expression");
addTest(test);
}
private void addLikeTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0003");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("lastName").like("%hanley");
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("LikeExpressionTest");
test.setDescription("Test LIKE expression");
addTest(test);
}
private void addLowerCaseTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0002");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("address").get("city").toLowerCase().equal("ottawa");
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("LowerCaseExpressionTest");
test.setDescription("Test LOWER expression");
addTest(test);
}
private void addManyToManyJoinTest1() {
ExpressionBuilder builder = new ExpressionBuilder();
Object[] array = new Object[] { "Sales Reporter", "Sales Reporting" };
Expression expression = builder.anyOf("projects").get("name").in(array);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 3);
test.setExpression(expression);
test.setName("ManyToManyJoinTest1");
test.setDescription("Test a join across a many:many relation");
addTest(test);
}
private void addManyToManyJoinTest2() {
ExpressionBuilder builder = new ExpressionBuilder();
Object[] array = new Object[] { "Ottawa" };
Expression expression = builder.anyOf("locations").get("city").in(array);
ReadAllExpressionTest test = new ReadAllExpressionTest(Restaurant.class, 2);
test.setExpression(expression);
test.setName("ManyToManyJoinTest2");
test.setDescription("Test a join across a many:many relation");
addTest(test);
}
private void addManyToManyJoinTest3() {
ExpressionBuilder builder = new ExpressionBuilder();
Object[] array = new Object[] { "Ottawa", "Toronto" };
Expression expression = builder.anyOf("locations").get("city").in(array);
// test also of distinct objects
ReadAllExpressionTest test = new ReadAllExpressionTest(Restaurant.class, 2);
test.setExpression(expression);
test.setName("ManyToManyJoinTest3");
test.setDescription("Test a join across a many:many relation");
addTest(test);
}
private void addManyToManyJoinTest4() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.anyOf("employees").get("sex").equal("female");
ReadAllExpressionTest test = new ReadAllExpressionTest(org.eclipse.persistence.testing.models.mapping.Shipment.class, 4);
test.setExpression(expression);
test.setName("ManyToManyJoinTest4");
test.setDescription("Test a join across a many:many relation");
addTest(test);
}
private void addManyToManyJoinTest5() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("teamLeader").anyOf("projects").get("name").like("S%");
ReadAllExpressionTest test = new ReadAllExpressionTest(Project.class, 2);
test.setExpression(expression);
test.setName("ManyToManyJoinTest5");
test.setDescription("Test a join across a many:many relation againts an abstarct multiple table class");
addTest(test);
}
private void addMismatchedQueryKeyTest() {
Expression expression = new ExpressionBuilder().get("address").equal(2);
BadExpressionTest test = new BadExpressionTest();
test.setDescription("Test that mismatched expressions (e.g. address == 2) are error handled correctly");
test.setExceptionCode(QueryException.INCORRECT_CLASS_FOR_OBJECT_COMPARISON);
test.setExpression(expression);
test.setName("MismatchedQueryKeyTest");
addTest(test);
}
/**
* Ensure certain operators work on multiple platforms should be tested on SQLServer and
* Oracle in particular
* Added for bug 3497618 and 3539971
*/
private void addMultiPlatformTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Hashtable caseTable = new Hashtable(3);
caseTable.put("Bob", "Bobby");
caseTable.put("Susan", "Susie");
caseTable.put("Eldrick", "Tiger");
Expression expression = builder.get("firstName").ifNull("Bob").caseStatement(caseTable, "No-Nickname").equal("Bobby");
expression = expression.and((ExpressionMath.mod(builder.get("salary"), new Integer(10)).equal(0)));
expression = expression.and((ExpressionMath.ceil(builder.get("salary")).equal(35000)));
expression = expression.and(builder.get("firstName").length().equal(3));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression);
test.setName("MultiPlatformTest");
test.setDescription("test functions on multiple platforms");
test.addUnsupportedPlatform(DB2Platform.class);
test.addUnsupportedPlatform(TimesTenPlatform.class);
test.addUnsupportedPlatform(SybasePlatform.class);
addTest(test);
}
/**
* Ensure certain operators work on multiple platforms should be tested on SQLServer and
* Oracle in particular. This tests "CASE field WHERE value THEN value1 ELSE value2" statements
* Added for JPA 2.0 support (bug 252491)
*/
private void addMultiPlatformTest2() {
ExpressionBuilder builder = new ExpressionBuilder();
Hashtable caseTable = new Hashtable(3);
caseTable.put("Bob", "Bobby");
caseTable.put("Susan", "Susie");
caseTable.put("Eldrick", "Tiger");
Expression expression = builder.get("firstName").caseStatement(caseTable, "NoNickname").equal("Bobby");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression);
test.setName("MultiPlatformTest2");
test.setDescription("test simple Case function on multiple platforms");
test.addUnsupportedPlatform(DerbyPlatform.class);
test.addUnsupportedPlatform(SybasePlatform.class);
addTest(test);
}
/**
* Ensure certain operators work on multiple platforms. This tests more complex
* "CASE WHERE expression THEN value1 ELSE value2" statements
* Added for JPA 2.0 support (bug 252491)
*/
private void addMultiPlatformTest3() {
ExpressionBuilder builder = new ExpressionBuilder();
Hashtable caseTable = new Hashtable(3);
caseTable.put(builder.get("firstName").equal("Bob"), "Bobby");
caseTable.put(builder.get("firstName").equal("Susan"), "Susie");
caseTable.put(builder.get("firstName").equal("Eldrick"), "Tiger");
Expression expression = builder.caseConditionStatement(caseTable, "No-Nickname").equal("Bobby");
expression = expression.and((ExpressionMath.mod(builder.get("salary"), new Integer(10)).equal(0)));
expression = expression.and((ExpressionMath.ceil(builder.get("salary")).equal(35000)));
expression = expression.and(builder.get("firstName").length().equal(3));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression);
test.setName("MultiPlatformTest3");
test.setDescription("test Case function with more complex expressions on multiple platforms");
/*TODO: add in any unsupported platform checks*/
test.addUnsupportedPlatform(SybasePlatform.class);
addTest(test);
}
/**
* Ensure certain operators work on multiple platforms. This tests the NULLIF SQL statement
* Added for JPA 2.0 CASE support (bug 252491)
*/
private void addMultiPlatformTest4() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("firstName").nullIf( "Bobby").equal("Bob");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression);
test.setName("MultiPlatformTest4");
test.setDescription("test Case and NullIf function on multiple platforms");
/*TODO: add in any unsupported platform checks*/
addTest(test);
}
/**
* Ensure certain operators work on multiple platforms. This tests the COALESCE SQL statement
* Added for JPA 2.0 CASE support (bug 252491)
*/
private void addMultiPlatformTest5() {
ExpressionBuilder builder = new ExpressionBuilder();
Vector caseTable = new Vector(3);
caseTable.add(builder.get("firstName"));
caseTable.add(builder.get("lastName"));
caseTable.add("NoName");
Expression expression = builder.coalesce(caseTable).equal("Bob");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression);
test.setName("MultiPlatformTest5");
test.setDescription("test Coalesce function on multiple platforms");
/*TODO: add in any unsupported platform checks*/
addTest(test);
}
private void addMultipleAndsTest() {
ExpressionBuilder builder = new ExpressionBuilder();
//this is a bug, wrong generated SQL like... ADDRESS.ADDRESS_ID = EMPLOYEE.ADDR_ID...
//however, it should be ... ADDRESS.ADDRESS_ID = 0...
Expression expression = builder.get("address").equal(new org.eclipse.persistence.testing.models.employee.domain.Address()).and(builder.get("lastName").notEqual("foopoyp"));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(expression);
test.setName("MultipleAndsExpressionTest");
test.setDescription("Test object equality with object will null primary key");
addTest(test);
}
private void addMultipleAndsTest2() {
//there is a bug, generated SQL looks like ... (ADDRESS.ADDRESS_ID = 123456)) AND (ADDRESS.ADDRESS_ID = EMPLOYEE.ADDR_ID)...
//should be: ...EMPLOYEE.ADDR_ID = 123456... no join needed!
ExpressionBuilder builder = new ExpressionBuilder();
Address a = new org.eclipse.persistence.testing.models.employee.domain.Address();
a.setId(new java.math.BigDecimal(123456));
Expression expression = builder.get("address").equal(a).and(builder.get("id").greaterThan(800));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setQuery(new ReadAllQuery(Employee.class, expression));
test.getQuery().addAscendingOrdering("id");
test.setExpression(expression);
test.setName("MultipleAndsExpressionTest2");
test.setDescription("Test multiple ands with object equality");
addTest(test);
}
private void addMultipleAndsTest3() {
//there is a bug, generated wrong SQL looks like ... FROM ADDRESS t3, SALARY t2, EMPLOYEE t1 WHERE (((((t1.EMP_ID > '800') AND ) AND (t1.EMP_ID = t2.EMP_ID)) AND (t3.ADDRESS_ID = 123456))...
ExpressionBuilder builder = new ExpressionBuilder();
Address a = new org.eclipse.persistence.testing.models.employee.domain.Address();
a.setId(new java.math.BigDecimal(123456));
Expression expression = builder.get("id").greaterThan(800).and(builder.get("address").equal(a));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setQuery(new ReadAllQuery(Employee.class, expression));
test.getQuery().addAscendingOrdering("id");
test.setExpression(expression);
test.setName("MultipleAndsExpressionTest3");
test.setDescription("Test multiple ands with object equality");
addTest(test);
}
private void addMultipleAndsTest4() {
// This tests the case of a tree where the top-level AND should print, even though
// both branches underneath it are partly suppressed.
ExpressionBuilder builder = new ExpressionBuilder();
Address address1 = new org.eclipse.persistence.testing.models.employee.domain.Address();
address1.setId(new java.math.BigDecimal(999999876));
Address address2 = new org.eclipse.persistence.testing.models.employee.domain.Address();
address2.setId(new java.math.BigDecimal(999999877));
Expression expression1 = builder.get("address").equal(address1).or(builder.get("lastName").equal("Smith"));
Expression expression2 = builder.get("address").equal(address2).or(builder.get("firstName").equal("Bob"));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression1.and(expression2));
test.setName("MultipleAndsExpressionTest4");
test.setDescription("Test multiple booleans with supression in each branch");
addTest(test);
}
private void addMultipleAndsTest5() {
ExpressionBuilder builder = new ExpressionBuilder();
//this is a bug, Ill-formed expression in query, attempting to print an object reference into a
//SQL statement for Query Key address{DatabaseTable(t1)=DatabaseTable(ADDRESS)}
//however, it should be ... EMPLOYEE.ADDRESS_ID = 0 (null)...
Expression expression = builder.get("address").equal(null).and(builder.get("lastName").notEqual("foopoyp"));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(expression);
test.setName("MultipleAndsExpressionTest5");
test.setDescription("Test multiple ands expression");
addTest(test);
}
private void addMultipleAndsTest6() {
ExpressionBuilder builder = new ExpressionBuilder();
//this is a bug, Ill-formed expression in query, attempting to print an object reference into a
//SQL statement for Query Key address{DatabaseTable(t1)=DatabaseTable(ADDRESS)}
//however, it should be ... EMPLOYEE.ADDRESS_ID = 0 (null)...
Expression expression = builder.get("address").isNull().and(builder.get("lastName").notEqual("foopoyp"));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(expression);
test.setName("MultipleAndsExpressionTest6");
test.setDescription("Test multiple ands expression");
addTest(test);
}
private void addMultiplePrimaryKeyTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("employee").get("lastName").equal("Vadis");
ReadAllExpressionTest test = new ReadAllExpressionTest(org.eclipse.persistence.testing.models.legacy.Computer.class, 1);
test.setExpression(expression);
test.setName("MultiplePrimaryKeyTest");
test.setDescription("Test expression with multiple primary key");
addTest(test);
}
private void addMultipleTableJoinTest1() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("car").get("fuelCapacity").equal(50);
ReadAllExpressionTest test = new ReadAllExpressionTest(Engineer.class, 1);
test.setExpression(expression);
test.setName("MultipleTableJoinExpressionTest1");
test.setDescription("Test expression with joins");
addTest(test);
}
private void addMultipleTableJoinTest2() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("car").get("description").equal("BMW");
ReadAllExpressionTest test = new ReadAllExpressionTest(SalesRep.class, 1);
test.setExpression(expression);
test.setName("MultipleTableJoinExpressionTest2");
test.setDescription("Test expression with joins");
addTest(test);
}
private void addMultipleTableJoinTest3() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("car").get("passengerCapacity").equal(5);
ReadAllExpressionTest test = new ReadAllExpressionTest(SalesRep.class, 1);
test.setExpression(expression);
test.setName("MultipleTableJoinExpressionTest3");
test.setDescription("Test expression with joins");
addTest(test);
}
private void addMultipleTableJoinTest4() {
ExpressionBuilder employee = new ExpressionBuilder();
Expression expression = employee.get("manager").get("address").get("street").toLowerCase().like("%mer%");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 2);
test.setExpression(expression.and(employee.get("firstName").notLike("NOTHING ON EARTH")));
test.setName("MultipleTableJoinExpressionTest4");
test.setDescription("Test expression with self-joins");
addTest(test);
}
private void addMultipleTableJoinTest5() {
ExpressionBuilder emp = new ExpressionBuilder();
Expression expression = emp.get("manager").get("lastName").like("Sm%");
expression = expression.and(emp.get("lastName").like("%a%"));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 2);
test.setExpression(expression);
test.setName("MultipleTableJoinExpressionTest5");
test.setDescription("Test expression with self joins, criteria on both tables and no other tables");
addTest(test);
}
private void addMultipleTableJoinTest6() {
ExpressionBuilder project = new ExpressionBuilder();
Expression expression = project.get("teamLeader").get("address").get("street").like("12 Mer%");
ReadAllExpressionTest test = new ReadAllExpressionTest(Project.class, 1);
test.setExpression(expression);
test.setName("MultipleTableJoinExpressionTest6");
test.setDescription("Test expression with joins and inheritance on queried class");
addTest(test);
}
private void addMultipleTableJoinTest7() {
// Not finished yet
ExpressionBuilder project = new ExpressionBuilder();
Expression expression = project.get("teamLeader").get("address").get("street").like("12 Mer%");
ReadAllExpressionTest test = new ReadAllExpressionTest(Project.class, 1);
test.setExpression(expression);
test.setName("MultipleTableJoinExpressionTest7");
test.setDescription("Test expression with joins and inheritance on intermediate class");
addTest(test);
}
private void addMultipleTableJoinTest8() {
// Not finished yet
ExpressionBuilder project = new ExpressionBuilder();
Expression expression = project.get("budget").get("currency").like("C%");
ReadAllExpressionTest test = new ReadAllExpressionTest(LargeBusinessProject.class, 2);
test.setExpression(expression);
test.setName("MultipleTableJoinExpressionTest8");
test.setDescription("Test expression with joins and inheritance on intermediate class");
addTest(test);
}
private void addMultipleTableJoinTest9() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("bestFriend").get("representitive").get("car").get("fuelCapacity").equal(50);
ReadAllExpressionTest test = new ReadAllExpressionTest(Engineer.class, 0);
test.setExpression(expression);
test.setName("MultipleTableJoinExpressionTest9");
test.setDescription("Test expression with joins");
addTest(test);
}
private void addNonFueledVehicleViewTest1() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = ((builder.get("owner").get("name").equal("ABC")).and(builder.get("owner").get("name").equal("ABC"))).and((builder.get("passengerCapacity").equal(-1)).not());
ReadAllExpressionTest test = new ReadAllExpressionTest(NonFueledVehicle.class, 3);
test.setExpression(expression);
test.setName("NonFueledVehicleViewTest1");
test.setDescription("Test expression against view, or multiple table subclass read.");
addTest(test);
}
private void addNotInTest() {
int[] salaries = { 35000, 6000, 50000 };
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("salary").notIn(salaries);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 10);
test.setExpression(expression);
test.setName("NotInExpressionTest");
test.setDescription("Test NOT IN expression");
addTest(test);
}
private void addNotLikeTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("lastName").notLike("W%");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 9);
test.setExpression(expression);
test.setName("NotLikeExpressionTest");
test.setDescription("Test NOT LIKE expression");
addTest(test);
}
private void addNotTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = (builder.get("salary").greaterThanEqual(99999.99).not().and(builder.get("firstName").equal("Bob"))).not();
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 11);
test.setExpression(expression);
test.setName("NotExpressionTest");
test.setDescription("Test NOT expression");
addTest(test);
}
private void addObjectComparisonAcrossJoin() {
Address address = ((Employee)getManager().getObject(Employee.class, "0002")).getAddress();
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("manager").get("address").equal(address);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 2);
test.setExpression(expression);
test.setName("ObjectComparisonAcrossJoin");
test.setDescription("Test .manager.address.equal(address)");
addTest(test);
}
/**
* For bug 3105559 Object comparisons do not work with aggregate objects (subtitle:
* because aggregate objects don't have a primary key).
*/
private void addAggregateObjectObjectComparisonTest() {
EmploymentPeriod period = ((Employee)getManager().getObject(Employee.class, "0002")).getPeriod();
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("period").equal(period);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression);
test.setSupportedInMemory(false);
test.setName("AggregateObjectObjectComparisonTest");
test.setDescription("Test .period.equal(period)");
addTest(test);
}
/**
* For bug 3105559 Object comparisons do not work with aggregate objects (subtitle:
* because aggregate objects don't have a primary key).
*/
private void addAggregateObjectIsNullTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("period").isNull();
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(expression);
test.setName("AggregateObjectIsNullTest");
test.setDescription("Test .period.isNull()");
addTest(test);
}
/**
* For bug 3105559 Object comparisons do not work with aggregate objects (subtitle:
* because aggregate objects don't have a primary key).
*/
private void addAggregateObjectNullTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("period").notEqual(builder.value(null));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 12);
test.setExpression(expression);
test.setName("AggregateObjectNullTest");
test.setDescription("Test .period.notEqual(null)");
addTest(test);
}
private void addOneToManyJoinObjectCompareTest() {
Employee managed = (Employee)PopulationManager.getDefaultManager().getObject(Employee.class, "0001");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.anyOf("managedEmployees").equal(managed);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression);
test.setName("OneToManyJoinObjectCompareTest");
test.setDescription("Test a join across a 1:many relation using object comparison");
addTest(test);
}
private void addOneToManyJoinObjectCompareTest2() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.anyOf("managedEmployees").equal(builder);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(expression);
test.setName("OneToManyJoinObjectCompareTest2");
test.setDescription("Test a join across a 1:many relation using object comparison to itself");
addTest(test);
}
private void addOneToManyJoinTest1() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.anyOf("managedEmployees").get("lastName").like("S%");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 2);
test.setExpression(expression);
test.setName("OneToManyJoinTest1");
test.setDescription("Test a join across a 1:many relation");
addTest(test);
}
private void addOneToManyJoinTest2() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.anyOf("managedEmployees").get("lastName").like("Sa%");
Expression exp2 = builder.anyOf("managedEmployees").get("firstName").like("B%");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression.and(exp2));
test.setName("OneToManyJoinTest2");
test.setDescription("Test a join across a 1:many relation with 2 anyOf clauses");
addTest(test);
}
/**
* @bug 2720149 INVALID SQL WHEN USING BATCH READS AND MULTIPLE ANYOFS
*/
private void addOneToManyJoin2WithBatchReadTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.anyOf("managedEmployees").get("lastName").like("Sa%");
Expression exp2 = builder.anyOf("managedEmployees").get("firstName").like("B%");
expression = expression.and(exp2);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 1);
test.setExpression(expression);
test.testBatchAttributesOnEmployee();
test.setName("OneToManyJoin2WithBatchReadTest");
test.setDescription("Test a join across a 1:many relation with 2 anyOf clauses, and test again as part of a batch read.");
addTest(test);
}
private void addOneToManyJoinTest3() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.anyOf("managedEmployees").get("lastName").equal("Smith");
Expression exp2 = builder.anyOf("managedEmployees").get("lastName").notEqual("Smith");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 2);
test.setExpression(expression.and(exp2));
test.setName("OneToManyJoinTest3");
test.setDescription("Test a join across a 1:many relation with 2 anyOf clauses");
addTest(test);
}
private void addOneToManyJoinTest4() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.anyOf("managedEmployees").get("lastName").like("S%");
Expression exp2 = builder.anyOf("managedEmployees").get("lastName").equal("Smith");
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 2);
test.setExpression(expression.and(exp2));
test.setName("OneToManyJoinTest4");
test.setDescription("Test a join across a 1:many relation with 2 anyOf clauses");
addTest(test);
}
private void addOneToManyJoinTest5() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("teamLeader").anyOf("phoneNumbers").get("areaCode").equal("905");
Expression exp2 = builder.get("teamLeader").anyOf("phoneNumbers").get("areaCode").equal("613");
ReadAllExpressionTest test = new ReadAllExpressionTest(LargeProject.class, 2);
test.setExpression(expression.and(exp2));
test.setName("OneToManyJoinTest5");
test.setDescription("Test a join from 1;1 Mapping to 1:m relation (twice) with 2 anyOf clauses");
addTest(test);
}
private void addOneToOneEqualTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0002");
Expression expression = new ExpressionBuilder().get("address").equal(employee.getAddress());
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setDescription("Test equal for 1-1 mappings (e.g. get('address').equal(myAddress)");
test.setExpression(expression);
test.setName("OneToOneEqualTest");
addTest(test);
}
private void addOneToOneObjectTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("owner").equal(this.getManager().getObject(Employee.class, "0001"));
ReadAllExpressionTest test = new ReadAllExpressionTest(PhoneNumber.class, 1);
test.setExpression(expression);
test.setName("OneToOneExpressionUsingObjectAsValue1");
test.setDescription("Test querying across a 1:1 mapping using an object as the value.");
addTest(test);
//
builder = new ExpressionBuilder();
expression = builder.get("manager").equal(this.getManager().getObject(Employee.class, "0001"));
test = new ReadAllExpressionTest(Employee.class, 3);
test.setExpression(expression);
test.setName("OneToOneExpressionUsingObjectAsValue2");
test.setDescription("Test querying across a 1:1 mapping using an object as the value.");
addTest(test);
}
private void addOrNullTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0003");
ExpressionBuilder builder = new ExpressionBuilder();
Expression exp1 = builder.get("lastName").equal("Chanley");
Expression exp2 = builder.get("firstName").equal("Charles");
Expression expression = exp1.or(exp2).or(null);
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("OrNullExpressionTest");
test.setDescription("Test OR expression with NULL");
addTest(test);
}
private void addOrTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0003");
ExpressionBuilder builder = new ExpressionBuilder();
Expression exp1 = builder.get("lastName").equal("Chanley");
Expression exp2 = builder.get("firstName").equal("Charles");
Expression expression = exp1.or(exp2);
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("OrExpressionTest");
test.setDescription("Test OR expression");
addTest(test);
}
/**
* For bug 3107049 test parameterExp.isNull()
*/
private void addParameterIsNullTest() {
ExpressionBuilder emp = new ExpressionBuilder();
Expression expression = emp.get("address").notNull().and(emp.getParameter("null").isNull());
expression = expression.and(emp.getParameter("int").notNull());
expression = expression.and(emp.getParameter("String").notNull());
ReadAllQuery query = new ReadAllQuery(Employee.class, expression);
query.addArgument("null");
query.addArgument("int");
query.addArgument("String");
//query.setShouldPrepare(false);
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 12);
test.setExpression(expression);
test.setQuery(query);
test.getArguments().add(null);
test.getArguments().add(new Integer(1));
test.getArguments().add(new String("String"));
test.setName("ParameterIsNullTest");
test.setDescription("For bug 3107049 tests parameterExp.isNull.");
test.addUnsupportedPlatform(SybasePlatform.class);
test.addSupportedPlatform(SQLAnywherePlatform.class);
// ET. The test doesn't work with DB2 jcc driver(Bug 4563813)
test.addUnsupportedPlatform(org.eclipse.persistence.platform.database.DB2Platform.class);
test.addUnsupportedPlatform(org.eclipse.persistence.platform.database.TimesTenPlatform.class);
addTest(test);
}
private void addValueEqualValueTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.value(123).equal(456);
ReadAllExpressionTest test = new ReadAllExpressionTest(Address.class, 0);
test.setExpression(expression);
test.setName("ValueEqualValueTest");
test.setDescription("Test query with no fields in where clause works.");
addTest(test);
}
private void addSelectionObjectWithoutPrepareTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0002");
ReadObjectQuery query = new ReadObjectQuery(employee);
query.setShouldPrepare(false);
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, null);
test.setQuery(query);
test.setName("SelectionObjectWithoutPrepareTest");
test.setDescription("Test expression with selection object and shouldPrepare(false).");
addTest(test);
}
private void addSelfManagedEmployeeTests() {
ExpressionBuilder builder = new ExpressionBuilder(Employee.class);
Expression expression = builder.equal(builder.get("manager"));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 0);
test.setExpression(expression);
test.setName("SelfManagedEmployeeTest");
test.setDescription("Tests equal between two object expressions. An optimization could mean this expression using a single table.");
addTest(test);
Expression notExpression = ((Expression)expression.clone()).not();
test = new ReadAllExpressionTest(Employee.class, 8);
test.setExpression(notExpression);
test.setName("NotSelfManagedEmployeeTest");
test.setDescription("Test NOT of equal between two object expressions. An optimization could mean this expression using a single table.");
addTest(test);
builder = new ExpressionBuilder(Employee.class);
Expression notEqualExpression = builder.notEqual(builder.get("manager"));
test = new ReadAllExpressionTest(Employee.class, 8);
test.setExpression(notEqualExpression);
test.setName("NotEqualSelfManagedEmployeeTest");
test.setDescription("Test notEqual between two object expressions. An optimization could mean this expression using a single table.");
addTest(test);
}
private void addSingleTableJoinTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0002");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("address").get("city").equal("Ottawa");
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("SingleTableJoinExpressionTest");
test.setDescription("Test expression with joins");
addTest(test);
}
public void addTests() {
addSRGTests();
//Add new tests here, if any.
addAdvancedSybaseExpressionFunctionTest();
// ET. The test doesn't work with DB2 jcc driver(Bug 4563813)
addAdvancedDB2ExpressionFunctionTest();
addInCollectionTest();
// Bug 247076 - LiteralExpression does not print SQL in statement
addTest(new LiteralExpressionTest());
// Bug 284884 - Quoted '?' symbol in expression literal causes ArrayIndexOutOfBoundsException
addTest(new LiteralSQLExpressionWithQuestionMarkTest("'?'", true));
addTest(new LiteralSQLExpressionWithQuestionMarkTest("'?'", false));
addTest(new LiteralSQLExpressionWithQuestionMarkTest("'???'", true));
addTest(new LiteralSQLExpressionWithQuestionMarkTest("'???'", false));
addTest(new LiteralSQLExpressionWithQuestionMarkTest("'? ? ?'", true));
addTest(new LiteralSQLExpressionWithQuestionMarkTest("'? ? ?'", false));
addTest(new LiteralSQLExpressionWithQuestionMarkTest("' 123?123 '", true));
addTest(new LiteralSQLExpressionWithQuestionMarkTest("' 123?123 '", false));
addTest(new LiteralSQLExpressionWithQuestionMarkTest("' 123 ? 123 '", true));
addTest(new LiteralSQLExpressionWithQuestionMarkTest("' 123 ? 123 '", false));
addRegexpTest();
// Bug 384223 - add flag for case insensitive Expressions to use lower case, instead of upper case
addTest(new LowerCaseForCaseInsensitiveTest(LowerCaseForCaseInsensitiveTest.EqualsIgnoreCase));
addTest(new LowerCaseForCaseInsensitiveTest(LowerCaseForCaseInsensitiveTest.LikeIgnoreCase));
addTest(new LowerCaseForCaseInsensitiveTest(LowerCaseForCaseInsensitiveTest.ContainsSubstringIgnoringCase));
// ExpressionBuilder test suite
addTest(new ExpressionBuilderTestSuite());
}
//SRG test set is maintained by QA only, do NOT add any new tests into it.
public void addSRGTests() {
setManager(PopulationManager.getDefaultManager());
addAggregateObjectObjectComparisonTest();
addAggregateObjectIsNullTest();
addAggregateObjectNullTest();
addMultipleAndsTest();
addMultipleAndsTest2();
addMultipleAndsTest3();
addMultipleAndsTest4();
addMultipleAndsTest5();
addMultipleAndsTest6();
addObjectComparisonAcrossJoin();
addExpressionFunctionTest();
addExpressionMathTest();
addAdvancedExpressionFunctionTest();
addAdvancedExpressionMathTest();
addBuilderEqualParameterTest();
addAndTest();
addNotTest();
addAndNullTest();
addOrTest();
addOrNullTest();
addEqualTest();
addEqualUnneccessaryJoinTest();
addEqualDoubleTest();
addGreaterThanEqualTest();
addGreaterThanTest();
addJoinsShrinkResultSetSizeTest();
addJoinsShrinkResultSetSizeTest2();
addLessThanEqualTest();
addLessThanTest();
addIsNullTest();
addIsNullWithJoinTest();
addIsNotNullTest();
addIsNotNullWithJoinTest();
addInTest();
addInMultipleExpressionWithConvertionParameterTest();
addInSingleVectorParameterTest();
addInMultipleExpressionParameterTest();
addNotInTest();
addInConversionTest();
addLikeTest();
addLikeIgnoreCaseTest();
addLikeIgnoringCaseTest1();
addLikeIgnoringCaseTest2();
addLikeEscapeTest();
addNotLikeTest();
addBetweenTest();
addBetweenTest2();
addSelectionObjectWithoutPrepareTest();
addSelfManagedEmployeeTests();
addSingleTableJoinTest();
addMultiplePrimaryKeyTest();
addMultipleTableJoinTest1();
addMultipleTableJoinTest2();
addMultipleTableJoinTest3();
addMultipleTableJoinTest4();
addMultipleTableJoinTest5();
addMultipleTableJoinTest6();
addMultipleTableJoinTest7();
addMultipleTableJoinTest8();
addMultipleTableJoinTest9();
addCustomQKJoinTest1();
addCustomQKJoinTest2();
addCustomQKTest1();
addComputerViewCursoredStreamTest();
addComputerViewTest1();
addVehicleViewCursoredStreamTest();
addVehicleViewTest1();
addVehicleViewOrderByJoinTest();
addVehicleViewOrderByOnlyTest();
addNonFueledVehicleViewTest1();
addVehicleViewJoinOnlyTest();
addBadQueryKeyTest();
addMismatchedQueryKeyTest();
addBadQueryTableTest();
addBadFieldWithTableTest();
addBadToManyQueryKeyTest();
addBadFieldWithTableTest();
addBadAnyOfTest();
addExpressionsDefaultingFieldTest();
addOneToOneEqualTest();
addTransformationTest();
addAggregateQueryTest();
addLowerCaseTest();
addUpperCaseTest();
addCustomDefaultExpressionTest();
addOneToManyJoinTest1();
addOneToManyJoinTest2();
addOneToManyJoin2WithBatchReadTest();
addOneToManyJoinTest3();
addOneToManyJoinTest4();
addOneToManyJoinTest5();
addManyToManyJoinTest1();
addManyToManyJoinTest2();
addManyToManyJoinTest3();
addManyToManyJoinTest4();
addManyToManyJoinTest5();
addOneToManyJoinObjectCompareTest();
addOneToManyJoinObjectCompareTest2();
addDirectCollectionJoinTest1();
addComplexBooleanTest();
addOneToOneObjectTest();
addGetFunctionWithTwoArgumentsTest();
addAggregeateCollectionJoinTest(org.eclipse.persistence.testing.models.aggregate.Agent.class);
addAggregeateCollectionJoinTest(org.eclipse.persistence.testing.models.aggregate.Builder.class);
addTest(new InvalidQueryKeyFunctionExpressionTest(new ExpressionBuilder().get("appartments").isNull()));
addConstantEqualConstantTest();
addParameterIsNullTest();
addValueEqualValueTest();
addMultiPlatformTest();
addMultiPlatformTest2();
addMultiPlatformTest3();
addMultiPlatformTest4();
addMultiPlatformTest5();
addInheritanceTypeTest1();
addInheritanceTypeTest2();
addInheritanceTypeTest3();
}
//bug:277509 Entity type expressions
private void addInheritanceTypeTest1() {
ExpressionBuilder builder = new ExpressionBuilder(Project.class);
Expression expression = builder.type().equal(SmallProject.class);
ReadAllExpressionTest test = new ReadAllExpressionTest(Project.class, 10);
test.setExpression(expression);
test.setName("InheritanceTypeTest1");
test.setDescription("Test ClassForInheritance expression using an equals comparison.");
addTest(test);
}
//bug:277509 Entity type expressions
private void addInheritanceTypeTest2() {
ExpressionBuilder builder = new ExpressionBuilder(Project.class);
Expression expression = builder.type().equal(LargeProject.class);
ReadAllExpressionTest test = new ReadAllExpressionTest(Project.class, 5);
test.setExpression(expression);
test.setName("InheritanceTypeTest2");
test.setDescription("Test ClassForInheritance expression using an equals comparison.");
addTest(test);
}
//bug:277509 Entity type expressions
private void addInheritanceTypeTest3() {
ExpressionBuilder builder = new ExpressionBuilder(Project.class);
Vector classes = new Vector();
classes.add(LargeProject.class);
classes.add(SmallProject.class);
Expression expression = builder.type().in(classes);
ReadAllExpressionTest test = new ReadAllExpressionTest(Project.class, 15);
test.setExpression(expression);
test.setName("InheritanceTypeTest3");
test.setDescription("Test ClassForInheritance expression using an In comparison.");
addTest(test);
}
private void addTransformationTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("gender").equal("Male");
SearchTest test = new SearchTest();
test.setExpression(expression);
test.setErrorMessage("Failed to read objects from database (due to transformation failure)");
test.setName("TransformationTest");
test.setDescription("Test for correct transformation within a query (e.g. 'M' => 'Male')");
addTest(test);
}
private void addTruncCurrentDateTest() {
//Bug#3879510 SYSDATE should be used instead of SYSTIMESTAMP for currentDate because TRUNC is not supported for SYSTIMESTAMP
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("period").get("startDate").lessThanEqual(builder.currentDate().truncateDate("dd"));
ReadAllExpressionTest test = new ReadAllExpressionTest(Employee.class, 12);
test.setSupportedInMemory(false);
test.setExpression(expression);
test.setName("TruncCurrentDateTest");
test.setDescription("Test if trunc on current date (SYSDATE) works.");
test.addSupportedPlatform(OraclePlatform.class);
addTest(test);
}
private void addUpperCaseTest() {
Employee employee = (Employee)getManager().getObject(new org.eclipse.persistence.testing.models.employee.domain.Employee().getClass(), "0002");
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = builder.get("address").get("city").toUpperCase().equal("OTTAWA");
ReadObjectExpressionTest test = new ReadObjectExpressionTest(employee, expression);
test.setName("UpperCaseExpressionTest");
test.setDescription("Test UPPER expression");
addTest(test);
}
private void addVehicleViewCursoredStreamTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = ((builder.get("owner").get("name").equal("ABC")).and(builder.get("owner").get("name").equal("ABC"))).and((builder.get("passengerCapacity").equal(-1)).not());
ReadAllExpressionTest test = new ReadAllExpressionTest(Vehicle.class, 5);
ReadAllQuery query = new ReadAllQuery(Vehicle.class, expression);
query.useCursoredStream(1, 1);
test.setQuery(query);
test.setName("VehicleViewCursoredStreamTest");
test.setDescription("Test cursors with inheritance, supported if using views. For bug 2718118.");
test.addSupportedPlatform(OraclePlatform.class);
test.addSupportedPlatform(SybasePlatform.class);
test.addSupportedPlatform(SQLAnywherePlatform.class);
//Uncomment it when we support MySQL 5. Please refer to the comments in InheritanceSystem
//test.addSupportedPlatform(MySQLPlatform.class);
addTest(test);
}
private void addVehicleViewJoinOnlyTest() {
ReadAllExpressionTest test = new ReadAllExpressionTest(Vehicle.class, 15);
test.getQuery(true).addJoinedAttribute("owner");
test.setName("VehicleViewJoinOnlyTest");
test.setDescription("Test inheritance view with joining only.");
//CREATE VIEW statement was added in MySQL 5.0.1. Remove the condition when we support MySQL 5
//together with InheritanceSystem
test.addUnsupportedPlatform(MySQLPlatform.class);
//CREATE MATERIALIZED VIEW is supported in TimesTen, but seems to have trouble with outer join.
//TT0805: Materialized view with no non-nullable selected column from inner table BUS has not been implemented
test.addUnsupportedPlatform(org.eclipse.persistence.platform.database.TimesTenPlatform.class);
//There are no sqlserverView() and db2View() methods defined in Computer and Vehicle classes
test.addUnsupportedPlatform(SQLServerPlatform.class);
test.addUnsupportedPlatform(DB2Platform.class);
addTest(test);
}
private void addVehicleViewOrderByJoinTest() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = ((builder.get("owner").get("name").equal("ABC")).and(builder.get("owner").get("name").equal("ABC"))).and((builder.get("passengerCapacity").equal(-1)).not());
ReadAllExpressionTest test = new ReadAllExpressionTest(Vehicle.class, 5);
ReadAllQuery query = new ReadAllQuery(Vehicle.class, expression);
query.addOrdering(builder.get("owner").get("name"));
query.addJoinedAttribute("owner");
query.useDistinct();
test.setQuery(query);
test.setName("VehicleViewOrderByJoinTest");
test.setDescription("Test inheritance view with ordering and joining.");
test.addSupportedPlatform(OraclePlatform.class);
addTest(test);
}
private void addVehicleViewOrderByOnlyTest() {
ReadAllExpressionTest test = new ReadAllExpressionTest(Vehicle.class, 19);
test.getQuery(true).addDescendingOrdering("id");
test.setName("VehicleViewOrderByOnlyTest");
test.setDescription("Test inheritance view with ordering only.");
addTest(test);
}
private void addVehicleViewTest1() {
ExpressionBuilder builder = new ExpressionBuilder();
Expression expression = ((builder.get("owner").get("name").equal("ABC")).and(builder.get("owner").get("name").equal("ABC"))).and((builder.get("passengerCapacity").equal(-1)).not());
ReadAllExpressionTest test = new ReadAllExpressionTest(Vehicle.class, 5);
test.setExpression(expression);
test.setName("VehicleViewTest1");
test.setDescription("Test expression against view, or multiple table subclass read.");
addTest(test);
}
protected PopulationManager getManager() {
return manager;
}
protected void setManager(PopulationManager theManager) {
manager = theManager;
}
}