You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by da...@apache.org on 2013/03/19 00:52:23 UTC

svn commit: r1458066 - in /pig/trunk: ./ src/docs/src/documentation/content/xdocs/ src/org/apache/pig/scripting/groovy/ test/org/apache/pig/test/

Author: daijy
Date: Mon Mar 18 23:52:22 2013
New Revision: 1458066

URL: http://svn.apache.org/r1458066
Log:
PIG-3217: Add support for DateTime type in Groovy UDFs

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/docs/src/documentation/content/xdocs/udf.xml
    pig/trunk/src/org/apache/pig/scripting/groovy/GroovyAlgebraicEvalFunc.java
    pig/trunk/src/org/apache/pig/scripting/groovy/GroovyScriptEngine.java
    pig/trunk/src/org/apache/pig/scripting/groovy/GroovyUtils.java
    pig/trunk/test/org/apache/pig/test/TestUDFGroovy.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1458066&r1=1458065&r2=1458066&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Mon Mar 18 23:52:22 2013
@@ -28,6 +28,8 @@ PIG-3174:  Remove rpm and deb artifacts 
 
 IMPROVEMENTS
 
+PIG-3217: Add support for DateTime type in Groovy UDFs (herberts via daijy)
+
 PIG-3218: Add support for biginteger/bigdecimal type in Groovy UDFs (herberts via daijy)
 
 PIG-3248: Upgrade hadoop-2.0.0-alpha to hadoop-2.0.3-alpha (daijy)

Modified: pig/trunk/src/docs/src/documentation/content/xdocs/udf.xml
URL: http://svn.apache.org/viewvc/pig/trunk/src/docs/src/documentation/content/xdocs/udf.xml?rev=1458066&r1=1458065&r2=1458066&view=diff
==============================================================================
--- pig/trunk/src/docs/src/documentation/content/xdocs/udf.xml (original)
+++ pig/trunk/src/docs/src/documentation/content/xdocs/udf.xml Mon Mar 18 23:52:22 2013
@@ -1833,6 +1833,7 @@ class GroovyUDFs {",
 <ul>
   <li>Tuple: groovy.lang.Tuple</li>
   <li>DataBag: groovy.lang.Tuple containing the bag's size and an iterator on its content</li>
+  <li>org.joda.time.DateTime: org.joda.time.DateTime</li>
   <li>Map: java.util.Map</li>
   <li>int/long/float/double: as is</li>
   <li>chararray: String</li>
@@ -1850,6 +1851,7 @@ class GroovyUDFs {",
   <li>groovy.lang.Tuple: Tuple</li>
   <li>org.apache.pig.data.Tuple: Tuple</li>
   <li>org.apache.pig.data.DataBag: DataBag</li>
+  <li>org.joda.time.DateTime: org.joda.time.DateTime</li>
   <li>java.util.Map: Map</li>
   <li>java.util.List: DataBag</li>
   <li>Byte/Short/Integer: int</li>

Modified: pig/trunk/src/org/apache/pig/scripting/groovy/GroovyAlgebraicEvalFunc.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/scripting/groovy/GroovyAlgebraicEvalFunc.java?rev=1458066&r1=1458065&r2=1458066&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/scripting/groovy/GroovyAlgebraicEvalFunc.java (original)
+++ pig/trunk/src/org/apache/pig/scripting/groovy/GroovyAlgebraicEvalFunc.java Mon Mar 18 23:52:22 2013
@@ -174,6 +174,25 @@ public abstract class GroovyAlgebraicEva
     }
   }
 
+  public static class DateTimeGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<org.joda.time.DateTime> {
+    public DateTimeGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
+        String intermedMethod, String finalMethod) throws IOException {
+      super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
+    }
+
+    @Override
+    public String getFinal() {
+      return Final.class.getName();
+    }
+
+    public static class Final extends GroovyAlgebraicEvalFunc.Final<org.joda.time.DateTime> {
+      public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
+          String finalMethod) throws IOException {
+        super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
+      }
+    }
+  }
+
   public static class DoubleGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<Double> {
     public DoubleGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
         String intermedMethod, String finalMethod) throws IOException {

Modified: pig/trunk/src/org/apache/pig/scripting/groovy/GroovyScriptEngine.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/scripting/groovy/GroovyScriptEngine.java?rev=1458066&r1=1458065&r2=1458066&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/scripting/groovy/GroovyScriptEngine.java (original)
+++ pig/trunk/src/org/apache/pig/scripting/groovy/GroovyScriptEngine.java Mon Mar 18 23:52:22 2013
@@ -50,6 +50,7 @@ import org.apache.pig.scripting.groovy.G
 import org.apache.pig.scripting.groovy.GroovyAlgebraicEvalFunc.ChararrayGroovyAlgebraicEvalFunc;
 import org.apache.pig.scripting.groovy.GroovyAlgebraicEvalFunc.DataBagGroovyAlgebraicEvalFunc;
 import org.apache.pig.scripting.groovy.GroovyAlgebraicEvalFunc.DataByteArrayGroovyAlgebraicEvalFunc;
+import org.apache.pig.scripting.groovy.GroovyAlgebraicEvalFunc.DateTimeGroovyAlgebraicEvalFunc;
 import org.apache.pig.scripting.groovy.GroovyAlgebraicEvalFunc.DoubleGroovyAlgebraicEvalFunc;
 import org.apache.pig.scripting.groovy.GroovyAlgebraicEvalFunc.FloatGroovyAlgebraicEvalFunc;
 import org.apache.pig.scripting.groovy.GroovyAlgebraicEvalFunc.IntegerGroovyAlgebraicEvalFunc;
@@ -356,6 +357,8 @@ public class GroovyScriptEngine extends 
           className = TupleGroovyAlgebraicEvalFunc.class.getName();
         } else if (returnType.equals(List.class) || returnType.equals(DataBag.class)) {
           className = DataBagGroovyAlgebraicEvalFunc.class.getName();
+        } else if (returnType.equals(org.joda.time.DateTime.class)) {
+          className = DateTimeGroovyAlgebraicEvalFunc.class.getName();
         } else if (returnType.equals(Boolean.class) || returnType.equals(boolean.class)) {
           className = BooleanGroovyAlgebraicEvalFunc.class.getName();
         } else if (returnType.equals(byte[].class) || returnType.equals(DataByteArray.class)) {

Modified: pig/trunk/src/org/apache/pig/scripting/groovy/GroovyUtils.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/scripting/groovy/GroovyUtils.java?rev=1458066&r1=1458065&r2=1458066&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/scripting/groovy/GroovyUtils.java (original)
+++ pig/trunk/src/org/apache/pig/scripting/groovy/GroovyUtils.java Mon Mar 18 23:52:22 2013
@@ -60,6 +60,7 @@ public class GroovyUtils {
    * String chararray
    * byte[] DataByteArray (copy)
    * Boolean boolean
+   * org.joda.time.DateTime org.joda.time.DateTime
    * null null
    *
    * anything else raises an exception
@@ -183,6 +184,11 @@ public class GroovyUtils {
       pigObject = groovyObject;
     } else if (groovyObject instanceof Boolean) {
       pigObject = groovyObject;
+    } else if (groovyObject instanceof org.joda.time.DateTime) {
+      //
+      // jodatime's DateTime is immutable, so reuse the same instance
+      //
+      pigObject = groovyObject;
     } else if (null == groovyObject) {
       pigObject = null;
     } else {
@@ -208,6 +214,7 @@ public class GroovyUtils {
    * boolean boolean
    * BigInteger BigInteger
    * BigDecimal BigDecimal
+   * org.joda.time.DateTime org.joda.time.DateTime
    * null null
    *
    * anything else raises an exception
@@ -263,6 +270,11 @@ public class GroovyUtils {
       groovyObject = pigObject;
     } else if (pigObject instanceof BigDecimal) {
       groovyObject = pigObject;
+    }else if (pigObject instanceof org.joda.time.DateTime) {
+      //
+      // jodatime's DateTime is immutable, so reuse the same instance
+      //
+      groovyObject = pigObject;
     } else if (null == pigObject) {
       groovyObject = null;
     } else {

Modified: pig/trunk/test/org/apache/pig/test/TestUDFGroovy.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestUDFGroovy.java?rev=1458066&r1=1458065&r2=1458066&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestUDFGroovy.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestUDFGroovy.java Mon Mar 18 23:52:22 2013
@@ -23,6 +23,7 @@ import static org.apache.pig.builtin.moc
 import static org.apache.pig.builtin.mock.Storage.tuple;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
@@ -87,8 +88,14 @@ public class TestUDFGroovy {
     pigObject = new DataByteArray("Surtout le jambon".getBytes("UTF-8"));
     groovyObject = GroovyUtils.pigToGroovy(pigObject);
     assertTrue(groovyObject instanceof byte[]);
+    assertNotSame(groovyObject, pigObject);
     assertArrayEquals("Surtout le jambon".getBytes("UTF-8"), (byte[]) groovyObject);
 
+    pigObject = new org.joda.time.DateTime();
+    groovyObject = GroovyUtils.pigToGroovy(pigObject);
+    assertTrue(groovyObject instanceof org.joda.time.DateTime);
+    assertSame(groovyObject, pigObject);
+
     pigObject = tuple("a","b","c");
     groovyObject = GroovyUtils.pigToGroovy(pigObject);
     assertTrue(groovyObject instanceof groovy.lang.Tuple);
@@ -243,6 +250,11 @@ public class TestUDFGroovy {
     pigObject = GroovyUtils.groovyToPig(groovyObject);
     assertSame(groovyObject, pigObject);
 
+    groovyObject = new org.joda.time.DateTime();
+    pigObject = GroovyUtils.groovyToPig(groovyObject);
+    assertTrue(pigObject instanceof org.joda.time.DateTime);
+    assertSame(groovyObject, pigObject);
+
     groovyObject = null;
     pigObject = GroovyUtils.groovyToPig(groovyObject);
     assertNull(pigObject);