From 3d62f58930671cfae3be47c66fce8128e9f38109 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Wed, 28 Oct 2015 08:53:14 +1300 Subject: [PATCH] #439 - @EnumValue("01") stored as integer rather than string - ENum stores strings as numerics? --- .../server/type/DefaultTypeManager.java | 13 +++++-- .../server/type/DefaultTypeManagerTest.java | 35 +++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/avaje/ebeaninternal/server/type/DefaultTypeManagerTest.java diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java b/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java index ea1a7ee47..149be0069 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java @@ -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. *

diff --git a/src/test/java/com/avaje/ebeaninternal/server/type/DefaultTypeManagerTest.java b/src/test/java/com/avaje/ebeaninternal/server/type/DefaultTypeManagerTest.java new file mode 100644 index 000000000..b61d8524d --- /dev/null +++ b/src/test/java/com/avaje/ebeaninternal/server/type/DefaultTypeManagerTest.java @@ -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")); + } + +} \ No newline at end of file