diff --git a/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayBase.java b/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayBase.java new file mode 100644 index 000000000..783793c72 --- /dev/null +++ b/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayBase.java @@ -0,0 +1,30 @@ +package io.ebeaninternal.server.type; + +import io.ebeanservice.docstore.api.mapping.DocPropertyType; + +import java.sql.Array; +import java.sql.SQLException; + +abstract class ScalarTypeArrayBase extends ScalarTypeJsonCollection { + + ScalarTypeArrayBase(Class type, int dbType, DocPropertyType docPropertyType) { + super(type, dbType, docPropertyType); + } + + @Override + public T read(DataReader reader) throws SQLException { + Array array = reader.getArray(); + if (array == null) { + return null; + } else { + try { + return fromArray((Object[]) array.getArray()); + } finally { + array.free(); + } + } + } + + protected abstract T fromArray(Object[] array1); + +} diff --git a/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayList.java b/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayList.java index b7511cab3..8a728c0ec 100644 --- a/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayList.java +++ b/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayList.java @@ -11,7 +11,6 @@ import io.ebeanservice.docstore.api.mapping.DocPropertyType; import javax.persistence.PersistenceException; import java.io.IOException; import java.lang.reflect.Type; -import java.sql.Array; import java.sql.SQLException; import java.sql.Types; import java.util.ArrayList; @@ -22,7 +21,7 @@ import java.util.UUID; * Type mapped for DB ARRAY type (Postgres only effectively). */ @SuppressWarnings("rawtypes") -public class ScalarTypeArrayList extends ScalarTypeJsonCollection implements ScalarTypeArray { +public class ScalarTypeArrayList extends ScalarTypeArrayBase implements ScalarTypeArray { private static ScalarTypeArrayList UUID = new ScalarTypeArrayList("uuid", DocPropertyType.UUID, ArrayElementConverter.UUID); private static ScalarTypeArrayList LONG = new ScalarTypeArrayList("bigint", DocPropertyType.LONG, ArrayElementConverter.LONG); @@ -101,7 +100,8 @@ public class ScalarTypeArrayList extends ScalarTypeJsonCollection implemen } @SuppressWarnings("unchecked") - private List fromArray(Object[] array1) { + @Override + protected List fromArray(Object[] array1) { List list = new ArrayList(array1.length); for (Object element : array1) { list.add(converter.toElement(element)); @@ -113,16 +113,6 @@ public class ScalarTypeArrayList extends ScalarTypeJsonCollection implemen return converter.toDbArray(value.toArray()); } - @Override - public List read(DataReader reader) throws SQLException { - Array array = reader.getArray(); - if (array == null) { - return null; - } else { - return fromArray((Object[]) array.getArray()); - } - } - @Override public void bind(DataBind bind, List value) throws SQLException { if (value == null) { diff --git a/src/main/java/io/ebeaninternal/server/type/ScalarTypeArraySet.java b/src/main/java/io/ebeaninternal/server/type/ScalarTypeArraySet.java index ea3c0bc84..0d8745d35 100644 --- a/src/main/java/io/ebeaninternal/server/type/ScalarTypeArraySet.java +++ b/src/main/java/io/ebeaninternal/server/type/ScalarTypeArraySet.java @@ -11,7 +11,6 @@ import io.ebeanservice.docstore.api.mapping.DocPropertyType; import javax.persistence.PersistenceException; import java.io.IOException; import java.lang.reflect.Type; -import java.sql.Array; import java.sql.SQLException; import java.sql.Types; import java.util.LinkedHashSet; @@ -21,7 +20,7 @@ import java.util.UUID; /** * Type mapped for DB ARRAY type (Postgres only effectively). */ -public class ScalarTypeArraySet extends ScalarTypeJsonCollection> implements ScalarTypeArray { +public class ScalarTypeArraySet extends ScalarTypeArrayBase> implements ScalarTypeArray { private static final ScalarTypeArraySet UUID = new ScalarTypeArraySet<>("uuid", DocPropertyType.UUID, ArrayElementConverter.UUID); private static final ScalarTypeArraySet LONG = new ScalarTypeArraySet<>("bigint", DocPropertyType.LONG, ArrayElementConverter.LONG); @@ -100,7 +99,8 @@ public class ScalarTypeArraySet extends ScalarTypeJsonCollection> impl return arrayType + "[]"; } - private Set fromArray(Object[] array1) { + @Override + protected Set fromArray(Object[] array1) { Set set = new LinkedHashSet<>(); for (Object element : array1) { set.add(converter.toElement(element)); @@ -112,16 +112,6 @@ public class ScalarTypeArraySet extends ScalarTypeJsonCollection> impl return converter.toDbArray(value.toArray()); } - @Override - public Set read(DataReader reader) throws SQLException { - Array array = reader.getArray(); - if (array == null) { - return null; - } else { - return fromArray((Object[]) array.getArray()); - } - } - @Override public void bind(DataBind bind, Set value) throws SQLException { if (value == null) {