# Class AggregateConditionNode

java.lang.Object
org.apache.cayenne.exp.Expression
org.apache.cayenne.exp.parser.SimpleNode
org.apache.cayenne.exp.parser.AggregateConditionNode

All Implemented Interfaces:
  `Serializable, Node, XMLSerializable`

Direct Known Subclasses:
  `ASTAnd, ASTNot, ASTOr, ASTWhen`

public abstract class AggregateConditionNode extends SimpleNode
Superclass of aggregated conditional nodes such as NOT, AND, OR. Performs extra checks on parent and child expressions to validate conditions that are not addressed in the Cayenne expressions grammar.

Since:
  1.1
See Also:
  - Serialized Form

- ## Field Summary

  ### Fields inherited from class SimpleNode

  `children, id, parent`

  ### Fields inherited from class Expression

  `ADD, ALL, AND, ANY, ASTERISK, BETWEEN, BITWISE_AND, BITWISE_LEFT_SHIFT, BITWISE_NOT, BITWISE_OR, BITWISE_RIGHT_SHIFT, BITWISE_XOR, CASE_WHEN, CUSTOM_OP, DB_PATH, DBID_PATH, DIVIDE, ELSE, ENCLOSING_OBJECT, EQUAL_TO, EXISTS, FALSE, FULL_OBJECT, FUNCTION_CALL, GREATER_THAN, GREATER_THAN_EQUAL_TO, IN, LESS_THAN, LESS_THAN_EQUAL_TO, LIKE, LIKE_IGNORE_CASE, LIST, MULTIPLY, NEGATIVE, NOT, NOT_BETWEEN, NOT_EQUAL_TO, NOT_EXISTS, NOT_IN, NOT_LIKE, NOT_LIKE_IGNORE_CASE, OBJ_PATH, OR, PRUNED_NODE, SCALAR, SUBQUERY, SUBTRACT, THEN, TRUE, type, WHEN`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Expression`
  `exists()`
  Returns expression that will be dynamically resolved to proper subqueries based on a relationships used (if no relationships are present in the original expression no subqueries will be used).
  `protected boolean`
  `isValidParent(Node n)`
  Additional parent check that we can't handle properly in the grammar By default it just returns true.
  `void`
  `jjtAddChild(Node n, int i)`
  This method tells the node to add its argument to the node's list of children.
  `Expression`
  `notExists()`
  Returns expression that will be dynamically resolved to proper subqueries based on a relationships used (if no relationships are present in the original expression no subqueries will be used).
  `protected boolean`
  `pruneNodeForPrunedChild(Object prunedChild)`
  Returns true if this node should be pruned from expression tree in the event a child is removed.
  `protected Object`
  `transformExpression(Function<Object,Object> transformer)`
  A recursive method called from "transform" to do the actual transformation.

  ### Methods inherited from class SimpleNode

  `appendAsEJBQL, appendAsEJBQL, appendAsEscapedString, appendAsString, appendChildrenAsEJBQL, appendScalarAsString, connectChildren, encodeScalarAsEJBQL, evaluate, evaluateChild, evaluateNode, expName, flattenTree, getEJBQLExpressionOperator, getExpressionOperator, getOperand, getOperandCount, getPathAliases, jjtClose, jjtGetChild, jjtGetNumChildren, jjtGetParent, jjtOpen, jjtSetParent, notExp, numericToString, setOperand, unwrapChild, wrapChild`

  ### Methods inherited from class Expression

  `andExp, andExp, deepCopy, encodeAsXML, equals, filter, filterObjects, first, getType, hashCode, joinExp, joinExp, match, orExp, orExp, params, params, paramsArray, setType, shallowCopy, toEJBQL, toEJBQL, toString, transform, traverse, traverse`

  ### Methods inherited from class Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- ## Method Details

  - ### pruneNodeForPrunedChild

    protected boolean pruneNodeForPrunedChild(Object prunedChild)
    Description copied from class: `Expression`
    Returns true if this node should be pruned from expression tree in the event a child is removed.
    Overrides:
      `pruneNodeForPrunedChild` in class `SimpleNode`

  - ### transformExpression

    protected Object transformExpression(Function<Object,Object> transformer)
    Description copied from class: `Expression`
    A recursive method called from "transform" to do the actual transformation.
    Overrides:
      `transformExpression` in class `Expression`
    Returns:
      null, Expression.PRUNED_NODE or transformed expression.

  - ### isValidParent

    protected boolean isValidParent(Node n)
    Description copied from class: `SimpleNode`
    Additional parent check that we can't handle properly in the grammar By default it just returns true.
    Overrides:
      `isValidParent` in class `SimpleNode`
    Parameters:
      `n` - potential parent node to check
    Returns:
      true if node could be set as a parent for the current node

  - ### jjtAddChild

    public void jjtAddChild(Node n, int i)
    Description copied from interface: `Node`
    This method tells the node to add its argument to the node's list of children.
    Specified by:
      `jjtAddChild` in interface `Node`
    Overrides:
      `jjtAddChild` in class `SimpleNode`

  - ### exists

    public Expression exists()
    Description copied from class: `Expression`
    Returns expression that will be dynamically resolved to proper subqueries based on a relationships used (if no relationships are present in the original expression no subqueries will be used).
    Overrides:
      `exists` in class `SimpleNode`
    Returns:
      exists expression
    See Also:
      - `ExpressionFactory.exists(Expression)`

  - ### notExists

    public Expression notExists()
    Description copied from class: `Expression`
    Returns expression that will be dynamically resolved to proper subqueries based on a relationships used (if no relationships are present in the original expression no subqueries will be used).
    Overrides:
      `notExists` in class `SimpleNode`
    Returns:
      not exists expression
    See Also:
      - `ExpressionFactory.notExists(Expression)`