You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by rd...@apache.org on 2013/12/28 05:49:45 UTC

svn commit: r1553787 - in /pig/trunk: src/org/apache/pig/impl/util/avro/AvroMapWrapper.java test/org/apache/pig/builtin/TestAvroStorage.java

Author: rding
Date: Sat Dec 28 04:49:44 2013
New Revision: 1553787

URL: http://svn.apache.org/r1553787
Log:
PIG-3608: ClassCastException when looking up a value from AvroMapWrapper using a Utf8 key (rding)

Modified:
    pig/trunk/src/org/apache/pig/impl/util/avro/AvroMapWrapper.java
    pig/trunk/test/org/apache/pig/builtin/TestAvroStorage.java

Modified: pig/trunk/src/org/apache/pig/impl/util/avro/AvroMapWrapper.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/impl/util/avro/AvroMapWrapper.java?rev=1553787&r1=1553786&r2=1553787&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/impl/util/avro/AvroMapWrapper.java (original)
+++ pig/trunk/src/org/apache/pig/impl/util/avro/AvroMapWrapper.java Sat Dec 28 04:49:44 2013
@@ -76,12 +76,12 @@ public final class AvroMapWrapper implem
   @Override
   public Object get(final Object key) {
     Object v = null;
-    if (isUtf8key) {
+    if (isUtf8key && !(key instanceof Utf8)) {
       v = innerMap.get(new Utf8((String) key));
     } else {
       v = innerMap.get(key);
     }
-    
+
     if (v instanceof Utf8) {
       return v.toString();
     } else {

Modified: pig/trunk/test/org/apache/pig/builtin/TestAvroStorage.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/builtin/TestAvroStorage.java?rev=1553787&r1=1553786&r2=1553787&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/builtin/TestAvroStorage.java (original)
+++ pig/trunk/test/org/apache/pig/builtin/TestAvroStorage.java Sat Dec 28 04:49:44 2013
@@ -24,6 +24,7 @@ import org.apache.avro.tool.DataFileWrit
 import org.apache.avro.tool.Tool;
 import org.apache.avro.tool.TrevniCreateRandomTool;
 import org.apache.avro.tool.TrevniToJsonTool;
+import org.apache.avro.util.Utf8;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -40,6 +41,7 @@ import org.apache.pig.backend.executione
 import org.apache.pig.builtin.mock.Storage.Data;
 import org.apache.pig.data.Tuple;
 import org.apache.pig.impl.util.avro.AvroBagWrapper;
+import org.apache.pig.impl.util.avro.AvroMapWrapper;
 import org.apache.pig.impl.util.avro.AvroTupleWrapper;
 import org.apache.pig.test.Util;
 import org.junit.AfterClass;
@@ -59,6 +61,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeMap;
 import java.util.TreeSet;
 
 import static junit.framework.Assert.assertEquals;
@@ -808,6 +811,19 @@ public class TestAvroStorage {
         assertTrue(size1.compareTo(size5) > 0);
     }
 
+    @Test
+    public void testUtf8KeyLookupFromMap() throws Exception {
+        Map<CharSequence, Object> tm = new TreeMap<CharSequence, Object> ();
+        tm.put(new Utf8("foo"), "foo");
+        tm.put(new Utf8("bar"), "bar");
+
+        AvroMapWrapper wrapper = new AvroMapWrapper(tm);
+        String v = (String)wrapper.get(new Utf8("foo"));
+        assertEquals("foo", v);
+        v = (String)wrapper.get(new Utf8("bar"));
+        assertEquals("bar", v);
+    }
+
     private void testAvroStorage(boolean expectedToSucceed, String scriptFile, Map<String,String> parameterMap) throws IOException {
         pigServerLocal.setBatchOn();