content: /*
   * Copyright (C) 2016-2023 ActionTech.
   * License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher.
   */
  
  package com.actiontech.dble.server.parser;
  
  import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadDataInFileStatement;
  import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
  
  /**
   * Created by szf on 2018/9/17.
   */
  public class DbleOutputVisitor extends MySqlOutputVisitor {
  
      public DbleOutputVisitor(Appendable appender) {
          super(appender);
      }
  
  
      @Override
      public boolean visit(MySqlLoadDataInFileStatement x) {
          print0(ucase ? "LOAD DATA " : "load data ");
  
          if (x.isLowPriority()) {
              print0(ucase ? "LOW_PRIORITY " : "low_priority ");
          }
  
          if (x.isConcurrent()) {
              print0(ucase ? "CONCURRENT " : "concurrent ");
          }
  
          if (x.isLocal()) {
              print0(ucase ? "LOCAL " : "local ");
          }
  
          print0(ucase ? "INFILE " : "infile ");
  
          x.getFileName().accept(this);
  
          if (x.isReplicate()) {
              print0(ucase ? " REPLACE " : " replace ");
          }
  
          if (x.isIgnore()) {
              print0(ucase ? " IGNORE " : " ignore ");
          }
  
          print0(ucase ? " INTO TABLE " : " into table ");
          x.getTableName().accept(this);
  
          if (x.getCharset() != null && !"".equals(x.getCharset())) {
              print0(ucase ? " CHARACTER SET " + x.getCharset().toUpperCase() + " " : " character set " + x.getCharset() + " ");
          }
          columnsParameter(x);
          linesParameter(x);
  
          if (x.getColumns().size() != 0) {
              print0(" (");
              printAndAccept(x.getColumns(), ", ");
              print(')');
          }
  
          if (x.getSetList().size() != 0) {
              print0(ucase ? " SET " : " set ");
              printAndAccept(x.getSetList(), ", ");
          }
  
          return false;
      }
  
      private void columnsParameter(MySqlLoadDataInFileStatement x) {
          if (x.getColumnsTerminatedBy() != null || x.getColumnsEnclosedBy() != null || x.getColumnsEscaped() != null) {
              print0(ucase ? " COLUMNS" : " columns");
              if (x.getColumnsTerminatedBy() != null) {
                  print0(ucase ? " TERMINATED BY " : " terminated by ");
                  x.getColumnsTerminatedBy().accept(this);
              }
  
              if (x.getColumnsEnclosedBy() != null) {
                  if (x.isColumnsEnclosedOptionally()) {
                      print0(ucase ? " OPTIONALLY" : " optionally");
                  }
                  print0(ucase ? " ENCLOSED BY " : " enclosed by ");
                  x.getColumnsEnclosedBy().accept(this);
              }
  
              if (x.getColumnsEscaped() != null) {
                  print0(ucase ? " ESCAPED BY " : " escaped by ");
                  x.getColumnsEscaped().accept(this);
              }
          }
      }
  
      private void linesParameter(MySqlLoadDataInFileStatement x) {
          if (x.getLinesStartingBy() != null || x.getLinesTerminatedBy() != null) {
              print0(ucase ? " LINES" : " lines");
              if (x.getLinesStartingBy() != null) {
                  print0(ucase ? " STARTING BY " : " starting by ");
                  x.getLinesStartingBy().accept(this);
              }
  
              if (x.getLinesTerminatedBy() != null) {
                  print0(ucase ? " TERMINATED BY " : " terminated by ");
                  x.getLinesTerminatedBy().accept(this);
              }
          }
      }
  
  }
  