in fastmodel-converter/fastmodel-converter-dqc/src/main/java/com/aliyun/fastmodel/conveter/dqc/BaseDqcStatementConverter.java [84:136]
public List<RuleDefinition> toRuleDefinition(CreateTable source, boolean enable, ConvertContext context) {
List<RuleDefinition> ruleDefinitions = new ArrayList<>();
/**
* 列上的约束,主要根据是否主键,以及数据字典的约束
* 默认都是弱规则,用于提醒,未来需要支持传入context参数处理
*/
Map<Identifier, ColumnDefinition> map = new HashMap<>(10);
if (!source.isColumnEmpty()) {
List<ColumnDefinition> columnDefines = source.getColumnDefines();
for (ColumnDefinition c : columnDefines) {
map.put(c.getColName(), c);
}
List<RuleDefinition> list = toRuleDefinition(columnDefines, enable, context);
if (list != null) {
ruleDefinitions.addAll(list);
}
}
if (!source.isPartitionEmpty()) {
List<ColumnDefinition> columnDefinitions = source.getPartitionedBy().getColumnDefinitions();
for (ColumnDefinition c : columnDefinitions) {
map.put(c.getColName(), c);
}
List<RuleDefinition> list = toRuleDefinition(columnDefinitions, enable, context);
if (list != null) {
ruleDefinitions.addAll(list);
}
}
if (!source.isConstraintEmpty()) {
List<BaseConstraint> constraintStatements = source.getConstraintStatements();
for (BaseConstraint constraint : constraintStatements) {
if (!(constraint instanceof PrimaryConstraint)) {
continue;
}
PrimaryConstraint c = (PrimaryConstraint)constraint;
if (c.getColNames().size() == 1) {
ColumnDefinition columnDefinition = map.get(c.getColNames().get(0));
List<RuleDefinition> list = toPrimaryRule(columnDefinition, enable);
ruleDefinitions.addAll(list);
} else {
RuleDefinition ruleDefinition = toUniqueRule(source.getQualifiedName().getSuffix(), c.getColNames(),
enable);
ruleDefinitions.add(ruleDefinition);
List<RuleDefinition> notNullRule = c.getColNames().stream().map(x -> {
ColumnDefinition columnDefinition = ColumnDefinition.builder().colName(x).notNull(true).build();
return toNotNullRule(columnDefinition, enable);
}).collect(Collectors.toList());
ruleDefinitions.addAll(notNullRule);
}
}
}
return ruleDefinitions;
}