/** * Creates an rvalue expression that is a constant value */ public RValueExpression(Value value) { if (value == null || value.getValue() == null) { this.value = null; this.path = null; this.type = RValueType._null; } else { this.value = value; this.path = null; this.type = RValueType._value; } }
/** * Creates an rvalue expression that is a constant value */ public RValueExpression(Value value) { if (value == null || value.getValue() == null) { this.value = null; this.path = null; this.type = RValueType._null; } else { this.value = value; this.path = null; this.type = RValueType._value; } }
/** * <pre> * { $or : [ {field:value1},{field:value2},...] } * </pre> */ private DBObject translateArrayContainsAny(Type t, Path array, List<Value> values) { List<BasicDBObject> l = new ArrayList<>(values.size()); for (Value x : values) { l.add(new BasicDBObject(translatePath(array), x == null ? null : x.getValue() == null ? null : t.cast(x.getValue()))); } return new BasicDBObject("$or", l); }
/** * <pre> * { $or : [ {field:value1},{field:value2},...] } * </pre> */ private DBObject translateArrayContainsAny(Type t, Path array, List<Value> values) { List<BasicDBObject> l = new ArrayList<>(values.size()); for (Value x : values) { l.add(new BasicDBObject(translatePath(array), x == null ? null : x.getValue() == null ? null : t.cast(x.getValue()))); } return new BasicDBObject("$or", l); }
/** * Converts a value list to a list of values with the proper type */ private List<Object> translateValueList(Type t, List<Value> values) { if (values == null || values.isEmpty()) { throw new IllegalArgumentException(MongoCrudConstants.ERR_EMPTY_VALUE_LIST); } List<Object> ret = new ArrayList<>(values.size()); for (Value v : values) { Object value = v == null ? null : v.getValue(); if (value != null) { value = t.cast(value); } ret.add(filterBigNumbers(value)); } return ret; }
/** * Converts a value list to a list of values with the proper type * * @param idList If true, the list contains _ids */ private List<Object> translateValueList(Type t, List<Value> values,boolean idList) { List<Object> ret = new ArrayList<>(values==null?0:values.size()); if(values!=null) { for (Value v : values) { Object value = v == null ? null : v.getValue(); if (value != null) { value = DocTranslator.filterBigNumbers(t.cast(value)); if(idList) value=DocTranslator.createIdFrom(value); } ret.add(value); } } return ret; }
public NaryRelationalExpressionEvaluator(NaryRelationalExpression expr, FieldTreeNode context) { field = expr.getField(); fieldMd = context.resolve(field); if (fieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + field); } operator = expr.getOp(); List<Value> l = expr.getValues(); values = new ArrayList<>(l.size()); for (Value x : l) { if (x != null) { values.add(x.getValue()); } } LOGGER.debug("ctor {} {} {}", expr.getField(), operator, values); }
public NaryValueRelationalExpressionEvaluator(NaryValueRelationalExpression expr, FieldTreeNode context) { field = expr.getField(); fieldMd = context.resolve(field); if (fieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + field); } operator = expr.getOp(); values = new HashSet<>(); for (Value x : expr.getValues()) { values.add(fieldMd.getType().cast(x.getValue())); } LOGGER.debug("ctor {} {} {}", expr.getField(), operator, values); }
public NaryValueRelationalExpressionEvaluator(NaryValueRelationalExpression expr, FieldTreeNode context) { field = expr.getField(); fieldMd = context.resolve(field); if (fieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + field); } operator = expr.getOp(); values = new HashSet<>(); for (Value x : expr.getValues()) { values.add(fieldMd.getType().cast(x.getValue())); } LOGGER.debug("ctor {} {} {}", expr.getField(), operator, values); }
private void validateArrayElement(ArrayElement element, FieldTreeNode refMd, RValueExpression rvalue, Path refPath) { if (element instanceof ObjectArrayElement) { if (refMd != null && !refMd.getType().equals(element.getType())) { throw new EvaluationError(CrudConstants.ERR_INVALID_ASSIGNMENT + arrayField + " <- " + refPath); } else if (rvalue.getType() == RValueExpression.RValueType._value) { Value v = rvalue.getValue(); if (!(v.getValue() instanceof ObjectNode) && !(v.getValue() instanceof ArrayNode)) { throw new EvaluationError(CrudConstants.ERR_EXPECTED_OBJECT_VALUE + arrayField); } } } else if (refMd != null && !refMd.getType().equals(element.getType())) { throw new EvaluationError(CrudConstants.ERR_INVALID_ASSIGNMENT + arrayField + "<-" + refPath); } else if (rvalue.getType() == RValueExpression.RValueType._value) { Value v = rvalue.getValue(); if (v.getValue() instanceof ObjectNode || v.getValue() instanceof ArrayNode) { throw new EvaluationError(CrudConstants.ERR_EXPECTED_VALUE + arrayField); } } }
private void validateArrayElement(ArrayElement element, FieldTreeNode refMd, RValueExpression rvalue, Path refPath) { if (element instanceof ObjectArrayElement) { if (refMd != null && !refMd.getType().equals(element.getType())) { throw new EvaluationError(CrudConstants.ERR_INVALID_ASSIGNMENT + arrayField + " <- " + refPath); } else if (rvalue.getType() == RValueExpression.RValueType._value) { Value v = rvalue.getValue(); if (!(v.getValue() instanceof ObjectNode) && !(v.getValue() instanceof ArrayNode)) { throw new EvaluationError(CrudConstants.ERR_EXPECTED_OBJECT_VALUE + arrayField); } } } else if (refMd != null && !refMd.getType().equals(element.getType())) { throw new EvaluationError(CrudConstants.ERR_INVALID_ASSIGNMENT + arrayField + "<-" + refPath); } else if (rvalue.getType() == RValueExpression.RValueType._value) { Value v = rvalue.getValue(); if (v.getValue() instanceof ObjectNode || v.getValue() instanceof ArrayNode) { throw new EvaluationError(CrudConstants.ERR_EXPECTED_VALUE + arrayField); } } }
@Override protected LookupSpec processValueComparisonExpression(ValueComparisonExpression q) { switch(q.getOp()) { case _eq: return new ValueLookupSpec(simpleKeySpec(findFieldInfo(q.getField(),q)),q.getRvalue().getValue()); case _lte: case _lt: return new RangeLookupSpec(simpleKeySpec(findFieldInfo(q.getField(),q)),null,q.getRvalue().getValue()); case _gte: case _gt: return new RangeLookupSpec(simpleKeySpec(findFieldInfo(q.getField(),q)),q.getRvalue().getValue(),null); } return null; }
@Override protected LookupSpec processValueComparisonExpression(ValueComparisonExpression q) { switch(q.getOp()) { case _eq: return new ValueLookupSpec(simpleKeySpec(findFieldInfo(q.getField(),q)),q.getRvalue().getValue()); case _lte: case _lt: return new RangeLookupSpec(simpleKeySpec(findFieldInfo(q.getField(),q)),null,q.getRvalue().getValue()); case _gte: case _gt: return new RangeLookupSpec(simpleKeySpec(findFieldInfo(q.getField(),q)),q.getRvalue().getValue(),null); } return null; }
private DBObject translateValueComparisonExpression(FieldTreeNode context, EntityMetadata md, ValueComparisonExpression expr,MutablePath fullPath) { FieldInfo finfo=resolveFieldForQuery(context,fullPath.immutableCopy(),expr.getField()); Type t = finfo.fieldMd.getType(); Object value = expr.getRvalue().getValue(); if (expr.getOp() == BinaryComparisonOperator._eq || expr.getOp() == BinaryComparisonOperator._neq) { if (!t.supportsEq() && value != null) { throw Error.get(ERR_INVALID_COMPARISON, expr.toString()); } } else if (!t.supportsOrdering()) { throw Error.get(ERR_INVALID_COMPARISON, expr.toString()); } Object valueObject = DocTranslator.filterBigNumbers(t.cast(value)); if (finfo.field.equals(ID_PATH)) { valueObject = DocTranslator.createIdFrom(valueObject); } if (expr.getOp() == BinaryComparisonOperator._eq) { return new BasicDBObject(translatePath(finfo.field), valueObject); } else { return new BasicDBObject(translatePath(finfo.field), new BasicDBObject(BINARY_COMPARISON_OPERATOR_MAP.get(expr.getOp()), valueObject)); } }
private FieldData initializeObject(RValueExpression rvalue, FieldTreeNode refMdNode, FieldTreeNode mdNode, Path field, Path refPath) { if (rvalue.getType() == RValueExpression.RValueType._dereference) { if (!(refMdNode instanceof ObjectField)) { throw new EvaluationError(CrudConstants.ERR_INCOMPATIBLE_ASSIGNMENT + field + " <- " + refPath); } } else if (rvalue.getType() != RValueExpression.RValueType._null) { Value v = rvalue.getValue(); if (!(v.getValue() instanceof ObjectNode)) { throw new EvaluationError(CrudConstants.ERR_INCOMPATIBLE_ASSIGNMENT + field + " <- " + rvalue.getValue()); } } return new FieldData(field, mdNode.getType(), refPath, refMdNode == null ? null : refMdNode.getType(), rvalue, mdNode.getFullPath()); }
private FieldData initializeObject(RValueExpression rvalue, FieldTreeNode refMdNode, FieldTreeNode mdNode, Path field, Path refPath) { if (rvalue.getType() == RValueExpression.RValueType._dereference) { if (!(refMdNode instanceof ObjectField)) { throw new EvaluationError(CrudConstants.ERR_INCOMPATIBLE_ASSIGNMENT + field + " <- " + refPath); } } else if (rvalue.getType() != RValueExpression.RValueType._null) { Value v = rvalue.getValue(); if (!(v.getValue() instanceof ObjectNode)) { throw new EvaluationError(CrudConstants.ERR_INCOMPATIBLE_ASSIGNMENT + field + " <- " + rvalue.getValue()); } } return new FieldData(field, mdNode.getType(), refPath, refMdNode == null ? null : refMdNode.getType(), rvalue, mdNode.getFullPath()); }
private FieldData initializeArray(RValueExpression rvalue, FieldTreeNode refMdNode, FieldTreeNode mdNode, Path field, Path refPath) { if (rvalue.getType() == RValueExpression.RValueType._dereference) { if (!(refMdNode instanceof ArrayField)) { throw new EvaluationError(CrudConstants.ERR_INCOMPATIBLE_ASSIGNMENT + field + " <- " + refPath); } } else if (rvalue.getType() != RValueExpression.RValueType._null) { Value v = rvalue.getValue(); if (!(v.getValue() instanceof ArrayNode)) { throw new EvaluationError(CrudConstants.ERR_INCOMPATIBLE_ASSIGNMENT + field + " <- " + rvalue.getValue()); } } return new FieldData(field, mdNode.getType(), refPath, refMdNode == null ? null : refMdNode.getType(), rvalue, mdNode.getFullPath()); }
private FieldData initializeArray(RValueExpression rvalue, FieldTreeNode refMdNode, FieldTreeNode mdNode, Path field, Path refPath) { if (rvalue.getType() == RValueExpression.RValueType._dereference) { if (!(refMdNode instanceof ArrayField)) { throw new EvaluationError(CrudConstants.ERR_INCOMPATIBLE_ASSIGNMENT + field + " <- " + refPath); } } else if (rvalue.getType() != RValueExpression.RValueType._null) { Value v = rvalue.getValue(); if (!(v.getValue() instanceof ArrayNode)) { throw new EvaluationError(CrudConstants.ERR_INCOMPATIBLE_ASSIGNMENT + field + " <- " + rvalue.getValue()); } } return new FieldData(field, mdNode.getType(), refPath, refMdNode == null ? null : refMdNode.getType(), rvalue, mdNode.getFullPath()); }
private FieldData initializeSimple(RValueExpression rvalue, FieldTreeNode refMdNode, FieldTreeNode mdNode, Path field, Path refPath) { if (rvalue.getType() == RValueExpression.RValueType._dereference) { if (!mdNode.getType().equals(refMdNode.getType())) { throw new EvaluationError(CrudConstants.ERR_INCOMPATIBLE_DEREFERENCE + field + " <- " + refPath); } } else if (rvalue.getType() != RValueExpression.RValueType._null) { Value v = rvalue.getValue(); if (v.getValue() instanceof JsonNode) { throw new EvaluationError(CrudConstants.ERR_INCOMPATIBLE_ASSIGNMENT + field + " <- {}"); } } return new FieldData(field, mdNode.getType(), refPath, refMdNode == null ? null : refMdNode.getType(), rvalue, mdNode.getFullPath()); }
private FieldData initializeSimple(RValueExpression rvalue, FieldTreeNode refMdNode, FieldTreeNode mdNode, Path field, Path refPath) { if (rvalue.getType() == RValueExpression.RValueType._dereference) { if (!mdNode.getType().equals(refMdNode.getType())) { throw new EvaluationError(CrudConstants.ERR_INCOMPATIBLE_DEREFERENCE + field + " <- " + refPath); } } else if (rvalue.getType() != RValueExpression.RValueType._null) { Value v = rvalue.getValue(); if (v.getValue() instanceof JsonNode) { throw new EvaluationError(CrudConstants.ERR_INCOMPATIBLE_ASSIGNMENT + field + " <- {}"); } } return new FieldData(field, mdNode.getType(), refPath, refMdNode == null ? null : refMdNode.getType(), rvalue, mdNode.getFullPath()); }