@Override protected QueryExpression itrFieldComparisonExpression(FieldComparisonExpression q, Path context) { return new FieldComparisonExpression(toRelative(q.getField(), context), q.getOp(), toRelative(q.getRfield(), context)); }
/** * Returns json representation of the query */ @Override public JsonNode toJson() { return getFactory().objectNode().put("field", field.toString()). put("op", op.toString()). put("rfield", rfield.toString()); } }
@Override protected QueryExpression itrFieldComparisonExpression(FieldComparisonExpression q, Path context) { QueryFieldInfo lField = resolveField(q.getField(), context, q, true); QueryFieldInfo rField = resolveField(q.getRfield(), context, q, true); fieldInfo.add(lField); fieldInfo.add(rField); return q; }
/** * Constructs evaluator for {field op field} style comparison * * @param expr The expression * @param md Entity metadata * @param context The path relative to which the expression will be * evaluated */ public FieldComparisonEvaluator(FieldComparisonExpression expr, FieldTreeNode context) { this.relativePath = expr.getField(); this.rfieldRelativePath = expr.getRfield(); fieldMd = context.resolve(relativePath); if (fieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + relativePath); } rfieldMd = context.resolve(rfieldRelativePath); if (rfieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + rfieldRelativePath); } operator = expr.getOp(); LOGGER.debug("ctor {} {} {}", relativePath, operator, rfieldRelativePath); }
/** * Parses a field comparison or value comparison expression from the given * json object */ public static BinaryRelationalExpression fromJson(ObjectNode node) { if (node.size() == 3) { JsonNode x = node.get("op"); if (x != null) { BinaryComparisonOperator op = BinaryComparisonOperator.fromString(x.asText()); if (op != null) { x = node.get("field"); if (x != null) { Path field = new Path(x.asText()); x = node.get("rfield"); if (x != null) { return new FieldComparisonExpression(field, op, new Path(x.asText())); } else { x = node.get("rvalue"); if (x != null) { return new ValueComparisonExpression(field, op, Value.fromJson(x)); } } } } } } throw Error.get(QueryConstants.ERR_INVALID_COMPARISON_EXPRESSION, node.toString()); } }
private DBObject translateFieldComparison(FieldTreeNode context,FieldComparisonExpression expr) { StringBuilder str = new StringBuilder(256); Path rField = expr.getRfield(); boolean rIsArray=context.resolve(rField) instanceof ArrayField; Path lField = expr.getField(); boolean lIsArray=context.resolve(lField) instanceof ArrayField; int rn = rField.nAnys(); str.append(writeComparisonJS(lJSField,lIsArray,rJSField,rIsArray,expr.getOp())); for (int i = 0; i < rn + ln; i++) { str.append('}'); str.append(writeComparisonJS(ln > 0 ? jsField : translateJsPath(lField),lIsArray, rn > 0 ? jsField : translateJsPath(rField),rIsArray, expr.getOp())); for (int i = 0; i < rn + ln; i++) { str.append('}'); str.append(writeComparisonJS(lField,lIsArray,rField,rIsArray,expr.getOp())); str.append("return false;}");
/** * Parses a field comparison or value comparison expression from the given * json object */ public static BinaryRelationalExpression fromJson(ObjectNode node) { if (node.size() == 3) { JsonNode x = node.get("op"); if (x != null) { BinaryComparisonOperator op = BinaryComparisonOperator.fromString(x.asText()); if (op != null) { x = node.get("field"); if (x != null) { Path field = new Path(x.asText()); x = node.get("rfield"); if (x != null) { return new FieldComparisonExpression(field, op, new Path(x.asText())); } else { x = node.get("rvalue"); if (x != null) { return new ValueComparisonExpression(field, op, Value.fromJson(x)); } } } } } } throw Error.get(QueryConstants.ERR_INVALID_COMPARISON_EXPRESSION, node.toString()); } }
@Override protected QueryExpression itrFieldComparisonExpression(FieldComparisonExpression q, Path context) { return new FieldComparisonExpression(toRelative(q.getField(), context), q.getOp(), toRelative(q.getRfield(), context)); }
this.relativePath = expr.getField(); this.rfieldRelativePath = expr.getRfield(); fieldMd = context.resolve(relativePath); if (fieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_EXPECTED_SIMPLE_FIELD_OR_SIMPLE_ARRAY + " " + rfieldRelativePath); operator = expr.getOp(); LOGGER.debug("ctor {} {} {}", relativePath, operator, rfieldRelativePath);
@Override protected QueryExpression itrFieldComparisonExpression(FieldComparisonExpression q, Path context) { QueryFieldInfo lField = resolveField(q.getField(), context, q, true); QueryFieldInfo rField = resolveField(q.getRfield(), context, q, true); fieldInfo.add(lField); fieldInfo.add(rField); return q; }
/** * Returns json representation of the query */ @Override public JsonNode toJson() { return getFactory().objectNode().put("field", field.toString()). put("op", op.toString()). put("rfield", rfield.toString()); } }
@Override protected QueryExpression itrFieldComparisonExpression(FieldComparisonExpression q, Path context) { Path left = rewrite(context, q.getField()); Path right = rewrite(context, q.getRfield()); if (!left.equals(q.getField()) || !right.equals(q.getRfield())) { return new FieldComparisonExpression(left, q.getOp(), right); } else { return q; } }
this.relativePath = expr.getField(); this.rfieldRelativePath = expr.getRfield(); fieldMd = context.resolve(relativePath); if (fieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_EXPECTED_SIMPLE_FIELD_OR_SIMPLE_ARRAY + " " + rfieldRelativePath); operator = expr.getOp(); LOGGER.debug("ctor {} {} {}", relativePath, operator, rfieldRelativePath);
@Override protected QueryExpression itrFieldComparisonExpression(FieldComparisonExpression q, Path context) { Path left = rewrite(context, q.getField()); Path right = rewrite(context, q.getRfield()); if (!left.equals(q.getField()) || !right.equals(q.getRfield())) { return new FieldComparisonExpression(left, q.getOp(), right); } else { return q; } }
Path rField = query.getRfield(); FieldTreeNode rFieldMd = ctx.contextNode.resolve(rField); Path lField = query.getField(); FieldTreeNode lFieldMd = ctx.contextNode.resolve(lField); String loopVar=ctx.newName("i"); if(query.getOp()==BinaryComparisonOperator._neq) { parentBlock.add(new SimpleStatement("%s=true",comparisonBlock.resultVar)); SimpleExpression cmp=new SimpleExpression(((ArrayField)rFieldMd).getElement().getType() instanceof DateType && "!(this.%s[%s] %s this.%s[%s])", lfieldName,loopVar, BINARY_COMPARISON_OPERATOR_JS_MAP.get(query.getOp()), rfieldName,loopVar); parentBlock.add(IfStatement.ifDefined(lfieldName,rfieldName, arrayFieldName=rfieldName; simpleFieldName=lfieldName; op=query.getOp().invert(); isDate=((ArrayField)rFieldMd).getElement().getType() instanceof DateType && lFieldMd.getType() instanceof DateType; } else { arrayFieldName=lfieldName; simpleFieldName=rfieldName; op=query.getOp(); isDate=((ArrayField)lFieldMd).getElement().getType() instanceof DateType && rFieldMd.getType() instanceof DateType; new SimpleStatement("%s=this.%s %s this.%s",comparisonBlock.resultVar,lfieldName,BINARY_COMPARISON_OPERATOR_JS_MAP.get(query.getOp()),rfieldName)));
@Override protected QueryExpression itrFieldComparisonExpression(FieldComparisonExpression q, Path context) { Path left = rewrite(context, q.getField()); Path right = rewrite(context, q.getRfield()); if (!left.equals(q.getField()) || !right.equals(q.getRfield())) { return new FieldComparisonExpression(left, q.getOp(), right); } else { return q; } }
@Override protected QueryExpression itrFieldComparisonExpression(FieldComparisonExpression q, Path context) { Path r = map(applyContext(context, q.getRfield())); Path l = map(applyContext(context, q.getField())); if (r != null || l != null) { return new FieldComparisonExpression(l == null ? q.getField() : removeContext(context, l, q.getField()), q.getOp(), r == null ? q.getRfield() : removeContext(context, r, q.getRfield())); } else { return q; } }