[jOOQ/jOOQ#9864] Add parser support
This commit is contained in:
parent
516e87556c
commit
91a25a5c1d
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user