-- Haskell data types for the abstract syntax.
-- Generated by the BNF converter.

module AbsSciDbAFL where

newtype ResAnd = ResAnd String
  deriving (Eq, Ord, Show, Read)

newtype ResArray = ResArray String
  deriving (Eq, Ord, Show, Read)

newtype ResAs = ResAs String
  deriving (Eq, Ord, Show, Read)

newtype ResAsc = ResAsc String
  deriving (Eq, Ord, Show, Read)

newtype ResCompression = ResCompression String
  deriving (Eq, Ord, Show, Read)

newtype ResCreate = ResCreate String
  deriving (Eq, Ord, Show, Read)

newtype ResDefault = ResDefault String
  deriving (Eq, Ord, Show, Read)

newtype ResDesc = ResDesc String
  deriving (Eq, Ord, Show, Read)

newtype ResFalse = ResFalse String
  deriving (Eq, Ord, Show, Read)

newtype ResNot = ResNot String
  deriving (Eq, Ord, Show, Read)

newtype ResNull = ResNull String
  deriving (Eq, Ord, Show, Read)

newtype ResOr = ResOr String
  deriving (Eq, Ord, Show, Read)

newtype ResTemp = ResTemp String
  deriving (Eq, Ord, Show, Read)

newtype ResTrue = ResTrue String
  deriving (Eq, Ord, Show, Read)

newtype ADouble = ADouble String
  deriving (Eq, Ord, Show, Read)

newtype AString = AString String
  deriving (Eq, Ord, Show, Read)

newtype Id = Id String
  deriving (Eq, Ord, Show, Read)

data Exp
    = Eor Exp ResOr Exp
    | Eand Exp ResAnd Exp
    | Eeq Exp Exp
    | Ene Exp Exp
    | Elt Exp Exp
    | Egt Exp Exp
    | Ele Exp Exp
    | Ege Exp Exp
    | EAdd Exp Exp
    | ESub Exp Exp
    | EMul Exp Exp
    | EDiv Exp Exp
    | EMod Exp Exp
    | ENeg Exp
    | EFunc Id [Exp]
    | EVersion Id Integer
    | EArrayVar Id Id
    | EOption Id Exp
    | EAsId Exp ResAs Id
    | EAsc Exp ResAsc
    | EDesc Exp ResDesc
    | EVar Id
    | EScheme Schema
    | EString AString
    | EFalse ResFalse
    | ETrue ResTrue
    | ENull ResNull
    | EInt Integer
    | EDouble ADouble
    | EWildcard
    | EDefault
  deriving (Eq, Ord, Show, Read)

data AFL = Queries [Query]
  deriving (Eq, Ord, Show, Read)

data Query
    = QueryNil
    | QueryExp Exp
    | QueryArray ResCreate ResArray Id Schema
    | QueryTemp ResCreate ResTemp ResArray Id Schema
  deriving (Eq, Ord, Show, Read)

data Schema = Scheme [Attribute] Dimensions
  deriving (Eq, Ord, Show, Read)

data Attribute
    = Attrib Id Id NullableOption DefaultOption CompressionOption
  deriving (Eq, Ord, Show, Read)

data NullableOption
    = NullabeOff | NullableOn ResNull | NullableNot ResNot ResNull
  deriving (Eq, Ord, Show, Read)

data DefaultOption = DefaultOff | DefaultOn ResDefault Exp
  deriving (Eq, Ord, Show, Read)

data CompressionOption
    = CompressionOff | CompressionOn ResCompression AString
  deriving (Eq, Ord, Show, Read)

data Dimensions
    = Dim Dimension
    | DimSemicolon Dimension Dimensions
    | DimComma Dimension Dimensions
  deriving (Eq, Ord, Show, Read)

data Dimension
    = DimId Id
    | DimLoHi Id Exp Exp
    | DimLoHiOverlap Id Exp Exp Exp
    | DimAll Id Exp Exp Exp Exp
    | DimDeprecated Id Exp Exp Exp Exp
  deriving (Eq, Ord, Show, Read)