in fastmodel-parser/src/main/java/com/aliyun/fastmodel/parser/AstBuilder.java [581:635]
public Node visitColumnDefinition(ColumnDefinitionContext ctx) {
Boolean primary = null;
//不设置的话,默认就是false
Boolean notNull = null;
if (ctx.columnConstraintType() != null) {
List<ColumnConstraintTypeContext> columnConstraintTypeContexts = ctx.columnConstraintType();
for (ColumnConstraintTypeContext c : columnConstraintTypeContexts) {
if (c.KW_PRIMARY() != null) {
//如果是主键,那么notNull同时不为空
primary = true;
notNull = true;
}
if (c.KW_NOT() != null) {
notNull = true;
}
}
}
BaseLiteral baseLiteral = visitIfPresent(ctx.defaultValue(), BaseLiteral.class).orElse(null);
ColumnCategory category = ColumnCategory.ATTRIBUTE;
if (ctx.category() != null) {
category = ColumnCategory.getByCode(ctx.category().getText());
}
List<Property> properties = ImmutableList.of();
if (ctx.tableProperties() != null) {
properties = visit(ctx.tableProperties().keyValueProperty(), Property.class);
}
AliasedName aliasedName = visitIfPresent(ctx.alias(), AliasedName.class).orElse(null);
ReferencesObjectsContext referencesObjectsContext = ctx.referencesObjects();
List<Identifier> indicators = ImmutableList.of();
QualifiedName refDimensions = null;
if (referencesObjectsContext != null) {
ReferenceColumnListContext referenceColumnListContext = referencesObjectsContext.referenceColumnList();
if (referenceColumnListContext != null) {
indicators =
visit(referenceColumnListContext.columnParenthesesList().columnNameList().columnName(),
Identifier.class);
} else {
refDimensions = getQualifiedName(referencesObjectsContext.qualifiedName());
}
}
Comment comment = ctx.comment() != null ? (Comment)visit(ctx.comment()) : null;
return ColumnDefinition.builder().colName(
(Identifier)visit(ctx.identifier()))
.aliasedName(aliasedName).dataType((BaseDataType)visit(ctx.colType()))
.comment(comment)
.primary(primary)
.notNull(notNull)
.defaultValue(baseLiteral)
.category(category)
.properties(properties)
.refDimension(refDimensions)
.refIndicators(indicators)
.build();
}