private OSQLFilterCondition resetOperatorPrecedence(OSQLFilterCondition iCondition) { if (iCondition == null) { return iCondition; } if (iCondition.left != null && iCondition.left instanceof OSQLFilterCondition) { iCondition.left = resetOperatorPrecedence((OSQLFilterCondition) iCondition.left); } if (iCondition.right != null && iCondition.right instanceof OSQLFilterCondition) { OSQLFilterCondition right = (OSQLFilterCondition) iCondition.right; iCondition.right = resetOperatorPrecedence(right); if (iCondition.operator != null) { if (!right.inBraces && right.operator != null && right.operator.precedence < iCondition.operator.precedence) { OSQLFilterCondition newLeft = new OSQLFilterCondition(iCondition.left, iCondition.operator, right.left); right.setLeft(newLeft); resetOperatorPrecedence(right); return right; } } } return iCondition; }
private void mergeRangeConditionsToBetweenOperators(OSQLFilterCondition condition) { if (condition == null) { return; } OSQLFilterCondition newCondition; if (condition.getLeft() instanceof OSQLFilterCondition) { OSQLFilterCondition leftCondition = (OSQLFilterCondition) condition.getLeft(); newCondition = convertToBetweenClause(leftCondition); if (newCondition != null) { condition.setLeft(newCondition); metricRecorder.recordRangeQueryConvertedInBetween(); } else { mergeRangeConditionsToBetweenOperators(leftCondition); } } if (condition.getRight() instanceof OSQLFilterCondition) { OSQLFilterCondition rightCondition = (OSQLFilterCondition) condition.getRight(); newCondition = convertToBetweenClause(rightCondition); if (newCondition != null) { condition.setRight(newCondition); metricRecorder.recordRangeQueryConvertedInBetween(); } else { mergeRangeConditionsToBetweenOperators(rightCondition); } } }
condition.setLeft(optimize((OSQLFilterCondition) condition.getLeft(), indexMatch));