diff --git a/plugins/org.jkiss.dbeaver.model.lsm/grammar/SQLStandardParser.g4 b/plugins/org.jkiss.dbeaver.model.lsm/grammar/SQLStandardParser.g4 index ab70c126db37..de34dc64f37b 100644 --- a/plugins/org.jkiss.dbeaver.model.lsm/grammar/SQLStandardParser.g4 +++ b/plugins/org.jkiss.dbeaver.model.lsm/grammar/SQLStandardParser.g4 @@ -119,11 +119,12 @@ intervalFractionalSecondsPrecision: UnsignedInteger; singleDatetimeField: (nonSecondDatetimeField (LeftParen intervalLeadingFieldPrecision RightParen)?|SECOND (LeftParen intervalLeadingFieldPrecision (Comma intervalFractionalSecondsPrecision)? RightParen)?); // column definition -columnDefinition: columnName dataType defaultClause? columnConstraintDefinition* anyWordWithAnyValue?; // why anyWordWithAnyValue? +columnDefinition: columnName dataType typeModifier* defaultClause? columnConstraintDefinition* anyWordWithAnyValue?; columnName: identifier; +typeModifier: actualIdentifier; // default -defaultClause: DEFAULT? valueExpression; +defaultClause: DEFAULT valueExpression; // column constraints columnConstraintDefinition: (constraintNameDefinition)? columnConstraint (constraintAttributes)?; diff --git a/plugins/org.jkiss.dbeaver.model.lsm/src/org/jkiss/dbeaver/model/stm/LSMInspections.java b/plugins/org.jkiss.dbeaver.model.lsm/src/org/jkiss/dbeaver/model/stm/LSMInspections.java index 2b1db7ae8d04..2f953dd081d5 100644 --- a/plugins/org.jkiss.dbeaver.model.lsm/src/org/jkiss/dbeaver/model/stm/LSMInspections.java +++ b/plugins/org.jkiss.dbeaver.model.lsm/src/org/jkiss/dbeaver/model/stm/LSMInspections.java @@ -134,7 +134,8 @@ public static Interval matchAnyWordHead(String str) { SQLStandardParser.RULE_aggregateExprParam, SQLStandardParser.RULE_anyWord, SQLStandardParser.RULE_correlationName, - SQLStandardParser.RULE_tableHintKeywords + SQLStandardParser.RULE_tableHintKeywords, + SQLStandardParser.RULE_typeModifier ); @NotNull @@ -312,7 +313,8 @@ private static void collectTokenPredictions( SQLStandardParser.RULE_anyWordWithAnyValue, SQLStandardParser.RULE_anyProperty, SQLStandardParser.RULE_anyWordsWithProperty, - SQLStandardParser.RULE_anyUnexpected + SQLStandardParser.RULE_anyUnexpected, + SQLStandardParser.RULE_typeModifier ); private static boolean isAnySomething(STMTreeNode node) { diff --git a/plugins/org.jkiss.dbeaver.model.lsm/src/org/jkiss/dbeaver/model/stm/STMKnownRuleNames.java b/plugins/org.jkiss.dbeaver.model.lsm/src/org/jkiss/dbeaver/model/stm/STMKnownRuleNames.java index 3c23ec951fd7..1cb16fdca084 100644 --- a/plugins/org.jkiss.dbeaver.model.lsm/src/org/jkiss/dbeaver/model/stm/STMKnownRuleNames.java +++ b/plugins/org.jkiss.dbeaver.model.lsm/src/org/jkiss/dbeaver/model/stm/STMKnownRuleNames.java @@ -63,6 +63,7 @@ public class STMKnownRuleNames { // column definition public static final String columnDefinition = SQLStandardParser.ruleNames[SQLStandardParser.RULE_columnDefinition]; public static final String columnName = SQLStandardParser.ruleNames[SQLStandardParser.RULE_columnName]; + public static final String typeModifier = SQLStandardParser.ruleNames[SQLStandardParser.RULE_typeModifier]; public static final String columnIndex = SQLStandardParser.ruleNames[SQLStandardParser.RULE_columnIndex]; // default diff --git a/plugins/org.jkiss.dbeaver.model.sql/src/org/jkiss/dbeaver/model/sql/semantics/model/ddl/SQLQueryColumnSpec.java b/plugins/org.jkiss.dbeaver.model.sql/src/org/jkiss/dbeaver/model/sql/semantics/model/ddl/SQLQueryColumnSpec.java index 0d41b74e2369..0ec53556dfe1 100644 --- a/plugins/org.jkiss.dbeaver.model.sql/src/org/jkiss/dbeaver/model/sql/semantics/model/ddl/SQLQueryColumnSpec.java +++ b/plugins/org.jkiss.dbeaver.model.sql/src/org/jkiss/dbeaver/model/sql/semantics/model/ddl/SQLQueryColumnSpec.java @@ -121,6 +121,11 @@ public static SQLQueryColumnSpec recognize(SQLQueryModelRecognizer recognizer, S .orElse(null); String typeName = Optional.ofNullable(node.findFirstChildOfName(STMKnownRuleNames.dataType)) .map(STMTreeNode::getTextContent).orElse(null); + for (STMTreeNode child : node.findChildrenOfName(STMKnownRuleNames.typeModifier)) { + if (typeName != null) { + typeName = typeName + " " + child.getTextContent(); + } + } STMTreeNode defaultValueNode = node.findFirstChildOfName(STMKnownRuleNames.defaultClause); SQLQueryValueExpression defaultValueExpr = defaultValueNode == null