#439 - @EnumValue("01") stored as integer rather than string - ENum stores strings as numerics?

This commit is contained in:
Robin Bygrave
2015-10-28 08:53:14 +13:00
parent a30948d38d
commit 3d62f58930
2 changed files with 46 additions and 2 deletions
@@ -419,8 +419,10 @@ public final class DefaultTypeManager implements TypeManager, KnownImmutable {
return value;
}
@SuppressWarnings("ResultOfMethodCallIgnored")
private boolean isIntegerType(String s) {
protected boolean isIntegerType(String s) {
if (isLeadingZeros(s)) {
return false;
}
try {
Integer.parseInt(s);
return true;
@@ -429,6 +431,13 @@ public final class DefaultTypeManager implements TypeManager, KnownImmutable {
}
}
/**
* Treat leading zeros as a non-integer for enum values.
*/
private boolean isLeadingZeros(String s) {
return s.length() > 1 && s.charAt(0) == '0';
}
/**
* Create the Mapping of Enum fields to DB values using EnumValue annotations.
* <p>
@@ -0,0 +1,35 @@
package com.avaje.ebeaninternal.server.type;
import com.avaje.ebean.config.ServerConfig;
import com.avaje.ebean.config.dbplatform.PostgresPlatform;
import com.avaje.ebeaninternal.server.core.BootupClasses;
import org.junit.Test;
import static org.junit.Assert.*;
public class DefaultTypeManagerTest {
DefaultTypeManager typeManager;
public DefaultTypeManagerTest() {
ServerConfig serverConfig = new ServerConfig();
serverConfig.setDatabasePlatform(new PostgresPlatform());
BootupClasses bootupClasses = new BootupClasses();
typeManager = new DefaultTypeManager(serverConfig, bootupClasses);
}
@Test
public void isIntegerType() {
assertTrue(typeManager.isIntegerType("1"));
assertTrue(typeManager.isIntegerType("0"));
assertFalse(typeManager.isIntegerType("A"));
assertFalse(typeManager.isIntegerType("01"));
assertFalse(typeManager.isIntegerType(" 01"));
assertFalse(typeManager.isIntegerType(" 0"));
assertFalse(typeManager.isIntegerType(" 1"));
assertFalse(typeManager.isIntegerType(" A"));
}
}