public Node visitCreate_table_stmt()

in fastmodel-transform/fastmodel-transform-sqlite/src/main/java/com/aliyun/fastmodel/transform/sqlite/parser/visitor/SqliteAstBuilder.java [89:135]


    public Node visitCreate_table_stmt(Create_table_stmtContext ctx) {
        //由用户指定路由的context的key内容

        Optional<Identifier> schemaName = ParserHelper.visitIfPresent(this, ctx.schema_name(), Identifier.class);
        Optional<Identifier> identifier = ParserHelper.visitIfPresent(this, ctx.table_name(), Identifier.class);
        QualifiedName t = null;
        if (schemaName.isPresent()) {
            t = QualifiedName.of(Lists.newArrayList(schemaName.get(), identifier.get()));
        } else {
            t = QualifiedName.of(Lists.newArrayList(identifier.get()));
        }
        List<BaseConstraint> constraints = new ArrayList<>();
        //all columns
        List<ColumnDefinition> columnDefinitions = ImmutableList.of();
        if (ctx.column_def() != null) {
            columnDefinitions = ParserHelper.visit(this, ctx.column_def(), ColumnDefinition.class);
        }
        //if primary constraint not exist
        if (ctx.table_constraint() != null) {
            constraints = ParserHelper.visit(this, ctx.table_constraint(), BaseConstraint.class);
        }
        boolean ifNotExist = ctx.IF_() != null && ctx.NOT_() != null;
        TableBuilder tableBuilder = null;
        TableDetailType tableDetailType = context.getReverseTableType();
        if (tableDetailType == null) {
            tableBuilder = CreateTable.builder();
        } else {
            if (tableDetailType.getParent() == TableType.ODS) {
                tableBuilder = CreateOdsTable.builder();
            } else if (tableDetailType.getParent() == TableType.DIM) {
                tableBuilder = CreateDimTable.builder();
            } else if (tableDetailType.getParent() == TableType.FACT) {
                tableBuilder = CreateFactTable.builder();
            } else if (tableDetailType.getParent() == TableType.DWS) {
                tableBuilder = CreateDwsTable.builder();
            } else if (tableDetailType.getParent() == TableType.ADS) {
                tableBuilder = CreateAdsTable.builder();
            }
        }
        return tableBuilder
            .tableName(t)
            .detailType(tableDetailType)
            .ifNotExist(ifNotExist)
            .columns(columnDefinitions)
            .constraints(constraints)
            .build();
    }