Search in sources :

Example 1 with DfSPolicyThenPart

use of org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyThenPart 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;
}
Also used : DfSPolicyStatement(org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement) DfSPolicyThenClause(org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyThenClause) Column(org.apache.torque.engine.database.model.Column) DfSPolicyThenPart(org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyThenPart) DfSPolicyIfPart(org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyIfPart) DfSPolicyFirstDateSecretary(org.dbflute.logic.doc.spolicy.secretary.DfSPolicyFirstDateSecretary) DfSPolicyLogicalSecretary(org.dbflute.logic.doc.spolicy.secretary.DfSPolicyLogicalSecretary) Function(java.util.function.Function) ForeignKey(org.apache.torque.engine.database.model.ForeignKey) List(java.util.List) Unique(org.apache.torque.engine.database.model.Unique) Index(org.apache.torque.engine.database.model.Index) Table(org.apache.torque.engine.database.model.Table) DfSPolicyResult(org.dbflute.logic.doc.spolicy.result.DfSPolicyResult) Srl(org.dbflute.util.Srl) Column(org.apache.torque.engine.database.model.Column) List(java.util.List) Unique(org.apache.torque.engine.database.model.Unique) Index(org.apache.torque.engine.database.model.Index) ForeignKey(org.apache.torque.engine.database.model.ForeignKey)

Example 2 with DfSPolicyThenPart

use of org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyThenPart in project dbflute-core by dbflute.

the class DfSPolicyMiscSecretary method analyzeThenClause.

// -----------------------------------------------------
// Then Clause
// -----------
protected DfSPolicyThenClause analyzeThenClause(String statement, ScopeInfo ifScope) {
    final String thenRear = ifScope.substringInterspaceToNext();
    final String thenWhole;
    // e.g. if tableName is suffix:_ID then bad => similar to column name
    final String supplement;
    if (thenRear.contains(SUPPLEMENT_DELIMITER)) {
        thenWhole = Srl.substringLastFront(thenRear, SUPPLEMENT_DELIMITER).trim();
        supplement = Srl.substringLastRear(thenRear, SUPPLEMENT_DELIMITER).trim();
    } else {
        thenWhole = thenRear;
        supplement = null;
    }
    final String thenTheme;
    final boolean notThenTheme;
    final List<DfSPolicyThenPart> thenPartList;
    final boolean connectedByOr;
    if (!thenWhole.contains(EQUALS_DELIMITER)) {
        // then [theme]
        final boolean startsWithNot = thenWhole.startsWith(NOT_PREFIX);
        if (startsWithNot) {
            thenTheme = Srl.substringFirstRear(thenWhole, NOT_PREFIX);
        } else {
            thenTheme = thenWhole;
        }
        notThenTheme = startsWithNot;
        thenPartList = Collections.emptyList();
        connectedByOr = false;
    } else {
        // then ... is ...
        thenTheme = null;
        notThenTheme = false;
        boolean byOr = false;
        List<String> thenPartStrList = splitClauseByConnector(thenWhole, " and ");
        if (thenPartStrList.size() == 1) {
            thenPartStrList = splitClauseByConnector(thenWhole, " or ");
            if (thenPartStrList.size() >= 2) {
                byOr = true;
            }
        }
        final List<DfSPolicyThenPart> makingPartList = new ArrayList<DfSPolicyThenPart>();
        for (String thenPartStr : thenPartStrList) {
            final String thenItem = Srl.substringFirstFront(thenPartStr, EQUALS_DELIMITER).trim();
            final String thenValueCandidate = Srl.substringFirstRear(thenPartStr, EQUALS_DELIMITER).trim();
            final boolean notThenValue = thenValueCandidate.startsWith(NOT_PREFIX);
            final String thenValue = notThenValue ? Srl.substringFirstRear(thenValueCandidate, NOT_PREFIX).trim() : thenValueCandidate;
            makingPartList.add(new DfSPolicyThenPart(thenItem, thenValue, notThenValue));
        }
        thenPartList = Collections.unmodifiableList(makingPartList);
        connectedByOr = byOr;
    }
    return new DfSPolicyThenClause(thenTheme, notThenTheme, thenPartList, connectedByOr, supplement);
}
Also used : DfSPolicyThenPart(org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyThenPart) ArrayList(java.util.ArrayList) DfSPolicyThenClause(org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyThenClause)

Example 3 with DfSPolicyThenPart

use of org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyThenPart in project dbflute-core by dbflute.

the class DfSPolicyLogicalSecretary method analyzeThenClause.

// -----------------------------------------------------
// Then Clause
// -----------
protected DfSPolicyThenClause analyzeThenClause(String statement, ScopeInfo ifScope) {
    final String thenRear = ifScope.substringInterspaceToNext();
    final String thenWhole;
    // e.g. if tableName is suffix:_ID then bad => similar to column name
    final String supplement;
    if (thenRear.contains(SUPPLEMENT_DELIMITER)) {
        thenWhole = Srl.substringLastFront(thenRear, SUPPLEMENT_DELIMITER).trim();
        supplement = Srl.substringLastRear(thenRear, SUPPLEMENT_DELIMITER).trim();
    } else {
        thenWhole = thenRear;
        supplement = null;
    }
    final String thenTheme;
    final boolean notThenTheme;
    final List<DfSPolicyThenPart> thenPartList;
    final boolean connectedByOr;
    if (!thenWhole.contains(EQUALS_DELIMITER)) {
        // then [theme]
        final boolean startsWithNot = thenWhole.startsWith(NOT_PREFIX);
        if (startsWithNot) {
            thenTheme = Srl.substringFirstRear(thenWhole, NOT_PREFIX);
        } else {
            thenTheme = thenWhole;
        }
        notThenTheme = startsWithNot;
        thenPartList = Collections.emptyList();
        connectedByOr = false;
    } else {
        // then ... is ...
        thenTheme = null;
        notThenTheme = false;
        boolean byOr = false;
        List<String> thenPartStrList = splitClauseByConnector(thenWhole, " and ");
        if (thenPartStrList.size() == 1) {
            thenPartStrList = splitClauseByConnector(thenWhole, " or ");
            if (thenPartStrList.size() >= 2) {
                byOr = true;
            }
        }
        final List<DfSPolicyThenPart> makingPartList = new ArrayList<DfSPolicyThenPart>();
        for (String thenPartStr : thenPartStrList) {
            final String thenItem = Srl.substringFirstFront(thenPartStr, EQUALS_DELIMITER).trim();
            final String thenValueCandidate = Srl.substringFirstRear(thenPartStr, EQUALS_DELIMITER).trim();
            final boolean notThenValue = thenValueCandidate.startsWith(NOT_PREFIX);
            final String thenValue = notThenValue ? Srl.substringFirstRear(thenValueCandidate, NOT_PREFIX).trim() : thenValueCandidate;
            makingPartList.add(new DfSPolicyThenPart(thenItem, thenValue, notThenValue));
        }
        thenPartList = Collections.unmodifiableList(makingPartList);
        connectedByOr = byOr;
    }
    return new DfSPolicyThenClause(thenTheme, notThenTheme, thenPartList, connectedByOr, supplement);
}
Also used : DfSPolicyThenPart(org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyThenPart) ArrayList(java.util.ArrayList) DfSPolicyThenClause(org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyThenClause)

Aggregations

DfSPolicyThenClause (org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyThenClause)3 DfSPolicyThenPart (org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyThenPart)3 ArrayList (java.util.ArrayList)2 List (java.util.List)1 Function (java.util.function.Function)1 Column (org.apache.torque.engine.database.model.Column)1 ForeignKey (org.apache.torque.engine.database.model.ForeignKey)1 Index (org.apache.torque.engine.database.model.Index)1 Table (org.apache.torque.engine.database.model.Table)1 Unique (org.apache.torque.engine.database.model.Unique)1 DfSPolicyStatement (org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement)1 DfSPolicyIfPart (org.dbflute.logic.doc.spolicy.parsed.DfSPolicyStatement.DfSPolicyIfPart)1 DfSPolicyResult (org.dbflute.logic.doc.spolicy.result.DfSPolicyResult)1 DfSPolicyFirstDateSecretary (org.dbflute.logic.doc.spolicy.secretary.DfSPolicyFirstDateSecretary)1 DfSPolicyLogicalSecretary (org.dbflute.logic.doc.spolicy.secretary.DfSPolicyLogicalSecretary)1 Srl (org.dbflute.util.Srl)1