blob: f40482ff6330b95e79821a584ca4392cf43f414f [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 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 v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// dminsky - initial API and implementation
package org.eclipse.persistence.testing.tests.sessionbroker;
import java.util.*;
import org.eclipse.persistence.testing.framework.TestCase;
import org.eclipse.persistence.testing.models.employee.relational.EmployeeProject;
import org.eclipse.persistence.testing.models.employee.domain.Address;
import org.eclipse.persistence.testing.models.employee.domain.Employee;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.sessions.Project;
import org.eclipse.persistence.sessions.DatabaseLogin;
import org.eclipse.persistence.sessions.UnitOfWork;
import org.eclipse.persistence.sessions.broker.SessionBroker;
import org.eclipse.persistence.expressions.ExpressionBuilder;
import org.eclipse.persistence.expressions.Expression;
import org.eclipse.persistence.queries.DeleteAllQuery;
import org.eclipse.persistence.queries.ReadAllQuery;
import org.eclipse.persistence.queries.UpdateAllQuery;
import org.eclipse.persistence.exceptions.EclipseLinkException;
public class SessionBrokerCustomFunctionTest extends TestCase {
protected SessionBroker sessionBroker;
protected int testType = -1;
public static final int READALLQUERY_TEST = 0;
public static final int UPDATEALLQUERY_TEST = 1;
public static final int DELETEALLQUERY_TEST = 2;
public SessionBrokerCustomFunctionTest(int testType) {
setDescription("Test using custom functions in a platform subclass using session broker");
this.testType = testType;
}
@Override
public void setup() {
Project project = new EmployeeProject();
DatabaseLogin login = ServerBrokerTestModel.getLogin1();
login.setPlatform(new CustomDatabasePlatform());
project.setLogin(login);
DatabaseSession aSession = project.createDatabaseSession();
this.sessionBroker = new SessionBroker();
this.sessionBroker.registerSession("broker1", aSession);
this.sessionBroker.setSessionLog(getSession().getSessionLog());
this.sessionBroker.setLogLevel(getSession().getLogLevel());
this.sessionBroker.login();
}
@Override
public void test() {
if (testType == READALLQUERY_TEST) {
testReadAllQuery();
} else if (testType == UPDATEALLQUERY_TEST) {
testUpdateAllQuery();
} else if (testType == DELETEALLQUERY_TEST) {
testDeleteAllQueryTest();
} else {
throwError("test: Invalid test indicator passed to constructor: " + this.testType);
}
}
public void testReadAllQuery() {
try {
UnitOfWork uow = this.sessionBroker.acquireUnitOfWork();
ReadAllQuery query = new ReadAllQuery(Address.class);
ExpressionBuilder builder = query.getExpressionBuilder();
Vector<Expression> args = new Vector<Expression>();
args.add(builder.get("country"));
Expression expression = builder.getFunction(CustomDatabasePlatform.OPERATOR_SELECTOR, args).equal("CANADA");
query.setSelectionCriteria(expression);
uow.executeQuery(query);
} catch (EclipseLinkException exception) {
throwError("testReadAllQuery: failed to use configured platform to acquire custom function: " + exception.getMessage());
}
}
public void testUpdateAllQuery() {
try {
DatabaseSession session = (DatabaseSession)this.sessionBroker.getSessionForName("broker1");
session.beginTransaction();
UnitOfWork uow = session.acquireUnitOfWork();
UpdateAllQuery query = new UpdateAllQuery(Employee.class);
ExpressionBuilder builder = query.getExpressionBuilder();
Vector<Expression> args = new Vector<Expression>();
args.add(builder.get("lastName"));
Expression expression = builder.getFunction(CustomDatabasePlatform.OPERATOR_SELECTOR, args).equal("SMITH");
query.setSelectionCriteria(expression);
query.addUpdate(builder.get("lastName"), "oneincrediblyunlikelylastname");
uow.executeQuery(query);
uow.commit();
session.rollbackTransaction();
} catch (EclipseLinkException exception) {
throwError("testUpdateAllQuery: failed to use configured platform to acquire custom function: " + exception.getMessage());
}
}
public void testDeleteAllQueryTest() {
try {
DatabaseSession session = (DatabaseSession)this.sessionBroker.getSessionForName("broker1");
session.beginTransaction();
UnitOfWork uow = session.acquireUnitOfWork();
DeleteAllQuery query = new DeleteAllQuery(Employee.class);
ExpressionBuilder builder = query.getExpressionBuilder();
Vector<Expression> args = new Vector<Expression>();
args.add(builder.get("lastName"));
Expression expression = builder.getFunction(CustomDatabasePlatform.OPERATOR_SELECTOR, args).equal("SMITH");
query.setSelectionCriteria(expression);
uow.executeQuery(query);
uow.commit();
session.rollbackTransaction();
} catch (EclipseLinkException exception) {
throwError("testDeleteAllQueryTest: failed to use configured platform to acquire custom function: " + exception.getMessage());
}
}
@Override
public void reset() {
this.sessionBroker.logout();
}
}