public boolean visit(MySqlSelectQueryBlock select) {
    print("SELECT ");

    if (SQLSetQuantifier.ALL == select.getDistionOption()) print("ALL ");
    else if (SQLSetQuantifier.DISTINCT == select.getDistionOption()) print("DISTINCT ");
    else if (SQLSetQuantifier.DISTINCTROW == select.getDistionOption()) {
      print("DISTINCTROW ");
    }

    if (select.isHignPriority()) {
      print("HIGH_PRIORITY ");
    }

    if (select.isSmallResult()) {
      print("SQL_SMALL_RESULT ");
    }

    if (select.isBigResult()) {
      print("SQL_BIG_RESULT ");
    }

    if (select.isBufferResult()) {
      print("SQL_BUFFER_RESULT ");
    }

    if (select.getCache() != null) {
      if (select.getCache().booleanValue()) {
        print("SQL_CACHE ");
      } else {
        print("SQL_NO_CACHE ");
      }
    }

    if (select.isCalcFoundRows()) {
      print("SQL_CALC_FOUND_ROWS ");
    }

    printSelectList(select.getSelectList());

    if (select.getOutFile() != null) {
      println();
      print("INTO OUTFILE ");
      select.getOutFile().accept(this);
      if (select.getOutFileCharset() != null) {
        print(" CHARACTER SET ");
        print(select.getOutFileCharset());
      }

      if (select.getOutFileColumnsTerminatedBy() != null
          || select.getOutFileColumnsEnclosedBy() != null
          || select.getOutFileColumnsEscaped() != null) {
        print(" COLUMNS");
        if (select.getOutFileColumnsTerminatedBy() != null) {
          print(" TERMINATED BY ");
          select.getOutFileColumnsTerminatedBy().accept(this);
        }

        if (select.getOutFileColumnsEnclosedBy() != null) {
          if (select.isOutFileColumnsEnclosedOptionally()) {
            print(" OPTIONALLY");
          }
          print(" ENCLOSED BY ");
          select.getOutFileColumnsEnclosedBy().accept(this);
        }

        if (select.getOutFileColumnsEscaped() != null) {
          print(" ESCAPED BY ");
          select.getOutFileColumnsEscaped().accept(this);
        }
      }

      if (select.getOutFileLinesStartingBy() != null
          || select.getOutFileLinesTerminatedBy() != null) {
        print(" LINES");
        if (select.getOutFileLinesStartingBy() != null) {
          print(" STARTING BY ");
          select.getOutFileLinesStartingBy().accept(this);
        }

        if (select.getOutFileLinesTerminatedBy() != null) {
          print(" TERMINATED BY ");
          select.getOutFileLinesTerminatedBy().accept(this);
        }
      }
    }

    if (select.getFrom() != null) {
      println();
      print("FROM ");
      select.getFrom().accept(this);
    }

    if (select.getWhere() != null) {
      println();
      print("WHERE ");
      select.getWhere().accept(this);
    }

    if (select.getGroupBy() != null) {
      println();
      select.getGroupBy().accept(this);
    }

    if (select.getOrderBy() != null) {
      println();
      select.getOrderBy().accept(this);
    }

    if (select.getLimit() != null) {
      println();
      select.getLimit().accept(this);
    }

    if (select.getProcedureName() != null) {
      print(" PROCEDURE ");
      select.getProcedureName().accept(this);
      if (select.getProcedureArgumentList().size() > 0) {
        print("(");
        printAndAccept(select.getProcedureArgumentList(), ", ");
        print(")");
      }
    }

    if (select.isForUpdate()) {
      println();
      print("FOR UPDATE");
    }

    if (select.isLockInShareMode()) {
      println();
      print("LOCK IN SHARE MODE");
    }

    return false;
  }