@Override protected QueryExpression itrNaryFieldRelationalExpression(NaryFieldRelationalExpression 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; }
@Override protected QueryExpression itrNaryFieldRelationalExpression(NaryFieldRelationalExpression 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 a json representation of this query */ @Override public JsonNode toJson() { return getFactory().objectNode().put("field", getField().toString()). put("op", getOp().toString()). put("rfield", rfield.toString()); }
/** * Returns a json representation of this query */ @Override public JsonNode toJson() { return getFactory().objectNode().put("field", getField().toString()). put("op", getOp().toString()). put("rfield", rfield.toString()); }
@Override protected QueryExpression itrNaryFieldRelationalExpression(NaryFieldRelationalExpression q, Path context) { Path r = map(applyContext(context, q.getRfield())); Path l = map(applyContext(context, q.getField())); if (r != null || l != null) { return new NaryFieldRelationalExpression(l == null ? q.getField() : removeContext(context, l, q.getField()), q.getOp(), r == null ? q.getRfield() : removeContext(context, r, q.getRfield())); } else { return q; } }
@Override protected QueryExpression itrNaryFieldRelationalExpression(NaryFieldRelationalExpression q, Path context) { Path r = map(applyContext(context, q.getRfield())); Path l = map(applyContext(context, q.getField())); if (r != null || l != null) { return new NaryFieldRelationalExpression(l == null ? q.getField() : removeContext(context, l, q.getField()), q.getOp(), r == null ? q.getRfield() : removeContext(context, r, q.getRfield())); } else { return q; } }
@Override protected QueryExpression itrNaryFieldRelationalExpression(NaryFieldRelationalExpression q, Path context) { return new NaryFieldRelationalExpression(toRelative(q.getField(), context), q.getOp(), toRelative(q.getRfield(), context)); }
@Override protected QueryExpression itrNaryFieldRelationalExpression(NaryFieldRelationalExpression q, Path context) { return new NaryFieldRelationalExpression(toRelative(q.getField(), context), q.getOp(), toRelative(q.getRfield(), context)); }
private DBObject translateNaryFieldRelationalExpression(FieldTreeNode context, NaryFieldRelationalExpression expr) { Type t = resolve(context, expr.getField()).getType(); if (t.supportsEq()) { // Call resolve, which will verify the field exists. Don't need the response. resolve(context,expr.getRfield()); boolean in=expr.getOp()==NaryRelationalOperator._in; return new BasicDBObject("$where", String.format("function() for(var nfr=0;nfr<this.%s.length;nfr++) {if ( %s == %s[nfr] ) return %s;} return %s;}", translateJsPath(expr.getRfield()), translateJsPath(expr.getField()), translateJsPath(expr.getRfield()), in?"true":"false", in?"false":"true")); } else { throw Error.get(ERR_INVALID_FIELD, expr.toString()); } }
public NaryFieldRelationalExpressionEvaluator(NaryFieldRelationalExpression expr, FieldTreeNode context) { field = expr.getField(); fieldMd = context.resolve(field); if (fieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + field); } rfield = expr.getRfield(); FieldTreeNode rf = context.resolve(rfield); if (rf == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + field); } if (rf instanceof ArrayField) { rfieldMd = (ArrayField) rf; } else { throw new EvaluationError(expr, CrudConstants.ERR_REQUIRED_ARRAY + rfield); } operator = expr.getOp(); LOGGER.debug("ctor {} {} {}", field, operator, rfield); }
public NaryFieldRelationalExpressionEvaluator(NaryFieldRelationalExpression expr, FieldTreeNode context) { field = expr.getField(); fieldMd = context.resolve(field); if (fieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + field); } rfield = expr.getRfield(); FieldTreeNode rf = context.resolve(rfield); if (rf == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + field); } if (rf instanceof ArrayField) { rfieldMd = (ArrayField) rf; } else { throw new EvaluationError(expr, CrudConstants.ERR_REQUIRED_ARRAY + rfield); } operator = expr.getOp(); LOGGER.debug("ctor {} {} {}", field, operator, rfield); }
private DBObject translateNaryFieldRelationalExpression(FieldTreeNode context, EntityMetadata md, NaryFieldRelationalExpression expr,MutablePath fullPath) { FieldInfo finfo=resolveFieldForQuery(context,fullPath.immutableCopy(),expr.getField()); Type t = finfo.fieldMd.getType(); if (t.supportsEq()) { if(!fullPath.isEmpty()) { // We are in array elemMatch query, and can't use a $where throw new NeedsJS(); } JSQueryTranslator jstx=new JSQueryTranslator(md); return new BasicDBObject("$where",jstx.translateQuery(expr).toString()); } else { throw Error.get(ERR_INVALID_FIELD, expr.toString()); } }
QueryFieldInfo lfi = findFieldInfo(q.getField(), q); QueryFieldInfo rfi = findFieldInfo(q.getRfield(), q); if (lfi.getFieldEntity() == currentEntity) { return q; } else { return new NaryFieldRelationalExpression(removeContext(lfi.getFieldEntity(),addPrefix(q.getField())), q.getOp(), removeContext(rfi.getFieldEntity(),addPrefix(q.getRfield())));
FieldTreeNode fieldMd=ctx.contextNode.resolve(query.getField()); if(!fieldMd.getType().supportsEq()) { throw Error.get(ERR_INVALID_COMPARISON, query.toString()); Name lname=ctx.varName(new Name(query.getField())); ArrForLoop loop=new ArrForLoop(ctx.newName("i"),rname); block.add(IfStatement.ifDefined(rname,lname,loop));
QueryFieldInfo lfi = findFieldInfo(q.getField(), q); QueryFieldInfo rfi = findFieldInfo(q.getRfield(), q); if (lfi.getFieldEntity() == currentEntity) { return q; } else { return new NaryFieldRelationalExpression(removeContext(lfi.getFieldEntity(),addPrefix(q.getField())), q.getOp(), removeContext(rfi.getFieldEntity(),addPrefix(q.getRfield())));
@Override public QueryExpression rewrite(QueryExpression q) { UnaryLogicalExpression le = dyncast(UnaryLogicalExpression.class, q); if (le != null && le.getOp() == UnaryLogicalOperator._not) { ValueComparisonExpression vce = dyncast(ValueComparisonExpression.class, le.getQuery()); if (vce != null) { return new ValueComparisonExpression(vce.getField(), vce.getOp().negate(), vce.getRvalue()); } else { FieldComparisonExpression fce = dyncast(FieldComparisonExpression.class, le.getQuery()); if (fce != null) { return new FieldComparisonExpression(fce.getField(), fce.getOp().negate(), fce.getRfield()); } else { NaryValueRelationalExpression nre = dyncast(NaryValueRelationalExpression.class, le.getQuery()); if (nre != null) { return new NaryValueRelationalExpression(nre.getField(), nre.getOp().negate(), nre.getValues()); } else { NaryFieldRelationalExpression nfe = dyncast(NaryFieldRelationalExpression.class, le.getQuery()); if (nfe != null) { return new NaryFieldRelationalExpression(nfe.getField(), nfe.getOp().negate(), nfe.getRfield()); } } } } } return q; } }
@Override public QueryExpression rewrite(QueryExpression q) { UnaryLogicalExpression le = dyncast(UnaryLogicalExpression.class, q); if (le != null && le.getOp() == UnaryLogicalOperator._not) { ValueComparisonExpression vce = dyncast(ValueComparisonExpression.class, le.getQuery()); if (vce != null) { return new ValueComparisonExpression(vce.getField(), vce.getOp().negate(), vce.getRvalue()); } else { FieldComparisonExpression fce = dyncast(FieldComparisonExpression.class, le.getQuery()); if (fce != null) { return new FieldComparisonExpression(fce.getField(), fce.getOp().negate(), fce.getRfield()); } else { NaryValueRelationalExpression nre = dyncast(NaryValueRelationalExpression.class, le.getQuery()); if (nre != null) { return new NaryValueRelationalExpression(nre.getField(), nre.getOp().negate(), nre.getValues()); } else { NaryFieldRelationalExpression nfe = dyncast(NaryFieldRelationalExpression.class, le.getQuery()); if (nfe != null) { return new NaryFieldRelationalExpression(nfe.getField(), nfe.getOp().negate(), nfe.getRfield()); } } } } } return q; } }