public final Clause[] clauses(Context<?> ctx) {
return delegate(ctx.configuration()).clauses(ctx);
}
private final QueryPartInternal delegate(Configuration configuration) {
SQLDialect dialect = configuration.dialect();
// Regular comparison predicate simulation
if (asList(EQUALS, NOT_EQUALS).contains(comparator) &&
asList(DERBY, FIREBIRD, SQLITE).contains(dialect.family())) {
List<Condition> conditions = new ArrayList<Condition>();
Field<?>[] leftFields = left.fields();
Field<?>[] rightFields = right.fields();
for (int i = 0; i < leftFields.length; i++) {
conditions.add(leftFields[i].equal((Field) rightFields[i]));
}
Condition result = new CombinedCondition(Operator.AND, conditions);
if (comparator == NOT_EQUALS) {
result = result.not();
}
return (QueryPartInternal) result;
}
// Ordering comparison predicate simulation
else if (asList(GREATER, GREATER_OR_EQUAL, LESS, LESS_OR_EQUAL).contains(comparator) &&
asList(DERBY, CUBRID, FIREBIRD, SQLITE).contains(dialect.family())) {
// The order component of the comparator (stripping the equal component)
Comparator order
= (comparator == GREATER) ? GREATER
: (comparator == GREATER_OR_EQUAL) ? GREATER