hadoop-pig-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Swati Jain <swat...@aggiemail.usu.edu>
Subject Re: Add "deepCopy" in LogicalExpression
Date Tue, 13 Jul 2010 17:48:35 GMT
Hi Alan,

By default clone creates a shallow copy of the object in the sense that it
will create a new instance of the object but reference will be the same. Any
change applied to anyone of the object will reflect in both.

The way I am proposing deep copy will create a completely new object in the
sense that changes made to anyone of the object will not reflect in another
We can also override to do the same as above, however it may be better to
use "deepCopy" since the copy semantics are explicit (since deepCopy may be

A second important reason for the way I defined deepCopy is that I can pass
a plan as an argument which will be updated as the expression is copied
(through plan.add() and plan.connect() ).

Please let me know what you think.


On Tue, Jul 13, 2010 at 8:46 AM, Alan Gates <gates@yahoo-inc.com> wrote:

> How does deepCopy differ from clone?
> Alan.
> On Jul 12, 2010, at 11:19 PM, Swati Jain wrote:
>  Hi,
>> I am working on ticket PIG -1494 (
>> https://issues.apache.org/jira/browse/PIG-1494 ).
>> While implementing this functionality (conversion of logical expression
>> into
>> CNF), I need to construct the OperatorPlan for the base expressions of the
>> CNF. For example, given an expression "(c1 < 10) AND (c3+b3 > 10)", the
>> CNF
>> form will result in expressions "(c1 < 10)" and "(c3+b3 > 10)". However,
>> each of these expressions would be referencing the original OperatorPlan
>> (that of expression "(c1 < 10) AND (c3+b3 > 10)" ) whereas they should
>> really be referencing their local OperatorPlan post CNF conversion.
>> To ensure correctness of the above approach, I am planning to add a
>> "deepCopy" method to LogicalExpression to create a copy of expressions. In
>> my opinion, "deepCopy" will be a useful construct to have in general. It
>> would be used as follows:
>> LogicalExpressionPlan logPlan = new LogicalExpressionPlan();
>> LogicalExpression copyExpression = origExpression->deepcopy( logPlan );
>> Please provide feedback if any on the above approach.
>> Note that I considered writing a deepCopy visitor but found that approach
>> flawed because a valid plan is required for a visitor to work correctly,
>> and
>> in this case we need to construct that plan as we copy the expression.
>> Thanks
>> Swati

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message