content: /*
   * Copyright 1999-2012 Alibaba Group.
   *  
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *  
   *      http://www.apache.org/licenses/LICENSE-2.0
   *  
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  /**
   * (created at 2012-8-13)
   */
  package com.alibaba.cobar.parser.ast.fragment.ddl;
  
  import com.alibaba.cobar.parser.ast.ASTNode;
  import com.alibaba.cobar.parser.ast.expression.Expression;
  import com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralString;
  import com.alibaba.cobar.parser.ast.fragment.ddl.datatype.DataType;
  import com.alibaba.cobar.parser.visitor.SQLASTVisitor;
  
  /**
   * NOT FULL AST
   * 
   * @author <a href="mailto:shuo.qius@alibaba-inc.com">QIU Shuo</a>
   */
  public class ColumnDefinition implements ASTNode {
      public static enum SpecialIndex {
          PRIMARY,
          UNIQUE,
      }
  
      public static enum ColumnFormat {
          FIXED,
          DYNAMIC,
          DEFAULT,
      }
  
      private final DataType dataType;
      private final boolean notNull;
      private final Expression defaultVal;
      private final boolean autoIncrement;
      private final SpecialIndex specialIndex;
      private final LiteralString comment;
      private final ColumnFormat columnFormat;
  
      /**
       * @param dataType
       * @param notNull
       * @param defaultVal might be null
       * @param autoIncrement
       * @param specialIndex might be null
       * @param comment might be null
       * @param columnFormat might be null
       */
      public ColumnDefinition(DataType dataType, boolean notNull, Expression defaultVal, boolean autoIncrement,
                              SpecialIndex specialIndex, LiteralString comment, ColumnFormat columnFormat) {
          if (dataType == null)
              throw new IllegalArgumentException("data type is null");
          this.dataType = dataType;
          this.notNull = notNull;
          this.defaultVal = defaultVal;
          this.autoIncrement = autoIncrement;
          this.specialIndex = specialIndex;
          this.comment = comment;
          this.columnFormat = columnFormat;
      }
  
      public DataType getDataType() {
          return dataType;
      }
  
      public boolean isNotNull() {
          return notNull;
      }
  
      public Expression getDefaultVal() {
          return defaultVal;
      }
  
      public boolean isAutoIncrement() {
          return autoIncrement;
      }
  
      public SpecialIndex getSpecialIndex() {
          return specialIndex;
      }
  
      public LiteralString getComment() {
          return comment;
      }
  
      public ColumnFormat getColumnFormat() {
          return columnFormat;
      }
  
      @Override
      public void accept(SQLASTVisitor visitor) {
          visitor.visit(this);
      }
  
  }
  