[jOOQ/jOOQ#9864] Add parser support

This commit is contained in:
Lukas Eder 2021-11-03 18:01:22 +01:00
parent 516e87556c
commit 91a25a5c1d

View File

@ -4197,6 +4197,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
List<Index> indexes = new ArrayList<>();
boolean primary = false;
boolean identity = false;
boolean readonly = false;
// Three valued boolean:
// null: Possibly CTAS
@ -4278,7 +4279,8 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
!TRUE.equals(ctas) ? parseDataType() : SQLDataType.OTHER,
constraints,
primary,
identity
identity,
readonly
);
primary = inlineConstraints.primary;
@ -4490,14 +4492,15 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
return storageStep;
}
private static final /* record */ class ParseInlineConstraints { private final DataType<?> type; private final Comment fieldComment; private final boolean primary; private final boolean identity; public ParseInlineConstraints(DataType<?> type, Comment fieldComment, boolean primary, boolean identity) { this.type = type; this.fieldComment = fieldComment; this.primary = primary; this.identity = identity; } public DataType<?> type() { return type; } public Comment fieldComment() { return fieldComment; } public boolean primary() { return primary; } public boolean identity() { return identity; } @Override public boolean equals(Object o) { if (!(o instanceof ParseInlineConstraints)) return false; ParseInlineConstraints other = (ParseInlineConstraints) o; if (!java.util.Objects.equals(this.type, other.type)) return false; if (!java.util.Objects.equals(this.fieldComment, other.fieldComment)) return false; if (!java.util.Objects.equals(this.primary, other.primary)) return false; if (!java.util.Objects.equals(this.identity, other.identity)) return false; return true; } @Override public int hashCode() { return java.util.Objects.hash(this.type, this.fieldComment, this.primary, this.identity); } @Override public String toString() { return new StringBuilder("ParseInlineConstraints[").append("type=").append(this.type).append(", fieldComment=").append(this.fieldComment).append(", primary=").append(this.primary).append(", identity=").append(this.identity).append("]").toString(); } }
private static final /* record */ class ParseInlineConstraints { private final DataType<?> type; private final Comment fieldComment; private final boolean primary; private final boolean identity; private final boolean readonly; public ParseInlineConstraints(DataType<?> type, Comment fieldComment, boolean primary, boolean identity, boolean readonly) { this.type = type; this.fieldComment = fieldComment; this.primary = primary; this.identity = identity; this.readonly = readonly; } public DataType<?> type() { return type; } public Comment fieldComment() { return fieldComment; } public boolean primary() { return primary; } public boolean identity() { return identity; } public boolean readonly() { return readonly; } @Override public boolean equals(Object o) { if (!(o instanceof ParseInlineConstraints)) return false; ParseInlineConstraints other = (ParseInlineConstraints) o; if (!java.util.Objects.equals(this.type, other.type)) return false; if (!java.util.Objects.equals(this.fieldComment, other.fieldComment)) return false; if (!java.util.Objects.equals(this.primary, other.primary)) return false; if (!java.util.Objects.equals(this.identity, other.identity)) return false; if (!java.util.Objects.equals(this.readonly, other.readonly)) return false; return true; } @Override public int hashCode() { return java.util.Objects.hash(this.type, this.fieldComment, this.primary, this.identity, this.readonly); } @Override public String toString() { return new StringBuilder("ParseInlineConstraints[").append("type=").append(this.type).append(", fieldComment=").append(this.fieldComment).append(", primary=").append(this.primary).append(", identity=").append(this.identity).append(", readonly=").append(this.readonly).append("]").toString(); } }
private final ParseInlineConstraints parseInlineConstraints(
Name fieldName,
DataType<?> type,
List<? super Constraint> constraints,
boolean primary,
boolean identity
boolean identity,
boolean readonly
) {
boolean nullable = false;
boolean defaultValue = false;
@ -4507,6 +4510,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
Comment fieldComment = null;
identity |= type.identity();
readonly |= type.readonly();
for (;;) {
if (!nullable) {
@ -4535,6 +4539,12 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
defaultValue = true;
identity = true;
continue;
}
else if (parseKeywordIf("READONLY") && requireProEdition()) {
}
else if (parseKeywordIf("DEFAULT")) {
@ -4707,7 +4717,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
break;
}
return new ParseInlineConstraints(type, fieldComment, primary, identity);
return new ParseInlineConstraints(type, fieldComment, primary, identity, readonly);
}
private final boolean parseSerialIf() {
@ -5185,7 +5195,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
DataType type = parseDataType();
int p = list == null ? -1 : list.size();
ParseInlineConstraints inline = parseInlineConstraints(fieldName, type, list, false, false);
ParseInlineConstraints inline = parseInlineConstraints(fieldName, type, list, false, false, false);
Field<?> result = field(fieldName, inline.type, inline.fieldComment);
if (list != null)