blob: fae2efe8c54ea869a951ce97e6c8d6ed16e26b4d [file] [log] [blame]
/*
* Copyright (c) 2018, 2020 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
*/
package org.eclipse.persistence.testing.tests.queries.report;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Vector;
import org.eclipse.persistence.expressions.ExpressionBuilder;
import org.eclipse.persistence.queries.CursoredStream;
import org.eclipse.persistence.queries.ReportQuery;
import org.eclipse.persistence.queries.ReportQueryResult;
import org.eclipse.persistence.testing.framework.TestCase;
import org.eclipse.persistence.testing.models.employee.domain.Employee;
/**
* Test retrieving primary keys and other values with a ReportQuery, using a Cursor
* Bug TO-DO
*/
public class ReportQueryRetrievePrimaryKeysCursorTest extends TestCase {
protected ReportQuery reportQuery;
protected HashMap<Object, ReportQueryResult> expectedResults;
protected HashMap<Object, ReportQueryResult> cursoredResults;
public ReportQueryRetrievePrimaryKeysCursorTest() {
super();
setDescription("Test retrieving primary keys with a ReportQuery, using a Cursor");
}
protected void queryForExpectedResults() {
expectedResults = new HashMap<Object, ReportQueryResult>();
ReportQuery expectedResultsReportQuery = new ReportQuery(Employee.class, new ExpressionBuilder());
ExpressionBuilder builder = expectedResultsReportQuery.getExpressionBuilder();
// required
expectedResultsReportQuery.retrievePrimaryKeys();
expectedResultsReportQuery.addAttribute("idResult", builder.get("id")); // number
expectedResultsReportQuery.addAttribute("firstNameResult", builder.get("firstName")); // string
expectedResultsReportQuery.addAttribute("lastNameResult", builder.get("lastName")); // string
expectedResultsReportQuery.addAttribute("addressResult", builder.get("address").get("id")); // number
Vector<ReportQueryResult> someResults = (Vector<ReportQueryResult>)getSession().executeQuery(expectedResultsReportQuery);
for (ReportQueryResult result : someResults) {
expectedResults.put(result.getId(), result);
}
}
protected void buildCursoredResultsReportQuery() {
cursoredResults = new HashMap<Object, ReportQueryResult>();
reportQuery = new ReportQuery(Employee.class, new ExpressionBuilder());
ExpressionBuilder builder = reportQuery.getExpressionBuilder();
// required
reportQuery.retrievePrimaryKeys();
reportQuery.addAttribute("idResult", builder.get("id")); // number
reportQuery.addAttribute("firstNameResult", builder.get("firstName")); // string
reportQuery.addAttribute("lastNameResult", builder.get("lastName")); // string
reportQuery.addAttribute("addressResult", builder.get("address").get("id")); // number
// required
reportQuery.useCursoredStream(5, 5);
}
@Override
protected void setup() throws Throwable {
if (getSession().isRemoteSession()) {
throwWarning("Report queries with objects are not supported on remote session.");
}
super.setup();
queryForExpectedResults();
buildCursoredResultsReportQuery();
}
@Override
public void test() {
CursoredStream stream = (CursoredStream) getSession().executeQuery(reportQuery);
while (!stream.atEnd()) {
ReportQueryResult result = (ReportQueryResult) stream.read();
cursoredResults.put(result.getId(), result);
stream.releasePrevious();
}
stream.close();
}
@Override
public void verify() {
assertNotNull("Expected results should be non-null", expectedResults);
assertFalse("Expected results should not be zero", expectedResults.size() == 0);
assertNotNull("Cursored results should be non-null", cursoredResults);
assertFalse("Cursored results should not be zero", cursoredResults.size() == 0);
assertEquals("Cursored results differs from expected results", expectedResults.size(), cursoredResults.size());
for (Object id : expectedResults.keySet()) {
if (!cursoredResults.containsKey(id)) {
fail("Cursored results does not contain entry for id: " + id);
}
}
}
@Override
public void reset() {
this.cursoredResults = null;
this.expectedResults = null;
this.reportQuery = null;
}
}