public void builderColumns()

in fastmodel-parser/src/main/java/com/aliyun/fastmodel/parser/visitor/param/TableParamObject.java [60:110]


    public void builderColumns(CreateTableStatementContext ctx, AstBuilder astBuilder) {
        Map<Identifier, ColumnDefinition> map = new HashMap<>(getColumnDefines().size());
        for (ColumnDefinition c : getPartitionColumnDefines()) {
            map.put(c.getColName(), c);
        }
        ColumnNameTypeOrConstraintListContext columnNameTypeOrConstraintListContext = ctx
            .columnNameTypeOrConstraintList();
        if (columnNameTypeOrConstraintListContext == null) {
            return;
        }
        List<ColumnNameTypeOrConstraintContext> columnNameTypeOrConstraintContexts
            = columnNameTypeOrConstraintListContext.columnNameTypeOrConstraint();
        for (ColumnNameTypeOrConstraintContext context : columnNameTypeOrConstraintContexts) {
            ColumnDefinitionContext columnDefinitionContext = context.columnDefinition();
            if (columnDefinitionContext != null) {
                ColumnDefinition define = (ColumnDefinition)astBuilder.visit(columnDefinitionContext);
                getColumnDefines().add(define);
                map.put(define.getColName(), define);
                //如果是主键的约束,也加到tableConstraint的list里面
                if (BooleanUtils.isTrue(define.getPrimary())) {
                    getConstraints().add(
                        new PrimaryConstraint(IdentifierUtil.sysIdentifier(), ImmutableList.of(define.getColName())));
                }
            }
            if (context.tableConstraint() != null) {
                BaseConstraint baseConstraint = (BaseConstraint)astBuilder.visit(context.tableConstraint());
                getConstraints().add(baseConstraint);
            }
            if (context.tableIndex() != null) {
                TableIndex tableIndex = (TableIndex)astBuilder.visit(context.tableIndex());
                tableIndexList.add(tableIndex);
            }
        }
        for (BaseConstraint baseConstraint : getConstraints()) {
            if (!(baseConstraint instanceof PrimaryConstraint)) {
                continue;
            }
            PrimaryConstraint primaryConstraint = (PrimaryConstraint)baseConstraint;
            List<Identifier> colNames = primaryConstraint.getColNames();
            for (Identifier identifier : colNames) {
                ColumnDefinition columnDefinition = map.get(identifier);
                if (columnDefinition == null) {
                    throw new SemanticException(SemanticErrorCode.TABLE_CONSTRAINT_COL_MUST_EXIST,
                        String.format("column [%s] not exists", identifier.getValue()));
                }
                if (BooleanUtils.isNotTrue(columnDefinition.getNotNull())) {
                    columnDefinition.setNotNull(true);
                }
            }
        }
    }