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