mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
Refactor move tests from ebean-core to ebean-test
This commit is contained in:
@@ -0,0 +1,333 @@
|
||||
package org.tests.batchinsert;
|
||||
|
||||
import io.ebean.BaseTestCase;
|
||||
import io.ebean.DB;
|
||||
import io.ebean.DtoQuery2Test;
|
||||
import io.ebean.DB;
|
||||
import io.ebean.Database;
|
||||
import io.ebean.Transaction;
|
||||
import io.ebean.annotation.IgnorePlatform;
|
||||
import io.ebean.annotation.PersistBatch;
|
||||
import io.ebean.annotation.Platform;
|
||||
import io.ebean.annotation.Transactional;
|
||||
import io.ebean.meta.MetaTimedMetric;
|
||||
import io.ebean.meta.ServerMetrics;
|
||||
import io.ebeaninternal.api.SpiTransaction;
|
||||
import org.ebeantest.LoggedSqlCollector;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.tests.model.basic.Customer;
|
||||
import org.tests.model.basic.EBasicVer;
|
||||
import org.tests.model.basic.TSDetail;
|
||||
import org.tests.model.basic.TSMaster;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
|
||||
public class TestBatchInsertFlush extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void no_cascade() {
|
||||
|
||||
Database server = DB.getDefault();
|
||||
|
||||
resetAllMetrics();
|
||||
|
||||
Transaction transaction = server.beginTransaction();
|
||||
try {
|
||||
transaction.setPersistCascade(false);
|
||||
transaction.setBatchSize(10);
|
||||
transaction.setBatchMode(true);
|
||||
transaction.setLabel("TestBatchInsertFlush.no_cascade");
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
TSMaster m = new TSMaster();
|
||||
m.setName("master1");
|
||||
server.save(m);
|
||||
|
||||
// we don't want this to flush batch yet but instead
|
||||
// determine its batch depth based on imported assoc to master
|
||||
TSDetail d1 = new TSDetail("d1");
|
||||
d1.setMaster(m);
|
||||
server.save(d1);
|
||||
|
||||
TSDetail d2 = new TSDetail("d2");
|
||||
d2.setMaster(m);
|
||||
server.save(d2);
|
||||
|
||||
// we want this to batch flush with master 1
|
||||
TSMaster m2 = new TSMaster();
|
||||
m2.setName("master2");
|
||||
server.save(m2);
|
||||
|
||||
transaction.commit();
|
||||
|
||||
List<String> sql = LoggedSqlCollector.stop();
|
||||
|
||||
// we get the 2 master inserts first
|
||||
assertSql(sql.get(0)).contains("insert into t_atable_thatisrelatively");
|
||||
assertSql(sql.get(1)).contains("-- bind(");
|
||||
// detail
|
||||
assertThat(sql.get(3)).contains("insert into t_detail_with_other_namexxxyy");
|
||||
|
||||
assertThat(((SpiTransaction)transaction).getLabel()).isEqualTo("TestBatchInsertFlush.no_cascade");
|
||||
|
||||
} finally {
|
||||
transaction.end();
|
||||
}
|
||||
|
||||
ServerMetrics metrics = collectMetrics();
|
||||
List<MetaTimedMetric> txnStats = metrics.timedMetrics();
|
||||
for (MetaTimedMetric txnMetric : txnStats) {
|
||||
System.out.println(txnMetric);
|
||||
}
|
||||
assertThat(txnStats).hasSize(4);
|
||||
assertThat(txnStats.get(0).name()).isEqualTo("txn.main");
|
||||
assertThat(txnStats.get(1).name()).isEqualTo("txn.named.TestBatchInsertFlush.no_cascade");
|
||||
assertThat(txnStats.get(2).name()).isEqualTo("iud.TSDetail.insertBatch");
|
||||
assertThat(txnStats.get(3).name()).isEqualTo("iud.TSMaster.insertBatch");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional(batch = PersistBatch.ALL, flushOnQuery = false)
|
||||
public void transactional_flushOnQueryFalse() {
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
DB.save(new EBasicVer("b1"));
|
||||
DB.save(new EBasicVer("b2"));
|
||||
|
||||
// does not trigger JDBC batch with flushOnQuery = false
|
||||
DB.find(Customer.class).findCount();
|
||||
|
||||
List<String> sql = LoggedSqlCollector.stop();
|
||||
assertSql(sql.get(0)).contains("select count(*)");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional(batchSize = 20)
|
||||
public void transactional_flushOnSqlQuery() {
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
DB.save(new EBasicVer("b1"));
|
||||
DB.save(new EBasicVer("b2"));
|
||||
|
||||
// trigger JDBC batch by default
|
||||
DB.sqlQuery("select count(*) from e_basicver")
|
||||
.mapToScalar(Integer.class)
|
||||
.findOne();
|
||||
|
||||
List<String> sql = LoggedSqlCollector.stop();
|
||||
assertSql(sql.get(0)).contains("insert into e_basicver");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional(batchSize = 20)
|
||||
public void transactional_flushOnDtoQuery() {
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
DB.save(new EBasicVer("b1"));
|
||||
DB.save(new EBasicVer("b2"));
|
||||
|
||||
// trigger JDBC batch by default
|
||||
DB.findDto(DtoQuery2Test.DCust.class, "select id, name from o_customer")
|
||||
.findList();
|
||||
|
||||
List<String> sql = LoggedSqlCollector.stop();
|
||||
assertSql(sql.get(0)).contains("insert into e_basicver");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional(batch = PersistBatch.ALL)
|
||||
public void transactional_flushOnQuery() {
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
DB.save(new EBasicVer("b1"));
|
||||
DB.save(new EBasicVer("b2"));
|
||||
|
||||
// by default triggers flush of JDBC batch
|
||||
DB.find(Customer.class).findCount();
|
||||
|
||||
List<String> sql = LoggedSqlCollector.stop();
|
||||
assertSql(sql.get(0)).contains("insert into e_basicver");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional(batch = PersistBatch.ALL)
|
||||
@IgnorePlatform({Platform.SQLSERVER, Platform.HANA}) // has generated IDs
|
||||
public void transactional_flushOnGetId() {
|
||||
|
||||
Database server = DB.getDefault();
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
EBasicVer b1 = new EBasicVer("b1");
|
||||
server.save(b1);
|
||||
|
||||
EBasicVer b2 = new EBasicVer("b2");
|
||||
server.save(b2);
|
||||
|
||||
//flush here
|
||||
assertThat(LoggedSqlCollector.current()).isEmpty();
|
||||
Integer id = b1.getId();
|
||||
assertNotNull(id);
|
||||
assertThat(LoggedSqlCollector.current()).hasSize(3);
|
||||
|
||||
EBasicVer b3 = new EBasicVer("b3");
|
||||
server.save(b3);
|
||||
}
|
||||
|
||||
@Test
|
||||
@IgnorePlatform({Platform.SQLSERVER, Platform.HANA})
|
||||
public void testFlushOnGetId() {
|
||||
|
||||
Database server = DB.getDefault();
|
||||
Transaction txn = server.beginTransaction();
|
||||
try {
|
||||
LoggedSqlCollector.start();
|
||||
txn.setBatchMode(true);
|
||||
|
||||
EBasicVer b1 = new EBasicVer("b1");
|
||||
server.save(b1, txn);
|
||||
|
||||
EBasicVer b2 = new EBasicVer("b2");
|
||||
server.save(b2, txn);
|
||||
|
||||
//flush here
|
||||
assertThat(LoggedSqlCollector.current()).isEmpty();
|
||||
Integer id = b1.getId();
|
||||
assertNotNull(id);
|
||||
assertThat(LoggedSqlCollector.current()).hasSize(3);
|
||||
|
||||
EBasicVer b3 = new EBasicVer("b3");
|
||||
server.save(b3, txn);
|
||||
|
||||
txn.commit();
|
||||
|
||||
} finally {
|
||||
txn.end();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional(batch = PersistBatch.ALL)
|
||||
public void transactional_noflushWhenIdIsLoaded() {
|
||||
|
||||
Database server = DB.getDefault();
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
EBasicVer b1 = new EBasicVer("b1");
|
||||
b1.setId(78965);
|
||||
server.save(b1);
|
||||
|
||||
EBasicVer b2 = new EBasicVer("b2");
|
||||
b2.setId(78645);
|
||||
server.save(b2);
|
||||
|
||||
assertThat(LoggedSqlCollector.current()).isEmpty();
|
||||
// dont flush here
|
||||
Integer id = b1.getId();
|
||||
assertNotNull(id);
|
||||
assertThat(LoggedSqlCollector.current()).isEmpty();
|
||||
|
||||
EBasicVer b3 = new EBasicVer("b3");
|
||||
server.save(b3);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@IgnorePlatform({Platform.SQLSERVER, Platform.ORACLE})
|
||||
public void noflushWhenIdIsLoaded() {
|
||||
|
||||
Database server = DB.getDefault();
|
||||
Transaction txn = server.beginTransaction();
|
||||
try {
|
||||
LoggedSqlCollector.start();
|
||||
txn.setBatchMode(true);
|
||||
|
||||
EBasicVer b1 = new EBasicVer("b1");
|
||||
b1.setId(546864);
|
||||
server.save(b1, txn);
|
||||
|
||||
EBasicVer b2 = new EBasicVer("b2");
|
||||
b2.setId(21354);
|
||||
server.save(b2, txn);
|
||||
|
||||
assertThat(LoggedSqlCollector.current()).isEmpty();
|
||||
//dont flush here
|
||||
Integer id = b1.getId();
|
||||
assertNotNull(id);
|
||||
assertThat(LoggedSqlCollector.current()).isEmpty();
|
||||
|
||||
EBasicVer b3 = new EBasicVer("b3");
|
||||
server.save(b3, txn);
|
||||
|
||||
txn.commit();
|
||||
assertThat(LoggedSqlCollector.current()).hasSize(5);
|
||||
|
||||
} finally {
|
||||
txn.end();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFlushOnGetProperty() {
|
||||
|
||||
Database server = DB.getDefault();
|
||||
Transaction txn = server.beginTransaction();
|
||||
try {
|
||||
txn.setBatchMode(true);
|
||||
|
||||
EBasicVer b1 = new EBasicVer("b1");
|
||||
server.save(b1, txn);
|
||||
|
||||
EBasicVer b2 = new EBasicVer("b2");
|
||||
server.save(b2, txn);
|
||||
|
||||
// flush here
|
||||
Timestamp lastUpdate = b1.getLastUpdate();
|
||||
assertNotNull(lastUpdate);
|
||||
|
||||
EBasicVer b3 = new EBasicVer("b3");
|
||||
server.save(b3, txn);
|
||||
|
||||
txn.commit();
|
||||
|
||||
} finally {
|
||||
txn.end();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFlushOnSetProperty() {
|
||||
|
||||
Database server = DB.getDefault();
|
||||
Transaction txn = server.beginTransaction();
|
||||
try {
|
||||
txn.setBatchMode(true);
|
||||
|
||||
EBasicVer b1 = new EBasicVer("b1");
|
||||
server.save(b1, txn);
|
||||
|
||||
EBasicVer b2 = new EBasicVer("b2");
|
||||
server.save(b2, txn);
|
||||
|
||||
// flush here
|
||||
b1.setDescription("modify");
|
||||
|
||||
EBasicVer b3 = new EBasicVer("b3");
|
||||
server.save(b3, txn);
|
||||
|
||||
txn.commit();
|
||||
|
||||
} finally {
|
||||
txn.end();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user