blob: d6ed22ae7ada186f77676784ff460874f92abe46 [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.writing;
import org.eclipse.persistence.sessions.*;
import org.eclipse.persistence.queries.*;
import org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor;
import org.eclipse.persistence.internal.sessions.AbstractSession;
import org.eclipse.persistence.testing.models.performance.Address;
import org.eclipse.persistence.testing.framework.*;
/**
* Compares the various writing modes for insertion of 10 addresses.
*/
public class InsertBatchUnitOfWorkComparisonTest extends PerformanceComparisonTestCase {
public InsertBatchUnitOfWorkComparisonTest() {
// Needs to run for a long time.
setTestRunTime(50000);
setDescription("Compares the various writing modes for insertion of 10 addresses.");
addParameterizedSQLTest();
addBatchWritingTest();
addParameterizedBatchWritingTest();
addNativeBatchWritingTest();
addBufferedBatchWritingTest();
addParameterizedStatementsTest();
addDynamicStatementsTest();
}
/**
* Insert 10 addresses and then reset database.
*/
@Override
public void test() {
UnitOfWork uow = getSession().acquireUnitOfWork();
for (int index = 0; index < 10; index++) {
Address address = new Address();
address.setCity("NewCity");
address.setPostalCode("N5J2N5");
address.setProvince("ON");
address.setStreet("1111 Mountain Blvd. Floor 13, suite " + index);
address.setCountry("Canada");
uow.registerObject(address);
}
uow.commit();
getSession().getIdentityMapAccessor().initializeAllIdentityMaps();
uow = getSession().acquireUnitOfWork();
uow.executeNonSelectingCall(new SQLCall("Delete from ADDRESS where CITY = 'NewCity'"));
uow.commit();
}
/**
* Insert the batch with parameterized SQL on.
*/
public void addParameterizedSQLTest() {
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() {
@Override
public void test() {
getSession().getLogin().cacheAllStatements();
InsertBatchUnitOfWorkComparisonTest.this.test();
getSession().getLogin().dontCacheAllStatements();
}
};
test.setName("ParameterizedSQLInsertBatchTest");
test.setAllowableDecrease(10);
addTest(test);
}
/**
* Insert the batch with parameterized batch writing on.
*/
public void addParameterizedBatchWritingTest() {
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() {
@Override
public void test() {
getSession().getLogin().cacheAllStatements();
getSession().getLogin().useBatchWriting();
InsertBatchUnitOfWorkComparisonTest.this.test();
getSession().getLogin().dontCacheAllStatements();
getSession().getLogin().dontUseBatchWriting();
}
};
test.setName("ParameterizedBatchWritingInsertBatchTest");
test.setAllowableDecrease(25);
addTest(test);
}
/**
* Insert the batch with Native batch writing on.
*/
public void addNativeBatchWritingTest() {
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() {
@Override
public void test() {
getSession().getLogin().cacheAllStatements();
getSession().getLogin().useBatchWriting();
getSession().getLogin().getPlatform().setUsesNativeBatchWriting(true);
InsertBatchUnitOfWorkComparisonTest.this.test();
getSession().getLogin().getPlatform().setUsesNativeBatchWriting(false);
getSession().getLogin().dontCacheAllStatements();
getSession().getLogin().dontUseBatchWriting();
}
@Override
public void startTest() {
((DatabaseAccessor)((AbstractSession)getSession()).getAccessor()).clearStatementCache((AbstractSession)getSession());
}
@Override
public void endTest() {
((DatabaseAccessor)((AbstractSession)getSession()).getAccessor()).clearStatementCache((AbstractSession)getSession());
}
};
test.setName("NativeBatchWritingInsertBatchTest");
test.setAllowableDecrease(25);
addTest(test);
}
/**
* Insert the batch with batch writing on.
*/
public void addBatchWritingTest() {
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() {
@Override
public void test() {
getSession().getLogin().useBatchWriting();
getSession().getLogin().dontBindAllParameters();
InsertBatchUnitOfWorkComparisonTest.this.test();
getSession().getLogin().dontUseBatchWriting();
getSession().getLogin().bindAllParameters();
}
};
test.setName("BatchWritingInsertBatchTest");
test.setAllowableDecrease(-300);
addTest(test);
}
/**
* Insert the batch with buffered batch writing on.
*/
public void addBufferedBatchWritingTest() {
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() {
@Override
public void test() {
getSession().getLogin().useBatchWriting();
getSession().getLogin().dontUseJDBCBatchWriting();
getSession().getLogin().dontBindAllParameters();
InsertBatchUnitOfWorkComparisonTest.this.test();
getSession().getLogin().dontUseBatchWriting();
getSession().getLogin().useJDBCBatchWriting();
getSession().getLogin().bindAllParameters();
}
};
test.setName("BufferedBatchWritingInsertBatchTest");
test.setAllowableDecrease(-300);
addTest(test);
}
/**
* Insert the batch with using old prepared statements on.
*/
public void addParameterizedStatementsTest() {
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() {
@Override
public void test() {
DatabaseAccessor.shouldUseDynamicStatements = false;
getSession().getLogin().dontBindAllParameters();
InsertBatchUnitOfWorkComparisonTest.this.test();
DatabaseAccessor.shouldUseDynamicStatements = true;
getSession().getLogin().bindAllParameters();
}
};
test.setName("ParameterizedStatementsInsertBatchTest");
test.setAllowableDecrease(-300);
addTest(test);
}
/**
* Insert the batch with using dynamic statements on.
*/
public void addDynamicStatementsTest() {
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() {
@Override
public void test() {
getSession().getLogin().dontBindAllParameters();
InsertBatchUnitOfWorkComparisonTest.this.test();
getSession().getLogin().bindAllParameters();
}
};
test.setName("DynamicStatementsInsertBatchTest");
test.setAllowableDecrease(-300);
addTest(test);
}
}