#1223 - Support mapping @DbArray to a List or Set of enums

This commit is contained in:
Rob Bygrave
2017-12-13 21:15:19 +13:00
parent 4d0b29624e
commit e07bd8f736
12 changed files with 166 additions and 38 deletions
@@ -7,10 +7,10 @@ import io.ebeaninternal.server.core.bootup.BootupClasses;
import io.ebeaninternal.server.type.DefaultTypeManager;
import io.ebeaninternal.server.type.RsetDataReader;
import io.ebeaninternal.server.type.ScalarType;
import org.tests.model.ivo.Money;
import org.tests.model.ivo.converter.MoneyTypeConverter;
import org.junit.Assert;
import org.junit.Test;
import org.tests.model.ivo.Money;
import org.tests.model.ivo.converter.MoneyTypeConverter;
import java.sql.SQLException;
import java.sql.Types;
@@ -24,7 +24,7 @@ public class TestTypeManager extends BaseTestCase {
DefaultTypeManager typeManager = createTypeManager();
ScalarType<?> type = typeManager.createEnumScalarType(MyEnum.class);
ScalarType<?> type = typeManager.createEnumScalarType(MyEnum.class, null);
typeManager.addEnumType(type, MyEnum.class);
Object val = type.read(new DummyDataReader("A"));
@@ -49,7 +49,7 @@ public class TestTypeManager extends BaseTestCase {
DefaultTypeManager typeManager = createTypeManager();
ScalarType<?> dayOfWeekType = typeManager.createEnumScalarType(MyDayOfWeek.class);
ScalarType<?> dayOfWeekType = typeManager.createEnumScalarType(MyDayOfWeek.class, null);
Object val = dayOfWeekType.read(new DummyDataReader("MONDAY "));
assertThat(val).isEqualTo(MyDayOfWeek.MONDAY);
@@ -8,11 +8,16 @@ import javax.persistence.Id;
import javax.persistence.Version;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
@Entity
public class EArrayBean {
enum Status {
ONE, TWO, THREE
}
@Id
Long id;
@@ -30,6 +35,12 @@ public class EArrayBean {
@DbArray
List<Double> doubs;
@DbArray
List<Status> statuses;
@DbArray
Set<Status> status2;
@Version
Long version;
@@ -81,6 +92,23 @@ public class EArrayBean {
this.doubs = doubs;
}
public List<Status> getStatuses() {
return statuses;
}
public void setStatuses(List<Status> statuses) {
this.statuses = statuses;
}
public Set<Status> getStatus2() {
return status2;
}
public void setStatus2(Set<Status> status2) {
this.status2 = status2;
}
public Long getVersion() {
return version;
}
@@ -7,7 +7,9 @@ import org.ebeantest.LoggedSqlCollector;
import org.junit.Test;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
@@ -39,6 +41,13 @@ public class TestDbArray_basic extends BaseTestCase {
bean.getOtherIds().add(96L);
bean.getOtherIds().add(97L);
bean.setDoubs(doubles);
bean.setStatuses(new ArrayList<>());
bean.getStatuses().add(EArrayBean.Status.ONE);
bean.getStatuses().add(EArrayBean.Status.THREE);
bean.setStatus2(new LinkedHashSet<>());
bean.getStatus2().add(EArrayBean.Status.TWO);
bean.getStatus2().add(EArrayBean.Status.ONE);
Ebean.save(bean);
@@ -53,10 +62,18 @@ public class TestDbArray_basic extends BaseTestCase {
.arrayContains("uids", bean.getUids().get(0))
.arrayContains("phoneNumbers", "9823")
.arrayIsNotEmpty("phoneNumbers")
.arrayContains("statuses", EArrayBean.Status.ONE)
.arrayContains("status2", EArrayBean.Status.TWO)
.query();
List<EArrayBean> list = query.findList();
List<EArrayBean.Status> statuses = list.get(0).getStatuses();
Set<EArrayBean.Status> status2 = list.get(0).getStatus2();
assertThat(statuses).contains(EArrayBean.Status.ONE, EArrayBean.Status.THREE);
assertThat(status2).contains(EArrayBean.Status.ONE, EArrayBean.Status.TWO);
assertThat(query.getGeneratedSql()).contains(" t0.other_ids @> array[?,?]::bigint[] ");
assertThat(query.getGeneratedSql()).contains(" t0.uids @> array[?] ");
assertThat(query.getGeneratedSql()).contains(" t0.phone_numbers @> array[?] ");