[ 
https://issues.apache.org/jira/browse/PIG-158?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12580939#action_12580939
 ] 

Santhosh Srinivasan commented on PIG-158:
-----------------------------------------

Shravan,

See my replies inline with [Santhosh]. Thanks for the comments.

1) For the visitor, can we not type the Operator with the PhysicalPlan, and the 
PlanVisitor with Operator and the OperatorPlan so that a lot of those 
instanceof checks in the visit methods and in LOVisitor can be avoided.

[Santhosh] Let me separate the comment into two parts
Part 1: Avoiding the instanceof checks- The instanceof checks are present only 
in the visit method of the operators.
Part 2: Having the visit method in Physical

My attempt at getting the compiler to typecheck was a failure at the end. What 
I tried out follows:

Operator.java:

public abstract <T extends PlanVisitor> void visit(T v) throws ParseException;

LOCogroup.java:

public <T extends LOVisitor> void visit(T v) throws ParseException 
{v.visit(this)};

ant compile fails with the following error messages:

    [javac] 
Z:\src_pig\pig\branches\types\src\org\apache\pig\impl\logicalLayer\LOCogroup.java:31:
 org.apache.pig.impl.logicalLayer.LOCogroup is not abstract and does not 
override abstract method <T>visit(T) in org.apache.pig.impl.plan.Operator
    [javac] public class LOCogroup extends LogicalOperator {
    [javac]        ^
    [javac] 
Z:\src_pig\pig\branches\types\src\org\apache\pig\impl\logicalLayer\LOCogroup.java:112:
 method does not override a method from its superclass
    [javac]     @Override


However, if run ant compile again, without making any changes, it succeeds. I 
do not know how to account for this peculiar behaviour

The other option to get ant to work successfully without any magic is the 
following:

Operator.java:

public abstract <T extends PlanVisitor> void visit(T v) throws ParseException;

LOCogroup.java:

public <T extends PlanVisitor> void visit(T v) throws ParseException 
{v.visit(this)};
//requires instanceof to check for LOVisitor


Here, instanceof checks are required to ensure that v is of type LOVisitor.

If someone can shed shome light on this, it would be help us use Java's type 
checking instead of the instanceof operator.


2) Can you check the getSchema method of LOSort?

[Santhosh] Thanks - there was a duplication of the check for hasNext(). I will 
fix that

3) Why do we have an LOEval?

[Santhosh] LOEval will be removed

4) In LOGenerate, why is mProjections a List<LogicalOperator> instead of 
List<ExpressionOperator>?

[Santhosh] Good question. Generate has projections which can be modeled as 
LogicalOperators instead of ExpressionOperators. I left it at the higher 
abstraction.

5) I think you need to look more into aliases. In many places you set it to 
null but I felt there can be aliases attached to it. I am not sure abt this. 
But pls check.

[Santhosh] Are you referring to mSchema = null ? Since the method getSchema can 
throw an exception, I am ensuring that the state is consistent by setting it to 
null and resetting the flag for schema computation.

6) In LOForeach why do you have a List<LogicalOperators> mOperators? Instead I 
was hoping that there will be a LogicalPlan. Then you will have LOGenerate as 
the leaf node.

[Santhosh] Good question again. Since foreach allows one level nesting, my 
interpretation was to have a list of logical operators as the attribute of 
foreach. I am not checking if LOGenerate is the last operator (or leaf node) in 
this list. In the method getSchema, I am making this assumption (also 
documented in code) and returning the schema of the last operator. In addition, 
if foreach allows multiple levels of nesting in the future, one of the logical 
operators in the list can again be a foreach.

I see your point of view too. Can someone review my analysis?

Santhosh

> Rework logical plan
> -------------------
>
>                 Key: PIG-158
>                 URL: https://issues.apache.org/jira/browse/PIG-158
>             Project: Pig
>          Issue Type: Sub-task
>          Components: impl
>            Reporter: Alan Gates
>            Assignee: Alan Gates
>         Attachments: logical_operators.patch
>
>
> Rework the logical plan in line with 
> http://wiki.apache.org/pig/PigExecutionModel

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to