in fastmodel-transform/fastmodel-transform-api/src/main/java/com/aliyun/fastmodel/transform/api/domain/factory/impl/TableDomainFactory.java [56:121]
private TableDataModel toTableDataModel(CreateTable createTableStatement) {
TableDataModel dataModel = new TableDataModel();
dataModel.setDatabase(createTableStatement.getBusinessUnit());
dataModel.setTableCode(createTableStatement.getIdentifier());
String aliasedNameValue = createTableStatement.getAliasedNameValue();
dataModel.setTableName(aliasedNameValue);
Comment comment = createTableStatement.getComment();
dataModel.setComment(comment != null ? comment.getComment() : null);
dataModel.setTblProperties(PropertyUtil.toMap(createTableStatement.getProperties()));
dataModel.setTableType(createTableStatement.getTableType());
List<ColumnDefinition> columnDefines = createTableStatement.getColumnDefines();
Map<String, ColDataModel> map = new LinkedHashMap<>();
List<ColDataModel> all = Lists.newArrayList();
if (!createTableStatement.isColumnEmpty()) {
List<ColDataModel> list = getColDataModels(columnDefines,
map);
all.addAll(list);
}
if (!createTableStatement.isPartitionEmpty()) {
List<ColDataModel> list = getColDataModels(createTableStatement.getPartitionedBy().getColumnDefinitions(),
map);
list.stream().forEach(c -> {
c.setIsPartitionKey(true);
});
all.addAll(list);
}
dataModel.setCols(all);
List<BaseConstraint> constraintStatements = createTableStatement.getConstraintStatements();
List<ConstraintDataModel> constraintDataModels = new ArrayList<>();
if (createTableStatement.isConstraintEmpty()) {return dataModel;}
for (BaseConstraint baseConstraint : constraintStatements) {
if (baseConstraint instanceof PrimaryConstraint) {
PrimaryConstraint primaryConstraintStatement
= (PrimaryConstraint)baseConstraint;
List<String> colNames = primaryConstraintStatement.getColNames().stream().map(Identifier::getValue)
.collect(
Collectors.toList());
for (String col : colNames) {
map.get(col).setPrimaryKey(true);
}
}
if (baseConstraint instanceof DimConstraint) {
DimConstraint dimConstraintStatement = (DimConstraint)baseConstraint;
String identifier = createTableStatement.getIdentifier();
List<Identifier> colNames = dimConstraintStatement.getColNames();
QualifiedName right = dimConstraintStatement.getReferenceTable();
List<Identifier> referenceColNames = dimConstraintStatement.getReferenceColNames();
if (CollectionUtils.isNotEmpty(colNames)) {
List<ConstraintDataModel> collect = IntStream.range(0, colNames.size())
.mapToObj(x -> {
Identifier identifier1 = colNames.get(x);
Identifier identifier2 = referenceColNames.get(x);
return getConstraintDataModel(identifier, right,
identifier1, identifier2);
}).collect(Collectors.toList());
constraintDataModels.addAll(collect);
} else {
ConstraintDataModel constraintDataModel = getConstraintDataModel(identifier,
dimConstraintStatement.getReferenceTable(), null, null);
constraintDataModels.add(constraintDataModel);
}
}
}
dataModel.setConstraints(constraintDataModels);
return dataModel;
}