@Override protected T itrValueComparisonExpression(ValueComparisonExpression q, Path context) { if(q.getOp()==BinaryComparisonOperator._neq) { return null; } else { return processValueComparisonExpression(q); } }
@Override protected T itrValueComparisonExpression(ValueComparisonExpression q, Path context) { if(q.getOp()==BinaryComparisonOperator._neq) { return null; } else { return processValueComparisonExpression(q); } }
/** * Constructs evaluator for {field op value} style comparison * * @param expr The expression * @param md Entity metadata */ public ValueComparisonEvaluator(ValueComparisonExpression expr, FieldTreeNode context) { this.field = expr.getField(); fieldMd = context.resolve(field); if (fieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + field); } operator = expr.getOp(); rvalue = expr.getRvalue(); LOGGER.debug("ctor {} {}", field, operator); }
/** * Constructs evaluator for {field op value} style comparison * * @param expr The expression * @param md Entity metadata */ public ValueComparisonEvaluator(ValueComparisonExpression expr, FieldTreeNode context) { this.field = expr.getField(); fieldMd = context.resolve(field); if (fieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + field); } operator = expr.getOp(); rvalue = expr.getRvalue(); LOGGER.debug("ctor {} {}", field, operator); }
/** * Constructs evaluator for {field op value} style comparison * * @param expr The expression * @param md Entity metadata */ public ValueComparisonEvaluator(ValueComparisonExpression expr, FieldTreeNode context) { this.field = expr.getField(); fieldMd = context.resolve(field); if (fieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + field); } operator = expr.getOp(); rvalue = expr.getRvalue(); LOGGER.debug("ctor {} {}", field, operator); }
@Override protected QueryExpression itrValueComparisonExpression(ValueComparisonExpression q, Path context) { return new ValueComparisonExpression(toRelative(q.getField(), context), q.getOp(), q.getRvalue()); }
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)); } }
@Override protected QueryExpression itrValueComparisonExpression(ValueComparisonExpression q, Path context) { return new ValueComparisonExpression(toRelative(q.getField(), context), q.getOp(), q.getRvalue()); }
private DBObject translateValueComparisonExpression(FieldTreeNode context, ValueComparisonExpression expr) { Type t = resolve(context, expr.getField()).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 = filterBigNumbers(t.cast(value)); if (expr.getField().equals(ID_PATH)) { valueObject = createIdFrom(valueObject); } if (expr.getOp() == BinaryComparisonOperator._eq) { return new BasicDBObject(translatePath(expr.getField()), valueObject); } else { return new BasicDBObject(translatePath(expr.getField()), new BasicDBObject(BINARY_COMPARISON_OPERATOR_MAP.get(expr.getOp()), valueObject)); } }
@Override protected QueryExpression itrValueComparisonExpression(ValueComparisonExpression q, Path context) { Path p = rewrite(context, q.getField()); if (!p.equals(q.getField())) { return new ValueComparisonExpression(p, q.getOp(), q.getRvalue()); } else { return q; } }
@Override protected QueryExpression itrValueComparisonExpression(ValueComparisonExpression q, Path context) { Path p = rewrite(context, q.getField()); if (!p.equals(q.getField())) { return new ValueComparisonExpression(p, q.getOp(), q.getRvalue()); } else { return q; } }
@Override protected QueryExpression itrValueComparisonExpression(ValueComparisonExpression q, Path context) { Path p = rewrite(context, q.getField()); if (!p.equals(q.getField())) { return new ValueComparisonExpression(p, q.getOp(), q.getRvalue()); } else { return q; } }
@Override protected QueryExpression itrValueComparisonExpression(ValueComparisonExpression q, Path context) { Path p = map(applyContext(context, q.getField())); if (p != null) { return new ValueComparisonExpression(removeContext(context, p, q.getField()), q.getOp(), q.getRvalue()); } else { return q; } }
@Override protected QueryExpression itrValueComparisonExpression(ValueComparisonExpression q, Path context) { Path p = map(applyContext(context, q.getField())); if (p != null) { return new ValueComparisonExpression(removeContext(context, p, q.getField()), q.getOp(), q.getRvalue()); } else { return q; } }
@Override protected QueryExpression itrValueComparisonExpression(ValueComparisonExpression q, Path context) { QueryFieldInfo qfi = findFieldInfo(q.getField(), q); if (qfi.getFieldEntity() != currentEntity) { return new TruePH(); } else if (qfi.getFieldNameInClause().equals(qfi.getEntityRelativeFieldName()) && nestedFieldPrefix.isEmpty()) { return q; } else { return new ValueComparisonExpression(addPrefix(qfi.getEntityRelativeFieldName()), q.getOp(), q.getRvalue()); } }
@Override protected QueryExpression itrValueComparisonExpression(ValueComparisonExpression q, Path context) { QueryFieldInfo qfi = findFieldInfo(q.getField(), q); if (qfi.getFieldEntity() != currentEntity) { return new TruePH(); } else if (qfi.getFieldNameInClause().equals(qfi.getEntityRelativeFieldName()) && nestedFieldPrefix.isEmpty()) { return q; } else { return new ValueComparisonExpression(addPrefix(qfi.getEntityRelativeFieldName()), q.getOp(), q.getRvalue()); } }
@Override public QueryExpression rewrite(QueryExpression q) { ArrayMatchExpression ae = dyncast(ArrayMatchExpression.class, q); QueryExpression newq = q; if (ae != null) { QueryExpression nestedq = ae.getElemMatch(); ValueComparisonExpression vce; FieldComparisonExpression fce; NaryValueRelationalExpression nvre; NaryFieldRelationalExpression nfre; if ((vce = dyncast(ValueComparisonExpression.class, nestedq)) != null) { newq = new ValueComparisonExpression(normalize(ae, vce.getField()), vce.getOp(), vce.getRvalue()); } else if ((fce = dyncast(FieldComparisonExpression.class, nestedq)) != null) { newq = new FieldComparisonExpression(normalize(ae, fce.getField()), fce.getOp(), normalize(ae, fce.getRfield())); } } return newq; }
@Override public QueryExpression rewrite(QueryExpression q) { ArrayMatchExpression ae = dyncast(ArrayMatchExpression.class, q); QueryExpression newq = q; if (ae != null) { QueryExpression nestedq = ae.getElemMatch(); ValueComparisonExpression vce; FieldComparisonExpression fce; NaryValueRelationalExpression nvre; NaryFieldRelationalExpression nfre; if ((vce = dyncast(ValueComparisonExpression.class, nestedq)) != null) { newq = new ValueComparisonExpression(normalize(ae, vce.getField()), vce.getOp(), vce.getRvalue()); } else if ((fce = dyncast(FieldComparisonExpression.class, nestedq)) != null) { newq = new FieldComparisonExpression(normalize(ae, fce.getField()), fce.getOp(), normalize(ae, fce.getRfield())); } } return newq; }
@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; }