Skip to content

Commit

Permalink
positional column denomiation foreach
Browse files Browse the repository at this point in the history
  • Loading branch information
elisehuard committed Dec 17, 2013
1 parent fa88129 commit bef2360
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 1 deletion.
3 changes: 3 additions & 0 deletions src/Language/Pig/Parser/AST.hs
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,11 @@ data Transform = Flatten String Tuple -- foreach flatten transform
| FunctionTransform Function Alias
| EnvTransform Scalar Alias
| IdentityTransform Alias
| PositionalTypeTransform SimpleType Pos Alias
DERIVE

type Pos = Integer

data Join = Join String String
DERIVE

Expand Down
11 changes: 10 additions & 1 deletion src/Language/Pig/Parser/Parser.hs
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ lexer = Token.makeTokenParser pigLanguageDef
identifier = Token.identifier lexer
reserved = Token.reserved lexer
reservedOp = Token.reservedOp lexer
integer = Token.integer lexer
naturalOrFloat = Token.naturalOrFloat lexer
integer = Token.integer lexer
semi = Token.semi lexer
comma = Token.comma lexer
whiteSpace = Token.whiteSpace lexer
Expand Down Expand Up @@ -256,6 +256,7 @@ transform :: Parser Transform
transform = try(aliasTransform)
<|> flattenTransform
<|> tupleFieldGlob
<|> try(positionalTypeTransform)
<|> expressionTransform
<|> try(functionTransform)
<|> identityTransform
Expand Down Expand Up @@ -297,6 +298,14 @@ identityTransform :: Parser Transform
identityTransform = IdentityTransform <$>
(Identifier <$> pigIdentifier)

positionalTypeTransform :: Parser Transform
positionalTypeTransform = PositionalTypeTransform <$>
(parens pigType) <*>
(char '$' *>
integer) <*>
(reserved "AS" *>
(Identifier <$> identifier))

-- general expression:
-- fieldExpression or literal or function or binary operation (+-*/%) or bincond (?:)
-- bincond: boolean expression (==, !=, >, <, >=, <=) (and, or, not)
Expand Down
3 changes: 3 additions & 0 deletions test/Language/Pig/Parser/Test.hs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ desktop_client_dates = FOREACH desktop_client GENERATE server_date AS server_dat
, testCase "foreach stmt with quoted string" (testStmt "report = FOREACH report GENERATE '$date' AS date, *;"
"Seq [Assignment (Identifier \"report\") (ForeachClause (Identifier \"report\") (GenBlock [EnvTransform (String \"$date\") (Identifier \"date\"),TupleFieldGlob]))]")

, testCase "foreach stmt with field positions" (testStmt "users = FOREACH users GENERATE (long)$0 AS user_id, (chararray)$7 AS registration_date;"
"Seq [Assignment (Identifier \"users\") (ForeachClause (Identifier \"users\") (GenBlock [PositionalTypeTransform Long 0 (Identifier \"user_id\"),PositionalTypeTransform CharArray 7 (Identifier \"registration_date\")]))]")

, testCase "join stmt" (testStmt "active_users = JOIN users BY user_id, active_users BY user_id;"
"Seq [Assignment (Identifier \"active_users\") (InnerJoinClause [Join \"users\" \"user_id\",Join \"active_users\" \"user_id\"])]")

Expand Down

0 comments on commit bef2360

Please sign in to comment.