Author: thejas Date: Fri Sep 10 17:18:17 2010 New Revision: 995879 URL: http://svn.apache.org/viewvc?rev=995879&view=rev Log: PIG-1604: 'relation as scalar' does not work with complex types
Modified: hadoop/pig/trunk/CHANGES.txt hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt hadoop/pig/trunk/test/org/apache/pig/test/TestScalarAliases.java Modified: hadoop/pig/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/pig/trunk/CHANGES.txt?rev=995879&r1=995878&r2=995879&view=diff ============================================================================== --- hadoop/pig/trunk/CHANGES.txt (original) +++ hadoop/pig/trunk/CHANGES.txt Fri Sep 10 17:18:17 2010 @@ -197,6 +197,8 @@ PIG-1309: Map-side Cogroup (ashutoshc) BUG FIXES +PIG-1604: 'relation as scalar' does not work with complex types (thejas) + PIG-1601: Make scalar work for secure hadoop (daijy) PIG-1602: The .classpath of eclipse template still use hbase-0.20.0 (zjffdu) Modified: hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt URL: http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt?rev=995879&r1=995878&r2=995879&view=diff ============================================================================== --- hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt (original) +++ hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt Fri Sep 10 17:18:17 2010 @@ -3467,17 +3467,17 @@ ExpressionOperator BaseEvalSpec(Schema o ( "." projection = BracketedSimpleProj(subSchema,lp,item) { - if(item instanceof LOUserFunc && ((LOUserFunc)item).getImplicitReferencedOperator() != null) { - assertAtomic(item,true); - } - else { + if((!(item instanceof LOUserFunc)) || ((LOUserFunc)item).getImplicitReferencedOperator() == null) { assertAtomic(item,false); } item = projection; } ) -| ( "#" key = StringDatum() { - assertAtomic(item, false); +| ( "#" key = StringDatum() { + if( (!(item instanceof LOUserFunc)) || ((LOUserFunc)item).getImplicitReferencedOperator() == null){ + // if it is not a scalar udf , it should not be atomic + assertAtomic(item, false); + } ExpressionOperator mapLookup = new LOMapLookup(lp, new OperatorKey(scope, getNextId()), key, DataType.BYTEARRAY, null); lp.add(mapLookup); log.debug("BaseEvalSpec: Added operator " + mapLookup.getClass().getName() + " " + mapLookup + " to logical plan " + lp); Modified: hadoop/pig/trunk/test/org/apache/pig/test/TestScalarAliases.java URL: http://svn.apache.org/viewvc/hadoop/pig/trunk/test/org/apache/pig/test/TestScalarAliases.java?rev=995879&r1=995878&r2=995879&view=diff ============================================================================== --- hadoop/pig/trunk/test/org/apache/pig/test/TestScalarAliases.java (original) +++ hadoop/pig/trunk/test/org/apache/pig/test/TestScalarAliases.java Fri Sep 10 17:18:17 2010 @@ -17,6 +17,7 @@ */ package org.apache.pig.test; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -296,18 +297,21 @@ public class TestScalarAliases { @Test public void testFilteredScalarDollarProj() throws Exception{ String[] input = { - "1\t5", - "2\t10", - "3\t20" + "1\t5\t[state#maine,city#portland]\t{(a),(b)}\t(a,b)", + "2\t10\t\t\t", + "3\t20\t\t\t" }; // Test the use of scalars in expressions Util.createLocalInputFile( "table_testFilteredScalarDollarProj", input); // Test in script mode pigServer.setBatchOn(); - pigServer.registerQuery("A = LOAD 'table_testFilteredScalarDollarProj' as (a0: long, a1: double);"); + pigServer.registerQuery("A = LOAD 'table_testFilteredScalarDollarProj'" + + " as (a0: long, a1: double, a2 : bytearray, " + + "a3: bag{ t : tuple(tc : chararray)}, " + + "a4: tuple(c1 : chararray, c2 : chararray) );"); pigServer.registerQuery("B = filter A by $1 < 8;"); - pigServer.registerQuery("Y = foreach A generate (a0 * B.$0), (a1 / B.$1);"); + pigServer.registerQuery("Y = foreach A generate (a0 * B.$0), (a1 / B.$1), B.$2, B.$2#'state', B.$3, B.a4;"); pigServer.registerQuery("Store Y into 'table_testFilteredScalarDollarProjDir';"); pigServer.explain("Y", System.err); pigServer.executeBatch(); @@ -332,13 +336,13 @@ public class TestScalarAliases { iter = pigServer.openIterator("Y"); t = iter.next(); - assertTrue(t.toString().equals("(1,1.0)")); + assertEquals(t.toString(),"(1,1.0,[state#maine,city#portland],maine,{(a),(b)},(a,b))"); t = iter.next(); - assertTrue(t.toString().equals("(2,2.0)")); + assertEquals(t.toString(),"(2,2.0,[state#maine,city#portland],maine,{(a),(b)},(a,b))"); t = iter.next(); - assertTrue(t.toString().equals("(3,4.0)")); + assertEquals(t.toString(),"(3,4.0,[state#maine,city#portland],maine,{(a),(b)},(a,b))"); assertFalse(iter.hasNext());