in hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/TraversalUtil.java [732:780]
private static <V> V validPropertyValue(V value, PropertyKey pkey) {
if (pkey.cardinality().single() && value instanceof Collection &&
!pkey.dataType().isBlob()) {
// Expect single but got collection, like P.within([])
Collection<?> collection = (Collection<?>) value;
Collection<Object> validValues = new ArrayList<>();
for (Object element : collection) {
Object validValue = pkey.validValue(element);
if (validValue == null) {
validValues = null;
break;
}
validValues.add(validValue);
}
if (validValues == null) {
List<Class<?>> classes = new ArrayList<>();
for (Object v : (Collection<?>) value) {
classes.add(v == null ? null : v.getClass());
}
E.checkArgument(false,
"Invalid data type of query value in %s, " +
"expect %s for '%s', actual got %s",
value, pkey.dataType(), pkey.name(), classes);
}
@SuppressWarnings("unchecked")
V validValue = (V) validValues;
return validValue;
}
V validValue;
if (pkey.cardinality().multiple() && !(value instanceof Collection)) {
// Expect non-single but got single, like P.contains(value)
List<V> values = CollectionUtil.toList(value);
values = pkey.validValue(values);
validValue = values != null ? values.get(0) : null;
} else {
validValue = pkey.validValue(value);
}
if (validValue == null) {
E.checkArgument(false,
"Invalid data type of query value '%s', " +
"expect %s for '%s', actual got %s",
value, pkey.dataType(), pkey.name(),
value == null ? null : value.getClass());
}
return validValue;
}