Search in sources :

Example 1 with AddForeignKeyConstraintStatement

use of liquibase.statement.core.AddForeignKeyConstraintStatement in project liquibase by liquibase.

the class AddColumnGenerator method addForeignKeyStatements.

protected void addForeignKeyStatements(AddColumnStatement statement, Database database, List<Sql> returnSql) {
    for (ColumnConstraint constraint : statement.getConstraints()) {
        if (constraint instanceof ForeignKeyConstraint) {
            ForeignKeyConstraint fkConstraint = (ForeignKeyConstraint) constraint;
            String refSchemaName = null;
            String refTableName;
            String refColName;
            if (fkConstraint.getReferences() != null) {
                Matcher referencesMatcher = Pattern.compile("([\\w\\._]+)\\(([\\w_]+)\\)").matcher(fkConstraint.getReferences());
                if (!referencesMatcher.matches()) {
                    throw new UnexpectedLiquibaseException("Don't know how to find table and column names from " + fkConstraint.getReferences());
                }
                refTableName = referencesMatcher.group(1);
                refColName = referencesMatcher.group(2);
            } else {
                refTableName = ((ForeignKeyConstraint) constraint).getReferencedTableName();
                refColName = ((ForeignKeyConstraint) constraint).getReferencedColumnNames();
            }
            if (refTableName.indexOf(".") > 0) {
                refSchemaName = refTableName.split("\\.")[0];
                refTableName = refTableName.split("\\.")[1];
            }
            AddForeignKeyConstraintStatement addForeignKeyConstraintStatement = new AddForeignKeyConstraintStatement(fkConstraint.getForeignKeyName(), statement.getCatalogName(), statement.getSchemaName(), statement.getTableName(), ColumnConfig.arrayFromNames(statement.getColumnName()), null, refSchemaName, refTableName, ColumnConfig.arrayFromNames(refColName));
            returnSql.addAll(Arrays.asList(SqlGeneratorFactory.getInstance().generateSql(addForeignKeyConstraintStatement, database)));
        }
    }
}
Also used : Matcher(java.util.regex.Matcher) ColumnConstraint(liquibase.statement.ColumnConstraint) ForeignKeyConstraint(liquibase.statement.ForeignKeyConstraint) AddForeignKeyConstraintStatement(liquibase.statement.core.AddForeignKeyConstraintStatement) UnexpectedLiquibaseException(liquibase.exception.UnexpectedLiquibaseException)

Aggregations

Matcher (java.util.regex.Matcher)1 UnexpectedLiquibaseException (liquibase.exception.UnexpectedLiquibaseException)1 ColumnConstraint (liquibase.statement.ColumnConstraint)1 ForeignKeyConstraint (liquibase.statement.ForeignKeyConstraint)1 AddForeignKeyConstraintStatement (liquibase.statement.core.AddForeignKeyConstraintStatement)1