| /* |
| * 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); |
| }*/ |
| } |