public Node visitCreateTableStatement()

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