@Override protected LookupSpec processInExpression(NaryValueRelationalExpression q) { return new MultiValueLookupSpec(simpleKeySpec(findFieldInfo(q.getField(),q)), q.getValues().stream().map(Value::getValue).collect(Collectors.toList())); }
@Override protected LookupSpec processInExpression(NaryValueRelationalExpression q) { return new MultiValueLookupSpec(simpleKeySpec(findFieldInfo(q.getField(),q)), q.getValues().stream().map(Value::getValue).collect(Collectors.toList())); }
valueList.addAll(x.getValues());
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); }
@Override protected QueryExpression itrNaryValueRelationalExpression(NaryValueRelationalExpression q, Path context) { return new NaryValueRelationalExpression(toRelative(q.getField(), context), q.getOp(), q.getValues()); }
private DBObject translateNaryValueRelationalExpression(FieldTreeNode context, NaryValueRelationalExpression expr) { Type t = resolve(context, expr.getField()).getType(); if (t.supportsEq()) { List<Object> values = translateValueList(t, expr.getValues()); return new BasicDBObject(translatePath(expr.getField()), new BasicDBObject(NARY_RELATIONAL_OPERATOR_MAP.get(expr.getOp()), values)); } else { throw Error.get(ERR_INVALID_FIELD, expr.toString()); } }
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); }
@Override protected QueryExpression itrNaryValueRelationalExpression(NaryValueRelationalExpression q, Path context) { return new NaryValueRelationalExpression(toRelative(q.getField(), context), q.getOp(), q.getValues()); }
private DBObject translateNaryValueRelationalExpression(FieldTreeNode context, EntityMetadata md, NaryValueRelationalExpression expr,MutablePath fullPath) { FieldInfo finfo=resolveFieldForQuery(context,fullPath.immutableCopy(),expr.getField()); Type t = finfo.fieldMd.getType(); if (t.supportsEq()) { List<Object> values = translateValueList(t, expr.getValues(),finfo.field.equals(ID_PATH)); return new BasicDBObject(translatePath(finfo.field), new BasicDBObject(NARY_RELATIONAL_OPERATOR_MAP.get(expr.getOp()), values)); } else { throw Error.get(ERR_INVALID_FIELD, expr.toString()); } }
@Override protected LookupSpec processOrQueries(List<QueryExpression> list,Path context) { // Here, we're sure that all queries in the list refer to the same field, and there is only one // SimpleKeySpec for the whole list // Thus, we build a multiValuelookupSpec List<Object> values=new ArrayList<>(list.size()); QueryExpression firstq=null; Path firstPath=null; boolean first=true; for(QueryExpression q:list) { if(first) firstq=q; if(q instanceof ValueComparisonExpression) { if(first) firstPath=((ValueComparisonExpression)q).getField(); values.add( ((ValueComparisonExpression)q).getRvalue().getValue() ); } else if(q instanceof NaryValueRelationalExpression) { if(first) firstPath=((NaryValueRelationalExpression)q).getField(); for(Value v: ((NaryValueRelationalExpression)q).getValues()) { values.add(v.getValue()); } } first=false; } return new MultiValueLookupSpec(simpleKeySpec(findFieldInfo(firstPath,firstq)),values); }
protected QueryExpression itrNaryValueRelationalExpression(NaryValueRelationalExpression q, Path context) { Binder binding = getBoundValue(q.getValues()); if (binding != null) { return new NaryValueRelationalExpression(q.getField(), q.getOp(), (List<Value>) binding.getValue()); } else { return q; } }
protected QueryExpression itrNaryValueRelationalExpression(NaryValueRelationalExpression q, Path context) { Binder binding = getBoundValue(q.getValues()); if (binding != null) { return new NaryValueRelationalExpression(q.getField(), q.getOp(), (List<Value>) binding.getValue()); } else { return q; } }
@Override protected LookupSpec processOrQueries(List<QueryExpression> list,Path context) { // Here, we're sure that all queries in the list refer to the same field, and there is only one // SimpleKeySpec for the whole list // Thus, we build a multiValuelookupSpec List<Object> values=new ArrayList<>(list.size()); QueryExpression firstq=null; Path firstPath=null; boolean first=true; for(QueryExpression q:list) { if(first) firstq=q; if(q instanceof ValueComparisonExpression) { if(first) firstPath=((ValueComparisonExpression)q).getField(); values.add( ((ValueComparisonExpression)q).getRvalue().getValue() ); } else if(q instanceof NaryValueRelationalExpression) { if(first) firstPath=((NaryValueRelationalExpression)q).getField(); for(Value v: ((NaryValueRelationalExpression)q).getValues()) { values.add(v.getValue()); } } first=false; } return new MultiValueLookupSpec(simpleKeySpec(findFieldInfo(firstPath,firstq)),values); }
@Override protected QueryExpression itrNaryValueRelationalExpression(NaryValueRelationalExpression q, Path context) { Path p = map(applyContext(context, q.getField())); if (p != null) { return new NaryValueRelationalExpression(removeContext(context, p, q.getField()), q.getOp(), q.getValues()); } else { return q; } }
@Override protected QueryExpression itrNaryValueRelationalExpression(NaryValueRelationalExpression q, Path context) { Path p = map(applyContext(context, q.getField())); if (p != null) { return new NaryValueRelationalExpression(removeContext(context, p, q.getField()), q.getOp(), q.getValues()); } else { return q; } }
@Override protected QueryExpression itrNaryValueRelationalExpression(NaryValueRelationalExpression 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 NaryValueRelationalExpression(addPrefix(qfi.getEntityRelativeFieldName()), q.getOp(), q.getValues()); } }
@Override protected QueryExpression itrNaryValueRelationalExpression(NaryValueRelationalExpression 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 NaryValueRelationalExpression(addPrefix(qfi.getEntityRelativeFieldName()), q.getOp(), q.getValues()); } }
@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; } }
String globalArr=declareValueArray(ctx,fieldMd,query.getValues()); Block block=new Block(ctx.topLevel.newGlobal(ctx,query.getOp()==NaryRelationalOperator._in?"false":"true")); String loopVar=ctx.newName("i");