From 2d8ae08b5e07eb47f4d76685618acb1ee72d6960 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Wed, 10 Jan 2018 14:56:27 +0100 Subject: [PATCH] [#6485] [#7017] Parse MySQL ENUM and SET types (as VARCHAR) --- .../main/java/org/jooq/impl/ParserImpl.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 68a3bcf0a1..b073bbc080 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -5402,6 +5402,13 @@ final class ParserImpl implements Parser { else throw ctx.unexpectedToken(); + case 'e': + case 'E': + if (parseKeywordIf(ctx, "ENUM")) + return parseDataTypeEnum(ctx); + else + throw ctx.unexpectedToken(); + case 'f': case 'F': if (parseKeywordIf(ctx, "FLOAT")) @@ -5475,6 +5482,8 @@ final class ParserImpl implements Parser { return SQLDataType.INTEGER.identity(true); else if (parseKeywordIf(ctx, "SERIAL8")) return SQLDataType.BIGINT.identity(true); + else if (parseKeywordIf(ctx, "SET")) + return parseDataTypeEnum(ctx); else if (parseKeywordIf(ctx, "SMALLINT UNSIGNED")) return SQLDataType.SMALLINTUNSIGNED; else if (parseKeywordIf(ctx, "SMALLINT")) @@ -5559,6 +5568,19 @@ final class ParserImpl implements Parser { return result; } + private static final DataType parseDataTypeEnum(ParserContext ctx) { + parse(ctx, '('); + List literals = new ArrayList(); + + do { + literals.add(parseStringLiteral(ctx)); + } + while (parseIf(ctx, ',')); + + parse(ctx, ')'); + return SQLDataType.VARCHAR; + } + // ----------------------------------------------------------------------------------------------------------------- // Literal parsing // -----------------------------------------------------------------------------------------------------------------