blob: f7e4d576b9bf168f27de87b03a10a47404e5aabb [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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.tests.queries;
import java.util.*;
import org.eclipse.persistence.sessions.*;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.expressions.ExpressionMath;
import org.eclipse.persistence.expressions.ExpressionBuilder;
import org.eclipse.persistence.queries.UpdateAllQuery;
import org.eclipse.persistence.testing.models.insurance.Claim;
/**
* Tests an update all query that uses the ExpressionMath in the set clause
*
* @author Guy Pelletier
* @version 1.0 April 13/04
*/
public class UpdateAllQueryExpressionMathTest extends AutoVerifyTestCase {
private Session m_session;
private Hashtable m_originalClaims;
private Hashtable m_updatedClaims;
public UpdateAllQueryExpressionMathTest() {
}
@Override
public void reset() {
m_session.getIdentityMapAccessor().initializeIdentityMaps();
rollbackTransaction();
}
@Override
protected void setup() {
m_session = getSession();
beginTransaction();
m_session.getIdentityMapAccessor().initializeIdentityMaps();
m_originalClaims = getClaims();
}
@Override
public void test() {
ExpressionBuilder eb = new ExpressionBuilder();
UpdateAllQuery updateQuery = new UpdateAllQuery(org.eclipse.persistence.testing.models.insurance.Claim.class);
updateQuery.setSelectionCriteria(eb.get("amount").greaterThan(1000));
updateQuery.addUpdate(eb.get("amount"), ExpressionMath.multiply(eb.get("amount"), 1.10));
m_session.executeQuery(updateQuery);
}
@Override
protected void verify() {
m_session.getIdentityMapAccessor().initializeIdentityMaps();// Ensure we read from the database
m_updatedClaims = getClaims();
Enumeration e = m_originalClaims.keys();
while (e.hasMoreElements()) {
Long id = (Long)e.nextElement();
Float original = (Float)m_originalClaims.get(id);
Float updated = (Float)m_updatedClaims.get(id);
if (original.compareTo(1001F) < 0) {// Ensure it was not updated
if (updated.compareTo(original) != 0) {
throw new TestErrorException("Claim amount was updated when it shouldn't have been");
}
} else {// Ensure it was properly updated
if (updated.compareTo(original * 1.10f) != 0) {
throw new TestErrorException("Claim amount (" + original + ") was NOT properly updated. Value = " + updated);
}
}
}
}
private Hashtable getClaims() {
Hashtable claimsToReturn = new Hashtable();
Vector claims = m_session.readAllObjects(org.eclipse.persistence.testing.models.insurance.Claim.class);
Enumeration e = claims.elements();
while (e.hasMoreElements()) {
Claim claim = (Claim)e.nextElement();
claimsToReturn.put(claim.getId(), claim.getAmount());
}
return claimsToReturn;
}
}