From 91a25a5c1d92efbee047c77ef28a46e3e779e42a Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 3 Nov 2021 18:01:22 +0100 Subject: [PATCH] [jOOQ/jOOQ#9864] Add parser support --- .../main/java/org/jooq/impl/ParserImpl.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 4bdf5e9935..576875429f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -4197,6 +4197,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { List 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 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)