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