@Override
 protected void accept0(SQLASTVisitor visitor) {
   if (visitor instanceof MySqlASTVisitor) {
     accept0((MySqlASTVisitor) visitor);
   } else {
     visitor.visit(this);
     visitor.endVisit(this);
   }
 }
  public final void accept(SQLASTVisitor visitor) {
    if (visitor == null) {
      throw new IllegalArgumentException();
    }

    visitor.preVisit(this);

    accept0(visitor);

    visitor.postVisit(this);
  }
 @Override
 protected void accept0(SQLASTVisitor visitor) {
   if (visitor instanceof MySqlASTVisitor) {
     accept0((MySqlASTVisitor) visitor);
   } else {
     throw new IllegalArgumentException(
         "not support visitor type : " + visitor.getClass().getName());
   }
 }