[jOOQ/jOOQ#9661] Support parsing MySQL's unnamed constraint syntax

This commit is contained in:
Lukas Eder 2019-12-11 13:33:50 +01:00
parent 83fb81f927
commit a471e023d1

View File

@ -3194,11 +3194,9 @@ final class ParserImpl implements Parser {
columnLoop:
do {
ConstraintTypeStep constraint = null;
int position = ctx.position();
if (parseKeywordIf(ctx, "CONSTRAINT"))
constraint = constraint(parseIdentifier(ctx));
ConstraintTypeStep constraint = parseConstraintNameSpecification(ctx);
if (parsePrimaryKeyClusteredNonClusteredKeywordIf(ctx)) {
if (primary)
@ -3605,9 +3603,7 @@ final class ParserImpl implements Parser {
}
}
ConstraintTypeStep inlineConstraint = null;
if (parseKeywordIf(ctx, "CONSTRAINT"))
inlineConstraint = constraint(parseIdentifier(ctx));
ConstraintTypeStep inlineConstraint = parseConstraintNameSpecification(ctx);
if (!unique) {
if (!primary && parsePrimaryKeyClusteredNonClusteredKeywordIf(ctx)) {
@ -4069,11 +4065,7 @@ final class ParserImpl implements Parser {
}
private static final void parseAlterTableAddFieldsOrConstraints(ParserContext ctx, List<FieldOrConstraint> list) {
ConstraintTypeStep constraint = null;
if (parseKeywordIf(ctx, "CONSTRAINT"))
if (!peekKeyword(ctx, "PRIMARY KEY", "UNIQUE", "FOREIGN KEY", "CHECK"))
constraint = constraint(parseIdentifier(ctx));
ConstraintTypeStep constraint = parseConstraintNameSpecification(ctx);
if (parsePrimaryKeyClusteredNonClusteredKeywordIf(ctx))
list.add(parsePrimaryKeySpecification(ctx, constraint));
@ -4089,6 +4081,13 @@ final class ParserImpl implements Parser {
parseAlterTableAddField(ctx, list);
}
private static final ConstraintTypeStep parseConstraintNameSpecification(ParserContext ctx) {
if (parseKeywordIf(ctx, "CONSTRAINT") && !peekKeyword(ctx, "PRIMARY KEY", "UNIQUE", "FOREIGN KEY", "CHECK"))
return constraint(parseIdentifier(ctx));
return null;
}
private static final Field<?> parseAlterTableAddField(ParserContext ctx, List<FieldOrConstraint> list) {
// The below code is taken from CREATE TABLE, with minor modifications as