Files
ebean/src/test/java/org/tests/model/elementcollection/TestElementCollectionBasicMapCache.java
T
Rob BygraveandGitHub 94591954b3 1476 - Query plan capture, initial wip capturing bind params (#1477)
* 1476 - Query plan capture, initial wip capturing bind params

* No effective change - Reset test default db to H2

* #1476 - Query plan capture, initial wip capturing bind params #1477

Update with consumer

* #1476 - Query plan capture, initial wip capturing bind params #1477

Update with query plan request

* #1476 - Query plan capture, initial wip capturing bind params #1477

Extract interface

* #1476 - Query plan capture, initial wip capturing bind params #1477

Extract interface
2018-12-19 16:04:28 +13:00

102 lines
2.6 KiB
Java

package org.tests.model.elementcollection;
import io.ebean.Ebean;
import io.ebean.annotation.PersistBatch;
import io.ebeaninternal.api.SpiEbeanServer;
import org.ebeantest.LoggedSqlCollector;
import org.junit.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class TestElementCollectionBasicMapCache {
@Test
public void test() {
EcmPerson person = new EcmPerson("CacheMap");
person.getPhoneNumbers().put("home", "021 1234");
person.getPhoneNumbers().put("work", "021 4321");
Ebean.save(person);
EcmPerson one = Ebean.find(EcmPerson.class)
.setId(person.getId())
.fetch("phoneNumbers")
.findOne();
one.getPhoneNumbers().size();
LoggedSqlCollector.start();
EcmPerson two = Ebean.find(EcmPerson.class)
.setId(person.getId())
.findOne();
two.setName("CacheMod");
two.getPhoneNumbers().put("mob", "027 234234");
List<String> sql = LoggedSqlCollector.current();
assertThat(sql).isEmpty(); // cache hit containing phone numbers
Ebean.save(two);
sql = LoggedSqlCollector.current();
if (isPersistBatchOnCascade()) {
assertThat(sql).hasSize(3);
}
else {
assertThat(sql).hasSize(5);
}
Ebean.save(two);
sql = LoggedSqlCollector.current();
assertThat(sql).isEmpty(); // no change
EcmPerson three = Ebean.find(EcmPerson.class)
.setId(person.getId())
.findOne();
assertThat(three.getName()).isEqualTo("CacheMod");
assertThat(three.getPhoneNumbers().toString()).contains("021 1234", "021 4321", "027 234234");
sql = LoggedSqlCollector.current();
assertThat(sql).isEmpty(); // cache hit
three.getPhoneNumbers().put("oth", "09 6534");
three.getPhoneNumbers().remove("home");
three.getPhoneNumbers().remove("work");
Ebean.save(three);
sql = LoggedSqlCollector.current();
if (isPersistBatchOnCascade()) {
assertThat(sql).hasSize(2); // cache hit
}
else {
assertThat(sql).hasSize(3); // cache hit
}
EcmPerson four = Ebean.find(EcmPerson.class)
.setId(person.getId())
.fetch("phoneNumbers")
.findOne();
assertThat(four.getName()).isEqualTo("CacheMod");
assertThat(four.getPhoneNumbers().toString()).contains("027 234234", "09 6534");
assertThat(four.getPhoneNumbers()).hasSize(2);
sql = LoggedSqlCollector.current();
assertThat(sql).isEmpty(); // cache hit
Ebean.delete(four);
LoggedSqlCollector.stop();
}
public boolean isPersistBatchOnCascade() {
return ((SpiEbeanServer) Ebean.getDefaultServer()).getDatabasePlatform().getPersistBatchOnCascade() != PersistBatch.NONE;
}
}