diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 318513668d..06189e3711 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -3146,7 +3146,19 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { ; - else if (parseKeywordIf("TYPE")) + else if (parseKeywordIf("TYPE")) { + + + + + + + + + + + + return parseCascadeRestrictIf( parseIfExists(this::parseIdentifiers, n -> dsl.dropTypeIfExists(n.toArray(EMPTY_NAME)), @@ -3155,6 +3167,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { DropTypeStep::cascade, DropTypeStep::restrict ); + } else if (parseKeywordIf("TABLESPACE")) throw notImplemented("DROP TABLESPACE"); @@ -5115,28 +5128,34 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { private final DDLQuery parseCreateType() { Name name = parseName(); - parseKeyword("AS"); - if (parseKeywordIf("ENUM")) { - List values; - parse('('); + if (parseKeywordIf("AS")) { + if (parseKeywordIf("ENUM")) { + List values; + parse('('); - if (!parseIf(')')) { - values = parseList(',', ParseContext::parseStringLiteral); - parse(')'); + if (!parseIf(')')) { + values = parseList(',', ParseContext::parseStringLiteral); + parse(')'); + } + else + values = new ArrayList<>(); + + return dsl.createType(name).asEnum(values.toArray(EMPTY_STRING)); + } + else { + parseKeywordIf("OBJECT"); + parse('('); + List> fields = parseList(',', ctx -> DSL.field(parseIdentifier(), parseDataType())); + parse(')'); + return dsl.createType(name).as(fields); } - else - values = new ArrayList<>(); - - return dsl.createType(name).asEnum(values.toArray(EMPTY_STRING)); } - else { - parseKeywordIf("OBJECT"); - parse('('); - List> fields = parseList(',', ctx -> DSL.field(parseIdentifier(), parseDataType())); - parse(')'); - return dsl.createType(name).as(fields); + else if (parseKeywordIf("FROM")) { + return dsl.createDomain(name).as(parseDataType()); } + else + throw expected("AS", "FROM"); } private final Index parseIndexSpecification(Table table) {