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; }
final OSQLFilterCondition subCondition = new OSQLFilterCondition(currentCondition.right, nextOperator); currentCondition.right = subCondition; subCondition.right = extractConditionItem(false, 1); } else { final OSQLFilterCondition parentCondition = new OSQLFilterCondition(currentCondition, nextOperator); parentCondition.right = extractConditions(parentCondition); currentCondition = parentCondition;
protected OSQLFilterCondition extractCondition() { if (!parserSkipWhiteSpaces()) // END OF TEXT return null; // EXTRACT ITEMS Object left = extractConditionItem(true, 1); if (left != null && checkForEnd(left.toString())) return null; OQueryOperator oper; final Object right; if (left instanceof OQueryOperator && ((OQueryOperator) left).isUnary()) { oper = (OQueryOperator) left; left = extractConditionItem(false, 1); right = null; } else { oper = extractConditionOperator(); if (oper instanceof OQueryOperatorNot) // SPECIAL CASE: READ NEXT OPERATOR oper = new OQueryOperatorNot(extractConditionOperator()); if(oper instanceof OQueryOperatorAnd || oper instanceof OQueryOperatorOr){ right = extractCondition(); }else { right = oper != null ? extractConditionItem(false, oper.expectedRightWords) : null; } } // CREATE THE CONDITION OBJECT return new OSQLFilterCondition(left, oper, right); }
return new OSQLFilterCondition(new OSQLFilterItemField(this, leftField, null), between, betweenBoundaries.toArray()); return new OSQLFilterCondition(new OSQLFilterItemField(this, leftField, null), between, betweenBoundaries.toArray());