[
https://issues.apache.org/jira/browse/PIG-1998?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13025600#comment-13025600
]
Xuefu Zhang commented on PIG-1998:
----------------------------------
For patch PIG-1998_2.patch:
1. in the following grammar, the second rule should be just ^(RETURN_VAL). With
that, "return void" is equivalent to return zero alias. So in the code, we
don't need to do this kind of check: rets.size() == 1 &&
rets.get(0).equals("void")
+macro_return_clause
+ : RETURNS alias (COMMA alias)*
+ -> ^(RETURN_VAL alias+)
+ | RETURNS VOID
+ -> ^(RETURN_VAL VOID)
2. The bigger concern is actually the newly added method validate(). I don't
think the StreamingTokenizer will meet our needs. For instance, it's not able
to recognized Pig single line comments such as:
-- this is a single line comment.
Even if this isn't a problem, the maintenance overhead could evolve to a
nightmare for us in long run. I don't necessarily have a better idea, but I
think we should at least give more thoughts on this.
> Allow macro to return void
> --------------------------
>
> Key: PIG-1998
> URL: https://issues.apache.org/jira/browse/PIG-1998
> Project: Pig
> Issue Type: Improvement
> Components: impl
> Affects Versions: 0.9.0
> Reporter: Richard Ding
> Assignee: Richard Ding
> Fix For: 0.9.0
>
> Attachments: PIG-1998_1.patch, PIG-1998_2.patch
>
>
> Pig macro is allowed to not have output alias. But this property isn't clear
> from macro definition and macro invocation (macro inline). Here we propose to
> make it clear:
> 1. If a macro doesn't output any alias, it must specify void as return value.
> For example:
> {code}
> define mymacro(...) returns void {
> ... ...
> };
> {code}
> 2. If a macro doesn't output any alias, it must be invoked without return
> value. For example, to invoke above macro, just specify:
> {code}
> mymacro(...);
> {code}
> 3. Any non-void return alias in the macro definition must exist in the macro
> body and be prefixed with $. For example:
> {code}
> define mymacro(...) returns B {
> ... ...
> $B = filter ...;
> };
> {code}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira