in hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/backend/query/ConditionQuery.java [260:321]
public <T> T condition(Object key) {
List<Object> valuesEQ = InsertionOrderUtil.newList();
List<Object> valuesIN = InsertionOrderUtil.newList();
for (Condition c : this.conditions) {
if (c.isRelation()) {
Condition.Relation r = (Condition.Relation) c;
if (r.key().equals(key)) {
if (r.relation() == RelationType.EQ) {
valuesEQ.add(r.value());
} else if (r.relation() == RelationType.IN) {
Object value = r.value();
assert value instanceof List;
valuesIN.add(value);
}
}
}
}
if (valuesEQ.isEmpty() && valuesIN.isEmpty()) {
return null;
}
if (valuesEQ.size() == 1 && valuesIN.isEmpty()) {
@SuppressWarnings("unchecked")
T value = (T) valuesEQ.get(0);
return value;
}
if (valuesEQ.isEmpty() && valuesIN.size() == 1) {
@SuppressWarnings("unchecked")
T value = (T) valuesIN.get(0);
return value;
}
Set<Object> intersectValues = InsertionOrderUtil.newSet();
for (Object value : valuesEQ) {
List<Object> valueAsList = ImmutableList.of(value);
if (intersectValues.isEmpty()) {
intersectValues.addAll(valueAsList);
} else {
CollectionUtil.intersectWithModify(intersectValues,
valueAsList);
}
}
for (Object value : valuesIN) {
@SuppressWarnings("unchecked")
List<Object> valueAsList = (List<Object>) value;
if (intersectValues.isEmpty()) {
intersectValues.addAll(valueAsList);
} else {
CollectionUtil.intersectWithModify(intersectValues,
valueAsList);
}
}
if (intersectValues.isEmpty()) {
return null;
}
E.checkState(intersectValues.size() == 1,
"Illegal key '%s' with more than one value: %s",
key, intersectValues);
@SuppressWarnings("unchecked")
T value = (T) intersectValues.iterator().next();
return value;
}