in fastmodel-transform/fastmodel-transform-starrocks/src/main/java/com/aliyun/fastmodel/transform/starrocks/parser/visitor/StarRocksAstBuilder.java [182:241]
public Node visitCreateTableStatement(CreateTableStatementContext ctx) {
// table name
QualifiedNameContext qualifiedNameContext = ctx.qualifiedName();
QualifiedName qualifiedName = (QualifiedName)visit(qualifiedNameContext);
// comment
CommentContext comment = ctx.comment();
Optional<Comment> tableComment = ParserHelper.visitIfPresent(this, comment, Comment.class);
//columns
List<ColumnDefinition> columns = ParserHelper.visit(this, ctx.columnDesc(), ColumnDefinition.class);
//index
List<TableIndex> listTableIndex = ParserHelper.visit(this, ctx.indexDesc(), TableIndex.class);
//constraint
Optional<BaseConstraint> list = ParserHelper.visitIfPresent(this, ctx.keyDesc(), BaseConstraint.class);
List<BaseConstraint> constraints = Lists.newArrayList();
list.ifPresent(constraints::add);
//distribute key constraint
if (ctx.distributionDesc() != null) {
DistributeNonKeyConstraint distributeKeyConstraint = (DistributeNonKeyConstraint)visit(ctx.distributionDesc());
constraints.add(distributeKeyConstraint);
}
//rollup_index
if (ctx.rollupDesc() != null) {
RollupNonKeyConstraint rollupConstraint = (RollupNonKeyConstraint)visit(ctx.rollupDesc());
constraints.add(rollupConstraint);
}
//order by constraint
if (ctx.orderByDesc() != null) {
OrderByNonKeyConstraint orderByConstraint = (OrderByNonKeyConstraint)visit(ctx.orderByDesc());
constraints.add(orderByConstraint);
}
PropertiesContext properties = ctx.properties();
List<Property> propertyList = Lists.newArrayList();
if (properties != null) {
propertyList = ParserHelper.visit(this, properties.property(), Property.class);
}
//extend properties
List<Property> extendProperties = toExtend(ctx);
List<Property> all = Lists.newArrayList();
if (propertyList != null) {
all.addAll(propertyList);
}
all.addAll(extendProperties);
//partition by
PartitionDescContext partitionDescContext = ctx.partitionDesc();
PartitionedBy partitionedBy = null;
if (partitionDescContext != null) {
partitionedBy = (PartitionedBy)visit(partitionDescContext);
}
return CreateTable.builder()
.tableName(qualifiedName)
.tableIndex(listTableIndex)
.columns(columns)
.constraints(constraints)
.comment(tableComment.orElse(null))
.properties(all)
.partition(partitionedBy)
.build();
}