package com.alibaba.druid.sql.ast.statement;

import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.SQLObject;
import com.alibaba.druid.sql.ast.SQLStatementImpl;
import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
import java.util.ArrayList;
import java.util.List;

public class SQLAlterSequenceStatement extends SQLStatementImpl implements SQLAlterStatement {
   private SQLName name;
   private Boolean withCache;
   private SQLExpr startWith;
   private SQLExpr incrementBy;
   private SQLExpr minValue;
   private SQLExpr maxValue;
   private boolean noMaxValue;
   private boolean noMinValue;
   private Boolean cycle;
   private Boolean cache;
   private SQLExpr cacheValue;
   private boolean restart;
   private SQLExpr restartWith;
   private Boolean order;
   private SQLExpr currentValue;
   private boolean changeToSimple;
   private boolean changeToGroup;
   private boolean changeToTime;

   public void accept0(SQLASTVisitor visitor) {
      if (visitor.visit(this)) {
         this.acceptChild(visitor, this.name);
         this.acceptChild(visitor, this.startWith);
         this.acceptChild(visitor, this.incrementBy);
         this.acceptChild(visitor, this.minValue);
         this.acceptChild(visitor, this.maxValue);
      }

      visitor.endVisit(this);
   }

   public List<SQLObject> getChildren() {
      List<SQLObject> children = new ArrayList();
      if (this.name != null) {
         children.add(this.name);
      }

      if (this.startWith != null) {
         children.add(this.startWith);
      }

      if (this.incrementBy != null) {
         children.add(this.incrementBy);
      }

      if (this.minValue != null) {
         children.add(this.minValue);
      }

      if (this.maxValue != null) {
         children.add(this.maxValue);
      }

      return children;
   }

   public SQLName getName() {
      return this.name;
   }

   public void setName(SQLName name) {
      this.name = name;
   }

   public SQLExpr getStartWith() {
      return this.startWith;
   }

   public void setStartWith(SQLExpr startWith) {
      this.startWith = startWith;
   }

   public SQLExpr getIncrementBy() {
      return this.incrementBy;
   }

   public void setIncrementBy(SQLExpr incrementBy) {
      this.incrementBy = incrementBy;
   }

   public SQLExpr getMaxValue() {
      return this.maxValue;
   }

   public void setMaxValue(SQLExpr maxValue) {
      this.maxValue = maxValue;
   }

   public Boolean getCycle() {
      return this.cycle;
   }

   public void setCycle(Boolean cycle) {
      this.cycle = cycle;
   }

   public Boolean getCache() {
      return this.cache;
   }

   public void setCache(Boolean cache) {
      this.cache = cache;
   }

   public Boolean getWithCache() {
      return this.withCache;
   }

   public void setWithCache(Boolean withCache) {
      this.withCache = withCache;
   }

   public Boolean getOrder() {
      return this.order;
   }

   public void setOrder(Boolean order) {
      this.order = order;
   }

   public SQLExpr getMinValue() {
      return this.minValue;
   }

   public void setMinValue(SQLExpr minValue) {
      this.minValue = minValue;
   }

   public boolean isNoMaxValue() {
      return this.noMaxValue;
   }

   public void setNoMaxValue(boolean noMaxValue) {
      this.noMaxValue = noMaxValue;
   }

   public boolean isNoMinValue() {
      return this.noMinValue;
   }

   public void setNoMinValue(boolean noMinValue) {
      this.noMinValue = noMinValue;
   }

   public String getSchema() {
      SQLName name = this.getName();
      if (name == null) {
         return null;
      } else {
         return name instanceof SQLPropertyExpr ? ((SQLPropertyExpr)name).getOwnernName() : null;
      }
   }

   public SQLExpr getCacheValue() {
      return this.cacheValue;
   }

   public void setCacheValue(SQLExpr cacheValue) {
      if (cacheValue != null) {
         cacheValue.setParent(this);
      }

      this.cacheValue = cacheValue;
   }

   public boolean isChangeToSimple() {
      return this.changeToSimple;
   }

   public void setChangeToSimple(boolean changeToSimple) {
      this.changeToSimple = changeToSimple;
   }

   public boolean isChangeToGroup() {
      return this.changeToGroup;
   }

   public void setChangeToGroup(boolean changeToGroup) {
      this.changeToGroup = changeToGroup;
   }

   public boolean isChangeToTime() {
      return this.changeToTime;
   }

   public void setChangeToTime(boolean changeToTime) {
      this.changeToTime = changeToTime;
   }

   public boolean isRestart() {
      return this.restart;
   }

   public void setRestart(boolean restart) {
      this.restart = restart;
   }

   public SQLExpr getRestartWith() {
      return this.restartWith;
   }

   public void setRestartWith(SQLExpr x) {
      if (x != null) {
         x.setParent(this);
      }

      this.restartWith = x;
   }

   public SQLExpr getCurrentValue() {
      return this.currentValue;
   }

   public void setCurrentValue(SQLExpr currentValue) {
      this.currentValue = currentValue;
   }
}
