You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by th...@apache.org on 2012/08/24 02:18:09 UTC

svn commit: r1376800 [5/6] - in /pig/trunk: ./ .eclipse.templates/ conf/ contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/storage/ contrib/zebra/src/java/org/apache/hadoop/zebra/pig/ contrib/zebra/src/java/org/apache/hadoop/zebra/pig/compa...

Modified: pig/trunk/test/org/apache/pig/data/TestSchemaTuple.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/data/TestSchemaTuple.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/data/TestSchemaTuple.java (original)
+++ pig/trunk/test/org/apache/pig/data/TestSchemaTuple.java Fri Aug 24 00:18:05 2012
@@ -41,6 +41,8 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.Random;
 
+import org.joda.time.DateTime;
+
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.mapreduce.InputSplit;
@@ -106,9 +108,9 @@ public class TestSchemaTuple {
         udfSchema = Utils.getSchemaFromString("((a:int,b:int),(a:int,b:int),(a:int,b:int)),((a:int,b:int),(a:int,b:int),(a:int,b:int))");
         SchemaTupleFrontend.registerToGenerateIfPossible(udfSchema, isAppendable, context);
 
-        udfSchema = Utils.getSchemaFromString("a:int, b:long, c:chararray, d:boolean, e:bytearray, f:float, g:double,"
-                +"(a:int, b:long, c:chararray, d:boolean, e:bytearray, f:float, g:double,"
-                +"(a:int, b:long, c:chararray, d:boolean, e:bytearray, f:float, g:double))");
+        udfSchema = Utils.getSchemaFromString("a:int, b:long, c:chararray, d:boolean, e:bytearray, f:float, g:double, dt:datetime"
+                +"(a:int, b:long, c:chararray, d:boolean, e:bytearray, f:float, g:double, dt:datetime"
+                +"(a:int, b:long, c:chararray, d:boolean, e:bytearray, f:float, g:double, dt:datetime))");
         SchemaTupleFrontend.registerToGenerateIfPossible(udfSchema, isAppendable, context);
 
         udfSchema = Utils.getSchemaFromString("boolean, boolean, boolean, boolean, boolean, boolean"
@@ -126,45 +128,45 @@ public class TestSchemaTuple {
                 + "boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean");
         SchemaTupleFrontend.registerToGenerateIfPossible(udfSchema, isAppendable, context);
 
-        udfSchema = Utils.getSchemaFromString("int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))");
+        udfSchema = Utils.getSchemaFromString("int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))");
         SchemaTupleFrontend.registerToGenerateIfPossible(udfSchema, isAppendable, context);
 
         isAppendable = true;
@@ -223,9 +225,9 @@ public class TestSchemaTuple {
         tf = SchemaTupleFactory.getInstance(udfSchema, isAppendable, context);
         putThroughPaces(tf, udfSchema, isAppendable);
 
-        udfSchema = Utils.getSchemaFromString("a:int, b:long, c:chararray, d:boolean, e:bytearray, f:float, g:double,"
-                +"(a:int, b:long, c:chararray, d:boolean, e:bytearray, f:float, g:double,"
-                +"(a:int, b:long, c:chararray, d:boolean, e:bytearray, f:float, g:double))");
+        udfSchema = Utils.getSchemaFromString("a:int, b:long, c:chararray, d:boolean, e:bytearray, f:float, g:double, dt: datetime"
+                +"(a:int, b:long, c:chararray, d:boolean, e:bytearray, f:float, g:double, dt: datetime,"
+                +"(a:int, b:long, c:chararray, d:boolean, e:bytearray, f:float, g:double, dt: datetime))");
         tf = SchemaTupleFactory.getInstance(udfSchema, isAppendable, context);
         putThroughPaces(tf, udfSchema, isAppendable);
 
@@ -245,45 +247,45 @@ public class TestSchemaTuple {
         tf = SchemaTupleFactory.getInstance(udfSchema, isAppendable, context);
         putThroughPaces(tf, udfSchema, isAppendable);
 
-        udfSchema = Utils.getSchemaFromString("int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))"
-                +"int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double,"
-                +"(int, long, chararray, boolean, bytearray, float, double))");
+        udfSchema = Utils.getSchemaFromString("int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))"
+                +"int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime,"
+                +"(int, long, chararray, boolean, bytearray, float, double, datetime))");
         tf = SchemaTupleFactory.getInstance(udfSchema, isAppendable, context);
         putThroughPaces(tf, udfSchema, isAppendable);
 
@@ -399,6 +401,7 @@ public class TestSchemaTuple {
         case DataType.LONG: return r.nextLong();
         case DataType.FLOAT: return r.nextFloat();
         case DataType.DOUBLE: return r.nextDouble();
+        case DataType.DATETIME: return new DateTime(r.nextLong());
         case DataType.BAG:
             DataBag db = BagFactory.getInstance().newDefaultBag();
             int sz = r.nextInt(100);
@@ -450,6 +453,7 @@ public class TestSchemaTuple {
                 case DataType.LONG: st.getLong(i); break;
                 case DataType.FLOAT: st.getFloat(i); break;
                 case DataType.DOUBLE: st.getDouble(i); break;
+                case DataType.DATETIME: st.getDateTime(i); break;
                 case DataType.TUPLE: st.getTuple(i); break;
                 case DataType.BAG: st.getDataBag(i); break;
                 case DataType.MAP: st.getMap(i); break;

Modified: pig/trunk/test/org/apache/pig/test/TestAdd.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestAdd.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestAdd.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestAdd.java Fri Aug 24 00:18:05 2012
@@ -23,6 +23,8 @@ import java.util.Random;
 
 import junit.framework.TestCase;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
@@ -54,7 +56,7 @@ public class TestAdd extends TestCase{
     public void testOperator() throws ExecException{
         //int TRIALS = 10;
         byte[] types = { DataType.BAG, DataType.BOOLEAN, DataType.BYTEARRAY, DataType.CHARARRAY, 
-                DataType.DOUBLE, DataType.FLOAT, DataType.INTEGER, DataType.LONG, DataType.MAP, DataType.TUPLE};
+                DataType.DOUBLE, DataType.FLOAT, DataType.INTEGER, DataType.LONG, DataType.DATETIME, DataType.MAP, DataType.TUPLE};
         //Map<Byte,String> map = GenRandomData.genTypeToNameMap();
         System.out.println("Testing Add operator");
         for(byte type : types) {
@@ -230,6 +232,25 @@ public class TestAdd extends TestCase{
                 assertEquals(null, (Long)resl.result);
                 break;
             }
+            case DataType.DATETIME:
+                DateTime inpdt1 = new DateTime(r.nextLong());
+                DateTime inpdt2 = new DateTime(r.nextLong());
+                lt.setValue(inpdt1);
+                rt.setValue(inpdt2);
+                Result resdt = op.getNext(inpdt1);
+                assertEquals(resdt.returnStatus, POStatus.STATUS_ERR);
+                
+                // test with null in lhs
+                lt.setValue(null);
+                rt.setValue(inpdt2);
+                resdt = op.getNext(inpdt1);
+                assertEquals(resdt.returnStatus, POStatus.STATUS_ERR);
+                // test with null in rhs
+                lt.setValue(inpdt1);
+                rt.setValue(null);
+                resdt = op.getNext(inpdt1);
+                assertEquals(resdt.returnStatus, POStatus.STATUS_ERR);
+                break;
             case DataType.MAP: {
                 Map<String,Object> inpm1 = GenRandomData.genRandMap(r, 10);
                 Map<String,Object> inpm2 = GenRandomData.genRandMap(r, 10);

Modified: pig/trunk/test/org/apache/pig/test/TestBuiltin.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestBuiltin.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestBuiltin.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestBuiltin.java Fri Aug 24 00:18:05 2012
@@ -32,7 +32,6 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Properties;
 import java.util.Random;
 import java.util.Set;
 import java.util.StringTokenizer;
@@ -45,14 +44,27 @@ import org.apache.pig.PigServer;
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.backend.hadoop.datastorage.ConfigurationUtil;
 import org.apache.pig.builtin.ARITY;
+import org.apache.pig.builtin.AddDuration;
 import org.apache.pig.builtin.BagSize;
 import org.apache.pig.builtin.CONCAT;
 import org.apache.pig.builtin.COR;
 import org.apache.pig.builtin.COUNT;
 import org.apache.pig.builtin.COUNT_STAR;
 import org.apache.pig.builtin.COV;
+import org.apache.pig.builtin.CurrentTime;
 import org.apache.pig.builtin.DIFF;
+import org.apache.pig.builtin.DaysBetween;
 import org.apache.pig.builtin.Distinct;
+import org.apache.pig.builtin.GetDay;
+import org.apache.pig.builtin.GetHour;
+import org.apache.pig.builtin.GetMilliSecond;
+import org.apache.pig.builtin.GetMinute;
+import org.apache.pig.builtin.GetMonth;
+import org.apache.pig.builtin.GetSecond;
+import org.apache.pig.builtin.GetWeek;
+import org.apache.pig.builtin.GetWeekYear;
+import org.apache.pig.builtin.GetYear;
+import org.apache.pig.builtin.HoursBetween;
 import org.apache.pig.builtin.INDEXOF;
 import org.apache.pig.builtin.INVERSEMAP;
 import org.apache.pig.builtin.KEYSET;
@@ -60,6 +72,9 @@ import org.apache.pig.builtin.LAST_INDEX
 import org.apache.pig.builtin.LCFIRST;
 import org.apache.pig.builtin.LOWER;
 import org.apache.pig.builtin.MapSize;
+import org.apache.pig.builtin.MilliSecondsBetween;
+import org.apache.pig.builtin.MinutesBetween;
+import org.apache.pig.builtin.MonthsBetween;
 import org.apache.pig.builtin.PigStorage;
 import org.apache.pig.builtin.REGEX_EXTRACT;
 import org.apache.pig.builtin.REGEX_EXTRACT_ALL;
@@ -67,8 +82,10 @@ import org.apache.pig.builtin.REPLACE;
 import org.apache.pig.builtin.SIZE;
 import org.apache.pig.builtin.STRSPLIT;
 import org.apache.pig.builtin.SUBSTRING;
+import org.apache.pig.builtin.SecondsBetween;
 import org.apache.pig.builtin.StringConcat;
 import org.apache.pig.builtin.StringSize;
+import org.apache.pig.builtin.SubtractDuration;
 import org.apache.pig.builtin.TOBAG;
 import org.apache.pig.builtin.TOKENIZE;
 import org.apache.pig.builtin.TOMAP;
@@ -76,11 +93,20 @@ import org.apache.pig.builtin.TOP;
 import org.apache.pig.builtin.TOTUPLE;
 import org.apache.pig.builtin.TRIM;
 import org.apache.pig.builtin.TextLoader;
+import org.apache.pig.builtin.ToDate;
+import org.apache.pig.builtin.ToDate2ARGS;
+import org.apache.pig.builtin.ToDate3ARGS;
+import org.apache.pig.builtin.ToDateISO;
+import org.apache.pig.builtin.ToMilliSeconds;
+import org.apache.pig.builtin.ToString;
+import org.apache.pig.builtin.ToUnixTime;
 import org.apache.pig.builtin.TupleSize;
 import org.apache.pig.builtin.UCFIRST;
 import org.apache.pig.builtin.UPPER;
 import org.apache.pig.builtin.VALUELIST;
 import org.apache.pig.builtin.VALUESET;
+import org.apache.pig.builtin.WeeksBetween;
+import org.apache.pig.builtin.YearsBetween;
 import org.apache.pig.data.BagFactory;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
@@ -94,6 +120,8 @@ import org.apache.pig.impl.logicalLayer.
 import org.apache.pig.impl.logicalLayer.schema.Schema;
 import org.apache.pig.impl.logicalLayer.schema.Schema.FieldSchema;
 import org.apache.pig.impl.logicalLayer.validators.TypeCheckerException;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Before;
@@ -290,6 +318,9 @@ public class TestBuiltin {
         }catch(ExecException e) {
             e.printStackTrace();
         }
+
+
+        DateTimeZone.setDefault(DateTimeZone.forOffsetMillis(DateTimeZone.UTC.getOffset(null)));
     }
 
     @AfterClass
@@ -315,6 +346,117 @@ public class TestBuiltin {
         }
     }
 
+    @Test
+    public void testAddSubtractDuration() throws Exception {
+        AddDuration func1 = new AddDuration();
+        SubtractDuration func2 = new SubtractDuration();
+
+        Tuple t1 = TupleFactory.getInstance().newTuple(2);
+        t1.set(0, new DateTime("2009-01-07T01:07:01.000Z"));
+        t1.set(1, "PT1S");
+        Tuple t2 = TupleFactory.getInstance().newTuple(2);
+        t2.set(0, new DateTime("2008-02-06T02:06:02.000Z"));
+        t2.set(1, "PT1M");
+        Tuple t3 = TupleFactory.getInstance().newTuple(2);
+        t3.set(0, new DateTime("2007-03-05T03:05:03.000Z"));
+        t3.set(1, "P1D");
+        
+        assertEquals(func1.exec(t1), new DateTime("2009-01-07T01:07:02.000Z"));
+        assertEquals(func1.exec(t2), new DateTime("2008-02-06T02:07:02.000Z"));
+        assertEquals(func1.exec(t3), new DateTime("2007-03-06T03:05:03.000Z"));
+        assertEquals(func2.exec(t1), new DateTime("2009-01-07T01:07:00.000Z"));
+        assertEquals(func2.exec(t2), new DateTime("2008-02-06T02:05:02.000Z"));
+        assertEquals(func2.exec(t3), new DateTime("2007-03-04T03:05:03.000Z"));
+    }
+
+    @Test
+    public void testConversionBetweenDateTimeAndString() throws Exception {
+        ToDate func1 = new ToDate();
+        Tuple t1 = TupleFactory.getInstance().newTuple(1);
+        t1.set(0, 1231290421000L);
+        DateTime dt1 = func1.exec(t1);
+        assertEquals(dt1, new DateTime("2009-01-07T01:07:01.000Z"));
+
+        ToDateISO func2 = new ToDateISO();
+        Tuple t2 = TupleFactory.getInstance().newTuple(1);
+        t2.set(0, "2009-01-07T01:07:01.000Z");
+        DateTime dt2 = func2.exec(t2);
+        assertEquals(dt2, new DateTime("2009-01-07T01:07:01.000Z"));
+
+        Tuple t3 = TupleFactory.getInstance().newTuple(1);
+        t3.set(0, "2009-01-07T01:07:01.000+08:00");
+        DateTime dt3 = func2.exec(t3);
+        assertEquals(dt3, new DateTime("2009-01-07T01:07:01.000+08:00", DateTimeZone.forID("+08:00")));
+
+        ToDate2ARGS func3 = new ToDate2ARGS();        
+        Tuple t4 = TupleFactory.getInstance().newTuple(2);
+        t4.set(0, "2009.01.07 AD at 01:07:01");
+        t4.set(1, "yyyy.MM.dd G 'at' HH:mm:ss");
+        DateTime dt4 = func3.exec(t4);
+        assertEquals(dt4, new DateTime("2009-01-07T01:07:01.000Z"));
+
+        Tuple t5 = TupleFactory.getInstance().newTuple(2);
+        t5.set(0, "2009.01.07 AD at 01:07:01 +0800");
+        t5.set(1, "yyyy.MM.dd G 'at' HH:mm:ss Z");
+        DateTime dt5 = func3.exec(t5);
+        assertEquals(dt5, new DateTime("2009-01-07T01:07:01.000+08:00"));
+        
+        ToDate3ARGS func4 = new ToDate3ARGS();        
+        Tuple t6 = TupleFactory.getInstance().newTuple(3);
+        t6.set(0, "2009.01.07 AD at 01:07:01");
+        t6.set(1, "yyyy.MM.dd G 'at' HH:mm:ss");
+        t6.set(2, "+00:00");
+        DateTime dt6 = func4.exec(t6);
+        assertEquals(dt6, new DateTime("2009-01-07T01:07:01.000Z", DateTimeZone.forID("+00:00")));
+
+        Tuple t7 = TupleFactory.getInstance().newTuple(3);
+        t7.set(0, "2009.01.07 AD at 01:07:01 +0800");
+        t7.set(1, "yyyy.MM.dd G 'at' HH:mm:ss Z");
+        t7.set(2, "asia/singapore");
+        DateTime dt7 = func4.exec(t7);
+        assertEquals(dt7, new DateTime("2009-01-07T01:07:01.000+08:00", DateTimeZone.forID("+08:00")));
+
+        ToUnixTime func5 = new ToUnixTime();
+        Tuple t8 = TupleFactory.getInstance().newTuple(1);
+        t8.set(0, new DateTime(1231290421000L));
+        Long ut1 = func5.exec(t8);
+        assertEquals(ut1.longValue(), 1231290421L);
+
+        ToString func6 = new ToString();
+
+        Tuple t9 = TupleFactory.getInstance().newTuple(1);
+        t9.set(0, new DateTime("2009-01-07T01:07:01.000Z"));
+        String dtStr1 = func6.exec(t9);
+        assertEquals(dtStr1, "2009-01-07T01:07:01.000Z");
+
+        Tuple t10 = TupleFactory.getInstance().newTuple(1);
+        t10.set(0, new DateTime("2009-01-07T09:07:01.000+08:00"));
+        String dtStr2 = func6.exec(t10);
+        assertEquals(dtStr2, "2009-01-07T01:07:01.000Z");
+
+        Tuple t11 = TupleFactory.getInstance().newTuple(2);
+        t11.set(0, new DateTime("2009-01-07T01:07:01.000Z"));
+        t11.set(1, "yyyy.MM.dd G 'at' HH:mm:ss");
+        String dtStr3 = func6.exec(t11);
+        assertEquals(dtStr3, "2009.01.07 AD at 01:07:01");
+
+        Tuple t12 = TupleFactory.getInstance().newTuple(2);
+        t12.set(0, new DateTime("2009-01-07T01:07:01.000+08:00", DateTimeZone.forID("+08:00")));
+        t12.set(1, "yyyy.MM.dd G 'at' HH:mm:ss Z");
+        String dtStr4 = func6.exec(t12);
+        assertEquals(dtStr4, "2009.01.07 AD at 01:07:01 +0800");
+        
+        ToMilliSeconds func7 = new ToMilliSeconds();
+        Tuple t13 = TupleFactory.getInstance().newTuple(1);
+        t13.set(0, new DateTime(1231290421000L));
+        Long ut2 = func7.exec(t11);
+        assertEquals(ut2.longValue(), 1231290421000L);
+        
+        CurrentTime func8 = new CurrentTime();
+        DateTime dt11 = func8.exec(null);
+        Assert.assertNotNull(dt11);
+    }
+
     /**
      * Test the case where the combiner is not called - so initial is called
      * and then final is called
@@ -2538,4 +2680,113 @@ public class TestBuiltin {
         assertEquals((String)resultList.get(1), "source");
     }
 
+    @Test
+    public void testDiffDateTime() throws Exception {
+        Tuple t = TupleFactory.getInstance().newTuple(2);
+        t.set(0, new DateTime("2009-01-07T00:00:00.000Z"));
+        t.set(1, new DateTime("2002-01-01T00:00:00.000Z"));
+
+        YearsBetween func1 = new YearsBetween();
+        Long years = func1.exec(t);
+        System.out.println("Years: " + years.toString());
+        Assert.assertEquals(years.longValue(), 7L);
+        
+        MonthsBetween func2 = new MonthsBetween();
+        Long months = func2.exec(t);
+        System.out.println("Months: " + months.toString());
+        Assert.assertEquals(months.longValue(),84L);
+        
+        WeeksBetween func3 = new WeeksBetween();
+        Long weeks = func3.exec(t);
+        System.out.println("Weeks: " + weeks.toString());
+        Assert.assertEquals(weeks.longValue(), 366L);
+
+        DaysBetween func4 = new DaysBetween();
+        Long days = func4.exec(t);
+        System.out.println("Days: " + days.toString());
+        Assert.assertEquals(days.longValue(), 2563L);
+
+        HoursBetween func5 = new HoursBetween();
+        Long hours = func5.exec(t);
+        System.out.println("Hours: " + hours.toString());
+        Assert.assertEquals(hours.longValue(), 61512L);
+
+        MinutesBetween func6 = new MinutesBetween();
+        Long mins = func6.exec(t);
+        System.out.println("Minutes: " + mins.toString());
+        Assert.assertEquals(mins.longValue(), 3690720L);
+
+        SecondsBetween func7 = new SecondsBetween();
+        Long secs = func7.exec(t);
+        System.out.println("Seconds: " + secs.toString());
+        Assert.assertEquals(secs.longValue(), 221443200L);
+
+        MilliSecondsBetween func8 = new MilliSecondsBetween();
+        Long millis = func8.exec(t);
+        System.out.println("MilliSeconds: " + millis.toString());
+        Assert.assertEquals(millis.longValue(), 221443200000L);
+    }
+
+    @Test
+    public void testGetDateTimeField() throws Exception {
+        Tuple t1 = TupleFactory.getInstance().newTuple(1);
+        t1.set(0, new DateTime("2010-04-15T08:11:33.020Z"));
+        Tuple t2 = TupleFactory.getInstance().newTuple(1);
+        t2.set(0, new DateTime("2010-04-15T08:11:33.020+08:00"));
+        
+        GetYear func1 = new GetYear();
+        Integer year = func1.exec(t1);
+        assertEquals(year.intValue(), 2010);
+        year = func1.exec(t2);
+        assertEquals(year.intValue(), 2010);
+
+        GetMonth func2 = new GetMonth();
+        Integer month = func2.exec(t1);
+        assertEquals(month.intValue(), 4);
+        month = func2.exec(t2);
+        assertEquals(month.intValue(), 4);
+        
+        GetDay func3 = new GetDay();
+        Integer day = func3.exec(t1);
+        assertEquals(day.intValue(), 15);
+        day = func3.exec(t2);
+        assertEquals(day.intValue(), 15);
+        
+        GetHour func4 = new GetHour();
+        Integer hour = func4.exec(t1);
+        assertEquals(hour.intValue(), 8);
+        hour = func4.exec(t2);
+        assertEquals(hour.intValue(), 0);
+        
+        GetMinute func5 = new GetMinute();
+        Integer minute = func5.exec(t1);
+        assertEquals(minute.intValue(), 11);
+        minute = func5.exec(t2);
+        assertEquals(minute.intValue(), 11);
+        
+        GetSecond func6 = new GetSecond();
+        Integer second = func6.exec(t1);
+        assertEquals(second.intValue(), 33);
+        second = func6.exec(t2);
+        assertEquals(second.intValue(), 33);
+        
+        GetMilliSecond func7 = new GetMilliSecond();
+        Integer milli = func7.exec(t1);
+        assertEquals(milli.intValue(), 20);
+        milli = func7.exec(t2);
+        assertEquals(milli.intValue(), 20);
+
+        GetWeekYear func8 = new GetWeekYear();
+        Integer weekyear = func8.exec(t1);
+        assertEquals(weekyear.intValue(), 2010);
+        weekyear = func8.exec(t2);
+        assertEquals(weekyear.intValue(), 2010);
+        
+        GetWeek func9 = new GetWeek();
+        Integer week = func9.exec(t1);
+        assertEquals(week.intValue(), 15);
+        week = func9.exec(t2);
+        assertEquals(week.intValue(), 15);
+    }
+
 }

Modified: pig/trunk/test/org/apache/pig/test/TestConversions.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestConversions.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestConversions.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestConversions.java Fri Aug 24 00:18:05 2012
@@ -22,6 +22,9 @@ import java.util.Random;
 import java.util.Map;
 import java.io.IOException;
 
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+
 import org.apache.pig.ResourceSchema;
 import org.apache.pig.ResourceSchema.ResourceFieldSchema;
 import org.apache.pig.builtin.PigStorage;
@@ -52,6 +55,11 @@ public class TestConversions extends Tes
 	Random r = new Random();
 	final int MAX = 10;
 
+	@Override
+	public void setUp() {
+	    DateTimeZone.setDefault(DateTimeZone.forOffsetMillis(DateTimeZone.UTC.getOffset(null)));
+	}
+
     @Test
     public void testBytesToBoolean() throws IOException {
         // valid booleans
@@ -245,6 +253,12 @@ public class TestConversions extends Tes
         Double d = r.nextDouble();
         assertTrue(DataType.equalByteArrays(d.toString().getBytes(), ((Utf8StorageConverter)ps.getLoadCaster()).toBytes(d)));
     }
+
+    @Test
+    public void testDateTimeToBytes() throws IOException {
+        DateTime dt = new DateTime(r.nextLong());
+        assertTrue(DataType.equalByteArrays(dt.toString().getBytes(), ((Utf8StorageConverter)ps.getLoadCaster()).toBytes(dt)));
+    }
         
     @Test
     public void testCharArrayToBytes() throws IOException {

Modified: pig/trunk/test/org/apache/pig/test/TestDivide.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestDivide.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestDivide.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestDivide.java Fri Aug 24 00:18:05 2012
@@ -23,6 +23,8 @@ import java.util.Random;
 
 import junit.framework.TestCase;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
@@ -54,7 +56,7 @@ public class TestDivide extends TestCase
     public void testOperator() throws ExecException{
         //int TRIALS = 10;
         byte[] types = { DataType.BAG, DataType.BOOLEAN, DataType.BYTEARRAY, DataType.CHARARRAY, 
-                DataType.DOUBLE, DataType.FLOAT, DataType.INTEGER, DataType.LONG, DataType.MAP, DataType.TUPLE};
+                DataType.DOUBLE, DataType.FLOAT, DataType.INTEGER, DataType.LONG, DataType.DATETIME, DataType.MAP, DataType.TUPLE};
         //Map<Byte,String> map = GenRandomData.genTypeToNameMap();
         System.out.println("Testing DIVIDE operator");
         for(byte type : types) {
@@ -250,6 +252,25 @@ public class TestDivide extends TestCase
                 assertEquals(null, (Long)resl.result);
                 break;
             }
+            case DataType.DATETIME:
+                DateTime inpdt1 = new DateTime(r.nextLong());
+                DateTime inpdt2 = new DateTime(r.nextLong());
+                lt.setValue(inpdt1);
+                rt.setValue(inpdt2);
+                Result resdt = op.getNext(inpdt1);
+                assertEquals(resdt.returnStatus, POStatus.STATUS_ERR);
+                
+                // test with null in lhs
+                lt.setValue(null);
+                rt.setValue(inpdt2);
+                resdt = op.getNext(inpdt1);
+                assertEquals(resdt.returnStatus, POStatus.STATUS_ERR);
+                // test with null in rhs
+                lt.setValue(inpdt1);
+                rt.setValue(null);
+                resdt = op.getNext(inpdt1);
+                assertEquals(resdt.returnStatus, POStatus.STATUS_ERR);
+                break;
             case DataType.MAP: {
                 Map<String,Object> inpm1 = GenRandomData.genRandMap(r, 10);
                 Map<String,Object> inpm2 = GenRandomData.genRandMap(r, 10);

Modified: pig/trunk/test/org/apache/pig/test/TestEqualTo.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestEqualTo.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestEqualTo.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestEqualTo.java Fri Aug 24 00:18:05 2012
@@ -21,6 +21,8 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Random;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
@@ -240,6 +242,44 @@ public class TestEqualTo extends junit.f
 	}
 
     @Test
+    public void testDateTimeNe() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(1L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(0L));
+        EqualToExpr g = GenPhyOp.compEqualToExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertFalse((Boolean)r.result);
+    }
+
+    @Test
+    public void testDateTimeEq() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(1L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(1L));
+        EqualToExpr g = GenPhyOp.compEqualToExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertTrue((Boolean)r.result);
+    }
+
+    
+    @Test
+    public void testDateTimeAndNullValues() throws Exception {
+        
+        checkNullValues(  DataType.DATETIME,  new DateTime(1L) );
+
+    }
+
+    @Test
     public void testStringNe() throws Exception {
         ConstantExpression lt = GenPhyOp.exprConst();
         lt.setValue(new String("a"));

Modified: pig/trunk/test/org/apache/pig/test/TestGTOrEqual.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestGTOrEqual.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestGTOrEqual.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestGTOrEqual.java Fri Aug 24 00:18:05 2012
@@ -20,6 +20,8 @@ package org.apache.pig.test;
 import java.util.Map;
 import java.util.Random;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
@@ -253,6 +255,56 @@ public class TestGTOrEqual extends junit
     	checkNullValues( DataType.DOUBLE,  new Double(1.0) );
     }
 
+    @Test
+    public void testDateTimeGt() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(1L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(0L));
+        GTOrEqualToExpr g = GenPhyOp.compGTOrEqualToExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertTrue((Boolean)r.result);
+    }
+
+    @Test
+    public void testDateTimeLt() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(0L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(1L));
+        GTOrEqualToExpr g = GenPhyOp.compGTOrEqualToExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertFalse((Boolean)r.result);
+    }
+
+    @Test
+    public void testDateTimeEq() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(1L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(1L));
+        GTOrEqualToExpr g = GenPhyOp.compGTOrEqualToExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertTrue((Boolean)r.result);
+    }
+
+    @Test
+    public void testDateTimeAndNullValues() throws Exception {
+        
+        checkNullValues( DataType.DATETIME,  new DateTime(1L) );
+    }
 
     @Test
     public void testStringGt() throws Exception {

Modified: pig/trunk/test/org/apache/pig/test/TestGreaterThan.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestGreaterThan.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestGreaterThan.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestGreaterThan.java Fri Aug 24 00:18:05 2012
@@ -20,6 +20,8 @@ package org.apache.pig.test;
 import java.util.Map;
 import java.util.Random;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
@@ -264,7 +266,63 @@ public class TestGreaterThan extends jun
 	    checkNullValues(   DataType.DOUBLE,  new Double(1.0) );
 	    
 	}
+
+    @Test
+    public void testDateTimeGt() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(1L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(0L));
+        GreaterThanExpr g = GenPhyOp.compGreaterThanExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertTrue((Boolean)r.result);
+    }
+
+
+    @Test
+    public void testDateTimeLt() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(0L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(1L));
+        GreaterThanExpr g = GenPhyOp.compGreaterThanExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertFalse((Boolean)r.result);
+    }
+
+  
     
+    @Test
+    public void testDateTimeEq() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(1L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(1L));
+        GreaterThanExpr g = GenPhyOp.compGreaterThanExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertFalse((Boolean)r.result);
+    }
+
+
+    @Test
+    public void testDateTimeAndNullValues() throws Exception {
+        
+        checkNullValues(  DataType.DATETIME,  new DateTime(1L) );
+
+    }
+
 	@Test
     public void testStringGt() throws Exception {
         ConstantExpression lt = GenPhyOp.exprConst();

Modified: pig/trunk/test/org/apache/pig/test/TestLTOrEqual.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestLTOrEqual.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestLTOrEqual.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestLTOrEqual.java Fri Aug 24 00:18:05 2012
@@ -20,6 +20,8 @@ package org.apache.pig.test;
 import java.util.Map;
 import java.util.Random;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
@@ -251,6 +253,56 @@ public class TestLTOrEqual extends junit
 	}
 
     @Test
+    public void testDateTimeGt() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(1L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(0L));
+        LTOrEqualToExpr g = GenPhyOp.compLTOrEqualToExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertFalse((Boolean)r.result);
+    }
+
+    @Test
+    public void testDateTimeLt() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(0L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(1L));
+        LTOrEqualToExpr g = GenPhyOp.compLTOrEqualToExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertTrue((Boolean)r.result);
+    }
+
+    @Test
+    public void testDateTimeEq() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(1L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(1L));
+        LTOrEqualToExpr g = GenPhyOp.compLTOrEqualToExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertTrue((Boolean)r.result);
+    }
+
+    @Test
+    public void testDateTimeAndNullValues() throws Exception {
+        checkNullValues(  DataType.DATETIME, new DateTime(1L) );            
+    }
+
+    @Test
     public void testStringGt() throws Exception {
         ConstantExpression lt = GenPhyOp.exprConst();
         lt.setValue(new String("b"));

Modified: pig/trunk/test/org/apache/pig/test/TestLessThan.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestLessThan.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestLessThan.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestLessThan.java Fri Aug 24 00:18:05 2012
@@ -20,6 +20,8 @@ package org.apache.pig.test;
 import java.util.Map;
 import java.util.Random;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
@@ -255,6 +257,58 @@ public class TestLessThan extends junit.
     }  
 
     @Test
+    public void testDateTimeGt() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(1L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(0L));
+        LessThanExpr g = GenPhyOp.compLessThanExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertFalse((Boolean)r.result);
+    }
+
+    @Test
+    public void testDateTimeLt() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(0L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(1L));
+        LessThanExpr g = GenPhyOp.compLessThanExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertTrue((Boolean)r.result);
+    }
+
+    @Test
+    public void testDateTimeEq() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(1L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(1L));
+        LessThanExpr g = GenPhyOp.compLessThanExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertFalse((Boolean)r.result);
+    }
+
+    
+    @Test
+    public void testDateTimeAndNullValues() throws Exception {
+        
+        checkNullValues( DataType.DATETIME,  new DateTime(1L) );
+    }  
+
+    @Test
     public void testStringGt() throws Exception {
         ConstantExpression lt = GenPhyOp.exprConst();
         lt.setValue(new String("b"));

Modified: pig/trunk/test/org/apache/pig/test/TestMod.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestMod.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestMod.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestMod.java Fri Aug 24 00:18:05 2012
@@ -23,6 +23,8 @@ import java.util.Random;
 
 import junit.framework.TestCase;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
@@ -54,7 +56,7 @@ public class TestMod extends TestCase{
     public void testOperator() throws ExecException{
         //int TRIALS = 10;
         byte[] types = { DataType.BAG, DataType.BOOLEAN, DataType.BYTEARRAY, DataType.CHARARRAY, 
-                DataType.DOUBLE, DataType.FLOAT, DataType.INTEGER, DataType.LONG, DataType.MAP, DataType.TUPLE};
+                DataType.DOUBLE, DataType.FLOAT, DataType.INTEGER, DataType.LONG, DataType.DATETIME, DataType.MAP, DataType.TUPLE};
         //Map<Byte,String> map = GenRandomData.genTypeToNameMap();
         System.out.println("Testing Mod operator");
         for(byte type : types) {
@@ -228,6 +230,25 @@ public class TestMod extends TestCase{
                 assertEquals(null, (Long)resl.result);
                 break;
             }
+            case DataType.DATETIME:
+                DateTime inpdt1 = new DateTime(r.nextLong());
+                DateTime inpdt2 = new DateTime(r.nextLong());
+                lt.setValue(inpdt1);
+                rt.setValue(inpdt2);
+                Result resdt = op.getNext(inpdt1);
+                assertEquals(resdt.returnStatus, POStatus.STATUS_ERR);
+                
+                // test with null in lhs
+                lt.setValue(null);
+                rt.setValue(inpdt2);
+                resb = op.getNext(inpdt1);
+                assertEquals(resb.returnStatus, POStatus.STATUS_ERR);
+                // test with null in rhs
+                lt.setValue(inpdt1);
+                rt.setValue(null);
+                resb = op.getNext(inpdt1);
+                assertEquals(resb.returnStatus, POStatus.STATUS_ERR);
+                break;
             case DataType.MAP: {
                 Map<String,Object> inpm1 = GenRandomData.genRandMap(r, 10);
                 Map<String,Object> inpm2 = GenRandomData.genRandMap(r, 10);

Modified: pig/trunk/test/org/apache/pig/test/TestMultiply.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestMultiply.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestMultiply.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestMultiply.java Fri Aug 24 00:18:05 2012
@@ -23,6 +23,8 @@ import java.util.Random;
 
 import junit.framework.TestCase;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
@@ -54,7 +56,7 @@ public class TestMultiply extends TestCa
     public void testOperator() throws ExecException{
         //int TRIALS = 10;
         byte[] types = { DataType.BAG, DataType.BOOLEAN, DataType.BYTEARRAY, DataType.CHARARRAY, 
-                DataType.DOUBLE, DataType.FLOAT, DataType.INTEGER, DataType.LONG, DataType.MAP, DataType.TUPLE};
+                DataType.DOUBLE, DataType.FLOAT, DataType.INTEGER, DataType.LONG, DataType.DATETIME, DataType.MAP, DataType.TUPLE};
         //Map<Byte,String> map = GenRandomData.genTypeToNameMap();
         System.out.println("Testing Multiply operator");
         for(byte type : types) {
@@ -230,6 +232,26 @@ public class TestMultiply extends TestCa
                 assertEquals(null, (Long)resl.result);
                 break;
             }
+            case DataType.DATETIME: {
+                DateTime inpdt1 = new DateTime(r.nextLong());
+                DateTime inpdt2 = new DateTime(r.nextLong());
+                lt.setValue(inpdt1);
+                rt.setValue(inpdt2);
+                Result resdt = op.getNext(inpdt1);
+                assertEquals(resdt.returnStatus, POStatus.STATUS_ERR);
+                
+                // test with null in lhs
+                lt.setValue(null);
+                rt.setValue(inpdt2);
+                resb = op.getNext(inpdt1);
+                assertEquals(resb.returnStatus, POStatus.STATUS_ERR);
+                // test with null in rhs
+                lt.setValue(inpdt1);
+                rt.setValue(null);
+                resb = op.getNext(inpdt1);
+                assertEquals(resb.returnStatus, POStatus.STATUS_ERR);
+                break;
+            }
             case DataType.MAP: {
                 Map<String,Object> inpm1 = GenRandomData.genRandMap(r, 10);
                 Map<String,Object> inpm2 = GenRandomData.genRandMap(r, 10);

Modified: pig/trunk/test/org/apache/pig/test/TestNotEqualTo.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestNotEqualTo.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestNotEqualTo.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestNotEqualTo.java Fri Aug 24 00:18:05 2012
@@ -21,6 +21,8 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Random;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
@@ -234,6 +236,43 @@ public class TestNotEqualTo extends juni
     }
 
     @Test
+    public void testDateTimeNe() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(1L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(0L));
+        NotEqualToExpr g = GenPhyOp.compNotEqualToExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertTrue((Boolean)r.result);
+    }
+
+    @Test
+    public void testDateTimeEq() throws Exception {
+        ConstantExpression lt = GenPhyOp.exprConst();
+        lt.setValue(new DateTime(1L));
+        ConstantExpression rt = GenPhyOp.exprConst();
+        rt.setValue(new DateTime(1L));
+        NotEqualToExpr g = GenPhyOp.compNotEqualToExpr();
+        g.setLhs(lt);
+        g.setRhs(rt);
+        g.setOperandType(DataType.DATETIME);
+        Result r = g.getNext(new Boolean(true));
+        assertEquals(POStatus.STATUS_OK, r.returnStatus);
+        assertFalse((Boolean)r.result);
+    }
+
+
+    @Test
+    public void testDateTimeAndNullValues() throws Exception {
+        
+        checkNullValues( DataType.DATETIME,  new DateTime(1L) );
+    }
+
+    @Test
     public void testStringNe() throws Exception {
         ConstantExpression lt = GenPhyOp.exprConst();
         lt.setValue(new String("a"));

Modified: pig/trunk/test/org/apache/pig/test/TestNull.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestNull.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestNull.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestNull.java Fri Aug 24 00:18:05 2012
@@ -22,6 +22,8 @@ import static org.junit.Assert.*;
 import java.util.Map;
 import java.util.Random;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
@@ -193,6 +195,22 @@ public class TestNull extends junit.fram
             if (!res.result.equals(true))
                 return false;
             return true;
+        case DataType.DATETIME:
+            inp1 = new DateTime(r.nextLong());
+            res = isNullExpr.getNext((Boolean) null);
+            if ((Boolean) res.result != true)
+                return false;
+            lt.setValue(inp1);
+            res = isNullExpr.getNext((Boolean) null);
+            ret = (DataType.compare(inp1, null) == 0);
+            if (!(res.result.equals(ret)))
+                return false;
+            // set the input to null and test
+            lt.setValue((DateTime)null);
+            res = isNullExpr.getNext((Boolean) null);
+            if (!res.result.equals(true))
+                return false;
+            return true;
         case DataType.MAP:
             inp1 = GenRandomData.genRandMap(r, 10);
             res = isNullExpr.getNext((Boolean) null);

Modified: pig/trunk/test/org/apache/pig/test/TestOrderBy.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestOrderBy.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestOrderBy.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestOrderBy.java Fri Aug 24 00:18:05 2012
@@ -28,6 +28,9 @@ import java.util.List;
 
 import junit.framework.TestCase;
 
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+
 import org.apache.pig.ExecType;
 import org.apache.pig.PigServer;
 import org.apache.pig.data.DataType;
@@ -65,6 +68,8 @@ public class TestOrderBy extends TestCas
             ps.println("1\t" + DATA[1][i] + "\t" + DATA[0][i]);
         }
         ps.close();
+        
+        DateTimeZone.setDefault(DateTimeZone.forOffsetMillis(DateTimeZone.UTC.getOffset(null)));
     }
     
     @After
@@ -303,4 +308,52 @@ public class TestOrderBy extends TestCas
         return fp1;
     }
 
+    @Test
+    public void testOrderByDateTimeColumn() throws Exception {
+        File tmpFile = genDataSetFileForOrderByDateTimeColumn();
+        List<Tuple> expectedResults = new ArrayList<Tuple>();
+        expectedResults.add(Util.buildTuple("value3", null));
+        expectedResults.add(Util.buildTuple("value4", null));
+        expectedResults.add(Util.buildTuple("value10", null));
+        expectedResults.add(Util.buildTuple("value2", new DateTime("1970-01-01T00:00:00.000Z")));
+        expectedResults.add(Util.buildTuple("value6", new DateTime("1970-01-01T00:00:01.000Z")));
+        expectedResults.add(Util.buildTuple("value7", new DateTime("1970-01-01T00:00:01.000Z")));
+        expectedResults.add(Util.buildTuple("value1", new DateTime("1970-01-01T00:01:00.000Z")));
+        expectedResults.add(Util.buildTuple("value5", new DateTime("1970-01-01T01:00:00.000Z")));
+        expectedResults.add(Util.buildTuple("value8", new DateTime("1970-01-02T00:00:00.000Z")));
+        expectedResults.add(Util.buildTuple("value9", new DateTime("1970-02-01T00:00:00.000Z")));
+        
+        pig.registerQuery("blah = load '"
+                + Util.generateURI(tmpFile.toString(), pig.getPigContext())
+                + "' as (data:chararray, test:datetime);");
+        pig.registerQuery("ordered = order blah by test;");
+        Iterator<Tuple> expectedItr = expectedResults.iterator();
+        Iterator<Tuple> actualItr = pig.openIterator("ordered");
+        while (expectedItr.hasNext() && actualItr.hasNext()) {
+            Tuple expectedTuple = expectedItr.next();
+            Tuple actualTuple = actualItr.next();
+            assertEquals(expectedTuple, actualTuple);
+        }
+        assertEquals(expectedItr.hasNext(), actualItr.hasNext());
+    }
+
+    private File genDataSetFileForOrderByDateTimeColumn() throws IOException {
+
+        File fp1 = File.createTempFile("order_by_datetime", "txt");
+        PrintStream ps = new PrintStream(new FileOutputStream(fp1));
+        ps.println("value1\t1970-01-01T00:01:00.000Z");
+        ps.println("value2\t1970-01-01T00:00:00.000Z");
+        ps.println("value3\t");
+        ps.println("value4\t");
+        ps.println("value5\t1970-01-01T01:00:00.000Z");
+        ps.println("value6\t1970-01-01T00:00:01.000Z");
+        ps.println("value7\t1970-01-01T00:00:01.000Z");
+        ps.println("value8\t1970-01-02T00:00:00.000Z");
+        ps.println("value9\t1970-02-01T00:00:00.000Z");
+        ps.println("value10\t");
+
+        ps.close();
+
+        return fp1;
+    }
 }

Modified: pig/trunk/test/org/apache/pig/test/TestPOBinCond.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestPOBinCond.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestPOBinCond.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestPOBinCond.java Fri Aug 24 00:18:05 2012
@@ -39,6 +39,7 @@ import org.apache.pig.backend.hadoop.exe
 import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.EqualToExpr;
 import org.apache.pig.impl.plan.PlanException;
 import org.apache.pig.test.utils.GenPhyOp;
+import org.joda.time.DateTime;
 import org.junit.Before;
 
 import junit.framework.TestCase;
@@ -275,7 +276,23 @@ public class TestPOBinCond extends TestC
 	    }
 
     }
-   
+
+    public void testPOBinCondWithDateTime() throws  ExecException, PlanException {
+        bag= getBag(DataType.DATETIME);
+        TestPoBinCondHelper testHelper= new TestPoBinCondHelper(DataType.DATETIME, new DateTime(1L) );
+    
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+               Tuple t = it.next();
+               testHelper.getPlan().attachInput(t);
+               DateTime value = (DateTime) t.get(0);
+               int expected = value.equals(new DateTime(1L))? 1:0 ;
+               Integer dummy = new Integer(0);
+               Integer result=(Integer)testHelper.getOperator().getNext(dummy).result;
+               int actual = result.intValue();
+               assertEquals( expected, actual );
+        }
+    }
+
     public void testPOBinCondIntWithNull() throws  ExecException, PlanException {
    	
     	bag= getBagWithNulls(DataType.INTEGER);
@@ -364,6 +381,33 @@ public class TestPOBinCond extends TestC
 	       }
 
 	}
+
+    public void testPOBinCondDateTimeWithNull() throws  ExecException, PlanException {
+        
+        bag= getBagWithNulls(DataType.DATETIME);
+        TestPoBinCondHelper testHelper= new TestPoBinCondHelper(DataType.DATETIME, new DateTime(1L) );
+
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+               Tuple t = it.next();
+               testHelper.getPlan().attachInput(t);
+               
+               DateTime value=null;
+               if ( t.get(0)!=null){
+                   value = (DateTime) t.get(0);
+               }
+               Integer dummy = new Integer(0);
+               Integer result=(Integer)testHelper.getOperator().getNext(dummy).result;                  
+               int expected;
+               int actual;
+               if ( value!=null ) {
+                   expected=value.equals(new DateTime(1L))? 1:0 ;
+                   actual  = result.intValue();
+                   assertEquals( expected, actual );
+               } else {
+                   assertEquals( null, result );
+               }
+           }
+    }
    
     protected class TestPoBinCondHelper {
     	
@@ -451,7 +495,10 @@ public class TestPOBinCond extends TestC
                     break;
                 case DataType.DOUBLE:
                     t.append((i % 2 == 0 ? 1.0 : 0.0));
-                    break;                
+                    break;
+                case DataType.DATETIME:
+                    t.append(new DateTime(r.nextLong() % 2L));
+                    break;
             }
             t.append(1);
             t.append(0);
@@ -483,6 +530,9 @@ public class TestPOBinCond extends TestC
                     case DataType.DOUBLE:
                         t.append( (i % 2 == 0 ? 1.0 : 0.0));
                         break;
+                    case DataType.DATETIME:
+                        t.append(new DateTime(r.nextLong() % 2L));
+                        break;
                 }
             }            
             t.append(1);

Modified: pig/trunk/test/org/apache/pig/test/TestPOCast.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestPOCast.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestPOCast.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestPOCast.java Fri Aug 24 00:18:05 2012
@@ -25,6 +25,8 @@ import java.util.Random;
 
 import junit.framework.TestCase;
 
+import org.joda.time.DateTime;
+
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.mapreduce.InputFormat;
 import org.apache.hadoop.mapreduce.Job;
@@ -167,7 +169,15 @@ public class TestPOCast extends TestCase
                 assertEquals(d, res.result);
             }
         }
-        
+
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            DateTime dt = null;
+            Result res = op.getNext(dt);
+            assertEquals(POStatus.STATUS_ERR, res.returnStatus);
+        }
+
         for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
             Tuple t = it.next();
             plan.attachInput(t);
@@ -345,6 +355,21 @@ public class TestPOCast extends TestCase
 				assertEquals(d, res.result);
 			}
 		}
+
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            DateTime dt = new DateTime(((Integer)t.get(0)).longValue());
+            Result res = op.getNext(dt);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                assertEquals(dt, res.result);
+            }
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(dt);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                assertEquals(dt, res.result);
+            }
+        }
 		
 		for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
 			Tuple t = it.next();
@@ -531,7 +556,23 @@ public class TestPOCast extends TestCase
 			if(res.returnStatus == POStatus.STATUS_OK)
 				assertEquals(d, res.result);
 		}
-		
+
+		for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            DateTime dt = new DateTime((Long)t.get(0));
+            Result res = op.getNext(dt);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + l);
+                assertEquals(dt, res.result);
+            }
+            
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(dt);
+            if(res.returnStatus == POStatus.STATUS_OK)
+                assertEquals(dt, res.result);
+        }
+
 		for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
 			Tuple t = it.next();
 			plan.attachInput(t);
@@ -712,7 +753,23 @@ public class TestPOCast extends TestCase
 			if(res.returnStatus == POStatus.STATUS_OK)
 				assertEquals(d, res.result);
 		}
-		
+
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            DateTime dt = new DateTime(((Float)t.get(0)).longValue());
+            Result res = op.getNext(dt);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + dt);
+                assertEquals(dt, res.result);
+            }
+            
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(dt);
+            if(res.returnStatus == POStatus.STATUS_OK)
+                assertEquals(dt, res.result);
+        }   
+
 		for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
 			Tuple t = it.next();
 			plan.attachInput(t);
@@ -902,7 +959,23 @@ public class TestPOCast extends TestCase
 			if(res.returnStatus == POStatus.STATUS_OK)
 				assertEquals(d, res.result);
 		}
-		
+
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            DateTime dt = new DateTime(((Double)t.get(0)).longValue());
+            Result res = op.getNext(dt);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + dt);
+                assertEquals(dt, res.result);
+            }
+            
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(dt);
+            if(res.returnStatus == POStatus.STATUS_OK)
+                assertEquals(dt, res.result);
+        }		
+
 		for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
 			Tuple t = it.next();
 			plan.attachInput(t);
@@ -980,7 +1053,202 @@ public class TestPOCast extends TestCase
             }
         }
 	}
-	
+
+    @Test
+    public void testDateTimeToOther() throws IOException {
+        //Create data
+        DataBag bag = BagFactory.getInstance().newDefaultBag();
+        for(int i = 0; i < MAX; i++) {
+            Tuple t = TupleFactory.getInstance().newTuple();
+            t.append(i == 0 ? new DateTime(0L) : new DateTime(r.nextLong()));
+            bag.add(t);
+        }
+        
+        POCast op = new POCast(new OperatorKey("", r.nextLong()), -1);
+        LoadFunc load = new TestLoader();
+        op.setFuncSpec(new FuncSpec(load.getClass().getName()));
+        POProject prj = new POProject(new OperatorKey("", r.nextLong()), -1, 0);
+        PhysicalPlan plan = new PhysicalPlan();
+        plan.add(prj);
+        plan.add(op);
+        plan.connect(prj, op);
+        
+        prj.setResultType(DataType.DATETIME);
+        
+        // Plan to test when result type is ByteArray and casting is requested
+        // for example casting of values coming out of map lookup.
+        POCast opWithInputTypeAsBA = new POCast(new OperatorKey("", r.nextLong()), -1);
+        PhysicalPlan planToTestBACasts = constructPlan(opWithInputTypeAsBA);
+
+        for (Iterator<Tuple> it = bag.iterator(); it.hasNext();) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            Boolean b = null;
+            Result res = op.getNext(b);
+            assertEquals(POStatus.STATUS_ERR, res.returnStatus);
+        }
+
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            Integer i = new Long(((DateTime) t.get(0)).getMillis()).intValue();
+            Result res = op.getNext(i);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + i);
+                assertEquals(i, res.result);
+            }
+            
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(i);
+            if(res.returnStatus == POStatus.STATUS_OK)
+                assertEquals(i, res.result);
+            
+        }
+        
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            Float f = new Float(Long.valueOf(((DateTime) t.get(0)).getMillis()).floatValue());
+            Result res = op.getNext(f);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + f);
+                assertEquals(f, res.result);
+            }
+            
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(f);
+            if(res.returnStatus == POStatus.STATUS_OK)
+                assertEquals(f, res.result);
+        }
+        
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            Long l = new Long(((DateTime)t.get(0)).getMillis());
+            Result res = op.getNext(l);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + l);
+                assertEquals(l, res.result);
+            }
+            
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(l);
+            if(res.returnStatus == POStatus.STATUS_OK)
+                assertEquals(l, res.result);
+        }
+        
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            Double d = new Double(Long.valueOf(((DateTime) t.get(0)).getMillis()).doubleValue());
+            Result res = op.getNext(d);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + f);
+                assertEquals(d, res.result);
+            }
+            
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(d);
+            if(res.returnStatus == POStatus.STATUS_OK)
+                assertEquals(d, res.result);
+        }
+
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            DateTime dt = (DateTime)t.get(0);
+            Result res = op.getNext(dt);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + l);
+                assertEquals(dt, res.result);
+            }
+            
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(dt);
+            if(res.returnStatus == POStatus.STATUS_OK)
+                assertEquals(dt, res.result);
+        }
+
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            String str = ((DateTime)t.get(0)).toString();
+            Result res = op.getNext(str);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + str);
+                assertEquals(str, res.result);
+            }
+            
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(str);
+            if(res.returnStatus == POStatus.STATUS_OK)
+                assertEquals(str, res.result);
+        }
+        
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            DataByteArray dba = new DataByteArray(((DateTime)t.get(0)).toString().getBytes());
+            Result res = op.getNext(dba);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + dba);
+                assertEquals(dba, res.result);
+            }
+            
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(dba);
+            if(res.returnStatus == POStatus.STATUS_OK)
+                assertEquals(dba, res.result);
+        }
+        
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            Map map = null;
+            Result res = op.getNext(map);
+            assertEquals(POStatus.STATUS_ERR, res.returnStatus);
+        }
+        
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            Result res = op.getNext(t);
+            assertEquals(POStatus.STATUS_ERR, res.returnStatus);
+        }
+        
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            DataBag b = null;
+            Result res = op.getNext(b);
+            assertEquals(POStatus.STATUS_ERR, res.returnStatus);
+        }
+        {
+            planToTestBACasts.attachInput(dummyTuple);
+            try{
+                opWithInputTypeAsBA.getNext(dummyMap);
+            }catch (Exception e) {
+                assertEquals(ExecException.class, e.getClass());
+            }
+        }
+        {
+            planToTestBACasts.attachInput(dummyTuple);
+            try{
+                opWithInputTypeAsBA.getNext(dummyTuple);
+            }catch (Exception e) {
+                assertEquals(ExecException.class, e.getClass());
+            }
+        }
+        {
+            planToTestBACasts.attachInput(dummyTuple);
+            try{
+                opWithInputTypeAsBA.getNext(dummyBag);
+            }catch (Exception e) {
+                assertEquals(ExecException.class, e.getClass());
+            }
+        }
+    }
+
 	@Test
 	public void testStringToOther() throws IOException {
 		POCast op = new POCast(new OperatorKey("", r.nextLong()), -1);
@@ -1099,7 +1367,23 @@ public class TestPOCast extends TestCase
 			if(res.returnStatus == POStatus.STATUS_OK)
 				assertEquals(i, res.result);
 		}
-		
+
+        {
+            Tuple t = tf.newTuple();
+            t.append((new DateTime(r.nextLong())).toString());
+            plan.attachInput(t);
+            DateTime i = new DateTime(((String) t.get(0)));
+            Result res = op.getNext(i);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + i);
+                assertEquals(i, res.result);
+            }
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(i);
+            if(res.returnStatus == POStatus.STATUS_OK)
+                assertEquals(i, res.result);
+        }
+
 		{
 			Tuple t = tf.newTuple();
 			t.append(GenRandomData.genRandString(r));
@@ -1237,6 +1521,10 @@ public class TestPOCast extends TestCase
             return new Long(Long.valueOf(new DataByteArray(b).toString()));
         }
 
+        public DateTime bytesToDateTime(byte[] b) throws IOException {
+            return new DateTime(new DataByteArray(b).toString());
+        }
+
         public Map<String, Object> bytesToMap(byte[] b) throws IOException {
           return null;
         }
@@ -1272,6 +1560,10 @@ public class TestPOCast extends TestCase
         public byte[] toBytes(Long l) throws IOException {
             return l.toString().getBytes();
         }
+        
+        public byte[] toBytes(DateTime dt) throws IOException {
+            return dt.toString().getBytes();
+        }
 
         public byte[] toBytes(Boolean b) throws IOException {
             return b.toString().getBytes();
@@ -1423,7 +1715,23 @@ public class TestPOCast extends TestCase
 			if(res.returnStatus == POStatus.STATUS_OK)
 				assertEquals(i, res.result);
 		}
-		
+
+		{
+            Tuple t = tf.newTuple();
+            t.append(new DataByteArray((new DateTime(r.nextLong())).toString().getBytes()));
+            plan.attachInput(t);
+            DateTime i = new DateTime(((DataByteArray) t.get(0)).toString());
+            Result res = op.getNext(i);
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + i);
+                assertEquals(i, res.result);
+            }
+            planToTestBACasts.attachInput(t);
+            res = opWithInputTypeAsBA.getNext(i);
+            if(res.returnStatus == POStatus.STATUS_OK)
+                assertEquals(i, res.result);
+        }
+
 		{
 			Tuple t = tf.newTuple();
 			t.append(new DataByteArray(GenRandomData.genRandString(r).getBytes()));
@@ -1622,7 +1930,24 @@ public class TestPOCast extends TestCase
                 assertEquals(input, res.result);
             }
         }
-        
+
+        {
+            // create a new POCast each time since we 
+            // maintain a state variable per POCast object
+            // indicating if cast is really required
+            POCast newOp = new POCast(new OperatorKey("", r.nextLong()), -1);
+            plan = constructPlan(newOp);
+            Tuple t = tf.newTuple();
+            DateTime input = new DateTime(r.nextLong());
+            t.append(input);
+            plan.attachInput(t);
+            Result res = newOp.getNext(new DateTime(0L));
+            if(res.returnStatus == POStatus.STATUS_OK) {
+                //System.out.println(res.result + " : " + i);
+                assertEquals(input, res.result);
+            }
+        }
+
         {
             // create a new POCast each time since we 
             // maintain a state variable per POCast object
@@ -1777,7 +2102,18 @@ public class TestPOCast extends TestCase
 			Result res = op.getNext(i);
 			assertEquals(POStatus.STATUS_ERR, res.returnStatus);
 		}
-	      
+
+		{
+            Tuple t = tf.newTuple();
+            t.append(GenRandomData.genRandString(r));
+            Tuple tNew = tf.newTuple();
+            tNew.append(t);
+            plan.attachInput(tNew);
+            DateTime dt = null;
+            Result res = op.getNext(dt);
+            assertEquals(POStatus.STATUS_ERR, res.returnStatus);
+        }
+		
 		{
 			Tuple t = tf.newTuple();
 			t.append(GenRandomData.genRandString(r));
@@ -1942,7 +2278,16 @@ public class TestPOCast extends TestCase
 			Result res = op.getNext(i);
 			assertEquals(POStatus.STATUS_ERR, res.returnStatus);
 		}
-		
+
+        {
+            Tuple t = tf.newTuple();
+            t.append(GenRandomData.genRandSmallTupDataBag(r, 1, 100));
+            plan.attachInput(t);
+            DateTime dt = null;
+            Result res = op.getNext(dt);
+            assertEquals(POStatus.STATUS_ERR, res.returnStatus);
+        }
+
 		{
 			Tuple t = tf.newTuple();
 			t.append(GenRandomData.genRandSmallTupDataBag(r, 1, 100));
@@ -2102,7 +2447,15 @@ public class TestPOCast extends TestCase
 			Result res = op.getNext(i);
 			assertEquals(POStatus.STATUS_ERR, res.returnStatus);
 		}
-		
+
+        {     
+            Tuple t = tf.newTuple();
+            t.append(GenRandomData.genRandMap(r, 10));
+            DateTime dt = null;
+            Result res = op.getNext(dt);
+            assertEquals(POStatus.STATUS_ERR, res.returnStatus);
+        }
+
 		{
 			Tuple t = tf.newTuple();
 			t.append(GenRandomData.genRandMap(r, 10));
@@ -2203,7 +2556,21 @@ public class TestPOCast extends TestCase
 
 			}
 		}
-		
+
+        prj.setResultType(DataType.DATETIME); 
+        
+        for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
+            Tuple t = it.next();
+            plan.attachInput(t);
+            if(t.get(0) == null) {
+                
+                DateTime result  = (DateTime)op.getNext((DateTime)null).result;
+                assertEquals( null, result);
+
+            } 
+            
+        }	
+
 		prj.setResultType(DataType.CHARARRAY);
 		
 		for(Iterator<Tuple> it = bag.iterator(); it.hasNext(); ) {
@@ -2249,16 +2616,18 @@ public class TestPOCast extends TestCase
 		// Create a bag having tuples having values of different types.
 		for(int i = 0; i < MAX; i++) {
 			Tuple t = TupleFactory.getInstance().newTuple();
-			if (i % 5 == 0)
+			if (i % 6 == 0)
 			    t.append(r.nextBoolean());
-			if(i % 5 == 1)
+			if(i % 6 == 1)
 				t.append(r.nextInt());
-			if(i % 5 == 2)
+			if(i % 6 == 2)
 				t.append(r.nextLong());
-			if(i % 5 == 3)
+			if(i % 6 == 3)
 				t.append(r.nextDouble());
-			if(i % 5 == 4)
+			if(i % 6 == 4)
 				t.append(r.nextFloat());
+			if(i % 6 == 5)
+			    t.append(r.nextLong());
 			bag.add(t);
 		}
 
@@ -2294,6 +2663,14 @@ public class TestPOCast extends TestCase
 				assertEquals(d, res.result);
 			}
 
+			if (!(toCast instanceof Boolean)) {
+                DateTime dt = DataType.toDateTime(toCast);
+                res = opWithInputTypeAsBA.getNext(dt);
+                if(res.returnStatus == POStatus.STATUS_OK) {
+                    assertEquals(dt, res.result);
+                }
+			}
+
 			String s = DataType.toString(toCast);
 			res = opWithInputTypeAsBA.getNext(s);
 			if(res.returnStatus == POStatus.STATUS_OK) {

Modified: pig/trunk/test/org/apache/pig/test/TestPackage.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestPackage.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestPackage.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestPackage.java Fri Aug 24 00:18:05 2012
@@ -27,6 +27,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Random;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.backend.hadoop.HDataType;
 import org.apache.pig.backend.hadoop.executionengine.physicalLayer.POStatus;
@@ -148,6 +150,9 @@ public class TestPackage extends junit.f
         case DataType.LONG:
             runTest(r.nextLong(),inner, DataType.LONG);
             break;
+        case DataType.DATETIME:
+            runTest(new DateTime(r.nextLong()),inner, DataType.DATETIME);
+            break;
         case DataType.MAP:
         case DataType.INTERNALMAP:
         case DataType.BYTE: