in hugegraph-core/src/main/java/org/apache/hugegraph/backend/query/ConditionQueryFlatten.java [314:377]
private static Relations mergeRelations(Relations relations) {
Relations result = new Relations();
boolean isNum = false;
Relation gt = null;
Relation gte = null;
Relation eq = null;
Relation lt = null;
Relation lte = null;
for (Relation relation : relations) {
switch (relation.relation()) {
case GT:
isNum = true;
if (gt == null || compare(relation, gt) > 0) {
gt = relation;
}
break;
case GTE:
isNum = true;
if (gte == null || compare(relation, gte) > 0) {
gte = relation;
}
break;
case EQ:
if (eq == null) {
eq = relation;
if (eq.value() instanceof Number) {
isNum = true;
}
break;
} else if (!relation.value().equals(eq.value())) {
return Relations.of();
}
break;
case LT:
isNum = true;
if (lt == null || compare(lt, relation) > 0) {
lt = relation;
}
break;
case LTE:
isNum = true;
if (lte == null || compare(lte, relation) > 0) {
lte = relation;
}
break;
default: // NEQ, IN, NOT_IN, CONTAINS, CONTAINS_KEY, SCAN
result.add(relation);
break;
}
}
if (!isNum) {
// Not number, only may have equal relation
if (eq != null) {
result.add(eq);
}
} else {
// At most have 1 eq, 1 lt, 1 lte, 1 gt, 1 gte
result.addAll(calcValidRange(gte, gt, eq, lte, lt));
}
return result;
}