/******************************************************************************* | |
* 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; | |
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() { | |
} | |
public void reset() { | |
m_session.getIdentityMapAccessor().initializeIdentityMaps(); | |
rollbackTransaction(); | |
} | |
protected void setup() { | |
m_session = getSession(); | |
beginTransaction(); | |
m_session.getIdentityMapAccessor().initializeIdentityMaps(); | |
m_originalClaims = getClaims(); | |
} | |
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"), new Double(1.10))); | |
m_session.executeQuery(updateQuery); | |
} | |
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(new Float(1001)) < 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(new Float(original.floatValue() * 1.10)) != 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(new Long(claim.getId()), new Float(claim.getAmount())); | |
} | |
return claimsToReturn; | |
} | |
} |