You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by da...@apache.org on 2014/08/27 02:40:00 UTC

svn commit: r1620769 [1/2] - in /pig/trunk: ./ src/org/apache/pig/ src/org/apache/pig/builtin/ src/org/apache/pig/newplan/ src/org/apache/pig/newplan/logical/expression/ src/org/apache/pig/newplan/logical/optimizer/ src/org/apache/pig/newplan/logical/r...

Author: daijy
Date: Wed Aug 27 00:39:58 2014
New Revision: 1620769

URL: http://svn.apache.org/r1620769
Log:
PIG-4128: New logical optimizer rule: ConstantCalculator

Added:
    pig/trunk/src/org/apache/pig/newplan/logical/rules/ConstantCalculator.java
    pig/trunk/src/org/apache/pig/newplan/logical/rules/FilterConstantCalculator.java
    pig/trunk/src/org/apache/pig/newplan/logical/rules/ForEachConstantCalculator.java
    pig/trunk/test/org/apache/pig/test/TestConstantCalculator.java
Removed:
    pig/trunk/src/org/apache/pig/newplan/logical/rules/ConstExpEvaluator.java
    pig/trunk/src/org/apache/pig/newplan/logical/rules/DNFExpression.java
    pig/trunk/src/org/apache/pig/newplan/logical/rules/DNFPlan.java
    pig/trunk/src/org/apache/pig/newplan/logical/rules/DNFPlanGenerator.java
    pig/trunk/src/org/apache/pig/newplan/logical/rules/LogicalExpressionProxy.java
    pig/trunk/src/org/apache/pig/newplan/logical/rules/LogicalExpressionSimplifier.java
    pig/trunk/src/org/apache/pig/newplan/logical/rules/NotConversionVisitor.java
    pig/trunk/test/excluded-tests-23
    pig/trunk/test/org/apache/pig/test/TestFilterSimplification.java
Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/EvalFunc.java
    pig/trunk/src/org/apache/pig/Main.java
    pig/trunk/src/org/apache/pig/builtin/ABS.java
    pig/trunk/src/org/apache/pig/builtin/ARITY.java
    pig/trunk/src/org/apache/pig/builtin/AddDuration.java
    pig/trunk/src/org/apache/pig/builtin/Assert.java
    pig/trunk/src/org/apache/pig/builtin/BagSize.java
    pig/trunk/src/org/apache/pig/builtin/BagToString.java
    pig/trunk/src/org/apache/pig/builtin/BagToTuple.java
    pig/trunk/src/org/apache/pig/builtin/Base.java
    pig/trunk/src/org/apache/pig/builtin/BigDecimalAbs.java
    pig/trunk/src/org/apache/pig/builtin/BigIntegerAbs.java
    pig/trunk/src/org/apache/pig/builtin/CONCAT.java
    pig/trunk/src/org/apache/pig/builtin/ConstantSize.java
    pig/trunk/src/org/apache/pig/builtin/CubeDimensions.java
    pig/trunk/src/org/apache/pig/builtin/CurrentTime.java
    pig/trunk/src/org/apache/pig/builtin/DIFF.java
    pig/trunk/src/org/apache/pig/builtin/DaysBetween.java
    pig/trunk/src/org/apache/pig/builtin/DoubleRound.java
    pig/trunk/src/org/apache/pig/builtin/DoubleRoundTo.java
    pig/trunk/src/org/apache/pig/builtin/ENDSWITH.java
    pig/trunk/src/org/apache/pig/builtin/EqualsIgnoreCase.java
    pig/trunk/src/org/apache/pig/builtin/FloatAbs.java
    pig/trunk/src/org/apache/pig/builtin/FloatRound.java
    pig/trunk/src/org/apache/pig/builtin/FloatRoundTo.java
    pig/trunk/src/org/apache/pig/builtin/GetDay.java
    pig/trunk/src/org/apache/pig/builtin/GetHour.java
    pig/trunk/src/org/apache/pig/builtin/GetMilliSecond.java
    pig/trunk/src/org/apache/pig/builtin/GetMinute.java
    pig/trunk/src/org/apache/pig/builtin/GetMonth.java
    pig/trunk/src/org/apache/pig/builtin/GetSecond.java
    pig/trunk/src/org/apache/pig/builtin/GetWeek.java
    pig/trunk/src/org/apache/pig/builtin/GetWeekYear.java
    pig/trunk/src/org/apache/pig/builtin/GetYear.java
    pig/trunk/src/org/apache/pig/builtin/HoursBetween.java
    pig/trunk/src/org/apache/pig/builtin/INDEXOF.java
    pig/trunk/src/org/apache/pig/builtin/INVERSEMAP.java
    pig/trunk/src/org/apache/pig/builtin/IntAbs.java
    pig/trunk/src/org/apache/pig/builtin/IsEmpty.java
    pig/trunk/src/org/apache/pig/builtin/KEYSET.java
    pig/trunk/src/org/apache/pig/builtin/LAST_INDEX_OF.java
    pig/trunk/src/org/apache/pig/builtin/LCFIRST.java
    pig/trunk/src/org/apache/pig/builtin/LOWER.java
    pig/trunk/src/org/apache/pig/builtin/LTRIM.java
    pig/trunk/src/org/apache/pig/builtin/LongAbs.java
    pig/trunk/src/org/apache/pig/builtin/MapSize.java
    pig/trunk/src/org/apache/pig/builtin/MilliSecondsBetween.java
    pig/trunk/src/org/apache/pig/builtin/MinutesBetween.java
    pig/trunk/src/org/apache/pig/builtin/MonthsBetween.java
    pig/trunk/src/org/apache/pig/builtin/PluckTuple.java
    pig/trunk/src/org/apache/pig/builtin/REGEX_EXTRACT.java
    pig/trunk/src/org/apache/pig/builtin/REGEX_EXTRACT_ALL.java
    pig/trunk/src/org/apache/pig/builtin/REPLACE.java
    pig/trunk/src/org/apache/pig/builtin/ROUND.java
    pig/trunk/src/org/apache/pig/builtin/ROUND_TO.java
    pig/trunk/src/org/apache/pig/builtin/RTRIM.java
    pig/trunk/src/org/apache/pig/builtin/RollupDimensions.java
    pig/trunk/src/org/apache/pig/builtin/SIZE.java
    pig/trunk/src/org/apache/pig/builtin/SPRINTF.java
    pig/trunk/src/org/apache/pig/builtin/STARTSWITH.java
    pig/trunk/src/org/apache/pig/builtin/STRSPLIT.java
    pig/trunk/src/org/apache/pig/builtin/SUBSTRING.java
    pig/trunk/src/org/apache/pig/builtin/SUBTRACT.java
    pig/trunk/src/org/apache/pig/builtin/SecondsBetween.java
    pig/trunk/src/org/apache/pig/builtin/StringConcat.java
    pig/trunk/src/org/apache/pig/builtin/StringSize.java
    pig/trunk/src/org/apache/pig/builtin/SubtractDuration.java
    pig/trunk/src/org/apache/pig/builtin/TOBAG.java
    pig/trunk/src/org/apache/pig/builtin/TOKENIZE.java
    pig/trunk/src/org/apache/pig/builtin/TOMAP.java
    pig/trunk/src/org/apache/pig/builtin/TOTUPLE.java
    pig/trunk/src/org/apache/pig/builtin/TRIM.java
    pig/trunk/src/org/apache/pig/builtin/ToDate.java
    pig/trunk/src/org/apache/pig/builtin/ToDate2ARGS.java
    pig/trunk/src/org/apache/pig/builtin/ToDate3ARGS.java
    pig/trunk/src/org/apache/pig/builtin/ToDateISO.java
    pig/trunk/src/org/apache/pig/builtin/ToMilliSeconds.java
    pig/trunk/src/org/apache/pig/builtin/ToString.java
    pig/trunk/src/org/apache/pig/builtin/ToUnixTime.java
    pig/trunk/src/org/apache/pig/builtin/TupleSize.java
    pig/trunk/src/org/apache/pig/builtin/UCFIRST.java
    pig/trunk/src/org/apache/pig/builtin/UPPER.java
    pig/trunk/src/org/apache/pig/builtin/VALUELIST.java
    pig/trunk/src/org/apache/pig/builtin/VALUESET.java
    pig/trunk/src/org/apache/pig/builtin/WeeksBetween.java
    pig/trunk/src/org/apache/pig/builtin/YearsBetween.java
    pig/trunk/src/org/apache/pig/newplan/BaseOperatorPlan.java
    pig/trunk/src/org/apache/pig/newplan/logical/expression/ConstantExpression.java
    pig/trunk/src/org/apache/pig/newplan/logical/expression/UserFuncExpression.java
    pig/trunk/src/org/apache/pig/newplan/logical/optimizer/LogicalPlanOptimizer.java
    pig/trunk/src/org/apache/pig/newplan/logical/relational/LogicalPlan.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Wed Aug 27 00:39:58 2014
@@ -24,6 +24,8 @@ INCOMPATIBLE CHANGES
  
 IMPROVEMENTS
 
+PIG-4128: New logical optimizer rule: ConstantCalculator (daijy)
+
 PIG-4124: Command for Python streaming udf should be configurable (cheolsoo)
 
 PIG-4114: Add Native operator to tez (daijy)

Modified: pig/trunk/src/org/apache/pig/EvalFunc.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/EvalFunc.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/EvalFunc.java (original)
+++ pig/trunk/src/org/apache/pig/EvalFunc.java Wed Aug 27 00:39:58 2014
@@ -341,4 +341,14 @@ public abstract class EvalFunc<T>  {
         return SchemaType.NORMAL;
     }
 
+    /**
+     * Whether the UDF should be evaluated at compile time if all inputs are constant.
+     * This is applicable for most UDF, however, if a UDF will access hdfs file which
+     * is not available at compile time, it has to be false
+     * @return Whether or not compile time calculation is allowed, default to false
+     * to ensure legacy UDF will get the right behavior
+     */
+    public boolean allowCompileTimeCalculation() {
+        return false;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/Main.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/Main.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/Main.java (original)
+++ pig/trunk/src/org/apache/pig/Main.java Wed Aug 27 00:39:58 2014
@@ -113,9 +113,6 @@ public class Main {
 
     private enum ExecMode {STRING, FILE, SHELL, UNKNOWN}
 
-    private static final String PROP_FILT_SIMPL_OPT
-        = "pig.exec.filterLogicExpressionSimplifier";
-
     protected static final String PROGRESS_NOTIFICATION_LISTENER_KEY = "pig.notification.listener";
 
     protected static final String PROGRESS_NOTIFICATION_LISTENER_ARG_KEY = "pig.notification.listener.arg";
@@ -402,11 +399,6 @@ public class Main {
             deleteTempFiles = Boolean.valueOf(properties.getProperty(
                     PigConfiguration.PIG_DELETE_TEMP_FILE, "true"));
 
-            if( ! Boolean.valueOf(properties.getProperty(PROP_FILT_SIMPL_OPT, "false"))){
-                //turn off if the user has not explicitly turned on this optimization
-                disabledOptimizerRules.add("FilterLogicExpressionSimplifier");
-            }
-
             pigContext.getProperties().setProperty(PigImplConstants.PIG_OPTIMIZER_RULES_KEY,
                     ObjectSerializer.serialize(disabledOptimizerRules));
 
@@ -863,6 +855,7 @@ public class Main {
             System.out.println("    -p, -param - Key value pair of the form param=val");
             System.out.println("    -r, -dryrun - Produces script with substituted parameters. Script is not executed.");
             System.out.println("    -t, -optimizer_off - Turn optimizations off. The following values are supported:");
+            System.out.println("            ConstantCalculator - Calculate constants at compile time");
             System.out.println("            SplitFilter - Split filter conditions");
             System.out.println("            PushUpFilter - Filter as early as possible");
             System.out.println("            MergeFilter - Merge filter conditions");
@@ -918,8 +911,6 @@ public class Main {
             System.out.println("        pig.exec.mapPartAgg.minReduction=<min aggregation factor>. Default is 10.");
             System.out.println("            If the in-map partial aggregation does not reduce the output num records");
             System.out.println("            by this factor, it gets disabled.");
-            System.out.println("        " + PROP_FILT_SIMPL_OPT + "=true|false; Default is false.");
-            System.out.println("            Enable optimizer rules to simplify filter expressions.");
             System.out.println("    Miscellaneous:");
             System.out.println("        exectype=mapreduce|local; default is mapreduce. This property is the same as -x switch");
             System.out.println("        pig.additional.jars=<colon seperated list of jars>. Used in place of register command.");

Modified: pig/trunk/src/org/apache/pig/builtin/ABS.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ABS.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ABS.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ABS.java Wed Aug 27 00:39:58 2014
@@ -79,4 +79,8 @@ public class ABS extends EvalFunc<Double
         return funcList;
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/ARITY.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ARITY.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ARITY.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ARITY.java Wed Aug 27 00:39:58 2014
@@ -49,4 +49,9 @@ public class ARITY extends EvalFunc<Inte
     public Schema outputSchema(Schema input) {
         return new Schema(new Schema.FieldSchema(null, DataType.INTEGER)); 
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/AddDuration.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/AddDuration.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/AddDuration.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/AddDuration.java Wed Aug 27 00:39:58 2014
@@ -92,4 +92,9 @@ public class AddDuration extends EvalFun
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/Assert.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/Assert.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/Assert.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/Assert.java Wed Aug 27 00:39:58 2014
@@ -45,4 +45,9 @@ public class Assert extends EvalFunc<Boo
       return true;
     }
   }
+
+  @Override
+  public boolean allowCompileTimeCalculation() {
+      return true;
+  }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/BagSize.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/BagSize.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/BagSize.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/BagSize.java Wed Aug 27 00:39:58 2014
@@ -18,6 +18,7 @@
 package org.apache.pig.builtin;
 
 import java.io.IOException;
+
 import org.apache.pig.EvalFunc;
 import org.apache.pig.PigException;
 import org.apache.pig.backend.executionengine.ExecException;
@@ -51,4 +52,8 @@ public class BagSize extends EvalFunc<Lo
         return new Schema(new Schema.FieldSchema(null, DataType.LONG)); 
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/BagToString.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/BagToString.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/BagToString.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/BagToString.java Wed Aug 27 00:39:58 2014
@@ -138,4 +138,8 @@ public class BagToString extends EvalFun
 		}
 	}
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/BagToTuple.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/BagToTuple.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/BagToTuple.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/BagToTuple.java Wed Aug 27 00:39:58 2014
@@ -142,4 +142,8 @@ public class BagToTuple extends EvalFunc
 		}
 	}
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/Base.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/Base.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/Base.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/Base.java Wed Aug 27 00:39:58 2014
@@ -30,4 +30,9 @@ public abstract class Base extends EvalF
 	public Schema outputSchema(Schema input) {
         return new Schema(new Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(), input), DataType.DOUBLE));
 	}
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/BigDecimalAbs.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/BigDecimalAbs.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/BigDecimalAbs.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/BigDecimalAbs.java Wed Aug 27 00:39:58 2014
@@ -29,4 +29,9 @@ public class BigDecimalAbs extends EvalF
     public BigDecimal exec(Tuple input) throws IOException {
         return ((BigDecimal)input.get(0)).abs();
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/BigIntegerAbs.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/BigIntegerAbs.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/BigIntegerAbs.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/BigIntegerAbs.java Wed Aug 27 00:39:58 2014
@@ -29,4 +29,9 @@ public class BigIntegerAbs extends EvalF
     public BigInteger exec(Tuple input) throws IOException {
         return ((BigInteger)input.get(0)).abs();
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/CONCAT.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/CONCAT.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/CONCAT.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/CONCAT.java Wed Aug 27 00:39:58 2014
@@ -87,4 +87,9 @@ public class CONCAT extends EvalFunc<Dat
     public SchemaType getSchemaType() {
         return SchemaType.VARARG;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/ConstantSize.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ConstantSize.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ConstantSize.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ConstantSize.java Wed Aug 27 00:39:58 2014
@@ -50,4 +50,8 @@ public class ConstantSize extends EvalFu
         return new Schema(new Schema.FieldSchema(null, DataType.LONG)); 
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/CubeDimensions.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/CubeDimensions.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/CubeDimensions.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/CubeDimensions.java Wed Aug 27 00:39:58 2014
@@ -126,4 +126,9 @@ public class CubeDimensions extends Eval
             throw new RuntimeException(e);
         }
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/CurrentTime.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/CurrentTime.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/CurrentTime.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/CurrentTime.java Wed Aug 27 00:39:58 2014
@@ -37,6 +37,10 @@ public class CurrentTime extends EvalFun
 
     @Override
     public DateTime exec(Tuple input) throws IOException {
+        // If we are doing compile time calculation
+        if (UDFContext.getUDFContext().isFrontend()) {
+            return new DateTime();
+        }
         if (!isInitialized) {
             String dateTimeValue = UDFContext.getUDFContext().getJobConf().get("pig.job.submitted.timestamp");
             if (dateTimeValue == null) {
@@ -47,4 +51,9 @@ public class CurrentTime extends EvalFun
         }
         return dateTime;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/DIFF.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/DIFF.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/DIFF.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/DIFF.java Wed Aug 27 00:39:58 2014
@@ -98,6 +98,10 @@ public class DIFF extends EvalFunc<DataB
         for (Tuple t : s2) if (!s1.contains(t)) emitTo.add(t);
 
     }
-    
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
     
 }

Modified: pig/trunk/src/org/apache/pig/builtin/DaysBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/DaysBetween.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/DaysBetween.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/DaysBetween.java Wed Aug 27 00:39:58 2014
@@ -105,4 +105,9 @@ public class DaysBetween extends EvalFun
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/DoubleRound.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/DoubleRound.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/DoubleRound.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/DoubleRound.java Wed Aug 27 00:39:58 2014
@@ -52,4 +52,9 @@ public class DoubleRound extends EvalFun
 	public Schema outputSchema(Schema input) {
         return new Schema(new Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(), input), DataType.LONG));
 	}
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/DoubleRoundTo.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/DoubleRoundTo.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/DoubleRoundTo.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/DoubleRoundTo.java Wed Aug 27 00:39:58 2014
@@ -21,7 +21,6 @@ package org.apache.pig.builtin;
 import java.io.IOException;
 import java.util.List;
 import java.util.ArrayList;
-
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 
@@ -96,4 +95,9 @@ public class DoubleRoundTo extends EvalF
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/ENDSWITH.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ENDSWITH.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ENDSWITH.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ENDSWITH.java Wed Aug 27 00:39:58 2014
@@ -20,6 +20,7 @@ package org.apache.pig.builtin;
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.apache.pig.EvalFunc;
 import org.apache.pig.FuncSpec;
 import org.apache.pig.PigWarning;
@@ -72,4 +73,9 @@ public class ENDSWITH extends EvalFunc<B
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/EqualsIgnoreCase.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/EqualsIgnoreCase.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/EqualsIgnoreCase.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/EqualsIgnoreCase.java Wed Aug 27 00:39:58 2014
@@ -31,24 +31,29 @@ import org.apache.pig.data.Tuple;
 
 public class EqualsIgnoreCase extends FilterFunc {
 
-@Override
-public Boolean exec(Tuple input) throws IOException {
-	    if (input == null || input.size() == 0) {
-	        return null;
-	    }
-	    try{
-	    	String firstStr = input.get(0).toString();
-	    	String secondStr = input.get(1).toString();
-	    	if (firstStr == null) {
-	    		throw new ExecException("First String is NULL");
-	    	}
-	    	if (secondStr == null) {
-	    		throw new ExecException("Second String is NULL");
-	    	}
-	    	return new Boolean(firstStr.equalsIgnoreCase(secondStr));
-	    }	catch(Exception e){
-	    	throw new ExecException(e.getMessage());
-	 }
-	}
+    @Override
+    public Boolean exec(Tuple input) throws IOException {
+        if (input == null || input.size() == 0) {
+            return null;
+        }
+        try {
+            String firstStr = input.get(0).toString();
+            String secondStr = input.get(1).toString();
+            if (firstStr == null) {
+                throw new ExecException("First String is NULL");
+            }
+            if (secondStr == null) {
+                throw new ExecException("Second String is NULL");
+            }
+            return new Boolean(firstStr.equalsIgnoreCase(secondStr));
+        } catch (Exception e) {
+            throw new ExecException(e.getMessage());
+        }
+    }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }
 	

Modified: pig/trunk/src/org/apache/pig/builtin/FloatAbs.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/FloatAbs.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/FloatAbs.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/FloatAbs.java Wed Aug 27 00:39:58 2014
@@ -49,4 +49,9 @@ public class FloatAbs extends EvalFunc<F
 	public Schema outputSchema(Schema input) {
         return new Schema(new Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(), input), DataType.FLOAT));
 	}
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/FloatRound.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/FloatRound.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/FloatRound.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/FloatRound.java Wed Aug 27 00:39:58 2014
@@ -54,4 +54,9 @@ public class FloatRound extends EvalFunc
 	public Schema outputSchema(Schema input) {
         return new Schema(new Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(), input), DataType.INTEGER));
 	}
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/FloatRoundTo.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/FloatRoundTo.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/FloatRoundTo.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/FloatRoundTo.java Wed Aug 27 00:39:58 2014
@@ -21,7 +21,6 @@ package org.apache.pig.builtin;
 import java.io.IOException;
 import java.util.List;
 import java.util.ArrayList;
-
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 
@@ -96,4 +95,9 @@ public class FloatRoundTo extends EvalFu
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/GetDay.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/GetDay.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/GetDay.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/GetDay.java Wed Aug 27 00:39:58 2014
@@ -93,4 +93,9 @@ public class GetDay extends EvalFunc<Int
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/GetHour.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/GetHour.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/GetHour.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/GetHour.java Wed Aug 27 00:39:58 2014
@@ -93,4 +93,9 @@ public class GetHour extends EvalFunc<In
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/GetMilliSecond.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/GetMilliSecond.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/GetMilliSecond.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/GetMilliSecond.java Wed Aug 27 00:39:58 2014
@@ -93,4 +93,9 @@ public class GetMilliSecond extends Eval
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/GetMinute.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/GetMinute.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/GetMinute.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/GetMinute.java Wed Aug 27 00:39:58 2014
@@ -93,4 +93,9 @@ public class GetMinute extends EvalFunc<
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/GetMonth.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/GetMonth.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/GetMonth.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/GetMonth.java Wed Aug 27 00:39:58 2014
@@ -93,4 +93,9 @@ public class GetMonth extends EvalFunc<I
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/GetSecond.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/GetSecond.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/GetSecond.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/GetSecond.java Wed Aug 27 00:39:58 2014
@@ -93,4 +93,9 @@ public class GetSecond extends EvalFunc<
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/GetWeek.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/GetWeek.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/GetWeek.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/GetWeek.java Wed Aug 27 00:39:58 2014
@@ -93,4 +93,9 @@ public class GetWeek extends EvalFunc<In
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/GetWeekYear.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/GetWeekYear.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/GetWeekYear.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/GetWeekYear.java Wed Aug 27 00:39:58 2014
@@ -93,4 +93,9 @@ public class GetWeekYear extends EvalFun
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/GetYear.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/GetYear.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/GetYear.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/GetYear.java Wed Aug 27 00:39:58 2014
@@ -94,5 +94,9 @@ public class GetYear extends EvalFunc<In
         return funcList;
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }
 

Modified: pig/trunk/src/org/apache/pig/builtin/HoursBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/HoursBetween.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/HoursBetween.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/HoursBetween.java Wed Aug 27 00:39:58 2014
@@ -103,4 +103,9 @@ public class HoursBetween extends EvalFu
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/INDEXOF.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/INDEXOF.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/INDEXOF.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/INDEXOF.java Wed Aug 27 00:39:58 2014
@@ -20,7 +20,6 @@ package org.apache.pig.builtin;
 
 import java.io.IOException;
 
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pig.EvalFunc;
@@ -72,4 +71,8 @@ public class INDEXOF extends EvalFunc<In
         return new Schema(new Schema.FieldSchema(null, DataType.INTEGER));
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }
\ No newline at end of file

Modified: pig/trunk/src/org/apache/pig/builtin/INVERSEMAP.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/INVERSEMAP.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/INVERSEMAP.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/INVERSEMAP.java Wed Aug 27 00:39:58 2014
@@ -113,4 +113,8 @@ public class INVERSEMAP extends EvalFunc
         return inverseMap;
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/IntAbs.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/IntAbs.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/IntAbs.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/IntAbs.java Wed Aug 27 00:39:58 2014
@@ -54,4 +54,9 @@ public class IntAbs extends EvalFunc<Int
 	public Schema outputSchema(Schema input) {
         return new Schema(new Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(), input), DataType.INTEGER));
 	}
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/IsEmpty.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/IsEmpty.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/IsEmpty.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/IsEmpty.java Wed Aug 27 00:39:58 2014
@@ -52,4 +52,8 @@ public class IsEmpty extends FilterFunc 
         }
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/KEYSET.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/KEYSET.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/KEYSET.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/KEYSET.java Wed Aug 27 00:39:58 2014
@@ -95,4 +95,9 @@ public class KEYSET extends EvalFunc<Dat
         return bagSchema;
 
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }
\ No newline at end of file

Modified: pig/trunk/src/org/apache/pig/builtin/LAST_INDEX_OF.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/LAST_INDEX_OF.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/LAST_INDEX_OF.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/LAST_INDEX_OF.java Wed Aug 27 00:39:58 2014
@@ -82,4 +82,9 @@ public class LAST_INDEX_OF extends EvalF
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/LCFIRST.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/LCFIRST.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/LCFIRST.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/LCFIRST.java Wed Aug 27 00:39:58 2014
@@ -50,4 +50,9 @@ public class LCFIRST extends EvalFunc<St
     public Schema outputSchema(Schema input) {
         return new Schema(new Schema.FieldSchema(null, DataType.CHARARRAY));
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/LOWER.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/LOWER.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/LOWER.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/LOWER.java Wed Aug 27 00:39:58 2014
@@ -77,4 +77,9 @@ public class LOWER extends EvalFunc<Stri
         return funcList;
      }
 
+     @Override
+     public boolean allowCompileTimeCalculation() {
+         return true;
+     }
+
 }
\ No newline at end of file

Modified: pig/trunk/src/org/apache/pig/builtin/LTRIM.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/LTRIM.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/LTRIM.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/LTRIM.java Wed Aug 27 00:39:58 2014
@@ -67,4 +67,8 @@ public class LTRIM extends EvalFunc<Stri
         return funcList;
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/LongAbs.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/LongAbs.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/LongAbs.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/LongAbs.java Wed Aug 27 00:39:58 2014
@@ -49,4 +49,9 @@ public class LongAbs extends EvalFunc<Lo
 	public Schema outputSchema(Schema input) {
         return new Schema(new Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(), input), DataType.LONG));
 	}
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/MapSize.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/MapSize.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/MapSize.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/MapSize.java Wed Aug 27 00:39:58 2014
@@ -53,4 +53,8 @@ public class MapSize extends EvalFunc<Lo
         return new Schema(new Schema.FieldSchema(null, DataType.LONG)); 
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/MilliSecondsBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/MilliSecondsBetween.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/MilliSecondsBetween.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/MilliSecondsBetween.java Wed Aug 27 00:39:58 2014
@@ -103,4 +103,9 @@ public class MilliSecondsBetween extends
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/MinutesBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/MinutesBetween.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/MinutesBetween.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/MinutesBetween.java Wed Aug 27 00:39:58 2014
@@ -104,4 +104,9 @@ public class MinutesBetween extends Eval
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/MonthsBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/MonthsBetween.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/MonthsBetween.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/MonthsBetween.java Wed Aug 27 00:39:58 2014
@@ -106,4 +106,9 @@ public class MonthsBetween extends EvalF
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/PluckTuple.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/PluckTuple.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/PluckTuple.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/PluckTuple.java Wed Aug 27 00:39:58 2014
@@ -117,4 +117,9 @@ public class PluckTuple extends EvalFunc
             throw new RuntimeException(e); // Should never happen
         }
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }
\ No newline at end of file

Modified: pig/trunk/src/org/apache/pig/builtin/REGEX_EXTRACT.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/REGEX_EXTRACT.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/REGEX_EXTRACT.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/REGEX_EXTRACT.java Wed Aug 27 00:39:58 2014
@@ -118,4 +118,9 @@ public class REGEX_EXTRACT extends EvalF
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/REGEX_EXTRACT_ALL.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/REGEX_EXTRACT_ALL.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/REGEX_EXTRACT_ALL.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/REGEX_EXTRACT_ALL.java Wed Aug 27 00:39:58 2014
@@ -113,5 +113,10 @@ public class REGEX_EXTRACT_ALL extends E
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }
 

Modified: pig/trunk/src/org/apache/pig/builtin/REPLACE.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/REPLACE.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/REPLACE.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/REPLACE.java Wed Aug 27 00:39:58 2014
@@ -81,4 +81,9 @@ public class REPLACE extends EvalFunc<St
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/ROUND.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ROUND.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ROUND.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ROUND.java Wed Aug 27 00:39:58 2014
@@ -74,4 +74,9 @@ public class ROUND extends EvalFunc<Long
         funcList.add(new FuncSpec(FloatRound.class.getName(),   new Schema(new Schema.FieldSchema(null, DataType.FLOAT))));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/ROUND_TO.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ROUND_TO.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ROUND_TO.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ROUND_TO.java Wed Aug 27 00:39:58 2014
@@ -21,7 +21,6 @@ package org.apache.pig.builtin;
 import java.io.IOException;
 import java.util.List;
 import java.util.ArrayList;
-
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 
@@ -125,4 +124,9 @@ public class ROUND_TO extends EvalFunc<D
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/RTRIM.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/RTRIM.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/RTRIM.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/RTRIM.java Wed Aug 27 00:39:58 2014
@@ -67,4 +67,8 @@ public class RTRIM extends EvalFunc<Stri
         return funcList;
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/RollupDimensions.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/RollupDimensions.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/RollupDimensions.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/RollupDimensions.java Wed Aug 27 00:39:58 2014
@@ -88,4 +88,9 @@ public class RollupDimensions extends Ev
 	    throw new RuntimeException(e);
 	}
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/SIZE.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/SIZE.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/SIZE.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/SIZE.java Wed Aug 27 00:39:58 2014
@@ -96,4 +96,8 @@ public class SIZE extends EvalFunc<Long>
         return funcList;
     }    
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/SPRINTF.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/SPRINTF.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/SPRINTF.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/SPRINTF.java Wed Aug 27 00:39:58 2014
@@ -18,7 +18,6 @@
 package org.apache.pig.builtin;
 
 import java.io.IOException;
-
 import java.util.Formatter;
 
 import org.apache.pig.EvalFunc;
@@ -26,7 +25,6 @@ import org.apache.pig.PigException;
 import org.apache.pig.data.DataType;
 import org.apache.pig.data.Tuple;
 import org.apache.pig.impl.logicalLayer.schema.Schema;
-
 import org.apache.pig.backend.executionengine.ExecException;
 
 /**
@@ -80,4 +78,9 @@ public class SPRINTF extends EvalFunc<St
     public SchemaType getSchemaType() {
         return SchemaType.VARARG;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/STARTSWITH.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/STARTSWITH.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/STARTSWITH.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/STARTSWITH.java Wed Aug 27 00:39:58 2014
@@ -20,6 +20,7 @@ package org.apache.pig.builtin;
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.apache.pig.EvalFunc;
 import org.apache.pig.FuncSpec;
 import org.apache.pig.PigWarning;
@@ -72,4 +73,9 @@ public class STARTSWITH extends EvalFunc
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/STRSPLIT.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/STRSPLIT.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/STRSPLIT.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/STRSPLIT.java Wed Aug 27 00:39:58 2014
@@ -18,7 +18,6 @@
 package org.apache.pig.builtin;
 
 import java.io.IOException;
-
 import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.List;
@@ -109,4 +108,9 @@ public class STRSPLIT extends EvalFunc<T
         funcList.add(new FuncSpec(this.getClass().getName(), s2));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/SUBSTRING.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/SUBSTRING.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/SUBSTRING.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/SUBSTRING.java Wed Aug 27 00:39:58 2014
@@ -89,4 +89,9 @@ public class SUBSTRING extends EvalFunc<
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/SUBTRACT.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/SUBTRACT.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/SUBTRACT.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/SUBTRACT.java Wed Aug 27 00:39:58 2014
@@ -94,4 +94,8 @@ public class SUBTRACT extends EvalFunc<D
         return set;
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/SecondsBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/SecondsBetween.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/SecondsBetween.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/SecondsBetween.java Wed Aug 27 00:39:58 2014
@@ -104,4 +104,9 @@ public class SecondsBetween extends Eval
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/StringConcat.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/StringConcat.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/StringConcat.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/StringConcat.java Wed Aug 27 00:39:58 2014
@@ -63,4 +63,9 @@ public class StringConcat extends EvalFu
     public SchemaType getSchemaType() {
         return SchemaType.VARARG;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/StringSize.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/StringSize.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/StringSize.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/StringSize.java Wed Aug 27 00:39:58 2014
@@ -18,6 +18,7 @@
 package org.apache.pig.builtin;
 
 import java.io.IOException;
+
 import org.apache.pig.EvalFunc;
 import org.apache.pig.PigException;
 import org.apache.pig.backend.executionengine.ExecException;
@@ -50,4 +51,8 @@ public class StringSize extends EvalFunc
         return new Schema(new Schema.FieldSchema(null, DataType.LONG)); 
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/SubtractDuration.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/SubtractDuration.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/SubtractDuration.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/SubtractDuration.java Wed Aug 27 00:39:58 2014
@@ -92,4 +92,9 @@ public class SubtractDuration extends Ev
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/TOBAG.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/TOBAG.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/TOBAG.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/TOBAG.java Wed Aug 27 00:39:58 2014
@@ -159,7 +159,10 @@ public class TOBAG extends EvalFunc<Data
         }
         return Schema.equals(currentSchema, newSchema, false, true);
     }
-    
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }
 

Modified: pig/trunk/src/org/apache/pig/builtin/TOKENIZE.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/TOKENIZE.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/TOKENIZE.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/TOKENIZE.java Wed Aug 27 00:39:58 2014
@@ -125,4 +125,9 @@ public class TOKENIZE extends EvalFunc<D
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 };

Modified: pig/trunk/src/org/apache/pig/builtin/TOMAP.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/TOMAP.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/TOMAP.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/TOMAP.java Wed Aug 27 00:39:58 2014
@@ -61,4 +61,8 @@ public class TOMAP extends EvalFunc<Map>
         return new Schema(new Schema.FieldSchema(null, DataType.MAP));
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/TOTUPLE.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/TOTUPLE.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/TOTUPLE.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/TOTUPLE.java Wed Aug 27 00:39:58 2014
@@ -18,6 +18,7 @@
 package org.apache.pig.builtin;
 
 import java.io.IOException;
+
 import org.apache.pig.EvalFunc;
 import org.apache.pig.data.DataType;
 import org.apache.pig.data.Tuple;
@@ -50,4 +51,8 @@ public class TOTUPLE extends EvalFunc<Tu
         }
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/TRIM.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/TRIM.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/TRIM.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/TRIM.java Wed Aug 27 00:39:58 2014
@@ -67,4 +67,8 @@ public class TRIM extends EvalFunc<Strin
         return funcList;
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/ToDate.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ToDate.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ToDate.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ToDate.java Wed Aug 27 00:39:58 2014
@@ -123,4 +123,9 @@ public class ToDate extends EvalFunc<Dat
     public static DateTime extractDateTime(String dtStr) {
         return isoDateTimeFormatter.parseDateTime(dtStr);
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/ToDate2ARGS.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ToDate2ARGS.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ToDate2ARGS.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ToDate2ARGS.java Wed Aug 27 00:39:58 2014
@@ -48,4 +48,8 @@ public class ToDate2ARGS extends EvalFun
         //}
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/ToDate3ARGS.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ToDate3ARGS.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ToDate3ARGS.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ToDate3ARGS.java Wed Aug 27 00:39:58 2014
@@ -44,4 +44,8 @@ public class ToDate3ARGS extends EvalFun
         return dtf.withZone(dtz).parseDateTime(DataType.toString(input.get(0)));
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/ToDateISO.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ToDateISO.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ToDateISO.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ToDateISO.java Wed Aug 27 00:39:58 2014
@@ -38,4 +38,8 @@ public class ToDateISO extends EvalFunc<
         return ToDate.extractDateTime(dtStr);
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/ToMilliSeconds.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ToMilliSeconds.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ToMilliSeconds.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ToMilliSeconds.java Wed Aug 27 00:39:58 2014
@@ -94,4 +94,9 @@ public class ToMilliSeconds extends Eval
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/ToString.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ToString.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ToString.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ToString.java Wed Aug 27 00:39:58 2014
@@ -69,5 +69,9 @@ public class ToString extends EvalFunc<S
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
-    
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/ToUnixTime.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/ToUnixTime.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/ToUnixTime.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/ToUnixTime.java Wed Aug 27 00:39:58 2014
@@ -92,4 +92,9 @@ public class ToUnixTime extends EvalFunc
 
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/TupleSize.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/TupleSize.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/TupleSize.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/TupleSize.java Wed Aug 27 00:39:58 2014
@@ -18,6 +18,7 @@
 package org.apache.pig.builtin;
 
 import java.io.IOException;
+
 import org.apache.pig.EvalFunc;
 import org.apache.pig.PigException;
 import org.apache.pig.backend.executionengine.ExecException;
@@ -48,4 +49,8 @@ public class TupleSize extends EvalFunc<
         return new Schema(new Schema.FieldSchema(null, DataType.LONG)); 
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/UCFIRST.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/UCFIRST.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/UCFIRST.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/UCFIRST.java Wed Aug 27 00:39:58 2014
@@ -50,4 +50,9 @@ public class UCFIRST extends EvalFunc<St
     public Schema outputSchema(Schema input) {
         return new Schema(new Schema.FieldSchema(null, DataType.CHARARRAY));
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/UPPER.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/UPPER.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/UPPER.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/UPPER.java Wed Aug 27 00:39:58 2014
@@ -86,4 +86,8 @@ public class UPPER extends EvalFunc<Stri
         return funcList;
     }
 
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/VALUELIST.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/VALUELIST.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/VALUELIST.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/VALUELIST.java Wed Aug 27 00:39:58 2014
@@ -122,4 +122,9 @@ public class VALUELIST extends EvalFunc<
 
         return bagSchema;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }
\ No newline at end of file

Modified: pig/trunk/src/org/apache/pig/builtin/VALUESET.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/VALUESET.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/VALUESET.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/VALUESET.java Wed Aug 27 00:39:58 2014
@@ -133,4 +133,9 @@ public class VALUESET extends EvalFunc<D
         }
         return bagSchema;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/builtin/WeeksBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/WeeksBetween.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/WeeksBetween.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/WeeksBetween.java Wed Aug 27 00:39:58 2014
@@ -105,5 +105,10 @@ public class WeeksBetween extends EvalFu
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }
 

Modified: pig/trunk/src/org/apache/pig/builtin/YearsBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/YearsBetween.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/YearsBetween.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/YearsBetween.java Wed Aug 27 00:39:58 2014
@@ -106,4 +106,9 @@ public class YearsBetween extends EvalFu
         funcList.add(new FuncSpec(this.getClass().getName(), s));
         return funcList;
     }
+
+    @Override
+    public boolean allowCompileTimeCalculation() {
+        return true;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/newplan/BaseOperatorPlan.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/BaseOperatorPlan.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/BaseOperatorPlan.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/BaseOperatorPlan.java Wed Aug 27 00:39:58 2014
@@ -20,7 +20,9 @@ package org.apache.pig.newplan;
 
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
+import java.util.Deque;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -479,4 +481,50 @@ public abstract class BaseOperatorPlan i
         return false;
     }
 
+    /**
+     * Move everything below a given operator to the new operator plan.  The specified operator will
+     * be moved and will be the root of the new operator plan
+     * @param root Operator to move everything after
+     * @param newPlan new operator plan to move things into
+     * @throws PlanException 
+     */
+    public void moveTree(Operator root, BaseOperatorPlan newPlan) throws FrontendException {
+        Deque<Operator> queue = new ArrayDeque<Operator>();
+        newPlan.add(root);
+        root.setPlan(newPlan);
+        queue.addLast(root);
+        while (!queue.isEmpty()) {
+            Operator node = queue.poll();
+            if (getSuccessors(node)!=null) {
+                for (Operator succ : getSuccessors(node)) {
+                    if (!queue.contains(succ)) {
+                        queue.addLast(succ);
+                        newPlan.add(succ);
+                        succ.setPlan(newPlan);
+                        newPlan.connect(node, succ);
+                    }
+                }
+            }
+        }
+
+        trimBelow(root);
+    }
+    
+    /**
+     * Trim everything below a given operator.  The specified operator will
+     * NOT be removed.
+     * @param op Operator to trim everything after.
+     * @throws FrontendException 
+     */
+    public void trimBelow(Operator op) throws FrontendException {
+        if (getSuccessors(op) != null) {
+            List<Operator> succs = new ArrayList<Operator>();
+            succs.addAll(getSuccessors(op));
+            for (Operator succ : succs) {
+                disconnect(op, succ);
+                trimBelow(succ);
+                remove(succ);
+            }
+        }
+    }
 }

Modified: pig/trunk/src/org/apache/pig/newplan/logical/expression/ConstantExpression.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/expression/ConstantExpression.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/expression/ConstantExpression.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/expression/ConstantExpression.java Wed Aug 27 00:39:58 2014
@@ -19,10 +19,8 @@
 package org.apache.pig.newplan.logical.expression;
 
 import org.apache.pig.PigException;
-import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.data.DataType;
 import org.apache.pig.impl.logicalLayer.FrontendException;
-import org.apache.pig.impl.logicalLayer.schema.SchemaMergeException;
 import org.apache.pig.newplan.Operator;
 import org.apache.pig.newplan.OperatorPlan;
 import org.apache.pig.newplan.PlanVisitor;
@@ -38,7 +36,9 @@ public class ConstantExpression extends 
     
     // Stupid Java needs a union
     Object val;
-    
+
+    // Remember data type when the value is null
+    byte type = DataType.NULL;
     /**
      * Adds expression to the plan 
      * @param plan LogicalExpressionPlan this constant is a part of.
@@ -101,14 +101,25 @@ public class ConstantExpression extends 
             );
         }
         uidOnlyFieldSchema = fieldSchema.mergeUid(uidOnlyFieldSchema);
+        if (type != DataType.NULL && fieldSchema.type == DataType.BYTEARRAY && val == null) {
+            fieldSchema.type = type;
+        }
         return fieldSchema;
     }
  
     @Override
     public LogicalExpression deepCopy(LogicalExpressionPlan lgExpPlan) throws FrontendException{
-        LogicalExpression copy = new ConstantExpression(lgExpPlan, this.getValue());
+        ConstantExpression copy = new ConstantExpression(lgExpPlan, this.getValue());
+        copy.type = this.type;
         copy.setLocation( new SourceLocation( location ) );
         return copy;
     }
  
+    public void inheritSchema(LogicalExpression expr) throws FrontendException {
+        fieldSchema = expr.getFieldSchema();
+        uidOnlyFieldSchema = fieldSchema.mergeUid(uidOnlyFieldSchema);
+        if (fieldSchema.type != DataType.NULL) {
+            type = fieldSchema.type;
+        }
+    }
 }

Modified: pig/trunk/src/org/apache/pig/newplan/logical/expression/UserFuncExpression.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/expression/UserFuncExpression.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/expression/UserFuncExpression.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/expression/UserFuncExpression.java Wed Aug 27 00:39:58 2014
@@ -403,4 +403,11 @@ public class UserFuncExpression extends 
     public boolean isViaDefine() {
         return viaDefine;
     }
+
+    public EvalFunc<?> getEvalFunc() {
+        if (ef==null) {
+            ef = (EvalFunc<?>) PigContext.instantiateFuncFromSpec(mFuncSpec);
+        }
+        return ef;
+    }
 }

Modified: pig/trunk/src/org/apache/pig/newplan/logical/optimizer/LogicalPlanOptimizer.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/optimizer/LogicalPlanOptimizer.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/optimizer/LogicalPlanOptimizer.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/optimizer/LogicalPlanOptimizer.java Wed Aug 27 00:39:58 2014
@@ -28,14 +28,16 @@ import com.google.common.collect.TreeMul
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.pig.impl.PigContext;
 import org.apache.pig.newplan.OperatorPlan;
 import org.apache.pig.newplan.logical.rules.AddForEach;
 import org.apache.pig.newplan.logical.rules.ColumnMapKeyPrune;
 import org.apache.pig.newplan.logical.rules.FilterAboveForeach;
+import org.apache.pig.newplan.logical.rules.FilterConstantCalculator;
+import org.apache.pig.newplan.logical.rules.ForEachConstantCalculator;
 import org.apache.pig.newplan.logical.rules.GroupByConstParallelSetter;
 import org.apache.pig.newplan.logical.rules.LimitOptimizer;
 import org.apache.pig.newplan.logical.rules.LoadTypeCastInserter;
-import org.apache.pig.newplan.logical.rules.LogicalExpressionSimplifier;
 import org.apache.pig.newplan.logical.rules.MergeFilter;
 import org.apache.pig.newplan.logical.rules.MergeForEach;
 import org.apache.pig.newplan.logical.rules.PartitionFilterOptimizer;
@@ -53,16 +55,23 @@ public class LogicalPlanOptimizer extend
     private Set<String> mRulesOff = null;
     private boolean allRulesDisabled = false;
     private SetMultimap<RulesReportKey, String> rulesReport = TreeMultimap.create();
+    private PigContext pc = null;
 
+    public LogicalPlanOptimizer(OperatorPlan p, int iterations, Set<String> turnOffRules) {
+        this(p, iterations, turnOffRules, null);
+    }
     /**
      * Create a new LogicalPlanOptimizer.
      * @param p               Plan to optimize.
      * @param iterations      Maximum number of optimizer iterations.
      * @param turnOffRules    Optimization rules to disable. "all" disables all non-mandatory
      *                        rules. null enables all rules.
+     * @param pc              PigContext object
      */
-    public LogicalPlanOptimizer(OperatorPlan p, int iterations, Set<String> turnOffRules) {
+    public LogicalPlanOptimizer(OperatorPlan p, int iterations, Set<String> turnOffRules, PigContext
+            pc) {
         super(p, null, iterations);
+        this.pc = pc;
         mRulesOff = turnOffRules == null ? new HashSet<String>() : turnOffRules;
         if (mRulesOff.contains("all")) {
             allRulesDisabled = true;
@@ -78,8 +87,11 @@ public class LogicalPlanOptimizer extend
 
         // Logical expression simplifier
         Set <Rule> s = new HashSet<Rule>();
-        // add logical expression simplification rule
-        Rule r = new LogicalExpressionSimplifier("FilterLogicExpressionSimplifier");
+        // add constant calculator rule
+        Rule r = new FilterConstantCalculator("ConstantCalculator", pc);
+        checkAndAddRule(s, r);
+        ls.add(s);
+        r = new ForEachConstantCalculator("ConstantCalculator", pc);
         checkAndAddRule(s, r);
         ls.add(s);
 

Modified: pig/trunk/src/org/apache/pig/newplan/logical/relational/LogicalPlan.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/relational/LogicalPlan.java?rev=1620769&r1=1620768&r2=1620769&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/relational/LogicalPlan.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/relational/LogicalPlan.java Wed Aug 27 00:39:58 2014
@@ -27,6 +27,8 @@ import java.util.List;
 
 import org.apache.pig.PigConstants;
 import org.apache.pig.PigException;
+import org.apache.pig.backend.hadoop.datastorage.ConfigurationUtil;
+import org.apache.pig.data.SchemaTupleBackend;
 import org.apache.pig.impl.PigContext;
 import org.apache.pig.impl.PigImplConstants;
 import org.apache.pig.impl.logicalLayer.FrontendException;
@@ -263,9 +265,15 @@ public class LogicalPlan extends BaseOpe
             disabledOptimizerRules.add("GroupByConstParallelSetter");
         }
 
+        try {
+            SchemaTupleBackend.initialize(ConfigurationUtil.toConfiguration(pigContext.getProperties(), true),
+                    pigContext);
+        } catch (IOException e) {
+            throw new FrontendException(e);
+        }
         // run optimizer
         LogicalPlanOptimizer optimizer = new LogicalPlanOptimizer(this, 100,
-                disabledOptimizerRules);
+                disabledOptimizerRules, pigContext);
         optimizer.optimize();
     }
 }