protected void validateBinaryOperatorTypes(final BinaryExpression binaryExpression) throws ExpressionParserException, ExpressionParserInternalError { InfoBinaryOperator binOpt = availableBinaryOperators.get(binaryExpression.getOperator().toUriLiteral()); List<EdmType> actualParameterTypes = new ArrayList<EdmType>(); EdmType operand = binaryExpression.getLeftOperand().getEdmType(); if ((operand == null) && (resourceEntityType == null)) { return; } actualParameterTypes.add(operand); operand = binaryExpression.getRightOperand().getEdmType(); if ((operand == null) && (resourceEntityType == null)) { return; } actualParameterTypes.add(operand); ParameterSet parameterSet = binOpt.validateParameterSet(actualParameterTypes); if (parameterSet == null) { BinaryExpressionImpl binaryExpressionImpl = (BinaryExpressionImpl) binaryExpression; // Tested with TestParserExceptions.TestPMvalidateBinaryOperator throw FilterParserExceptionImpl.createINVALID_TYPES_FOR_BINARY_OPERATOR(binaryExpression.getOperator(), binaryExpression.getLeftOperand().getEdmType(), binaryExpression.getRightOperand().getEdmType(), binaryExpressionImpl.getToken(), curExpression); } binaryExpression.setEdmType(parameterSet.getReturnType()); }
} else if (kind == ExpressionKind.BINARY) { writer.append("<ol class=\"expr\"><li>"); appendExpression(((BinaryExpression) expression).getLeftOperand(), writer); writer.append("</li><li>"); appendExpression(((BinaryExpression) expression).getRightOperand(), writer); writer.append("</li></ol>"); } else if (kind == ExpressionKind.METHOD) {
final EdmSimpleType type = (EdmSimpleType) binaryExpression.getLeftOperand().getEdmType(); final String left = evaluateExpression(data, binaryExpression.getLeftOperand()); final String right = evaluateExpression(data, binaryExpression.getRightOperand()); switch (binaryExpression.getOperator()) { case ADD: if (binaryExpression.getEdmType() == EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Double.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Single.getEdmSimpleTypeInstance()) { return Double.toString(Double.valueOf(left) + Double.valueOf(right)); } else { if (binaryExpression.getEdmType() == EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Double.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Single.getEdmSimpleTypeInstance()) { return Double.toString(Double.valueOf(left) - Double.valueOf(right)); } else { if (binaryExpression.getEdmType() == EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Double.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Single.getEdmSimpleTypeInstance()) { return Double.toString(Double.valueOf(left) * Double.valueOf(right)); } else { return number.endsWith(".0") ? number.replace(".0", "") : number; case MODULO: if (binaryExpression.getEdmType() == EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Double.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Single.getEdmSimpleTypeInstance()) {
final BinaryExpression binaryExpression = (BinaryExpression) whereExpression; MethodOperator operator = null; if (binaryExpression.getLeftOperand().getKind() == ExpressionKind.METHOD) { operator = ((MethodExpression) binaryExpression.getLeftOperand()).getMethod(); if (operator != null && ((binaryExpression.getOperator() == BinaryOperator.EQ) || (binaryExpression.getOperator() == BinaryOperator.NE))) { if (operator == MethodOperator.SUBSTRINGOF) { methodFlag.set(1); final String left = parseToJPAWhereExpression(binaryExpression.getLeftOperand(), tableAlias); index.set(index.get()+1); final String right = parseToJPAWhereExpression(binaryExpression.getRightOperand(), tableAlias); if (!binaryExpression.getOperator().equals(BinaryOperator.EQ) && !(binaryExpression.getRightOperand() instanceof LiteralExpression) && ("true".equals(right) || "false".equals(right))) { reInitializePositionalParameters(); throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.OPERATOR_EQ_NE_MISSING .addContent(binaryExpression.getOperator().toString()), null); } else if (binaryExpression.getOperator().equals(BinaryOperator.EQ)) { if ("false".equals(right)) { return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left.replaceFirst("LIKE", "NOT LIKE") switch (binaryExpression.getOperator()) { case AND: return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + JPQLStatement.DELIMITER.SPACE + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
@Override public Object visitBinary(final BinaryExpression binaryExpression, final BinaryOperator operator, final Object leftSide, final Object rightSide) { try { StringWriter writer = new StringWriter(); JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer); jsonStreamWriter.beginObject().namedStringValueRaw("nodeType", binaryExpression.getKind().toString()).separator() .namedStringValue("operator", operator.toUriLiteral()).separator().namedStringValueRaw("type", getType(binaryExpression)).separator().name("left").unquotedValue(leftSide.toString()).separator().name( "right").unquotedValue(rightSide.toString()).endObject(); writer.flush(); return writer.toString(); } catch (final IOException e) { return null; } }
final EdmSimpleType type = (EdmSimpleType) binaryExpression.getLeftOperand().getEdmType(); final String left = evaluateExpression(data, binaryExpression.getLeftOperand()); final String right = evaluateExpression(data, binaryExpression.getRightOperand()); switch (binaryExpression.getOperator()) { case ADD: if (binaryExpression.getEdmType() == EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Double.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Single.getEdmSimpleTypeInstance()) { return Double.toString(Double.valueOf(left) + Double.valueOf(right)); } else { if (binaryExpression.getEdmType() == EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Double.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Single.getEdmSimpleTypeInstance()) { return Double.toString(Double.valueOf(left) - Double.valueOf(right)); } else { if (binaryExpression.getEdmType() == EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Double.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Single.getEdmSimpleTypeInstance()) { return Double.toString(Double.valueOf(left) * Double.valueOf(right)); } else { return number.endsWith(".0") ? number.replace(".0", "") : number; case MODULO: if (binaryExpression.getEdmType() == EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Double.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Single.getEdmSimpleTypeInstance()) {
final BinaryExpression binaryExpression = (BinaryExpression) whereExpression; MethodOperator operator = null; if (binaryExpression.getLeftOperand().getKind() == ExpressionKind.METHOD) { operator = ((MethodExpression) binaryExpression.getLeftOperand()).getMethod(); if (operator != null && ((binaryExpression.getOperator() == BinaryOperator.EQ) || (binaryExpression.getOperator() == BinaryOperator.NE))) { if (operator == MethodOperator.SUBSTRINGOF) { methodFlag.set(1); final String left = parseToJPAWhereExpression(binaryExpression.getLeftOperand(), tableAlias); index++; final String right = parseToJPAWhereExpression(binaryExpression.getRightOperand(), tableAlias); if (!binaryExpression.getOperator().equals(BinaryOperator.EQ) && !(binaryExpression.getRightOperand() instanceof LiteralExpression) && ("true".equals(right) || "false".equals(right))) { reInitializePositionalParameters(); throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.OPERATOR_EQ_NE_MISSING .addContent(binaryExpression.getOperator().toString()), null); } else if (binaryExpression.getOperator().equals(BinaryOperator.EQ)) { if ("false".equals(right)) { return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left.replaceFirst("LIKE", "NOT LIKE") switch (binaryExpression.getOperator()) { case AND: return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + JPQLStatement.DELIMITER.SPACE
} else if (kind == ExpressionKind.BINARY) { writer.append("<ol class=\"expr\"><li>"); appendExpression(((BinaryExpression) expression).getLeftOperand(), writer); writer.append("</li><li>"); appendExpression(((BinaryExpression) expression).getRightOperand(), writer); writer.append("</li></ol>"); } else if (kind == ExpressionKind.METHOD) {
@Override public Object visitBinary(final BinaryExpression binaryExpression, final BinaryOperator operator, final Object leftSide, final Object rightSide) { try { StringWriter writer = new StringWriter(); JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer); jsonStreamWriter.beginObject().namedStringValueRaw("nodeType", binaryExpression.getKind().toString()).separator() .namedStringValue("operator", operator.toUriLiteral()).separator().namedStringValueRaw("type", getType(binaryExpression)).separator().name("left").unquotedValue(leftSide.toString()).separator().name( "right").unquotedValue(rightSide.toString()).endObject(); writer.flush(); return writer.toString(); } catch (final IOException e) { return null; } }
protected void validateBinaryOperatorTypes(final BinaryExpression binaryExpression) throws ExpressionParserException, ExpressionParserInternalError { InfoBinaryOperator binOpt = availableBinaryOperators.get(binaryExpression.getOperator().toUriLiteral()); final EdmType leftType = binaryExpression.getLeftOperand().getEdmType(); if (leftType == null && resourceEntityType == null) { return; final EdmType rightType = binaryExpression.getRightOperand().getEdmType(); if (rightType == null && resourceEntityType == null) { return; || leftType == EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Null) && rightType != null && rightType.getKind() == EdmTypeKind.ENTITY)) { binaryExpression.setEdmType(EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Boolean)); return; throw FilterParserExceptionImpl.createINVALID_TYPES_FOR_BINARY_OPERATOR(binaryExpression.getOperator(), binaryExpression.getLeftOperand().getEdmType(), binaryExpression.getRightOperand().getEdmType(), binaryExpressionImpl.getToken(), curExpression); binaryExpression.setEdmType(parameterSet.getReturnType());
final EdmSimpleType type = (EdmSimpleType) binaryExpression.getLeftOperand().getEdmType(); final String left = evaluateExpression(data, binaryExpression.getLeftOperand()); final String right = evaluateExpression(data, binaryExpression.getRightOperand()); switch (binaryExpression.getOperator()) { case ADD: if (binaryExpression.getEdmType() == EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Double.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Single.getEdmSimpleTypeInstance()) { return Double.toString(Double.valueOf(left) + Double.valueOf(right)); } else { if (binaryExpression.getEdmType() == EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Double.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Single.getEdmSimpleTypeInstance()) { return Double.toString(Double.valueOf(left) - Double.valueOf(right)); } else { if (binaryExpression.getEdmType() == EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Double.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Single.getEdmSimpleTypeInstance()) { return Double.toString(Double.valueOf(left) * Double.valueOf(right)); } else { return number.endsWith(".0") ? number.replace(".0", "") : number; case MODULO: if (binaryExpression.getEdmType() == EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Double.getEdmSimpleTypeInstance() || binaryExpression.getEdmType() == EdmSimpleTypeKind.Single.getEdmSimpleTypeInstance()) {
@Override public Object visitBinary(final BinaryExpression binaryExpression, final BinaryOperator operator, final Object leftSide, final Object rightSide) { try { StringWriter writer = new StringWriter(); JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer); jsonStreamWriter.beginObject().namedStringValueRaw("nodeType", binaryExpression.getKind().toString()).separator() .namedStringValue("operator", operator.toUriLiteral()).separator().namedStringValueRaw("type", getType(binaryExpression)).separator().name("left").unquotedValue(leftSide.toString()).separator().name( "right").unquotedValue(rightSide.toString()).endObject(); writer.flush(); return writer.toString(); } catch (final IOException e) { return null; } }
protected void validateBinaryOperatorTypes(final BinaryExpression binaryExpression) throws ExpressionParserException, ExpressionParserInternalError { InfoBinaryOperator binOpt = availableBinaryOperators.get(binaryExpression.getOperator().toUriLiteral()); final EdmType leftType = binaryExpression.getLeftOperand().getEdmType(); if (leftType == null && resourceEntityType == null) { return; final EdmType rightType = binaryExpression.getRightOperand().getEdmType(); if (rightType == null && resourceEntityType == null) { return; || leftType == EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Null) && rightType != null && rightType.getKind() == EdmTypeKind.ENTITY)) { binaryExpression.setEdmType(EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Boolean)); return; throw FilterParserExceptionImpl.createINVALID_TYPES_FOR_BINARY_OPERATOR(binaryExpression.getOperator(), binaryExpression.getLeftOperand().getEdmType(), binaryExpression.getRightOperand().getEdmType(), binaryExpressionImpl.getToken(), curExpression); binaryExpression.setEdmType(parameterSet.getReturnType());