private Object getValueFromDyadicExpression(Expression expr) { // In general we don't support nested dyadic expressions // but we special case negation: // select * from table where val = -33 DyadicExpression dyadic = (DyadicExpression) expr; if (dyadic.getLeft() instanceof Literal && ((Literal) dyadic.getLeft()).getLiteral() instanceof Number && dyadic.getRight() == null && Expression.OP_NEG.equals(dyadic.getOperator())) { Number negateMe = (Number) ((Literal) dyadic.getLeft()).getLiteral(); return negateNumber(negateMe); } throw new UnsupportedDatastoreFeatureException( "Right side of expression is composed of unsupported components. " + "Left: " + dyadic.getLeft().getClass().getName() + ", Op: " + dyadic.getOperator() + ", Right: " + dyadic.getRight()); }
public BooleanExpression eq(T t) { org.datanucleus.query.expression.Expression leftQueryExpr = queryExpr; org.datanucleus.query.expression.Expression rightQueryExpr = new Literal(t); return new BooleanExpressionImpl(new DyadicExpression(leftQueryExpr, org.datanucleus.query.expression.Expression.OP_EQ, rightQueryExpr)); }
if (updateExpr.getLeft() instanceof PrimaryExpression) processPrimaryExpression((PrimaryExpression)updateExpr.getLeft()); leftSqlExpr = stack.pop(); if (leftSqlExpr.getSQLTable() != stmt.getPrimaryTable()) throw new NucleusException("Dont currently support update clause containing left expression of type " + updateExpr.getLeft()); if (updateExpr.getRight() instanceof Literal) processLiteral((Literal)updateExpr.getRight()); rightSqlExpr = stack.pop(); else if (updateExpr.getRight() instanceof ParameterExpression) ParameterExpression paramExpr = (ParameterExpression)updateExpr.getRight(); paramMappingForName.put(paramExpr.getId(), leftSqlExpr.getJavaTypeMapping()); processParameterExpression(paramExpr); rightSqlExpr = stack.pop(); else if (updateExpr.getRight() instanceof PrimaryExpression) processPrimaryExpression((PrimaryExpression)updateExpr.getRight()); rightSqlExpr = stack.pop(); else if (updateExpr.getRight() instanceof DyadicExpression) updateExpr.getRight().evaluate(this); rightSqlExpr = stack.pop();
dyExpr.evaluate(this); invokedSqlExpr = stack.pop();
Expression left = dyExpr.getLeft(); Expression right = dyExpr.getRight(); StringBuilder str = new StringBuilder("("); if (dyExpr.getOperator() == Expression.OP_DISTINCT) if (left != null && dyExpr.getOperator() == Expression.OP_NOT) else if (dyExpr.getOperator() == Expression.OP_CAST) if (dyExpr.getOperator() == Expression.OP_AND) else if (dyExpr.getOperator() == Expression.OP_OR) else if (dyExpr.getOperator() == Expression.OP_ADD) else if (dyExpr.getOperator() == Expression.OP_SUB) else if (dyExpr.getOperator() == Expression.OP_MUL) else if (dyExpr.getOperator() == Expression.OP_DIV) else if (dyExpr.getOperator() == Expression.OP_EQ) else if (dyExpr.getOperator() == Expression.OP_GT) else if (dyExpr.getOperator() == Expression.OP_LT) else if (dyExpr.getOperator() == Expression.OP_GTEQ)
@Override public CharacterExpression com() { org.datanucleus.query.expression.Expression queryExpr = new DyadicExpression(org.datanucleus.query.expression.Expression.OP_COM, this.queryExpr); return new CharacterExpressionImpl(queryExpr); } }
Expression left = dyExpr.getLeft(); Expression right = dyExpr.getRight(); StringBuffer str = new StringBuffer("("); if (left != null) (dyExpr.getOperator() == Expression.OP_EQ || dyExpr.getOperator() == Expression.OP_NOTEQ)) str.append(dyExpr.getOperator() == Expression.OP_EQ ? " IS NULL" : " IS NOT NULL"); if (dyExpr.getOperator() == Expression.OP_AND) else if (dyExpr.getOperator() == Expression.OP_OR) else if (dyExpr.getOperator() == Expression.OP_ADD) else if (dyExpr.getOperator() == Expression.OP_SUB) else if (dyExpr.getOperator() == Expression.OP_MUL) else if (dyExpr.getOperator() == Expression.OP_DIV) else if (dyExpr.getOperator() == Expression.OP_EQ) else if (dyExpr.getOperator() == Expression.OP_GT) else if (dyExpr.getOperator() == Expression.OP_LT) else if (dyExpr.getOperator() == Expression.OP_GTEQ)
public Expression<String> concat(Expression<String> expr0, Expression<String> expr1) { ExpressionImpl<String> concatExpr = new ExpressionImpl<String>(String.class); concatExpr.queryExpr = new DyadicExpression(((ExpressionImpl)expr0).queryExpr, org.datanucleus.query.expression.Expression.OP_ADD, ((ExpressionImpl)expr1).queryExpr); return concatExpr; }
@Override public BooleanExpression neg() { org.datanucleus.query.expression.Expression queryExpr = new DyadicExpression(org.datanucleus.query.expression.Expression.OP_NEG, this.queryExpr); return new BooleanExpressionImpl(queryExpr); } }
public BooleanExpression ne(T t) { org.datanucleus.query.expression.Expression leftQueryExpr = queryExpr; org.datanucleus.query.expression.Expression rightQueryExpr = new Literal(t); return new BooleanExpressionImpl(new DyadicExpression(leftQueryExpr, org.datanucleus.query.expression.Expression.OP_NOTEQ, rightQueryExpr)); }
@Override public NumericExpression neg() { org.datanucleus.query.expression.Expression queryExpr = new DyadicExpression(org.datanucleus.query.expression.Expression.OP_NEG, this.queryExpr); return new NumericExpressionImpl(queryExpr); }
@Override public NumericExpression com() { org.datanucleus.query.expression.Expression queryExpr = new DyadicExpression(org.datanucleus.query.expression.Expression.OP_COM, this.queryExpr); return new NumericExpressionImpl(queryExpr); }
@Override public CharacterExpression neg() { org.datanucleus.query.expression.Expression queryExpr = new DyadicExpression(org.datanucleus.query.expression.Expression.OP_NEG, this.queryExpr); return new CharacterExpressionImpl(queryExpr); }
public BooleanExpression not() { Expression rightQueryExpr = queryExpr; org.datanucleus.query.expression.Expression queryExpr = new DyadicExpression(org.datanucleus.query.expression.Expression.OP_NOT, rightQueryExpr); return new BooleanExpressionImpl(queryExpr); }
public NumericExpression<Long> countDistinct() { List<org.datanucleus.query.expression.Expression> args = new ArrayList(); args.add(new DyadicExpression(org.datanucleus.query.expression.Expression.OP_DISTINCT, queryExpr)); org.datanucleus.query.expression.Expression invokeExpr = new InvokeExpression(null, "count", args); return new NumericExpressionImpl<Long>(invokeExpr); } }
public <Y extends Comparable<? super Y>> Predicate between(Expression<? extends Y> expr0, Expression<? extends Y> expr1, Expression<? extends Y> expr2) { PredicateImpl pred = new PredicateImpl(); org.datanucleus.query.expression.Expression theExpr = ((ExpressionImpl)expr0).getQueryExpression(); org.datanucleus.query.expression.Expression lowerExpr = ((ExpressionImpl)expr1).getQueryExpression(); org.datanucleus.query.expression.Expression upperExpr = ((ExpressionImpl)expr2).getQueryExpression(); DyadicExpression lowerDyadic = new DyadicExpression(theExpr, org.datanucleus.query.expression.Expression.OP_GTEQ, lowerExpr); DyadicExpression upperDyadic = new DyadicExpression(theExpr, org.datanucleus.query.expression.Expression.OP_LTEQ, upperExpr); DyadicExpression overallDyadic = new DyadicExpression(lowerDyadic, org.datanucleus.query.expression.Expression.OP_AND, upperDyadic); pred.queryExpr = overallDyadic; return pred; }
public BooleanExpression eq(Expression expr) { if (expr == null) { // Assume they meant to compare with NULL Literal return this.eq((T)null); } org.datanucleus.query.expression.Expression leftQueryExpr = queryExpr; org.datanucleus.query.expression.Expression rightQueryExpr = ((ExpressionImpl)expr).getQueryExpression(); return new BooleanExpressionImpl(new DyadicExpression(leftQueryExpr, org.datanucleus.query.expression.Expression.OP_EQ, rightQueryExpr)); }
public BooleanExpression ne(Expression expr) { if (expr == null) { // Assume they meant to compare with NULL Literal return this.ne((T)null); } org.datanucleus.query.expression.Expression leftQueryExpr = queryExpr; org.datanucleus.query.expression.Expression rightQueryExpr = ((ExpressionImpl)expr).getQueryExpression(); return new BooleanExpressionImpl(new DyadicExpression(leftQueryExpr, org.datanucleus.query.expression.Expression.OP_NOTEQ, rightQueryExpr)); }
public <Y extends Comparable<? super Y>> Predicate between(Expression<? extends Y> expr, Y obj0, Y obj1) { PredicateImpl pred = new PredicateImpl(); org.datanucleus.query.expression.Expression theExpr = ((ExpressionImpl)expr).getQueryExpression(); Literal litLower = new Literal(obj0); Literal litUpper = new Literal(obj1); DyadicExpression lowerDyadic = new DyadicExpression(theExpr, org.datanucleus.query.expression.Expression.OP_GTEQ, litLower); DyadicExpression upperDyadic = new DyadicExpression(theExpr, org.datanucleus.query.expression.Expression.OP_LTEQ, litUpper); DyadicExpression overallDyadic = new DyadicExpression(lowerDyadic, org.datanucleus.query.expression.Expression.OP_AND, upperDyadic); pred.queryExpr = overallDyadic; return pred; }
public NumericExpression add(Expression expr) { org.datanucleus.query.expression.Expression leftQueryExpr = queryExpr; org.datanucleus.query.expression.Expression rightQueryExpr = ((ExpressionImpl)expr).getQueryExpression(); org.datanucleus.query.expression.Expression queryExpr = new DyadicExpression(leftQueryExpr, org.datanucleus.query.expression.Expression.OP_ADD, rightQueryExpr); return new NumericExpressionImpl(queryExpr); }