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 [6/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/test/TestPigTupleRawComparator.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestPigTupleRawComparator.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestPigTupleRawComparator.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestPigTupleRawComparator.java Fri Aug 24 00:18:05 2012
@@ -29,6 +29,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Random;
 
+import org.joda.time.DateTime;
+
 import org.apache.hadoop.io.RawComparator;
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigTupleDefaultRawComparator;
@@ -65,7 +67,7 @@ public class TestPigTupleRawComparator {
         oldComparator.setConf(jobConf);
         list = Arrays.<Object> asList(1f, 2, 3.0, 4l, (byte) 5, true,
                 new DataByteArray(new byte[] { 0x10, 0x2a, 0x5e }), "hello world!",
-                tf.newTuple(Arrays.<Object> asList(8.0, 9f, 10l, 11)));
+                tf.newTuple(Arrays.<Object> asList(8.0, 9f, 10l, 11)), new DateTime(12L));
         prototype = new NullableTuple(tf.newTuple(list));
         baos1.reset();
         baos2.reset();
@@ -359,6 +361,15 @@ public class TestPigTupleRawComparator {
     }
 
     @Test
+    public void testCompareDateTime() throws IOException {
+        list.set(9, ((DateTime) list.get(9)).plus(1L));
+        NullableTuple t = new NullableTuple(tf.newTuple(list));
+        int res = compareHelper(prototype, t, comparator);
+        assertEquals(Math.signum(prototype.compareTo(t)), Math.signum(res), 0);
+        assertTrue(res < 0);
+    }
+
+    @Test
     public void testCompareDiffertTypes() throws IOException {
         // DataType.INTEGER < DataType.LONG
         list.set(3, 4);
@@ -442,6 +453,10 @@ public class TestPigTupleRawComparator {
         case 8:
             length = rand.nextInt(6);
             t.set(pos, getRandomTuple(rand));
+            break;
+        case 9:
+            t.set(pos, new DateTime(rand.nextLong()));
+            break;
         default:
         }
         return t;

Modified: pig/trunk/test/org/apache/pig/test/TestResourceSchema.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestResourceSchema.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestResourceSchema.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestResourceSchema.java Fri Aug 24 00:18:05 2012
@@ -280,16 +280,16 @@ public class TestResourceSchema {
     @Test
     public void testToStringAndParse() throws Exception {
         ResourceSchema rs = new ResourceSchema();
-        ResourceFieldSchema[] fields = new ResourceFieldSchema[12];
+        ResourceFieldSchema[] fields = new ResourceFieldSchema[13];
 
         byte[] types = {DataType.INTEGER, DataType.LONG, DataType.FLOAT,
             DataType.DOUBLE, DataType.BYTEARRAY, DataType.CHARARRAY,
             DataType.MAP, DataType.TUPLE, DataType.TUPLE, DataType.BAG,
-            DataType.BAG, DataType.BOOLEAN};
+            DataType.BAG, DataType.BOOLEAN, DataType.DATETIME};
         String[] names = {"i", "l", "f",
             "d", "b", "s",
             "m", "tschema", "tnull", "bschema",
-            "bnull", "bb"};
+            "bnull", "bb", "dt"};
         
         for (int i = 0; i < fields.length; i++) {
             fields[i] = new ResourceFieldSchema();
@@ -334,14 +334,14 @@ public class TestResourceSchema {
 
         assertEquals("i:int,l:long,f:float,d:double,b:bytearray,s:" +
             "chararray,m:[],tschema:(i:int,l:long,f:float)," +
-            "tnull:(),bschema:{t:(d:double,b:bytearray,s:chararray)},bnull:{},bb:boolean",
+            "tnull:(),bschema:{t:(d:double,b:bytearray,s:chararray)},bnull:{},bb:boolean,dt:datetime",
             strSchema);
 
         ResourceSchema after =
             new ResourceSchema(Utils.getSchemaFromString(strSchema));
         ResourceFieldSchema[] afterFields = after.getFields();
 
-        assertEquals(12, afterFields.length);
+        assertEquals(13, afterFields.length);
         assertEquals("i", afterFields[0].getName());
         assertEquals(DataType.INTEGER, afterFields[0].getType());
         assertEquals("l", afterFields[1].getName());
@@ -366,6 +366,9 @@ public class TestResourceSchema {
         assertEquals(DataType.BAG, afterFields[10].getType());
         assertEquals("bb", afterFields[11].getName());
         assertEquals(DataType.BOOLEAN, afterFields[11].getType());
+        assertEquals("dt", afterFields[12].getName());
+        assertEquals(DataType.DATETIME, afterFields[12].getType());
+        
 
         assertNotNull(afterFields[7].getSchema());
         ResourceFieldSchema[] tAfterFields =

Modified: pig/trunk/test/org/apache/pig/test/TestSchema.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestSchema.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestSchema.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestSchema.java Fri Aug 24 00:18:05 2012
@@ -871,10 +871,10 @@ public class TestSchema {
             "float,float,float,float,float,float,float,float,float,float",
             "double,double,double,double,double,double,double,double,double,double",
             "boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean",
-            "(),(),(),(),(),(),(),(),(),()",
+            "datetime,datetime,datetime,datetime,datetime,datetime,datetime,datetime,datetime,datetime",
             "{},{},{},{},{},{},{},{},{},{}",
             "map[],map[],map[],map[],map[],map[],map[],map[],map[],map[]",
-            "int,int,long,long,float,float,double,double,boolean,boolean,(int,long,float,double,boolean),{(int,long,float,double,boolean)},map[(int,long,float,double,boolean)]"
+            "int,int,long,long,float,float,double,double,boolean,boolean,datetime,datetime(int,long,float,double,boolean,datetime),{(int,long,float,double,boolean,datetime)},map[(int,long,float,double,boolean,datetime)]"
         };
         for (String schemaString : schemaStrings) {
             Schema s1 = Utils.getSchemaFromString(schemaString);

Modified: pig/trunk/test/org/apache/pig/test/TestStore.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestStore.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestStore.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestStore.java Fri Aug 24 00:18:05 2012
@@ -70,6 +70,7 @@ import org.apache.pig.parser.ParserExcep
 import org.apache.pig.parser.QueryParserDriver;
 import org.apache.pig.test.utils.GenRandomData;
 import org.apache.pig.test.utils.TestHelper;
+import org.joda.time.DateTimeZone;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -103,6 +104,8 @@ public class TestStore extends junit.fra
         pc = pig.getPigContext();
         inputFileName = "/tmp/TestStore-" + new Random().nextLong() + ".txt";
         outputFileName = "/tmp/TestStore-output-" + new Random().nextLong() + ".txt";
+        
+        DateTimeZone.setDefault(DateTimeZone.forOffsetMillis(DateTimeZone.UTC.getOffset(null)));
     }
 
     @Override
@@ -116,7 +119,7 @@ public class TestStore extends junit.fra
     private void storeAndCopyLocally(DataBag inpDB) throws Exception {
         setUpInputFileOnCluster(inpDB);
         String script = "a = load '" + inputFileName + "'; " +
-                "store a into '" + outputFileName + "' using PigStorage(':');" +
+                "store a into '" + outputFileName + "' using PigStorage('\t');" +
                 "fs -ls /tmp";
         pig.setBatchOn();
         Util.registerMultiLineQuery(pig, script);
@@ -180,7 +183,7 @@ public class TestStore extends junit.fra
         int size = 0;
         BufferedReader br = new BufferedReader(new FileReader(outputFileName));
         for(String line=br.readLine();line!=null;line=br.readLine()){
-            String[] flds = line.split(":",-1);
+            String[] flds = line.split("\t",-1);
             Tuple t = new DefaultTuple();
             t.append(flds[0].compareTo("")!=0 ? flds[0] : null);
             t.append(flds[1].compareTo("")!=0 ? Integer.parseInt(flds[1]) : null);
@@ -235,11 +238,11 @@ public class TestStore extends junit.fra
     public void testStoreComplexData() throws Exception {
         inpDB = GenRandomData.genRandFullTupTextDataBag(new Random(), 10, 100);
         storeAndCopyLocally(inpDB);
-        PigStorage ps = new PigStorage(":");
+        PigStorage ps = new PigStorage("\t");
         int size = 0;
         BufferedReader br = new BufferedReader(new FileReader(outputFileName));
         for(String line=br.readLine();line!=null;line=br.readLine()){
-            String[] flds = line.split(":",-1);
+            String[] flds = line.split("\t",-1);
             Tuple t = new DefaultTuple();
             
             ResourceFieldSchema bagfs = GenRandomData.getSmallTupDataBagFieldSchema();
@@ -255,6 +258,7 @@ public class TestStore extends junit.fra
             t.append(flds[7].compareTo("")!=0 ? ps.getLoadCaster().bytesToMap(flds[7].getBytes()) : null);
             t.append(flds[8].compareTo("")!=0 ? ps.getLoadCaster().bytesToTuple(flds[8].getBytes(), tuplefs) : null);
             t.append(flds[9].compareTo("")!=0 ? ps.getLoadCaster().bytesToBoolean(flds[9].getBytes()) : null);
+            t.append(flds[10].compareTo("")!=0 ? ps.getLoadCaster().bytesToDateTime(flds[10].getBytes()) : null);
             assertEquals(true, TestHelper.bagContains(inpDB, t));
             ++size;
         }
@@ -267,13 +271,13 @@ public class TestStore extends junit.fra
         inpDB = DefaultBagFactory.getInstance().newDefaultBag();
         inpDB.add(inputTuple);
         storeAndCopyLocally(inpDB);
-        PigStorage ps = new PigStorage(":");
+        PigStorage ps = new PigStorage("\t");
         int size = 0;
         BufferedReader br = new BufferedReader(new FileReader(outputFileName));
         for(String line=br.readLine();line!=null;line=br.readLine()){
             System.err.println("Complex data: ");
             System.err.println(line);
-            String[] flds = line.split(":",-1);
+            String[] flds = line.split("\t",-1);
             Tuple t = new DefaultTuple();
             
             ResourceFieldSchema stringfs = new ResourceFieldSchema();
@@ -303,7 +307,8 @@ public class TestStore extends junit.fra
             t.append(flds[7].compareTo("")!=0 ? ps.getLoadCaster().bytesToMap(flds[7].getBytes()) : null);
             t.append(flds[8].compareTo("")!=0 ? ps.getLoadCaster().bytesToTuple(flds[8].getBytes(), tuplefs) : null);
             t.append(flds[9].compareTo("")!=0 ? ps.getLoadCaster().bytesToBoolean(flds[9].getBytes()) : null);
-            t.append(flds[10].compareTo("")!=0 ? ps.getLoadCaster().bytesToCharArray(flds[10].getBytes()) : null);
+            t.append(flds[10].compareTo("")!=0 ? ps.getLoadCaster().bytesToDateTime(flds[10].getBytes()) : null);
+            t.append(flds[11].compareTo("")!=0 ? ps.getLoadCaster().bytesToCharArray(flds[10].getBytes()) : null);
             assertTrue(TestHelper.tupleEquals(inputTuple, t));
             ++size;
         }

Modified: pig/trunk/test/org/apache/pig/test/TestSubtract.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestSubtract.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestSubtract.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestSubtract.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 TestSubtract 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 Subtract operator");
         for(byte type : types) {
@@ -230,6 +232,26 @@ public class TestSubtract 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);
+                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/TestTextDataParser.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestTextDataParser.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestTextDataParser.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestTextDataParser.java Fri Aug 24 00:18:05 2012
@@ -20,6 +20,9 @@ package org.apache.pig.test;
 import java.io.IOException;
 import java.util.Map;
 
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pig.ResourceSchema;
@@ -109,6 +112,13 @@ public class TestTextDataParser extends 
         Double d = ps.getLoadCaster().bytesToDouble(myDouble.getBytes());
         assertTrue(d.equals(0.1));
     }
+
+    @Test
+    public void testDateTime() throws Exception{
+        String myDateTime = "1970-01-01T00:00:00.000Z";
+        DateTime d = ps.getLoadCaster().bytesToDateTime(myDateTime.getBytes());
+        assertTrue(d.equals(new DateTime(myDateTime, DateTimeZone.forID("+00:00"))));
+    }
     
     @Test
     public void testString() throws Exception{

Modified: pig/trunk/test/org/apache/pig/test/TestTypeCheckingValidatorNewLP.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestTypeCheckingValidatorNewLP.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestTypeCheckingValidatorNewLP.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestTypeCheckingValidatorNewLP.java Fri Aug 24 00:18:05 2012
@@ -44,6 +44,8 @@ import java.util.Properties;
 
 import junit.framework.Assert;
 
+import org.joda.time.DateTime;
+
 import org.apache.hadoop.conf.Configuration;
 import org.apache.pig.EvalFunc;
 import org.apache.pig.ExecType;
@@ -82,6 +84,8 @@ import org.apache.pig.newplan.logical.ex
 import org.apache.pig.newplan.logical.expression.DivideExpression;
 import org.apache.pig.newplan.logical.expression.EqualExpression;
 import org.apache.pig.newplan.logical.expression.GreaterThanExpression;
+import org.apache.pig.newplan.logical.expression.GreaterThanEqualExpression;
+import org.apache.pig.newplan.logical.expression.LessThanExpression;
 import org.apache.pig.newplan.logical.expression.LessThanEqualExpression;
 import org.apache.pig.newplan.logical.expression.LogicalExpression;
 import org.apache.pig.newplan.logical.expression.LogicalExpressionPlan;
@@ -700,6 +704,78 @@ public class TestTypeCheckingValidatorNe
     }
 
     @Test
+    public void testExpressionTypeChecking11() throws Throwable {
+        // test whether conditional operators can accept two datetime operands
+        LogicalExpressionPlan plan = new LogicalExpressionPlan();
+        ConstantExpression constant0 = new ConstantExpression(plan, new DateTime(0L));
+        ConstantExpression constant1 = new ConstantExpression(plan, new DateTime("1970-01-01T00:00:00.000Z"));
+        ConstantExpression constant2 = new ConstantExpression(plan, new DateTime(1L));
+        ConstantExpression constant3 = new ConstantExpression(plan, new DateTime(2L));
+        ConstantExpression constant4 = new ConstantExpression(plan, new DataByteArray("1970-01-01T00:00:00.003Z"));
+
+        LessThanExpression lt1 = new LessThanExpression(plan, constant1, constant2);
+        LessThanEqualExpression lte1 = new LessThanEqualExpression(plan, constant1, constant2);
+        GreaterThanExpression gt1 = new GreaterThanExpression(plan, constant3, constant4);
+        GreaterThanEqualExpression gte1 = new GreaterThanEqualExpression(plan, constant3, constant4);
+        EqualExpression eq1 = new EqualExpression(plan, constant0, constant1);
+        NotEqualExpression neq1 = new NotEqualExpression(plan, constant0, constant2);
+
+        CompilationMessageCollector collector = new CompilationMessageCollector();
+        TypeCheckingExpVisitor expTypeChecker = new TypeCheckingExpVisitor(
+                plan, collector, null);
+        expTypeChecker.visit();
+
+        plan.explain(System.out, "text", true);
+
+        printMessageCollector(collector);
+        // printTypeGraph(plan) ;
+
+        if (collector.hasError()) {
+            throw new Exception("Error during type checking");
+        }
+
+        // Induction check
+        assertEquals(DataType.BOOLEAN, lt1.getType());
+        assertEquals(DataType.BOOLEAN, lte1.getType());
+        assertEquals(DataType.BOOLEAN, gt1.getType());
+        assertEquals(DataType.BOOLEAN, gte1.getType());
+        assertEquals(DataType.BOOLEAN, eq1.getType());
+        assertEquals(DataType.BOOLEAN, neq1.getType());
+
+        // Cast insertion check
+        assertEquals(DataType.DATETIME, gt1.getRhs().getType());
+        assertEquals(DataType.DATETIME, gte1.getRhs().getType());
+    }
+    
+    @Test
+    public void testExpressionTypeCheckingFail11() throws Throwable {
+        // test whether conditional operators will reject the operation of one
+        // value of datetime and one of other type
+        LogicalExpressionPlan plan = new LogicalExpressionPlan();
+        ConstantExpression constant0 = new ConstantExpression(plan, new DateTime(0L));
+        ConstantExpression constant1 = new ConstantExpression(plan, new DataByteArray("1970-01-01T00:00:00.000Z"));
+        CastExpression cast1 = new CastExpression(plan,  constant1, createFS(DataType.BYTEARRAY)) ;
+        EqualExpression eq1 = new EqualExpression(plan, constant0, cast1);
+
+        CompilationMessageCollector collector = new CompilationMessageCollector();
+        TypeCheckingExpVisitor expTypeChecker = new TypeCheckingExpVisitor(
+                plan, collector, null);
+
+        try {
+            expTypeChecker.visit();
+            fail("Exception expected");
+        } catch (TypeCheckerException pve) {
+            // good
+        }
+        printMessageCollector(collector);
+        // printTypeGraph(plan) ;
+
+        if (!collector.hasError()) {
+            throw new Exception("Error during type checking");
+        }
+    }
+
+    @Test
     public void testArithmeticOpCastInsert1() throws Throwable {
         LogicalExpressionPlan plan = new LogicalExpressionPlan() ;
         ConstantExpression constant1 = new ConstantExpression(plan, 10) ;

Modified: pig/trunk/test/org/apache/pig/test/utils/GenRandomData.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/utils/GenRandomData.java?rev=1376800&r1=1376799&r2=1376800&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/utils/GenRandomData.java (original)
+++ pig/trunk/test/org/apache/pig/test/utils/GenRandomData.java Fri Aug 24 00:18:05 2012
@@ -22,6 +22,8 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Random;
 
+import org.joda.time.DateTime;
+
 import org.apache.pig.ResourceSchema;
 import org.apache.pig.ResourceSchema.ResourceFieldSchema;
 import org.apache.pig.data.DataBag;
@@ -188,6 +190,7 @@ public class GenRandomData {
         t.append(genRandMap(r, num));
         t.append(genRandSmallTuple(r, 100));
         t.append(new Boolean(r.nextBoolean()));
+        t.append(new DateTime(r.nextLong()));
         return t;
     }
     
@@ -219,10 +222,13 @@ public class GenRandomData {
 
         ResourceFieldSchema boolfs = new ResourceFieldSchema();
         boolfs.setType(DataType.BOOLEAN);
+
+        ResourceFieldSchema dtfs = new ResourceFieldSchema();
+        dtfs.setType(DataType.DATETIME);
         
         ResourceSchema outSchema = new ResourceSchema();
         outSchema.setFields(new ResourceFieldSchema[]{bagfs, dbafs, stringfs, doublefs, floatfs,
-                intfs, longfs, mapfs, tuplefs, boolfs});
+                intfs, longfs, mapfs, tuplefs, boolfs, dtfs});
         ResourceFieldSchema outfs = new ResourceFieldSchema();
         outfs.setSchema(outSchema);
         outfs.setType(DataType.TUPLE);
@@ -251,6 +257,7 @@ public class GenRandomData {
         t.append(genRandMap(r, num));
         t.append(genRandSmallTuple(r, 100));
         t.append(new Boolean(r.nextBoolean()));
+        t.append(new DateTime(r.nextLong()));
         return t;
     }
     
@@ -313,6 +320,7 @@ public class GenRandomData {
         t.append(genRandMap(r, num));
         t.append(genRandSmallTuple(r, 100));
         t.append(new Boolean(r.nextBoolean()));
+        t.append(new DateTime(r.nextLong()));
         t.append(null);
         return t;
     }
@@ -338,6 +346,7 @@ public class GenRandomData {
         t.append(genRandMap(r, num));
         t.append(genRandSmallTuple(r, 100));
         t.append(new Boolean(r.nextBoolean()));
+        t.append(new DateTime(r.nextLong()));
         t.append(null);
         return t;
     }
@@ -395,6 +404,7 @@ public class GenRandomData {
             t.append("true");
         else
             t.append("false");
+        t.append(new DateTime(r.nextLong()));
         return t;
     }
     
@@ -411,9 +421,11 @@ public class GenRandomData {
         doublefs.setType(DataType.DOUBLE);
         ResourceFieldSchema boolfs = new ResourceFieldSchema();
         boolfs.setType(DataType.BOOLEAN);
+        ResourceFieldSchema dtfs = new ResourceFieldSchema();
+        dtfs.setType(DataType.DATETIME);
         
         ResourceSchema tupleSchema = new ResourceSchema();
-        tupleSchema.setFields(new ResourceFieldSchema[]{stringfs, longfs, intfs, doublefs, floatfs, stringfs, intfs, doublefs, floatfs, boolfs});
+        tupleSchema.setFields(new ResourceFieldSchema[]{stringfs, longfs, intfs, doublefs, floatfs, stringfs, intfs, doublefs, floatfs, boolfs, dtfs});
         ResourceFieldSchema tuplefs = new ResourceFieldSchema();
         tuplefs.setSchema(tupleSchema);
         tuplefs.setType(DataType.TUPLE);