You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@crunch.apache.org by gr...@apache.org on 2013/01/30 09:38:01 UTC

git commit: CRUNCH-152 Handle nulls when making deep copies

Updated Branches:
  refs/heads/master d743ce7c8 -> 03f3ce800


CRUNCH-152 Handle nulls when making deep copies


Project: http://git-wip-us.apache.org/repos/asf/incubator-crunch/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-crunch/commit/03f3ce80
Tree: http://git-wip-us.apache.org/repos/asf/incubator-crunch/tree/03f3ce80
Diff: http://git-wip-us.apache.org/repos/asf/incubator-crunch/diff/03f3ce80

Branch: refs/heads/master
Commit: 03f3ce8008da6546193678e1a60f032dda028483
Parents: d743ce7
Author: Gabriel Reid <gr...@apache.org>
Authored: Wed Jan 30 09:30:55 2013 +0100
Committer: Gabriel Reid <gr...@apache.org>
Committed: Wed Jan 30 09:30:55 2013 +0100

----------------------------------------------------------------------
 .../org/apache/crunch/types/MapDeepCopier.java     |    4 ++
 .../org/apache/crunch/types/TupleDeepCopier.java   |    5 +++
 .../apache/crunch/types/avro/AvroDeepCopier.java   |    5 +++
 .../crunch/types/writable/WritableDeepCopier.java  |    5 +++
 .../org/apache/crunch/types/MapDeepCopierTest.java |   13 +++++++
 .../apache/crunch/types/TupleDeepCopierTest.java   |   26 +++++++++++++++
 .../crunch/types/avro/AvroDeepCopierTest.java      |   13 +++++++-
 .../types/writable/WritableDeepCopierTest.java     |    9 +++++
 8 files changed, 79 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-crunch/blob/03f3ce80/crunch/src/main/java/org/apache/crunch/types/MapDeepCopier.java
----------------------------------------------------------------------
diff --git a/crunch/src/main/java/org/apache/crunch/types/MapDeepCopier.java b/crunch/src/main/java/org/apache/crunch/types/MapDeepCopier.java
index 55daaee..de8903b 100644
--- a/crunch/src/main/java/org/apache/crunch/types/MapDeepCopier.java
+++ b/crunch/src/main/java/org/apache/crunch/types/MapDeepCopier.java
@@ -39,6 +39,10 @@ public class MapDeepCopier<T> implements DeepCopier<Map<String, T>> {
 
   @Override
   public Map<String, T> deepCopy(Map<String, T> source) {
+    if (source == null) {
+      return null;
+    }
+    
     Map<String, T> deepCopyMap = Maps.newHashMap();
     for (Entry<String, T> entry : source.entrySet()) {
       deepCopyMap.put(entry.getKey(), ptype.getDetachedValue(entry.getValue()));

http://git-wip-us.apache.org/repos/asf/incubator-crunch/blob/03f3ce80/crunch/src/main/java/org/apache/crunch/types/TupleDeepCopier.java
----------------------------------------------------------------------
diff --git a/crunch/src/main/java/org/apache/crunch/types/TupleDeepCopier.java b/crunch/src/main/java/org/apache/crunch/types/TupleDeepCopier.java
index 45e38c7..a2ffae3 100644
--- a/crunch/src/main/java/org/apache/crunch/types/TupleDeepCopier.java
+++ b/crunch/src/main/java/org/apache/crunch/types/TupleDeepCopier.java
@@ -48,6 +48,11 @@ public class TupleDeepCopier<T extends Tuple> implements DeepCopier<T> {
 
   @Override
   public T deepCopy(T source) {
+    
+    if (source == null) {
+      return null;
+    }
+    
     Object[] deepCopyValues = new Object[source.size()];
 
     for (int valueIndex = 0; valueIndex < elementTypes.size(); valueIndex++) {

http://git-wip-us.apache.org/repos/asf/incubator-crunch/blob/03f3ce80/crunch/src/main/java/org/apache/crunch/types/avro/AvroDeepCopier.java
----------------------------------------------------------------------
diff --git a/crunch/src/main/java/org/apache/crunch/types/avro/AvroDeepCopier.java b/crunch/src/main/java/org/apache/crunch/types/avro/AvroDeepCopier.java
index 2deeddb..0fe9288 100644
--- a/crunch/src/main/java/org/apache/crunch/types/avro/AvroDeepCopier.java
+++ b/crunch/src/main/java/org/apache/crunch/types/avro/AvroDeepCopier.java
@@ -169,6 +169,11 @@ abstract class AvroDeepCopier<T> implements DeepCopier<T>, Serializable {
    */
   @Override
   public T deepCopy(T source) {
+    
+    if (source == null) {
+      return null;
+    }
+    
     if (datumReader == null) {
       datumReader = createDatumReader(conf);
     }

http://git-wip-us.apache.org/repos/asf/incubator-crunch/blob/03f3ce80/crunch/src/main/java/org/apache/crunch/types/writable/WritableDeepCopier.java
----------------------------------------------------------------------
diff --git a/crunch/src/main/java/org/apache/crunch/types/writable/WritableDeepCopier.java b/crunch/src/main/java/org/apache/crunch/types/writable/WritableDeepCopier.java
index 84e22e3..7b6e11b 100644
--- a/crunch/src/main/java/org/apache/crunch/types/writable/WritableDeepCopier.java
+++ b/crunch/src/main/java/org/apache/crunch/types/writable/WritableDeepCopier.java
@@ -47,6 +47,11 @@ public class WritableDeepCopier<T extends Writable> implements DeepCopier<T> {
 
   @Override
   public T deepCopy(T source) {
+    
+    if (source == null) {
+      return null;
+    }
+    
     ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
     DataOutputStream dataOut = new DataOutputStream(byteOutStream);
     T copiedValue = null;

http://git-wip-us.apache.org/repos/asf/incubator-crunch/blob/03f3ce80/crunch/src/test/java/org/apache/crunch/types/MapDeepCopierTest.java
----------------------------------------------------------------------
diff --git a/crunch/src/test/java/org/apache/crunch/types/MapDeepCopierTest.java b/crunch/src/test/java/org/apache/crunch/types/MapDeepCopierTest.java
index b61a33f..c13e4a2 100644
--- a/crunch/src/test/java/org/apache/crunch/types/MapDeepCopierTest.java
+++ b/crunch/src/test/java/org/apache/crunch/types/MapDeepCopierTest.java
@@ -19,6 +19,7 @@ package org.apache.crunch.types;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
 
 import java.util.Map;
 
@@ -46,5 +47,17 @@ public class MapDeepCopierTest {
     assertEquals(map, deepCopy);
     assertNotSame(map.get(key), deepCopy.get(key));
   }
+  
+  @Test
+  public void testDeepCopy_Null() {
+    Map<String, StringWrapper> map = null;
+
+    MapDeepCopier<StringWrapper> deepCopier = new MapDeepCopier<StringWrapper>(
+        Avros.reflects(StringWrapper.class));
+    deepCopier.initialize(new Configuration());
+    Map<String, StringWrapper> deepCopy = deepCopier.deepCopy(map);
+
+    assertNull(deepCopy);
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-crunch/blob/03f3ce80/crunch/src/test/java/org/apache/crunch/types/TupleDeepCopierTest.java
----------------------------------------------------------------------
diff --git a/crunch/src/test/java/org/apache/crunch/types/TupleDeepCopierTest.java b/crunch/src/test/java/org/apache/crunch/types/TupleDeepCopierTest.java
index 0760c7e..e46a680 100644
--- a/crunch/src/test/java/org/apache/crunch/types/TupleDeepCopierTest.java
+++ b/crunch/src/test/java/org/apache/crunch/types/TupleDeepCopierTest.java
@@ -19,6 +19,7 @@ package org.apache.crunch.types;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
 
 import org.apache.crunch.Pair;
 import org.apache.crunch.test.Person;
@@ -47,5 +48,30 @@ public class TupleDeepCopierTest {
     assertEquals(inputPair, deepCopyPair);
     assertNotSame(inputPair.second(), deepCopyPair.second());
   }
+  
+  @Test
+  public void testDeepCopy_PairContainingNull() {
+
+    Pair<Integer, Person> inputPair = Pair.of(1, null);
+    DeepCopier<Pair> deepCopier = new TupleDeepCopier<Pair>(Pair.class, Avros.ints(),
+        Avros.records(Person.class));
+
+    deepCopier.initialize(new Configuration());
+    Pair<Integer, Person> deepCopyPair = deepCopier.deepCopy(inputPair);
+
+    assertEquals(inputPair, deepCopyPair);
+  }
+  
+  @Test
+  public void testDeepCopy_NullPair() {
+    Pair<Integer, Person> inputPair = null;
+    DeepCopier<Pair> deepCopier = new TupleDeepCopier<Pair>(Pair.class, Avros.ints(),
+        Avros.records(Person.class));
+
+    deepCopier.initialize(new Configuration());
+    Pair<Integer, Person> deepCopyPair = deepCopier.deepCopy(inputPair);
+
+    assertNull(deepCopyPair);
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-crunch/blob/03f3ce80/crunch/src/test/java/org/apache/crunch/types/avro/AvroDeepCopierTest.java
----------------------------------------------------------------------
diff --git a/crunch/src/test/java/org/apache/crunch/types/avro/AvroDeepCopierTest.java b/crunch/src/test/java/org/apache/crunch/types/avro/AvroDeepCopierTest.java
index bb59136..37c13c0 100644
--- a/crunch/src/test/java/org/apache/crunch/types/avro/AvroDeepCopierTest.java
+++ b/crunch/src/test/java/org/apache/crunch/types/avro/AvroDeepCopierTest.java
@@ -19,6 +19,7 @@ package org.apache.crunch.types.avro;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
 
 import java.util.List;
 
@@ -31,7 +32,7 @@ import org.junit.Test;
 import com.google.common.collect.Lists;
 
 public class AvroDeepCopierTest {
-
+  
   @Test
   public void testDeepCopySpecific() {
     Person person = new Person();
@@ -92,5 +93,15 @@ public class AvroDeepCopierTest {
     assertNotSame(person, deepCopyPerson);
 
   }
+  
+  @Test
+  public void testDeepCopy_Null() {
+    Person person = null;
+
+    Person deepCopyPerson = new AvroSpecificDeepCopier<Person>(Person.class, Person.SCHEMA$)
+        .deepCopy(person);
+
+    assertNull(deepCopyPerson);
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-crunch/blob/03f3ce80/crunch/src/test/java/org/apache/crunch/types/writable/WritableDeepCopierTest.java
----------------------------------------------------------------------
diff --git a/crunch/src/test/java/org/apache/crunch/types/writable/WritableDeepCopierTest.java b/crunch/src/test/java/org/apache/crunch/types/writable/WritableDeepCopierTest.java
index eae8218..c49491b 100644
--- a/crunch/src/test/java/org/apache/crunch/types/writable/WritableDeepCopierTest.java
+++ b/crunch/src/test/java/org/apache/crunch/types/writable/WritableDeepCopierTest.java
@@ -19,6 +19,7 @@ package org.apache.crunch.types.writable;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
 
 import org.apache.hadoop.io.Text;
 import org.junit.Before;
@@ -41,5 +42,13 @@ public class WritableDeepCopierTest {
     assertEquals(text, deepCopy);
     assertNotSame(text, deepCopy);
   }
+  
+  @Test
+  public void testDeepCopy_Null() {
+    Text text = null;
+    Text deepCopy = deepCopier.deepCopy(text);
+    
+    assertNull(deepCopy);
+  }
 
 }