/**
  * Get Data for identification variable.
  *
  * @param idVarNode A node that corresponds to
  * @return
  */
 private IdentificationVariableData getIdentificationVarData(EJBQLAST idVarNode) {
   JavaType entityJavaType = (JavaType) idVarNode.getTypeInfo();
   assert entityJavaType != null
       : "This method is to be called only for" // NOI18N
           + "node that corresponds to identification variable."; // NOI18N
   String navigationId = idVarNode.getNavigationId();
   return selectPlan.getIdentificationVariableData(entityJavaType, navigationId);
 }
  /**
   * Process user parameters. User parameters of type PersistenceCapable are treated specially.
   *
   * @param node The node represting pararmeter in query tree
   * @return If the parameter corresponds to a PersistenceCapable type, the text of the node as it
   *     is. Please note that by convention, all methods processing where clause rerturn a
   *     StringBuffer. This methos deviates from the convention for parameter of PersistenceCapable
   *     type. However, for this type of parameter, the return value of this method will always go
   *     into method leaveRelationalExpresionEntityEqual() which will always return a Stringbuffer.
   *     Else a StringBuffer representing parameter marker.
   */
  @Override
  public Object leaveParameter(EJBQLAST node) {
    // TODO: As per discussion on conf call on 05/05, it should be possible to
    // extract enough information while in this method to get hold of RunTimeMappingField
    // (That is atleast String entityType and String fieldName).
    // This information is required for embedded objects and object cocomparison
    // for objects with composite pk to construct correct sql text and parameters
    Object retVal;
    JavaType javaType = (JavaType) node.getTypeInfo();
    if (javaType.isPersistenceCapable()) {
      // If this corresponds to an entity mapped to composite pk, this
      // parameter will translate into multiple parameter markers in the
      // generated sql. Let leaveRelationalExpresionEntityEqual handle this
      // case
      retVal = selectPlan.getParameterData(javaType, node.getText());

    } else {
      // The parameter will have exactly one parameter marker in the
      // generated sql text. Add the parameter to plan.
      retVal = selectPlan.addUserParameter(node.getText());
    }
    return retVal;
  }
 /** @return name of the field as String */
 @Override
 public Object leaveFieldCMRField(EJBQLAST node) {
   return node.getText();
 }
 /** @return name of the field as String */
 @Override
 public String leaveFieldCMPField(EJBQLAST node) {
   return node.getText();
 }
 @Override
 public StringBuffer leaveSingleCharStringLiteral(EJBQLAST node) {
   return selectPlan.getSingleCharExpr(node.getText());
 }
 @Override
 public StringBuffer leaveWildcard(EJBQLAST node) {
   return new StringBuffer(node.getText());
 }
 @Override
 public StringBuffer leaveLiteralString(EJBQLAST node) {
   return selectPlan.getStringExpr(node.getText());
 }
 @Override
 public StringBuffer leaveLiteralDouble(EJBQLAST node) {
   return new StringBuffer(node.getText());
 }
 /**
  * For query Select .. from Department d...., This method is called for expression Department.
  *
  * @param node The node in query tree that corresponds to the experssion.
  * @return fully qualified name of the javaType of this node.
  */
 @Override
 public String leaveAbstractSchemaName(EJBQLAST node) {
   JavaType javaType = (JavaType) node.getTypeInfo();
   return javaType.getName();
 }