diff --git a/jOOQ-test/src/org/jooq/test/jOOQMySQLTest.java b/jOOQ-test/src/org/jooq/test/jOOQMySQLTest.java index 8f2f5451bd..caba42e7fe 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQMySQLTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQMySQLTest.java @@ -36,6 +36,7 @@ package org.jooq.test; +import static junit.framework.Assert.assertNull; import static org.jooq.impl.Factory.val; import static org.jooq.test.mysql.generatedclasses.Tables.T_BOOK_TO_BOOK_STORE; import static org.jooq.test.mysql.generatedclasses.Tables.T_IDENTITY_PK; @@ -75,6 +76,7 @@ import org.jooq.UpdatableTable; import org.jooq.conf.Settings; import org.jooq.test.mysql.generatedclasses.Routines; import org.jooq.test.mysql.generatedclasses.TestFactory; +import org.jooq.test.mysql.generatedclasses.enums.TBookStatus; import org.jooq.test.mysql.generatedclasses.enums.T_959JavaKeywords; import org.jooq.test.mysql.generatedclasses.tables.TAuthor; import org.jooq.test.mysql.generatedclasses.tables.TBook; @@ -728,4 +730,14 @@ public class jOOQMySQLTest extends jOOQAbstractTest< assertEquals(T_959JavaKeywords.class_, result.get(1)); assertEquals(T_959JavaKeywords.public_, result.get(2)); } + + @Test + public void testMySQLEnumIndex() throws Exception { + assertNull(MySQLFactory.enumType(TBookStatus.class, -1)); + assertNull(MySQLFactory.enumType(TBookStatus.class, 0)); + assertEquals(TBookStatus.SOLD_OUT, MySQLFactory.enumType(TBookStatus.class, 1)); + assertEquals(TBookStatus.ORDERED, MySQLFactory.enumType(TBookStatus.class, 2)); + assertEquals(TBookStatus.ON_STOCK, MySQLFactory.enumType(TBookStatus.class, 3)); + assertNull(MySQLFactory.enumType(TBookStatus.class, 4)); + } } diff --git a/jOOQ/src/main/java/org/jooq/util/mysql/MySQLFactory.java b/jOOQ/src/main/java/org/jooq/util/mysql/MySQLFactory.java index b8bd7823ee..d3a90e50fc 100644 --- a/jOOQ/src/main/java/org/jooq/util/mysql/MySQLFactory.java +++ b/jOOQ/src/main/java/org/jooq/util/mysql/MySQLFactory.java @@ -37,6 +37,7 @@ package org.jooq.util.mysql; import java.sql.Connection; +import org.jooq.EnumType; import org.jooq.Field; import org.jooq.SQLDialect; import org.jooq.SchemaMapping; @@ -310,4 +311,58 @@ public class MySQLFactory extends Factory { public static Field password(Field string) { return function("password", String.class, string); } + + // ------------------------------------------------------------------------- + // Other utilities + // ------------------------------------------------------------------------- + + /** + * Get a field based {@link EnumType} by its MySQL-specific index + *

+ * If your MySQL enum type contains these three values: A, B, C + * , then this will be the mapping of indexes to values: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Enum literal as in {@link Enum#name()}Enum ordinal as in {@link Enum#ordinal()}MySQL index
null-0
A01
B12
C23
+ *

+ * See dev.mysql.com/doc/ + * refman/5.5/en/enum.html for more details about MySQL enum types + */ + public static & org.jooq.EnumType> E enumType(Class type, int index) { + if (index <= 0) { + return null; + } + + E[] values = type.getEnumConstants(); + if (index > values.length) { + return null; + } + + return values[index - 1]; + } }