use of org.apache.torque.engine.database.model.Index in project dbflute-core by dbflute.
the class DfSPolicyTableStatementChecker method doEvaluateColumnThenItemValue.
protected String doEvaluateColumnThenItemValue(DfSPolicyStatement statement, DfSPolicyThenPart thenPart, Table table, Function<String, String> violationCall) {
final String thenItem = thenPart.getThenItem();
final String thenValue = thenPart.getThenValue();
final boolean notThenValue = thenPart.isNotThenValue();
if (thenItem.equalsIgnoreCase("tableName")) {
// e.g. tableName is prefix:CLS_
final String tableName = toComparingTableName(table);
if (!isHitExp(statement, tableName, toTableNameComparingThenValue(table, thenValue)) == !notThenValue) {
return violationCall.apply(tableName);
}
} else if (thenItem.equalsIgnoreCase("alias")) {
// e.g. alias is suffix:History
final String alias = table.getAlias();
if (!isHitExp(statement, alias, toAliasComparingThenValue(table, thenValue)) == !notThenValue) {
return violationCall.apply(alias);
}
} else if (thenItem.equalsIgnoreCase("comment")) {
// e.g. comment is contain:SEA
final String comment = table.getComment();
if (!isHitExp(statement, comment, thenValue) == !notThenValue) {
return violationCall.apply(comment);
}
} else if (thenItem.equalsIgnoreCase("pkName")) {
// e.g. pkName is prefix:PK_
if (table.hasPrimaryKey()) {
final List<Column> columnList = table.getPrimaryKey();
// same name if compound
final Column pk = columnList.get(0);
final String pkName = pk.getPrimaryKeyName();
final String comparingThenValue = toConstraintNameComparingThenValue(table, thenValue, columnList);
if (!isHitExp(statement, pkName, comparingThenValue) == !notThenValue) {
final String disp = pkName + (pk.isAdditionalPrimaryKey() ? ADDITIONAL_SUFFIX : "");
return violationCall.apply(disp);
}
}
} else if (thenItem.equalsIgnoreCase("fkName")) {
// e.g. fkName is prefix:FK_
for (ForeignKey fk : table.getForeignKeyList()) {
final String fkName = fk.getName();
final String comparingThenValue = toConstraintNameComparingThenValue(table, thenValue, fk.getLocalColumnList());
if (!isHitExp(statement, fkName, comparingThenValue) == !notThenValue) {
final String disp = fkName + (fk.isAdditionalForeignKey() ? ADDITIONAL_SUFFIX : "");
return violationCall.apply(disp);
}
}
} else if (thenItem.equalsIgnoreCase("uniqueName")) {
// e.g. uniqueName is prefix:UQ_
for (Unique uq : table.getUniqueList()) {
final String uqName = uq.getName();
final String comparingThenValue = toConstraintNameComparingThenValue(table, thenValue, uq.getColumnList());
if (!isHitExp(statement, uqName, comparingThenValue)) {
final String disp = uqName + (uq.isAdditional() ? ADDITIONAL_SUFFIX : "");
return violationCall.apply(disp);
}
}
} else if (thenItem.equalsIgnoreCase("indexName")) {
// e.g. indexName is prefix:IX_
for (Index ix : table.getIndexList()) {
final String ixName = ix.getName();
final String comparingThenValue = toConstraintNameComparingThenValue(table, thenValue, ix.getColumnList());
if (!isHitExp(statement, ixName, comparingThenValue) == !notThenValue) {
return violationCall.apply(ixName);
}
}
} else if (thenItem.equalsIgnoreCase("pk_columnName")) {
return determinePkSomethingThenValue(statement, table, violationCall, thenValue, notThenValue, pk -> toComparingColumnName(pk));
} else if (thenItem.equalsIgnoreCase("pk_dbType") || thenItem.equalsIgnoreCase("pkDbType")) {
// for compatible
return determinePkSomethingThenValue(statement, table, violationCall, thenValue, notThenValue, pk -> pk.getDbType());
} else if (thenItem.equalsIgnoreCase("pk_size")) {
return determinePkSomethingThenValue(statement, table, violationCall, thenValue, notThenValue, pk -> pk.getColumnSize());
} else if (thenItem.equalsIgnoreCase("pk_dbType_with_size")) {
// e.g. char(3)
return determinePkSomethingThenValue(statement, table, violationCall, thenValue, notThenValue, pk -> toComparingDbTypeWithSize(pk));
} else {
throwSchemaPolicyCheckIllegalIfThenStatementException(statement, "Unknown then-item: " + thenItem);
}
// no violation
return null;
}
Aggregations