[#1448] Handle String to Enum conversion (when Java Enums are stored as

Strings in the database) - GitHub issue #15
This commit is contained in:
Lukas Eder 2012-05-24 18:09:42 +02:00
parent afb96537c8
commit e1d83c3dfd
2 changed files with 21 additions and 3 deletions

View File

@ -83,6 +83,8 @@ import org.jooq.UpdatableRecord;
import org.jooq.impl.SQLDataType;
import org.jooq.test.BaseTest;
import org.jooq.test.jOOQAbstractTest;
import org.jooq.test._.converters.Boolean_YES_NO_LC;
import org.jooq.test._.converters.Boolean_YES_NO_UC;
import org.jooq.tools.unsigned.UByte;
import org.jooq.tools.unsigned.UInteger;
import org.jooq.tools.unsigned.ULong;
@ -1102,6 +1104,17 @@ extends BaseTest<A, AP, B, S, B2S, BS, L, X, DATE, BOOL, D, T, U, I, IPK, T658,
assertEquals('1', (char) author2.getValue(TAuthor_ID(), char.class));
assertEquals('a', (char) author2.getValue(TAuthor_LAST_NAME(), Character.class));
assertEquals('a', (char) author2.getValue(TAuthor_LAST_NAME(), char.class));
// [#1448] Check conversion from String to Enum
Record record =
create().select(inline("YES"), inline("NO"))
.fetchOne();
assertEquals(Boolean_YES_NO_UC.YES, record.getValue(0, Boolean_YES_NO_UC.class));
assertEquals(Boolean_YES_NO_UC.NO, record.getValue(1, Boolean_YES_NO_UC.class));
assertNull(record.getValue(0, Boolean_YES_NO_LC.class));
assertNull(record.getValue(1, Boolean_YES_NO_LC.class));
}
@Test

View File

@ -517,11 +517,16 @@ public final class Convert {
return toDate((Long) from, toClass);
}
// [#1448] Some users may find it useful to convert string
// literals to Enum values without a Converter
else if ((fromClass == String.class) && java.lang.Enum.class.isAssignableFrom(toClass)) {
try {
return java.lang.Enum.valueOf(toClass, (String) from);
} catch (java.lang.IllegalArgumentException e) {
throw fail(from, toClass);
@SuppressWarnings("rawtypes")
Class raw = toClass;
return (U) java.lang.Enum.valueOf(raw, (String) from);
}
catch (java.lang.IllegalArgumentException e) {
return null;
}
}
}