@Override
 public void replaceParameters(Map<Object, Object> params) {
   left.replaceParameters(params);
   if (condition != null) {
     condition.replaceParameters(params);
   }
   if (expression != null) {
     expression.replaceParameters(params);
   }
 }
 public String toString() {
   StringBuilder result = new StringBuilder();
   result.append(left.toString());
   result.append(" CONTAINSVALUE ");
   if (condition != null) {
     result.append("(");
     result.append(condition.toString());
     result.append(")");
   } else {
     result.append(expression.toString());
   }
   return result.toString();
 }
  @Override
  public String toString() {
    StringBuilder result = new StringBuilder();
    result.append("CREATE EDGE");
    if (targetClass != null) {
      result.append(" ");
      result.append(targetClass.toString());
      if (targetClusterName != null) {
        result.append(" CLUSTER ");
        result.append(targetClusterName.toString());
      }
    }
    result.append(" FROM ");
    if (leftRid != null) {
      result.append(leftRid.toString());
    } else if (leftRids != null) {
      result.append("[");
      boolean first = true;
      for (ORid rid : leftRids) {
        if (!first) {
          result.append(", ");
        }
        result.append(rid.toString());
        first = false;
      }
      result.append("]");
    } else if (leftStatement != null) {
      result.append("(");
      result.append(leftStatement.toString());
      result.append(")");
    } else if (leftParam != null) {
      if (leftParamValue == unset) {
        result.append(leftParam.toString());
      } else if (leftParamValue == null) {
        result.append("NULL");
      } else if (leftParamValue instanceof String) {
        result.append("\"" + OExpression.encode("" + leftParamValue) + "\"");
      } else {
        result.append(leftParamValue.toString());
      }
    } else if (leftIdentifier != null) {
      result.append(leftIdentifier.toString());
    }
    result.append(" TO ");
    if (rightRid != null) {
      result.append(rightRid.toString());
    } else if (rightRids != null) {
      result.append("[");
      boolean first = true;
      for (ORid rid : rightRids) {
        if (!first) {
          result.append(", ");
        }
        result.append(rid.toString());
        first = false;
      }
      result.append("]");
    } else if (rightStatement != null) {
      result.append("(");
      result.append(rightStatement.toString());
      result.append(")");
    } else if (rightParam != null) {
      if (rightParamValue == unset) {
        result.append(rightParam.toString());
      } else if (rightParamValue == null) {
        result.append("NULL");
      } else if (rightParamValue instanceof String) {
        result.append("\"" + OExpression.encode("" + rightParamValue) + "\"");
      } else {
        result.append(rightParamValue.toString());
      }
    } else if (rightIdentifier != null) {
      result.append(rightIdentifier.toString());
    }
    if (body != null) {
      result.append(" ");
      result.append(body.toString());
    }
    if (retry != null) {
      result.append(" RETRY ");
      result.append(retry);
    }
    if (wait != null) {
      result.append(" WAIT ");
      result.append(wait);
    }

    return result.toString();
  }