module Language.Pig.Parser.AST where
#define DERIVE deriving (Eq,Ord,Show,Typeable,Data)
import Data.Data
import Data.Typeable
data PigFile = PigFile String Root
data Root = Seq [Statement]
DERIVE
data Statement = Assignment Alias OpClause
| Describe Alias
| DefineUDF Alias Command DefineSpec
| Store Alias Path Function
DERIVE
data OpClause = LoadClause Path Function TupleDef
| ForeachClause Alias GenBlock
| GroupClause Alias GroupBy
| InnerJoinClause [Join]
| StreamClause Alias Alias TupleDef
DERIVE
data GenBlock = GenBlock [Transform]
DERIVE
data GroupBy = SingleColumn Alias
| MultipleColumn Tuple
DERIVE
data Transform = Flatten String Tuple
| TupleFieldGlob
| AliasTransform Alias Alias
| ExpressionTransform Expression Alias
| FunctionTransform Function Alias
| EnvTransform Scalar Alias
DERIVE
data Join = Join String String
DERIVE
data DefineSpec = Ship Path
DERIVE
data Alias = Identifier String
DERIVE
data Path = Filename String
| Directory String
DERIVE
data Command = Exec String
DERIVE
data Function = Function String [Argument]
DERIVE
data Argument = StringArgument Scalar
| AliasArgument Alias
DERIVE
data TupleDef = TupleDef [Field]
DERIVE
data Tuple = Tuple [Alias]
DERIVE
data Field = Field Alias SimpleType
DERIVE
data Expression = Unary Operator Expression
| Binary Operator Expression Expression
| BinCond BooleanExpression Expression Expression
| ScalarTerm Scalar
| AliasTerm Alias
DERIVE
data BooleanExpression = BooleanExpression ComparisonOperator Expression Expression
| BooleanUnary BooleanOperator BooleanExpression
| BooleanBinary BooleanOperator BooleanExpression BooleanExpression
DERIVE
data Scalar = Number (Either Integer Double)
| String String
DERIVE
data SimpleType = Int
| Long
| Float
| Double
| CharArray
| ByteArray
DERIVE
data BooleanOperator = And
| Or
| Not
DERIVE
data Operator = Neg
| Add
| Subtract
| Multiply
| Divide
| Modulo
DERIVE
data ComparisonOperator = Equal
| NotEqual
| Greater
| Less
| GreaterEqual
| LessEqual
DERIVE