public Node visitColumnDefinition()

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();

    }