public Coalesce<T> value(Expression<? extends T> expr) { List args = null; if (queryExpr != null) { args = ((InvokeExpression)queryExpr).getArguments(); } args.add(expr); queryExpr = new InvokeExpression(null, "COALESCE", args); return this; }
public Coalesce<T> value(T val) { List args = null; if (queryExpr != null) { args = ((InvokeExpression)queryExpr).getArguments(); } args.add(new Literal(val)); queryExpr = new InvokeExpression(null, "COALESCE", args); return this; } }
private void appendContainsExpression(ExpressionBuilderHelper h, InvokeExpression expr, boolean not) { PrimaryExpression pe = (PrimaryExpression) expr.getLeft(); TupleName fieldName = new TupleName(pe.getTuples()); AbstractMemberMetaData ammd = h.acmd.getMetaDataForMember(fieldName.getShortName()); if (ammd != null && (ammd.getMap() != null || ammd.getCollection() != null)) { processJoinExpression(pe, null, h, h.compilation, false, false, not); if (expr.getArguments().size() > 0) { String name = hints != null ? (String) hints.get(QueryHints.MEMBER_OF_FIELD) : null; h.sb.append(" where "); appendExpression(h, new PrimaryExpression(new TupleName(name != null ? name : "name").getTuple()), ec); h.sb.append(" = "); appendExpression(h, expr.getArguments().get(0), ec); } h.sb.append(")"); } else { // This is simply picklist values appendExpression(h, expr.getLeft(), ec); if (expr.getArguments().size() > 0) { h.sb.append(not ? " excludes(" : " includes("); Literal l = (Literal) expr.getArguments().get(0); h.sb.append(new MultiPicklistFormatter(l.getLiteral().toString()).getFormattedString()); h.sb.append(")"); } else { h.sb.append(not ? " = " : " != ").append("null"); } } }
private void appendContainsExpression(ExpressionBuilderHelper h, InvokeExpression expr, boolean not) { PrimaryExpression pe = (PrimaryExpression) expr.getLeft(); TupleName fieldName = new TupleName(pe.getTuples()); AbstractMemberMetaData ammd = h.acmd.getMetaDataForMember(fieldName.getShortName()); if (ammd != null && (ammd.getMap() != null || ammd.getCollection() != null)) { processJoinExpression(pe, null, h, h.compilation, false, false, not); if (expr.getArguments().size() > 0) { String name = hints != null ? (String) hints.get(QueryHints.MEMBER_OF_FIELD) : null; h.sb.append(" where "); appendExpression(h, new PrimaryExpression(new TupleName(name != null ? name : "name").getTuple()), ec); h.sb.append(" = "); appendExpression(h, expr.getArguments().get(0), ec); } h.sb.append(")"); } else { // This is simply picklist values appendExpression(h, expr.getLeft(), ec); if (expr.getArguments().size() > 0) { h.sb.append(not ? " excludes(" : " includes("); Literal l = (Literal) expr.getArguments().get(0); h.sb.append(new MultiPicklistFormatter(l.getLiteral().toString()).getFormattedString()); h.sb.append(")"); } else { h.sb.append(not ? " = " : " != ").append("null"); } } }
public Object evaluate(InvokeExpression expr, Object invokedValue, InMemoryExpressionEvaluator eval) { Expression argExpr = expr.getArguments().get(0); if (argExpr instanceof PrimaryExpression) { PrimaryExpression primExpr = (PrimaryExpression)argExpr; Object value = eval.getValueForPrimaryExpression(primExpr); return JDOHelper.getVersion(value); } else if (argExpr instanceof ParameterExpression) { ParameterExpression paramExpr = (ParameterExpression)argExpr; Object value = QueryUtils.getValueForParameterExpression(eval.getParameterValues(), paramExpr); return JDOHelper.getVersion(value); } else { throw new NucleusException("Dont currently support JDOHelper.getVersion with arg of type " + argExpr.getClass().getName()); } } }
public Object evaluate(InvokeExpression expr, Object invokedValue, InMemoryExpressionEvaluator eval) { Expression argExpr = expr.getArguments().get(0); if (argExpr instanceof PrimaryExpression) { PrimaryExpression primExpr = (PrimaryExpression)argExpr; Object value = eval.getValueForPrimaryExpression(primExpr); return JDOHelper.getObjectId(value); } else if (argExpr instanceof ParameterExpression) { ParameterExpression paramExpr = (ParameterExpression)argExpr; Object value = QueryUtils.getValueForParameterExpression(eval.getParameterValues(), paramExpr); return JDOHelper.getObjectId(value); } else { throw new NucleusException("Dont currently support JDOHelper.getObjectId with arg of type " + argExpr.getClass().getName()); } } }
appendExpression(h, invocation.getLeft(), executionContext); h.sb.append(" like "); appendExpression(h, invocation.getArguments().get(0), executionContext); } else if ("toLowerCase".equals(oper)) { for (Expression e : invocation.getArguments()) { if (pos++ > 0) { h.sb.append(", ");
appendExpression(h, invocation.getLeft(), executionContext); h.sb.append(" like "); appendExpression(h, invocation.getArguments().get(0), executionContext); } else if ("toLowerCase".equals(oper)) { for (Expression e : invocation.getArguments()) { if (pos++ > 0) { h.sb.append(", ");
private void handleMatchesOperation(InvokeExpression invokeExpr, QueryData qd) { Expression param = (Expression) invokeExpr.getArguments().get(0); Expression escapeParam = null; if (invokeExpr.getArguments().size() == 2) { escapeParam = invokeExpr.getArguments().get(1);
return value; return getDataForExpression(ffms, sObject, ev.getArguments().get(0), fieldName, value.toString()); } else if ("SUM".equals(oper)) { Object value = sObject.getField(fieldName); ExpressionMetaData exprMetaData = getExpressionMetaData(ev.getArguments().get(0)); AbstractMemberMetaData mmd = exprMetaData.getMemberMetaData(); if (mmd != null) { return ((Double) value).longValue(); } else if (mmd.getType() == BigInteger.class || mmd.getType() == BigDecimal.class) { return getDataForExpression(ffms, sObject, ev.getArguments().get(0), fieldName, value.toString());
Expression param = expr.getArguments().get(0); String value = QueryUtils.getStringValueForExpression(param, parameters); filter = new SubstringFilter(attribute); Expression param = expr.getArguments().get(0); String value = QueryUtils.getStringValueForExpression(param, parameters); filter = new SubstringFilter(attribute);
return value; return getDataForExpression(ffms, sObject, ev.getArguments().get(0), fieldName, value.toString()); } else if ("SUM".equals(oper)) { Object value = sObject.getField(fieldName); ExpressionMetaData exprMetaData = getExpressionMetaData(ev.getArguments().get(0)); AbstractMemberMetaData mmd = exprMetaData.getMemberMetaData(); if (mmd != null) { return ((Double) value).longValue(); } else if (mmd.getType() == BigInteger.class || mmd.getType() == BigDecimal.class) { return getDataForExpression(ffms, sObject, ev.getArguments().get(0), fieldName, value.toString());
List<org.datanucleus.query.expression.Expression> args = invokeExpr.getArguments(); if (args != null && !args.isEmpty())
private void handleContainsOperation(InvokeExpression invokeExpr, QueryData qd) { Expression param = (Expression) invokeExpr.getArguments().get(0); param.bind(getSymbolTable()); if (invokeExpr.getLeft() instanceof PrimaryExpression) { PrimaryExpression left = (PrimaryExpression) invokeExpr.getLeft(); // Make sure that the left expression is a collection List<String> tuples = getTuples(left, qd.compilation.getCandidateAlias()); if (tuples.size() == 1) { // Handle case of simple field name AbstractMemberMetaData mmd = qd.acmd.getMetaDataForMember(tuples.get(0)); if (mmd != null && !Collection.class.isAssignableFrom(mmd.getType())) { throw new UnsupportedDatastoreFeatureException("The 'contains' method is only for use with a Collection expression"); } } // treat contains as equality since that's how the low-level api does checks on multi-value properties. addLeftPrimaryExpression(left, Expression.OP_EQ, param, qd); } else if (invokeExpr.getLeft() instanceof ParameterExpression && param instanceof PrimaryExpression) { ParameterExpression pe = (ParameterExpression) invokeExpr.getLeft(); addLeftPrimaryExpression((PrimaryExpression) param, Expression.OP_EQ, pe, qd); } else { throw newUnsupportedQueryMethodException(invokeExpr); } }
List<Expression> args = expr.getArguments();
Literal param = (Literal)invokeExpr.getArguments().get(0); String arg = null; if (param.getLiteral() instanceof String) Literal param = (Literal)invokeExpr.getArguments().get(0); String arg = null; if (param.getLiteral() instanceof String) Object obj = invokeExpr.getArguments().get(0); if (obj instanceof Literal)
List<Expression> argExprs = invokeExpr.getArguments(); if (argExprs == null || argExprs.size() != 1)
/** * We fulfil "String.startsWith" by adding a >= filter for the method argument and a * < filter for the method argument translated into an upper limit for the scan. */ private void handleStartsWithOperation(InvokeExpression invokeExpr, QueryData qd) { Expression param = (Expression) invokeExpr.getArguments().get(0); param.bind(getSymbolTable()); if (invokeExpr.getLeft() instanceof PrimaryExpression) { PrimaryExpression left = (PrimaryExpression) invokeExpr.getLeft(); // Make sure that the left expression is a String List<String> tuples = getTuples(left, qd.compilation.getCandidateAlias()); if (tuples.size() == 1) { // Handle case of simple field name AbstractMemberMetaData mmd = qd.acmd.getMetaDataForMember(tuples.get(0)); if (mmd != null && !String.class.isAssignableFrom(mmd.getType())) { throw new UnsupportedDatastoreFeatureException("The 'startsWith' method is only for use with a String expression"); } } if (param instanceof Literal) { addPrefix(left, param, (String) ((Literal) param).getLiteral(), qd); return; } else if (param instanceof ParameterExpression) { Object parameterValue = getParameterValue(qd.parameters, (ParameterExpression) param); addPrefix(left, param, (String) parameterValue, qd); return; } } // Unsupported combination throw newUnsupportedQueryMethodException(invokeExpr); }
Literal param = (Literal)expr.getArguments().get(0); String arg = null; if (param.getLiteral() instanceof String) Literal param = (Literal)expr.getArguments().get(0);
if (invokeExpr.getOperation().equals("contains") && invokeExpr.getArguments().size() == 1) { handleContainsOperation(invokeExpr, qd); }else if (invokeExpr.getOperation().equals("startsWith") && invokeExpr.getArguments().size() == 1) { handleStartsWithOperation(invokeExpr, qd); } else if (invokeExpr.getOperation().equals("matches")) {