blob: 82db12aa898940585c2666d32a82ebdc1b9ae5fc [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.performance.jdbc;
import java.util.*;
import java.sql.*;
import org.eclipse.persistence.testing.framework.*;
/**
* This test compares the performance between using multiple queries vs single outer join.
*/
public class InheritanceOuterJoinTest extends PerformanceComparisonTestCase {
protected Connection connection;
protected PreparedStatement selectTypeStatement;
protected PreparedStatement selectSmallProjectStatement;
protected PreparedStatement selectLargeProjectStatement;
protected PreparedStatement selectAllProjectStatement;
public InheritanceOuterJoinTest() {
setDescription("Compares the performance of multiple queries vs single outer join.");
addOuterJoinTest();
//addOuterJoinFromClauseTest();
}
@Override
public void setup() throws Exception {
connection = (Connection)getAbstractSession().getAccessor().getDatasourceConnection();
selectTypeStatement = connection.prepareStatement("Select PROJ_TYPE from PROJECT");
selectSmallProjectStatement = connection.prepareStatement("Select * from PROJECT where PROJ_TYPE = 'S'");
selectLargeProjectStatement = connection.prepareStatement("Select * from PROJECT P, LPROJECT L where ((PROJ_TYPE = 'L') and (L.PROJ_ID = P.PROJ_ID))");
selectAllProjectStatement = connection.prepareStatement("Select * from PROJECT P, LPROJECT L where L.PROJ_ID (+) = P.PROJ_ID");
}
@Override
public void reset() throws Exception {
selectTypeStatement.close();
selectSmallProjectStatement.close();
selectLargeProjectStatement.close();
selectAllProjectStatement.close();
}
/**
* Fetch rows.
*/
public void fetchRows(ResultSet result) throws Exception {
int size = result.getMetaData().getColumnCount();
Vector rows = new Vector();
while (result.next()) {
Vector row = new Vector(size);
for (int column = 1; column <= size; column++) {
row.add(result.getObject(column));
}
rows.add(row);
}
result.close();
}
/**
* Multiple queries.
*/
@Override
public void test() throws Exception {
fetchRows(selectTypeStatement.executeQuery());
fetchRows(selectSmallProjectStatement.executeQuery());
fetchRows(selectLargeProjectStatement.executeQuery());
}
/**
* Outer join.
*/
public void addOuterJoinTest() {
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() {
@Override
public void test() throws Exception {
fetchRows(selectAllProjectStatement.executeQuery());
}
};
test.setName("OuterJoinTest");
test.setAllowableDecrease(10);
addTest(test);
}
/**
* Outer join from clause.
*
public void addOuterJoinFromClauseTest() {
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() {
public void test() throws Exception {
PreparedStatement statement = connection.prepareStatement("Select * from PROJECT P left outer join LPROJECT L on (L.PROJ_ID = P.PROJ_ID)");
fetchRows(statement.executeQuery());
statement.close();
}
};
test.setName("OuterJoinFromClauseTest");
test.setAllowableDecrease(10);
addTest(test);
}*/
}