Support @DbArray of BigDecimal

This commit is contained in:
Rob Bygrave committed 2022-02-02 21:57:39 +13:00
1 parent 9d506b4397
commit 57f6668b37
6 files changed
+61 -34

No files matched your search

@@ -1,7 +1,9 @@
package io.ebeaninternal.server.type;
import io.ebean.core.type.ScalarType;
import io.ebeaninternal.server.core.BasicTypeConverter;
import java.math.BigDecimal;
import java.util.UUID;
/**
@@ -48,6 +50,8 @@ interface ArrayElementConverter<T> {
*/
ArrayElementConverter<Double> DOUBLE = new DoubleConverter();
ArrayElementConverter<BigDecimal> BIG_DECIMAL = new BigDecimalConverter();
class LongConverter implements ArrayElementConverter<Long> {
@Override
@@ -99,6 +103,23 @@ interface ArrayElementConverter<T> {
}
}
class BigDecimalConverter implements ArrayElementConverter<BigDecimal> {
@Override
public BigDecimal fromSerialized(Object rawValue) {
return fromDbArray(rawValue);
}
@Override
public BigDecimal fromDbArray(Object rawValue) {
if (rawValue instanceof BigDecimal) {
return (BigDecimal) rawValue;
} else {
return BasicTypeConverter.toBigDecimal(rawValue);
}
}
}
/**
* String converter (noop based).
*/
@@ -13,6 +13,7 @@ import io.ebeaninternal.json.ModifyAwareList;
import javax.persistence.PersistenceException;
import java.io.IOException;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
@@ -59,6 +60,9 @@ class ScalarTypeArrayList extends ScalarTypeArrayBase<List> implements ScalarTyp
if (valueType.equals(Double.class)) {
return cache.computeIfAbsent(key, s -> new ScalarTypeArrayList(nullable, "float", DocPropertyType.DOUBLE, ArrayElementConverter.DOUBLE));
}
if (valueType.equals(BigDecimal.class)) {
return cache.computeIfAbsent(key, s -> new ScalarTypeArrayList(nullable, "decimal", DocPropertyType.DOUBLE, ArrayElementConverter.BIG_DECIMAL));
}
if (valueType.equals(String.class)) {
return cache.computeIfAbsent(key, s -> new ScalarTypeArrayList(nullable, "varchar", DocPropertyType.TEXT, ArrayElementConverter.STRING));
}
@@ -5,6 +5,7 @@ import io.ebean.core.type.DocPropertyType;
import io.ebean.core.type.ScalarType;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.sql.Types;
import java.util.HashMap;
@@ -50,6 +51,9 @@ final class ScalarTypeArrayListH2 extends ScalarTypeArrayList {
if (valueType.equals(Double.class)) {
return cache.computeIfAbsent(key, s -> new ScalarTypeArrayListH2(nullable, "float", DocPropertyType.DOUBLE, ArrayElementConverter.DOUBLE));
}
if (valueType.equals(BigDecimal.class)) {
return cache.computeIfAbsent(key, s -> new ScalarTypeArrayListH2(nullable, "float", DocPropertyType.DOUBLE, ArrayElementConverter.BIG_DECIMAL));
}
if (valueType.equals(String.class)) {
return cache.computeIfAbsent(key, s -> new ScalarTypeArrayListH2(nullable, "varchar", DocPropertyType.TEXT, ArrayElementConverter.STRING));
}