private Boolean visitDynamicTable()

in fastmodel-transform/fastmodel-transform-hologres/src/main/java/com/aliyun/fastmodel/transform/hologres/format/HologresAstVisitor.java [119:171]


    private Boolean visitDynamicTable(CreateTable node, Integer indent) {
        builder.append("BEGIN;\n");
        printExtensionIfNeed(node);
        builder.append("CREATE DYNAMIC TABLE ");
        if (node.isNotExists()) {
            builder.append("IF NOT EXISTS ");
        }
        String tableCode = getCode(node.getQualifiedName());
        builder.append(tableCode);
        String elementIndent = indentString(indent + 1);
        boolean columnEmpty = node.isColumnEmpty();
        if (!columnEmpty) {
            builder.append(" (\n");
            String column = formatColumnList(node.getColumnDefines(), elementIndent);
            builder.append(column);
            builder.append("\n").append(")");
        }
        if (!node.isPartitionEmpty()) {
            builder.append(" PARTITION BY LIST(").append(
                node.getPartitionedBy().getColumnDefinitions().stream().map(x -> formatExpression(x.getColName()))
                    .collect(joining(","))).append(")");
        }
        //with
        List<Property> properties = node.getProperties();
        List<String> excludeKeys = Lists.newArrayList(
            HologresPropertyKey.DYNAMIC.getValue(),
            HologresPropertyKey.TASK_DEFINITION.getValue()
        );
        String p = formatProperty(elementIndent, properties.stream().filter(
            prop -> !excludeKeys.contains(prop.getName())
        ).collect(Collectors.toList()));
        if (StringUtils.isNotBlank(p)) {
            builder.append("\nWITH (\n");
            builder.append(p);
            builder.append("\n)");
        }
        String sql = PropertyUtil.getPropertyValue(properties, HologresPropertyKey.TASK_DEFINITION.getValue());
        //query
        if (StringUtils.isNotBlank(sql)) {
            builder.append(" AS\n");
            builder.append(sql);
            if (!sql.endsWith(";")) {
                builder.append(";");
            }
        }
        builder.append("\n");
        builder.append("COMMIT;");
        if (node.getCommentValue() != null) {
            builder.append("\n");
            BuilderUtil.addTransaction(builder, () -> commentTable(tableCode, node.getCommentValue()));
        }
        return true;
    }