public Object execute(OIdentifiable iCurrentRecord, OCommandContext ctx) { if (childExpressions.size() == 0) { return null; } if (childExpressions.size() == 1) { return childExpressions.get(0).execute(iCurrentRecord, ctx); } if (childExpressions.size() == 2) { Object leftValue = childExpressions.get(0).execute(iCurrentRecord, ctx); Object rightValue = childExpressions.get(1).execute(iCurrentRecord, ctx); return operators.get(0).apply(leftValue, rightValue); } return calculateWithOpPriority(iCurrentRecord, ctx); }
public Object execute(OResult iCurrentRecord, OCommandContext ctx) { if (childExpressions.size() == 0) { return null; } if (childExpressions.size() == 1) { return childExpressions.get(0).execute(iCurrentRecord, ctx); } if (childExpressions.size() == 2) { Object leftValue = childExpressions.get(0).execute(iCurrentRecord, ctx); Object rightValue = childExpressions.get(1).execute(iCurrentRecord, ctx); return operators.get(0).apply(leftValue, rightValue); } return calculateWithOpPriority(iCurrentRecord, ctx); }
@Override public Object execute(OIdentifiable iCurrentRecord, OCommandContext ctx) { if (expression != null) { return expression.execute(iCurrentRecord, ctx); } if (statement != null) { throw new UnsupportedOperationException("Execution of select in parentheses is not supported"); } return super.execute(iCurrentRecord, ctx); }
private Object calculateWithOpPriority(OResult iCurrentRecord, OCommandContext ctx) { Deque valuesStack = new ArrayDeque<>(); Deque<Operator> operatorsStack = new ArrayDeque<Operator>(); OMathExpression nextExpression = childExpressions.get(0); Object val = nextExpression.execute(iCurrentRecord, ctx); valuesStack.push(val == null ? NULL_VALUE : val); for (int i = 0; i < operators.size() && i + 1 < childExpressions.size(); i++) { Operator nextOperator = operators.get(i); Object rightValue = childExpressions.get(i + 1).execute(iCurrentRecord, ctx); if (!operatorsStack.isEmpty() && operatorsStack.peek().getPriority() <= nextOperator.getPriority()) { Object right = valuesStack.poll(); right = right == NULL_VALUE ? null : right; Object left = valuesStack.poll(); left = left == NULL_VALUE ? null : left; Object calculatedValue = operatorsStack.poll().apply(left, right); valuesStack.push(calculatedValue == null ? NULL_VALUE : calculatedValue); } operatorsStack.push(nextOperator); valuesStack.push(rightValue == null ? NULL_VALUE : rightValue); } return iterateOnPriorities(valuesStack, operatorsStack); }
private Object calculateWithOpPriority(OIdentifiable iCurrentRecord, OCommandContext ctx) { Deque valuesStack = new ArrayDeque<>(); Deque<Operator> operatorsStack = new ArrayDeque<Operator>(); OMathExpression nextExpression = childExpressions.get(0); Object val = nextExpression.execute(iCurrentRecord, ctx); valuesStack.push(val == null ? NULL_VALUE : val); for (int i = 0; i < operators.size() && i + 1 < childExpressions.size(); i++) { Operator nextOperator = operators.get(i); Object rightValue = childExpressions.get(i + 1).execute(iCurrentRecord, ctx); if (!operatorsStack.isEmpty() && operatorsStack.peek().getPriority() <= nextOperator.getPriority()) { Object right = valuesStack.poll(); right = right == NULL_VALUE ? null : right; Object left = valuesStack.poll(); left = left == NULL_VALUE ? null : left; Object calculatedValue = operatorsStack.poll().apply(left, right); valuesStack.push(calculatedValue == null ? NULL_VALUE : calculatedValue); } operatorsStack.push(nextOperator); valuesStack.push(rightValue == null ? NULL_VALUE : rightValue); } return iterateOnPriorities(valuesStack, operatorsStack); }
public Integer getValue(OIdentifiable iCurrentRecord, Object iResult, OCommandContext ctx) { Object result = null; if (inputValue != null) { result = inputValue.getValue(ctx.getInputParameters()); } else if (expressionValue != null) { result = expressionValue.execute(iCurrentRecord, ctx); } else if (integer != null) { result = integer; } if (result == null) { return null; } if (result instanceof Number) { return ((Number) result).intValue(); } return null; }
public Integer getValue(OResult iCurrentRecord, Object iResult, OCommandContext ctx) { Object result = null; if (inputValue != null) { result = inputValue.getValue(ctx.getInputParameters()); } else if (expressionValue != null) { result = expressionValue.execute(iCurrentRecord, ctx); } else if (integer != null) { result = integer; } if (result == null) { return null; } if (result instanceof Number) { return ((Number) result).intValue(); } return null; }
public Object evaluateRight(OIdentifiable currentRecord, OCommandContext ctx) { Object rightVal = null; if (rightStatement != null) { rightVal = executeQuery(rightStatement, ctx); } else if (rightParam != null) { rightVal = rightParam.getValue(ctx.getInputParameters()); } else if (rightMathExpression != null) { rightVal = rightMathExpression.execute(currentRecord, ctx); } return rightVal; }
public Object evaluateRight(OResult currentRecord, OCommandContext ctx) { Object rightVal = null; if (rightStatement != null) { rightVal = executeQuery(rightStatement, ctx); } else if (rightParam != null) { rightVal = rightParam.getValue(ctx.getInputParameters()); } else if (rightMathExpression != null) { rightVal = rightMathExpression.execute(currentRecord, ctx); } return rightVal; }
private Object calculateNewValue(OResultInternal doc, OCommandContext ctx, OMathExpression.Operator explicitOperator) { OExpression leftEx = new OExpression(left.copy()); if (leftModifier != null) { ((OBaseExpression) leftEx.mathExpression).modifier = leftModifier.copy(); } OMathExpression mathExp = new OMathExpression(-1); mathExp.getChildExpressions().add(leftEx.getMathExpression()); mathExp.getChildExpressions().add(new OParenthesisExpression(right.copy())); mathExp.getOperators().add(explicitOperator); return mathExp.execute(doc, ctx); }
@Override public Object execute(OResult iCurrentRecord, OCommandContext ctx) { if (expression != null) { return expression.execute(iCurrentRecord, ctx); } if (statement != null) { OInternalExecutionPlan execPlan = statement.createExecutionPlan(ctx, false); if (execPlan instanceof OInsertExecutionPlan) { ((OInsertExecutionPlan) execPlan).executeInternal(); } OLocalResultSet rs = new OLocalResultSet(execPlan); List<OResult> result = new ArrayList<>(); while (rs.hasNext()) { result.add(rs.next()); } // List<OResult> result = rs.stream().collect(Collectors.toList());//TODO streamed... rs.close(); return result; } return super.execute(iCurrentRecord, ctx); }
return mathExpression.execute(iCurrentRecord, ctx); return new ORecordId(v.cluster.getValue().intValue(), v.position.getValue().longValue()); } else if (value instanceof OMathExpression) { return ((OMathExpression) value).execute(iCurrentRecord, ctx); } else if (value instanceof OArrayConcatExpression) { return ((OArrayConcatExpression) value).execute(iCurrentRecord, ctx);
@Override public boolean evaluate(OIdentifiable currentRecord, OCommandContext ctx) { Object leftVal = left.execute(currentRecord, ctx); Object rightVal = null; if (rightStatement != null) { rightVal = OInCondition.executeQuery(rightStatement, ctx); } else if (rightParam != null) { rightVal = rightParam.getValue(ctx.getInputParameters()); } else if (rightMathExpression != null) { rightVal = rightMathExpression.execute(currentRecord, ctx); } if (rightVal == null) { return true; } return !OInCondition.evaluateExpression(leftVal, rightVal); }
@Override public boolean evaluate(OResult currentRecord, OCommandContext ctx) { Object leftVal = left.execute(currentRecord, ctx); Object rightVal = null; if (rightStatement != null) { rightVal = OInCondition.executeQuery(rightStatement, ctx); } else if (rightParam != null) { rightVal = rightParam.getValue(ctx.getInputParameters()); } else if (rightMathExpression != null) { rightVal = rightMathExpression.execute(currentRecord, ctx); } if (rightVal == null) { return true; } return !OInCondition.evaluateExpression(leftVal, rightVal); }
return mathExpression.execute(iCurrentRecord, ctx); return new ORecordId(v.cluster.getValue().intValue(), v.position.getValue().longValue()); } else if (value instanceof OMathExpression) { return ((OMathExpression) value).execute(iCurrentRecord, ctx); } else if (value instanceof OArrayConcatExpression) { return ((OArrayConcatExpression) value).execute(iCurrentRecord, ctx);