/** * Returns if the field is required to evaluate this query * * @param field The field * @param ctx The nested context */ public boolean isRequired(Path field, Path ctx) { if (this instanceof ValueComparisonExpression) { return isFieldQueried(field, (ValueComparisonExpression) this, ctx); } else if (this instanceof FieldComparisonExpression) { return isFieldQueried(field, (FieldComparisonExpression) this, ctx); } else if (this instanceof RegexMatchExpression) { return isFieldQueried(field, (RegexMatchExpression) this, ctx); } else if (this instanceof NaryRelationalExpression) { return isFieldQueried(field, (NaryRelationalExpression) this, ctx); } else if (this instanceof UnaryLogicalExpression) { return isFieldQueried(field, (UnaryLogicalExpression) this, ctx); } else if (this instanceof NaryLogicalExpression) { return isFieldQueried(field, (NaryLogicalExpression) this, ctx); } else if (this instanceof ArrayContainsExpression) { return isFieldQueried(field, (ArrayContainsExpression) this, ctx); } else if (this instanceof ArrayMatchExpression) { return isFieldQueried(field, (ArrayMatchExpression) this, ctx); } return false; }
/** * Returns if the field is required to evaluate this query * * @param field The field * @param ctx The nested context */ public boolean isRequired(Path field, Path ctx) { if (this instanceof ValueComparisonExpression) { return isFieldQueried(field, (ValueComparisonExpression) this, ctx); } else if (this instanceof FieldComparisonExpression) { return isFieldQueried(field, (FieldComparisonExpression) this, ctx); } else if (this instanceof RegexMatchExpression) { return isFieldQueried(field, (RegexMatchExpression) this, ctx); } else if (this instanceof NaryRelationalExpression) { return isFieldQueried(field, (NaryRelationalExpression) this, ctx); } else if (this instanceof UnaryLogicalExpression) { return isFieldQueried(field, (UnaryLogicalExpression) this, ctx); } else if (this instanceof NaryLogicalExpression) { return isFieldQueried(field, (NaryLogicalExpression) this, ctx); } else if (this instanceof ArrayContainsExpression) { return isFieldQueried(field, (ArrayContainsExpression) this, ctx); } else if (this instanceof ArrayMatchExpression) { return isFieldQueried(field, (ArrayMatchExpression) this, ctx); } return false; }
private static boolean isFieldQueried(Path field, RegexMatchExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by regex {}", field, q); return isFieldQueried(field, q.getField(), context); }
private static boolean isFieldQueried(Path field, FieldComparisonExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by field comparison {}", field, q); return isFieldQueried(field, q.getField(), context) || isFieldQueried(field, q.getRfield(), context); }
private static boolean isFieldQueried(Path field, FieldComparisonExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by field comparison {}", field, q); return isFieldQueried(field, q.getField(), context) || isFieldQueried(field, q.getRfield(), context); }
private static boolean isFieldQueried(Path field, ValueComparisonExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by value comparison {}", field, q); return isFieldQueried(field, q.getField(), context); }
private static boolean isFieldQueried(Path field, NaryRelationalExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by expr {}", field, q); return isFieldQueried(field, q.getField(), context); }
private static boolean isFieldQueried(Path field, ArrayContainsExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by array expression {}", field, q); return isFieldQueried(field, q.getArray(), context); }
private static boolean isFieldQueried(Path field, RegexMatchExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by regex {}", field, q); return isFieldQueried(field, q.getField(), context); }
private static boolean isFieldQueried(Path field, ValueComparisonExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by value comparison {}", field, q); return isFieldQueried(field, q.getField(), context); }
private static boolean isFieldQueried(Path field, NaryRelationalExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by expr {}", field, q); return isFieldQueried(field, q.getField(), context); }
private static boolean isFieldQueried(Path field, ArrayContainsExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by array expression {}", field, q); return isFieldQueried(field, q.getArray(), context); }
private static boolean isFieldQueried(Path field, ArrayMatchExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by array expression {}", field, q); if (isFieldQueried(field, q.getArray(), context)) { return true; } else { return q.getElemMatch().isRequired(field, new Path(new Path(context, q.getArray()), Path.ANYPATH)); } } }
private static boolean isFieldQueried(Path field, ArrayMatchExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by array expression {}", field, q); if (isFieldQueried(field, q.getArray(), context)) { return true; } else { return q.getElemMatch().isRequired(field, new Path(new Path(context, q.getArray()), Path.ANYPATH)); } } }