in fastmodel-core/src/main/java/com/aliyun/fastmodel/core/formatter/FastModelVisitor.java [410:472]
public Boolean visitCreateTable(CreateTable node, Integer indent) {
builder.append("CREATE");
if (node.getCreateOrReplace() != null && node.getCreateOrReplace()) {
builder.append(" OR REPLACE");
}
ITableDetailType tableDetailType = null;
if (node.getTableDetailType() != null) {
tableDetailType = node.getTableDetailType();
boolean isNormalOrTransaction = tableDetailType == TableDetailType.NORMAL_DIM
|| tableDetailType == TableDetailType.TRANSACTION_FACT;
if (!isNormalOrTransaction && !tableDetailType.isSingle()) {
builder.append(" ").append(tableDetailType.getCode());
}
builder.append(" ").append(tableDetailType.getParent());
}
builder.append(" TABLE ");
if (node.isNotExists()) {
builder.append("IF NOT EXISTS ");
}
String tableName = getCode(node.getQualifiedName());
builder.append(tableName);
builder.append(formatAliasedName(node.getAliasedName()));
int newIndent = indent + 1;
if (!node.isColumnEmpty()) {
builder.append(" \n(\n");
String elementIndent = indentString(newIndent);
builder.append(formatColumnList(node.getColumnDefines(), elementIndent));
if (!node.isConstraintEmpty()) {
Iterator<BaseConstraint> iterator = node.getConstraintStatements().stream()
.iterator();
while (iterator.hasNext()) {
builder.append(",\n");
process(iterator.next(), newIndent);
}
}
if (!node.isIndexEmpty()) {
Iterator<TableIndex> iterator = node.getTableIndexList().iterator();
while (iterator.hasNext()) {
builder.append(",\n");
process(iterator.next(), newIndent);
}
}
builder.append(newLine(")"));
} else {
if (!node.isCommentElementEmpty()) {
builder.append(newLine("/*("));
String elementIndent = indentString(newIndent);
builder.append(formatCommentElement(node.getColumnCommentElements(), elementIndent));
builder.append(newLine(")*/"));
}
}
builder.append(formatComment(node.getComment(), isEndNewLine(builder.toString())));
if (!node.isPartitionEmpty()) {
PartitionedBy partitionedBy = node.getPartitionedBy();
List<ColumnDefinition> columnDefinitions = partitionedBy.getColumnDefinitions();
builder.append(
formatPartitions(columnDefinitions, isEndNewLine(builder.toString()), indentString(newIndent)));
}
List<Property> properties = node.getProperties();
builder.append(formatWith(properties, isEndNewLine(builder.toString())));
removeNewLine(builder);
return true;
}