blob: 315a9a6c922e6fd03c2920aedd3382bef8bd058e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 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.queries.repreparation;
import java.util.Vector;
import org.eclipse.persistence.queries.ReadAllQuery;
import org.eclipse.persistence.testing.framework.AutoVerifyTestCase;
import org.eclipse.persistence.testing.framework.TestErrorException;
import org.eclipse.persistence.testing.models.employee.domain.Address;
import org.eclipse.persistence.testing.models.employee.domain.Employee;
/**
* Test if SQL is reprepared when the query is modified with a join attribute.
* Also checks that non fetch join attributes avoid triggering a value holder.
*/
public class AddNonFetchedJoinedAttributeTest extends AutoVerifyTestCase {
private ReadAllQuery query1, query2;
private Vector employees1, employees2;
private static String EXPECTED_SQL1 = "SELECT t1.EMP_ID, t2.EMP_ID, t1.F_NAME, t1.GENDER, t1.L_NAME, t2.SALARY, t1.START_TIME, t1.END_TIME, t1.END_DATE, t1.START_DATE, t1.ADDR_ID, t1.MANAGER_ID, t1.VERSION FROM ADDRESS t0, SALARY t2, EMPLOYEE t1 WHERE ((t2.EMP_ID = t1.EMP_ID) AND (t0.ADDRESS_ID = t1.ADDR_ID))";
private static String EXPECTED_SQL2 = "SELECT t3.EMP_ID, t4.EMP_ID, t3.F_NAME, t3.GENDER, t3.L_NAME, t4.SALARY, t3.START_TIME, t3.END_TIME, t3.END_DATE, t3.START_DATE, t3.ADDR_ID, t3.MANAGER_ID, t3.VERSION FROM SALARY t4, EMPLOYEE t3, SALARY t2, EMPLOYEE t1, ADDRESS t0 WHERE ((t4.EMP_ID = t3.EMP_ID) AND (((t1.EMP_ID = t3.MANAGER_ID) AND (t2.EMP_ID = t1.EMP_ID)) AND (t0.ADDRESS_ID = t1.ADDR_ID)))";
public AddNonFetchedJoinedAttributeTest() {
setDescription("Test if SQL is reprepared the second time and if the non fetch join attribute is instantiated.");
}
public void reset() {
getSession().getIdentityMapAccessor().initializeAllIdentityMaps();
}
public void setup() {
getSession().getIdentityMapAccessor().initializeAllIdentityMaps();
query1 = new ReadAllQuery(Employee.class);
employees1 = (Vector)getSession().executeQuery(query1);
}
public void test() {
query1.addNonFetchJoinedAttribute("address");
employees1 = (Vector)getSession().executeQuery(query1);
query2 = new ReadAllQuery(Employee.class);
query2.addNonFetchJoinedAttribute(query2.getExpressionBuilder().get("manager").get("address"));
employees2 = (Vector)getSession().executeQuery(query2);
}
public void verify() {
if (!query1.getCall().getSQLString().equals(EXPECTED_SQL1)) {
throw new org.eclipse.persistence.testing.framework.TestErrorException("AddNonFetchedJoinedAttributeTest failed. \n [Expected] " + EXPECTED_SQL1 + "\n[Found] " + query1.getCall().getSQLString());
}
Employee employee = (Employee) employees1.firstElement();
if (employee.address.isInstantiated()) {
throw new TestErrorException("AddNonFetchedJoinedAttributeTest failed. The non fetch join attribute address was instantiated");
}
Address address = employee.getAddress();
if (address.getPostalCode() == null) {
throw new TestErrorException("Instantiating the address value holder returned an unpopulated address.");
}
if (!query2.getCall().getSQLString().equals(EXPECTED_SQL2)) {
throw new org.eclipse.persistence.testing.framework.TestErrorException("AddNonFetchedJoinedAttributeTest failed. \n [Expected] " + EXPECTED_SQL2 + "\n[Found] " + query2.getCall().getSQLString());
}
employee = (Employee) employees2.firstElement();
if (employee.manager.isInstantiated()) {
throw new TestErrorException("AddNonFetchedJoinedAttributeTest failed. The non fetch join attribute manager was instantiated");
}
Employee manager = (Employee) employee.getManager();
if (manager.getFirstName() == null) {
throw new TestErrorException("The manager object was not correctly populated.");
}
address = manager.getAddress();
if (address.getPostalCode() == null) {
throw new TestErrorException("Instantiating the address value holder returned an unpopulated address.");
}
}
}