# Class ConditionNode

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

All Implemented Interfaces:
  `Serializable, Node, XMLSerializable`

Direct Known Subclasses:
  `ASTAll, ASTAny, ASTBetween, ASTEqual, ASTExists, ASTFalse, ASTGreater, ASTGreaterOrEqual, ASTIn, ASTLess, ASTLessOrEqual, ASTNotBetween, ASTNotEqual, ASTNotExists, ASTNotIn, ASTTrue, PatternMatchNode`

public abstract class ConditionNode extends SimpleNode
Superclass of conditional expressions.

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`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ConditionNode(int i)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected Object`
  `evaluateNode(Object o)`
  Evaluates itself with object, pushing result on the stack.
  `protected abstract Boolean`
  `evaluateSubNode(Object o, Object[] evaluatedChildren)`
  `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 abstract int`
  `getRequiredChildrenCount()`
  `protected boolean`
  `isValidParent(Node n)`
  Additional parent check that we can't handle properly in the grammar By default it just returns true.
  `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).

  ### Methods inherited from class SimpleNode

  `appendAsEJBQL, appendAsEJBQL, appendAsEscapedString, appendAsString, appendChildrenAsEJBQL, appendScalarAsString, connectChildren, encodeScalarAsEJBQL, evaluate, evaluateChild, expName, flattenTree, getEJBQLExpressionOperator, getExpressionOperator, getOperand, getOperandCount, getPathAliases, jjtAddChild, jjtClose, jjtGetChild, jjtGetNumChildren, jjtGetParent, jjtOpen, jjtSetParent, notExp, numericToString, pruneNodeForPrunedChild, 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, transformExpression, traverse, traverse`

  ### Methods inherited from class Object

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

- ## Constructor Details

  - ### ConditionNode

    public ConditionNode(int i)

- ## Method Details

  - ### 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

  - ### evaluateNode

    protected Object evaluateNode(Object o) throws Exception
    Description copied from class: `SimpleNode`
    Evaluates itself with object, pushing result on the stack.
    Specified by:
      `evaluateNode` in class `SimpleNode`
    Throws:
      `Exception`

  - ### getRequiredChildrenCount

    protected abstract int getRequiredChildrenCount()

  - ### evaluateSubNode

    protected abstract Boolean evaluateSubNode(Object o, Object[] evaluatedChildren) throws Exception
    Throws:
      `Exception`

  - ### exists

    public 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).
    Overrides:
      `exists` in class `SimpleNode`
    Returns:
      exists expression
    Since:
      5.0
    See Also:
      - `ExpressionFactory.exists(Expression)`

  - ### notExists

    public 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).
    Overrides:
      `notExists` in class `SimpleNode`
    Returns:
      not exists expression
    Since:
      5.0
    See Also:
      - `ExpressionFactory.notExists(Expression)`