Java源码示例:com.alibaba.druid.sql.dialect.mysql.ast.MySqlUnique

示例1
/**
 * 从单个建表语句中创建实体
 *
 * @param project
 * @param sqlStatement
 */
private void saveEntityFromSqlStatement(MetaProjectPO project, SQLCreateTableStatement sqlStatement) {
    SQLCreateTableStatement createTableStatement = sqlStatement;
    // 解析表名
    String tableName = this.parseTableName(createTableStatement);
    if (StringUtils.isBlank(tableName)) {
        return;
    }
    String comment = cleanQuote(SafeUtil.getString(createTableStatement.getComment()));
    MetaEntityPO entity = createEntity(project, tableName, comment);
    // 获取单独声明的主键
    String pkAlone = this.getPkAlone(createTableStatement);
    List<SQLTableElement> tableElementList = createTableStatement.getTableElementList();
    int orderNo = 0;
    // 缓存遍历到的字段
    Map<String, MetaFieldPO> fieldMap = new HashMap<>(32);
    for (SQLTableElement element : tableElementList) {
        // 创建字段
        if (element instanceof SQLColumnDefinition) {
            orderNo += 10;
            SQLColumnDefinition sqlColumnDefinition = (SQLColumnDefinition) element;
            String fieldName = cleanQuote(sqlColumnDefinition.getNameAsString());
            boolean pk = this.isPkField(sqlColumnDefinition, pkAlone);
            String fieldType = StringUtils.lowerCase(sqlColumnDefinition.getDataType().getName());
            int fieldLength = 0;
            int fieldScale = 0;
            List<SQLExpr> arguments = sqlColumnDefinition.getDataType().getArguments();
            if (CollectionUtils.isNotEmpty(arguments)) {
                fieldLength = SafeUtil.getInteger(arguments.get(0));
                if (arguments.size() >= 2) {
                    fieldScale = SafeUtil.getInteger(arguments.get(1));
                }
            }
            boolean autoIncrement = sqlColumnDefinition.isAutoIncrement();
            boolean notNull = sqlColumnDefinition.containsNotNullConstaint();
            if (pk) {
                notNull = true;
            }
            String defaultValue = sqlColumnDefinition.getDefaultExpr() == null ? "NULL" : sqlColumnDefinition.getDefaultExpr().toString();
            String desc = sqlColumnDefinition.getComment() == null ? "" : cleanQuote(sqlColumnDefinition.getComment().toString());

            MetaFieldPO field = this.createField(entity, fieldName, fieldType,
                fieldLength, fieldScale, pk,
                autoIncrement, notNull, orderNo,
                defaultValue, desc);
            fieldMap.put(fieldName, field);
            continue;
        }
        if (element instanceof MySqlPrimaryKey) {
            continue;
        }
        // 创建索引
        if (element instanceof MySqlKey) {
            boolean unique = (element instanceof MySqlUnique);
            MySqlKey sqlKey = (MySqlKey) element;
            String indexName = cleanQuote(sqlKey.getName().toString());
            List<MetaFieldPO> fields = new ArrayList<>();
            for (SQLSelectOrderByItem item : sqlKey.getColumns()) {
                String columnName = cleanQuote(item.getExpr().toString());
                fields.add(fieldMap.get(columnName));
            }
            this.createIndex(entity, indexName, unique, fields);
        }
    }
}