in fastmodel-parser/src/main/java/com/aliyun/fastmodel/parser/visitor/TableVisitor.java [116:171]
public Node visitCreateTableStatement(CreateTableStatementContext ctx) {
List<ColumnDefinition> columnDefines = new ArrayList<>();
PartitionedBy partitionedBy = null;
if (ctx.tablePartition() != null) {
List<ColumnDefinition> list = visit(
ctx.tablePartition().columnNameTypeOrConstraintList().columnNameTypeOrConstraint(),
ColumnDefinition.class);
partitionedBy = new PartitionedBy(list);
}
List<BaseConstraint> constraints = new ArrayList<>();
List<TableIndex> tableIndexList = new ArrayList<>();
TableParamObject tableParamObject = new TableParamObject(
partitionedBy != null ? partitionedBy.getColumnDefinitions() : ImmutableList.of(),
columnDefines, constraints, tableIndexList);
tableParamObject.builderColumns(ctx, this);
QualifiedName tableName = getQualifiedName(ctx.tableName());
List<Property> properties = getProperties(ctx.setProperties());
Comment comment = visitIfPresent(ctx.comment(), Comment.class).orElse(null);
AliasedName aliasedName = visitIfPresent(ctx.alias(), AliasedName.class).orElse(null);
boolean notExists = ctx.ifNotExists() != null;
TableDetailType tableDetailType = getDetailType(ctx.tableType());
TableType parent = tableDetailType != null ? tableDetailType.getParent() : null;
boolean replace = ctx.replace() != null;
//if like define use
LikeTablePredicateContext likeTablePredicateContext = ctx.likeTablePredicate();
if (likeTablePredicateContext != null) {
QualifiedName sourceTableName = getQualifiedName(likeTablePredicateContext.tableName());
return new CloneTable(
CreateElement.builder()
.qualifiedName(tableName)
.notExists(notExists)
.aliasedName(aliasedName)
.properties(properties)
.comment(comment)
.createOrReplace(replace)
.build(),
tableDetailType,
sourceTableName
);
}
CreateTable.TableBuilder<? extends TableBuilder> builder = getTableBuilder(parent);
return builder.tableName(tableName)
.detailType(tableDetailType)
.ifNotExist(notExists)
.columns(columnDefines)
.constraints(constraints)
.properties(properties)
.comment(comment)
.partition(partitionedBy)
.createOrReplace(replace)
.aliasedName(aliasedName)
.tableIndex(tableIndexList)
.build();
}