PIG-3087: Refactor TestLogicalPlanBuilder to be meaningful
git-svn-id: https://svn.apache.org/repos/asf/pig/trunk@1763639 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index dd35ef3..b711d6b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -48,6 +48,8 @@
BUG FIXES
+PIG-3087: Refactor TestLogicalPlanBuilder to be meaningful (szita via daijy)
+
PIG-4976: streaming job with store clause stuck if the script fail (daijy via knoguchi)
PIG-5035: killJob API does not work in Tez (zjffdu via rohini)
diff --git a/src/org/apache/pig/newplan/logical/visitor/ForEachUserSchemaVisitor.java b/src/org/apache/pig/newplan/logical/visitor/ForEachUserSchemaVisitor.java
index 00f96f6..c387de1 100644
--- a/src/org/apache/pig/newplan/logical/visitor/ForEachUserSchemaVisitor.java
+++ b/src/org/apache/pig/newplan/logical/visitor/ForEachUserSchemaVisitor.java
@@ -200,8 +200,14 @@
gen.setFlattenFlags(new boolean[index]);
if (needCast) {
// Insert the casterForEach into the plan and patch up the plan.
- Operator next = plan.getSuccessors(foreach).get(0);
- plan.insertBetween(foreach, casterForEach, next);
+ List <Operator> successorOps = plan.getSuccessors(foreach);
+ if (successorOps != null && successorOps.size() > 0){
+ Operator next = plan.getSuccessors(foreach).get(0);
+ plan.insertBetween(foreach, casterForEach, next);
+ }else{
+ plan.add(casterForEach);
+ plan.connect(foreach,casterForEach);
+ }
// Since the explict cast is now inserted after the original foreach,
// throwing away the user defined "types" but keeping the user
diff --git a/test/org/apache/pig/test/TestLogicalPlanBuilder.java b/test/org/apache/pig/test/TestLogicalPlanBuilder.java
index 150d8d2..03bcfb2 100644
--- a/test/org/apache/pig/test/TestLogicalPlanBuilder.java
+++ b/test/org/apache/pig/test/TestLogicalPlanBuilder.java
@@ -18,7 +18,9 @@
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;
import java.io.IOException;
import java.util.HashMap;
@@ -26,7 +28,6 @@
import java.util.Map;
import java.util.Properties;
-import junit.framework.Assert;
import junit.framework.AssertionFailedError;
import org.apache.hadoop.fs.Path;
@@ -49,8 +50,8 @@
import org.apache.pig.data.TupleFactory;
import org.apache.pig.impl.PigContext;
import org.apache.pig.impl.builtin.GFAny;
+import org.apache.pig.impl.logicalLayer.FrontendException;
import org.apache.pig.impl.logicalLayer.schema.Schema;
-import org.apache.pig.impl.util.LogUtils;
import org.apache.pig.impl.util.Utils;
import org.apache.pig.newplan.Operator;
import org.apache.pig.newplan.logical.expression.ConstantExpression;
@@ -70,12 +71,14 @@
import org.junit.Test;
public class TestLogicalPlanBuilder {
- PigContext pigContext = new PigContext(ExecType.LOCAL, new Properties());
+ PigContext pigContext = null;
private PigServer pigServer = null;
@Before
public void setUp() throws Exception {
+ pigContext = new PigContext(Util.getLocalTestMode(), new Properties());
pigServer = new PigServer( pigContext );
+ pigServer.setValidateEachStatement(true);
pigContext.connect();
}
@@ -169,60 +172,35 @@
buildPlan(query);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail1() throws Exception {
String query = " foreach (group (A = load 'a') by $1) generate A.'1' ;";
- try {
- buildPlan(query);
- } catch (AssertionFailedError e) {
- return;
- }
- Assert.fail("Test case should fail" );
+ buildPlan(query);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail2() throws Exception {
String query = "foreach group (load 'a') by $1 generate $1.* ;";
- try {
- buildPlan(query);
- } catch (AssertionFailedError e) {
- return;
- }
- Assert.fail("Test case should fail" );
+ buildPlan(query);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail3() throws Exception {
String query = "A = generate DISTINCT foreach (load 'a');";
- try {
- LogicalPlan lp = buildPlan(query);
- System.out.println( lp.toString() );
- } catch (AssertionFailedError e) {
- return;
- }
- Assert.fail("Test case should fail" );
+ LogicalPlan lp = buildPlan(query);
+ System.out.println( lp.toString() );
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail4() throws Exception {
String query = "A = generate [ORDER BY $0][$3, $4] foreach (load 'a');";
- try {
- buildPlan(query);
- } catch (AssertionFailedError e) {
- return;
- }
- Assert.fail("Test case should fail" );
+ buildPlan(query);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail5() throws Exception {
String query = "A = generate " + TestApplyFunc.class.getName() + "($2.*) foreach (load 'a');";
- try {
- buildPlan(query);
- } catch (AssertionFailedError e) {
- return;
- }
- Assert.fail("Test case should fail" );
+ buildPlan(query);
}
/**
@@ -255,11 +233,9 @@
List<Operator> listOp = lp.getSuccessors(root);
Operator lo = listOp.get(0);
- if (lo instanceof LOCogroup) {
- Assert.assertEquals( 16, ((LOCogroup) lo).getRequestedParallelism() );
- } else {
- Assert.fail("Error: Unexpected Parse Tree output");
- }
+ assertTrue(lo instanceof LOCogroup);
+ assertEquals( 16, ((LOCogroup) lo).getRequestedParallelism() );//Local mode, paraallel = 1
+
}
@Test
@@ -294,14 +270,15 @@
buildPlan(query);
}
- @Test
- public void testQuery22Fail() throws Exception {
- String query = "A = load 'a' as (a:int, b: double);" +
+ @Test(expected = FrontendException.class)
+ public void testQueryFail22() throws Exception {
+ String query = "A = load 'a';" +
"B = group A by (*, $0);";
try {
buildPlan(query);
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Grouping attributes can either be star (*"));
+ } catch (Exception e) {
+ assertTrue(e.getCause().getMessage().contains("Grouping attributes can either be star (*"));
+ throw e;
}
}
@@ -327,50 +304,40 @@
buildPlan(query);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQuery23Fail() throws Exception {
String query = "A = load 'a' as (a: int, b:double);" +
"B = load 'b';" +
"C = cogroup A by (*, $0), B by ($0, $1);";
- boolean exceptionThrown = false;
try {
buildPlan(query);
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("The arity of cogroup/group by columns " +
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("The arity of cogroup/group by columns " +
"do not match"));
- exceptionThrown = true;
+ throw e;
}
- Assert.assertTrue(exceptionThrown);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQuery23Fail2() throws Exception {
String query = "A = load 'a';" +
"B = load 'b';" +
"C = cogroup A by (*, $0), B by ($0, $1);";
- boolean exceptionThrown = false;
- try {
- buildPlan(query);
- } catch (AssertionFailedError e) {
- exceptionThrown = true;
- }
- Assert.assertTrue(exceptionThrown);
+ buildPlan(query);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQuery23Fail3() throws Exception {
String query = "A = load 'a' as (a: int, b:double);" +
"B = load 'b' as (a:int);" +
"C = cogroup A by *, B by *;";
- boolean exceptionThrown = false;
try {
buildPlan(query);
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("The arity of cogroup/group by columns " +
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("The arity of cogroup/group by columns " +
"do not match"));
- exceptionThrown = true;
+ throw e;
}
- Assert.assertTrue(exceptionThrown);
}
@Test
@@ -499,15 +466,10 @@
buildPlan(query);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail37() throws Exception {
String query = "A = load 'a'; asdasdas";
- try{
- buildPlan(query);
- }catch(AssertionFailedError e){
- return;
- }
- Assert.fail( "Query should fail." );
+ buildPlan(query);
}
@Test
@@ -528,18 +490,14 @@
buildPlan( query );
}
- @Test
- public void testQueryFail39() throws Exception{
+ @Test(expected = FrontendException.class)
+ public void testQuery39Fail() throws Exception{
String query = "a = load 'a' as (url, host, ranking);" +
"b = group a by (url,host); " +
"c = foreach b generate flatten(group.url), SUM(a.ranking) as totalRank;" +
"d = filter c by totalRank > '10';" +
"e = foreach d generate url;";
- try {
- buildPlan(query);//url has been falttened and hence the failure
- } catch(AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Exception"));
- }
+ buildPlan(query);
}
@Test
@@ -548,20 +506,15 @@
buildPlan( query +"a = FILTER (load 'a') BY (IsEmpty($2) AND ($3 == $2));" );
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail41() throws Exception {
- try {
- buildPlan("a = load 'a';" + "b = a as (host,url);");
- } catch (AssertionFailedError e) {
- return;
- }
+ buildPlan("a = load 'a';" + "b = a as (host,url);");
// TODO
// the following statement was earlier present
// eventually when we do allow assignments of the form
// above, we should test with the line below
// uncommented
//buildPlan("foreach b generate host;");
- Assert.fail( "Query should fail." );
}
@Test
@@ -582,17 +535,12 @@
buildPlan( q );
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail43() throws Exception {
String q = "a = load 'a' as (name, age, gpa);" +
"b = load 'b' as (name, height);";
- try {
- String query = q + "c = cogroup a by (name, age), b by (height);";
- buildPlan(query);
- } catch (AssertionFailedError e) {
- return;
- }
- Assert.fail( "Query should fail." );
+ String query = q + "c = cogroup a by (name, age), b by (height);";
+ buildPlan(query);
}
@Test
@@ -604,22 +552,13 @@
buildPlan( q );
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail44() throws Throwable {
PigServer pig = null;
- try {
- pig = new PigServer("local");
- } catch (IOException e) {
- Assert.assertTrue(false); // pig server failed for some reason
- }
+ pig = new PigServer(Util.getLocalTestMode());
pig.registerFunction("myTr",
new FuncSpec(GFAny.class.getName() + "('tr o 0')"));
- try{
- pig.registerQuery("b = foreach (load 'a') generate myTr(myTr(*));");
- }catch(Exception e){
- return;
- }
- Assert.assertTrue(false);
+ pig.registerQuery("b = foreach (load 'a') generate myTr(myTr(*));");
}
@Test
@@ -636,15 +575,11 @@
buildPlan(query);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail58() throws Exception{
String query = "a = load 'a' as (url, host, ranking);" +
"b = group a by url; ";
- try {
- buildPlan(query + "c = foreach b generate group.url;");
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Exception"));
- }
+ buildPlan(query + "c = foreach b generate group.url;");
}
@Test
@@ -685,17 +620,13 @@
buildPlan(query);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail62() throws Exception {
String query = "a = load 'a' as (name, age, gpa);" +
"b = load 'b' as (name, height);" +
"c = cross a,b;" +
"d = order c by name, b::name, height, a::gpa;";
- try {
- buildPlan(query);
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Exception"));
- }
+ buildPlan(query);
}
@Test
@@ -708,13 +639,9 @@
}
@Test
- public void testQueryFail63() throws Exception {
+ public void testQuery63a() throws Exception {
String query = "foreach (load 'myfile' as (col1, col2 : (sub1, sub2), col3 : (bag1))) generate col1 ;";
- try {
- buildPlan(query);
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Exception"));
- }
+ buildPlan(query);
}
@Test
@@ -728,15 +655,10 @@
buildPlan(query);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail64() throws Exception {
String query = "foreach (load 'myfile' as (col1, col2 : bag{age: int})) generate col1 ;";
- try {
- buildPlan(query);
- } catch (AssertionFailedError e) {
- return;
- }
- Assert.fail( "query should fail" );
+ buildPlan(query);
}
@Test
@@ -749,16 +671,12 @@
}
@Test
- public void testQueryFail65() throws Exception {
+ public void testQuery66() throws Exception {
String q = "a = load 'a' as (name, age, gpa);" +
"b = load 'b' as (name, height);" +
- "c = cogroup a by (name, age), b by (name, height);" +
- "d = foreach c generate group.name, a.name, b.height as age, a.age;";
- try {
- buildPlan( q );
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Exception"));
- }
+ "c = cogroup a by (name, age), b by (name, height);" +
+ "d = foreach c generate group.name, a.name, b.height as age, a.age;";
+ buildPlan( q );
}
@Test
@@ -790,28 +708,23 @@
buildPlan( q );
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail67() throws Exception {
String q = " a = load 'input1' as (name, age, gpa);" +
" b = foreach a generate age, age * 10L, gpa/0.2f, {16, 4.0e-2, 'hello'};";
try {
buildPlan(q);
- } catch (AssertionFailedError e) {
- return;
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("Pig script failed to parse: MismatchedTokenException"));
+ throw e;
}
- Assert.fail( "query should fail" );
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail68() throws Exception {
String q = " a = load 'input1' as (name, age, gpa);";
- try {
- buildPlan( q +
- " b = foreach a generate {(16 L, 4.0e-2, 'hello'), (0.5f, 'another tuple', 12L, {()})};");
- } catch (AssertionFailedError e) {
- return;
- }
- Assert.fail( "query should fail" );
+ buildPlan( q +
+ " b = foreach a generate {(16 L, 4.0e-2, 'hello'), (0.5f, 'another tuple', 12L, {()})};");
}
@Test
@@ -841,24 +754,24 @@
String q = "split (load 'a') into x if $0 > '7', y if $0 < '7';";
try {
buildPlan( q + "c = foreach y generate (bag)$1;");
- } catch (AssertionFailedError e) {
+ } catch (FrontendException e) {
catchEx = true;
}
- Assert.assertTrue( catchEx );
+ assertTrue( catchEx );
catchEx = false;
try {
buildPlan( q + "c = foreach y generate (bag{int, float})$1;");
- } catch (AssertionFailedError e) {
+ } catch (FrontendException e) {
catchEx = true;
}
- Assert.assertTrue( catchEx );
+ assertTrue( catchEx );
catchEx = false;
try {
buildPlan( q + "c = foreach y generate (tuple)$1;");
- } catch (AssertionFailedError e) {
+ } catch (FrontendException e) {
catchEx = true;
}
- Assert.assertTrue( catchEx );
+ assertTrue( catchEx );
}
@Test
@@ -904,12 +817,12 @@
buildPlan( q );
}
- @Test
+ @Test
public void testQuery80() throws Exception {
String q = "a = load 'input1' as (name, age, gpa);" +
"b = filter a by age < '20';" +
"c = group b by age;" +
- "d = foreach c {"
+ "d = foreach c {"
+ "cf = filter b by gpa < '3.0';"
+ "cp = cf.gpa;"
+ "cd = distinct cp;"
@@ -927,15 +840,10 @@
buildPlan( q );
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail81() throws Exception {
String q = "a = load 'input1' using PigStorage() as (name, age, gpa);";
- try {
- buildPlan(q + "split a into b if name lt 'f', c if (name ge 'f' and name le 'h'), d if name gt 'h';");
- } catch (AssertionFailedError e) {
- return;
- }
- Assert.fail( "Query should fail." );
+ buildPlan(q + "split a into b if name lt 'f', c if (name ge 'f' and name le 'h'), d if name gt 'h';");
}
@Test
@@ -951,19 +859,15 @@
}
@Test
- public void testQueryFail82() throws Exception {
+ public void testQuery82a() throws Exception {
String q = "a = load 'myfile';" +
- "b = group a by $0;" +
+ "b = group a by $0;" +
"c = foreach b {"
- + "c1 = order $1 by *;"
- + "c2 = $1;"
+ + "c1 = order $1 by *;"
+ + "c2 = $1;"
+ "generate flatten(c1), c2;"
+ "};";
- try {
buildPlan(q);
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Exception"));
- }
}
@Test
@@ -971,7 +875,7 @@
String q = "a = load 'input1' as (name, age, gpa);" +
"b = filter a by age < '20';" +
"c = group b by (name,age);" +
- "d = foreach c {"
+ "d = foreach c {"
+ "cf = filter b by gpa < '3.0';"
+ "cp = cf.gpa;"
+ "cd = distinct cp;"
@@ -1008,7 +912,7 @@
LogicalSchema actual = cogroup.getSchema();
System.out.println( actual.toString( false ) );
- Assert.assertTrue( actual.toString( false ).equals( "group:tuple(name:bytearray,age:bytearray),a:bag{:tuple(name:bytearray,age:bytearray,gpa:bytearray)}" ) );
+ assertEquals("group:tuple(name:bytearray,age:bytearray),a:bag{:tuple(name:bytearray,age:bytearray,gpa:bytearray)}", actual.toString(false));
lp = buildPlan(query +
"c = foreach b generate group.name, group.age, COUNT(a.gpa);" +
@@ -1017,7 +921,7 @@
LOForEach foreach = (LOForEach) lp.getPredecessors(store).get(0);
- Assert.assertTrue( foreach.getSchema().toString( false ).equals("name:bytearray,age:bytearray,:long") );
+ assertEquals("name:bytearray,age:bytearray,:long", foreach.getSchema().toString(false));
}
@Test
@@ -1046,7 +950,7 @@
Schema cogroupExpectedSchema = new Schema(groupFs);
cogroupExpectedSchema.add(bagFs);
- Assert.assertTrue(cogroup.getSchema().toString(false).equals("group:tuple(name:chararray,age:int),a:bag{:tuple(name:chararray,age:int,gpa:float)}"));
+ assertEquals("group:tuple(name:chararray,age:int),a:bag{:tuple(name:chararray,age:int,gpa:float)}", cogroup.getSchema().toString(false));
}
@Test
@@ -1062,7 +966,7 @@
LOGenerate gen = (LOGenerate) nestedPlan.getSinks().get(0);
LOSort nestedSort = (LOSort)nestedPlan.getPredecessors(gen).get(0);
LogicalExpressionPlan sortPlan = nestedSort.getSortColPlans().get(0);
- Assert.assertTrue(sortPlan.getSinks().size() == 1);
+ assertEquals(1, sortPlan.getSinks().size());
}
@Test
@@ -1081,20 +985,21 @@
@Test
public void testQuery89() throws Exception {
- String query = "a = load 'myfile';" +
+ String query = "a = load 'myfile';" +
"b = foreach a generate $0, $100;" +
"c = load 'myfile' as (i: int);" +
"d = foreach c generate $0 as zero, i;";
buildPlan( query );
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail89() throws Exception {
String q = "c = load 'myfile' as (i: int);";
try {
buildPlan(q + "d = foreach c generate $0, $5;");
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Out of bound access"));
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("Out of bound access"));
+ throw e;
}
}
@@ -1106,20 +1011,20 @@
String query = "a = load 'myfile' as (name:Chararray, age:Int, gpa:Float);" +
"b = group a by (name, age);";
//the first and second elements in group, i.e., name and age are renamed as myname and myage
- lp = buildPlan(query +
+ lp = buildPlan(query +
"c = foreach b generate flatten(group) as (myname, myage), COUNT(a) as mycount;" +
"store c into 'output';");
Operator store = lp.getSinks().get(0);
foreach = (LOForEach)lp.getPredecessors(store).get(0);
- Assert.assertTrue(foreach.getSchema().isEqual(Utils.parseSchema("myname: chararray, age: int, mycount: long")));
+ assertTrue(foreach.getSchema().isEqual(Utils.parseSchema("myname: chararray, age: int, mycount: long")));
//the schema of group is unchanged
- lp = buildPlan( query +
+ lp = buildPlan( query +
"c = foreach b generate flatten(group), COUNT(a) as mycount;" +
"store c into 'output';" );
store = lp.getSinks().get(0);
foreach = (LOForEach)lp.getPredecessors(store).get(0);
- Assert.assertTrue(foreach.getSchema().toString( false ).equals("group::name:chararray,group::age:int,mycount:long"));
+ assertEquals("group::name:chararray,group::age:int,mycount:long", foreach.getSchema().toString(false));
//group is renamed as mygroup
lp = buildPlan(query +
@@ -1127,7 +1032,7 @@
"store c into 'output';");
store = lp.getSinks().get(0);
foreach = (LOForEach)lp.getPredecessors(store).get(0);
- Assert.assertTrue(foreach.getSchema().toString( false ).equals("mygroup:tuple(name:chararray,age:int),mycount:long"));
+ assertEquals("mygroup:tuple(name:chararray,age:int),mycount:long", foreach.getSchema().toString(false));
//group is renamed as mygroup and the elements are renamed as myname and myage
lp = buildPlan(query +
@@ -1135,7 +1040,7 @@
"store c into 'output';");
store = lp.getSinks().get(0);
foreach = (LOForEach)lp.getPredecessors(store).get(0);
- Assert.assertEquals(foreach.getSchema().toString( false ),"mygroup:tuple(myname:chararray,myage:int),mycount:long");
+ assertEquals("mygroup:tuple(myname:chararray,myage:int),mycount:long",foreach.getSchema().toString(false));
//setting the schema of flattened bag that has no schema with the user defined schema
String q = "a = load 'myfile' as (name:Chararray, age:Int, gpa:Float);" +
"c = load 'another_file';" +
@@ -1143,7 +1048,7 @@
lp = buildPlan( q + "e = foreach d generate flatten(DIFF(a, c)) as (x, y, z), COUNT(a) as mycount;" + "store e into 'output';" );
store = lp.getSinks().get(0);
foreach = (LOForEach)lp.getPredecessors(store).get(0);
- Assert.assertEquals(foreach.getSchema().toString(false),"x:bytearray,y:bytearray,z:bytearray,mycount:long");
+ assertEquals("x:bytearray,y:bytearray,z:bytearray,mycount:long",foreach.getSchema().toString(false));
//setting the schema of flattened bag that has no schema with the user defined schema
q = query +
@@ -1154,7 +1059,7 @@
lp = buildPlan(q);
store = lp.getSinks().get(0);
foreach = (LOForEach)lp.getPredecessors(store).get(0);
- Assert.assertEquals(foreach.getSchema().toString(false),"x:int,y:float,z:bytearray,mycount:long");
+ assertEquals("x:int,y:float,z:bytearray,mycount:long",foreach.getSchema().toString(false));
//setting the schema of flattened bag that has no schema with the user defined schema
q = query +
@@ -1165,10 +1070,10 @@
lp = buildPlan(q);
store = lp.getSinks().get(0);
foreach = (LOForEach)lp.getPredecessors(store).get(0);
- Assert.assertEquals(foreach.getSchema().toString(false),"x:bytearray,mycount:long");
+ assertEquals("x:bytearray,mycount:long",foreach.getSchema().toString(false));
//setting the schema of flattened bag that has no schema with the user defined schema
- q = query +
+ q = query +
"c = load 'another_file';" +
"d = cogroup a by $0, c by $0;" +
"e = foreach d generate flatten(DIFF(a, c)) as x: int, COUNT(a) as mycount;" +
@@ -1176,7 +1081,36 @@
lp = buildPlan(q);
store = lp.getSinks().get(0);
foreach = (LOForEach)lp.getPredecessors(store).get(0);
- Assert.assertEquals(foreach.getSchema().toString(false),"x:int,mycount:long");
+ assertEquals("x:int,mycount:long",foreach.getSchema().toString(false));
+ }
+
+ /**
+ * Test for {@link org.apache.pig.newplan.logical.visitor.ForEachUserSchemaVisitor} visit() for inserting Cast operator into plan correctly.
+ * @throws Exception
+ */
+ @Test
+ public void testQuery90a() throws Exception {
+ LogicalPlan lp = null;
+ LOForEach foreach = null;
+ Operator store = null;
+
+ String query = "a = load 'myfile' as (name:Chararray, age:Int, gpa:Float);" +
+ "b = group a by (name, age);";
+
+ // Simply should work renaming
+ lp = buildPlan( query + "c = foreach b generate group as mygroup:(myname, myage), COUNT(a) as mycount; store c into 'output';");
+ store = lp.getSinks().get(0);
+ foreach = (LOForEach)lp.getPredecessors(store).get(0);
+ assertEquals("mygroup:tuple(myname:chararray,myage:int),mycount:long",foreach.getSchema().toString(false));
+
+ // Casting should work regardless of type mismatch
+ lp = buildPlan( query + "c = foreach b generate group as mygroup:(myname: int, myage), COUNT(a) as mycount; store c into 'output';");
+ store = lp.getSinks().get(0);
+ foreach = (LOForEach)lp.getPredecessors(store).get(0);
+ assertEquals("mygroup:tuple(myname:int,myage:int),mycount:long",foreach.getSchema().toString(false));
+
+ // Casting in final phase should work too (no succeeding operators after cast in final foreach)
+ buildPlan( query + "c = foreach b generate group as mygroup:(myname, myage: chararray), COUNT(a) as mycount;");
}
@Test
@@ -1185,33 +1119,17 @@
"b = group a by (name, age);";
try {
- buildPlan( query + "c = foreach b generate group as mygroup:(myname, myage), COUNT(a) as mycount;");
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Schema size mismatch"));
- }
-
- try {
- buildPlan( query + "c = foreach b generate group as mygroup:(myname: int, myage), COUNT(a) as mycount;");
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Type mismatch"));
- }
-
- try {
- buildPlan( query + "c = foreach b generate group as mygroup:(myname, myage: chararray), COUNT(a) as mycount;");
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Type mismatch"));
- }
-
- try {
buildPlan( query + "c = foreach b generate group as mygroup:{t: (myname, myage)}, COUNT(a) as mycount;");
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Incompatible field schema"));
+ fail("Should have thrown error");
+ } catch (FrontendException e) {
+ assertTrue(e.getMessage().contains("Incompatible field schema"));
}
try {
buildPlan( query + "c = foreach b generate flatten(group) as (myname, myage, mygpa), COUNT(a) as mycount;");
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Incompatible schema"));
+ fail("Should have thrown error");
+ } catch (FrontendException e) {
+ assertTrue(e.getMessage().contains("Incompatible schema"));
}
}
@@ -1247,7 +1165,7 @@
}
@Test
- public void testQueryFail93() throws Exception {
+ public void testQuery93_a() throws Exception {
String query = "a = load 'one' as (name, age, gpa);" +
"b = group a by name;"+
"c = foreach b generate flatten(a);"+
@@ -1271,7 +1189,7 @@
buildPlan( query );
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQueryFail94() throws Exception {
String query = "a = load 'one' as (name, age, gpa);" +
"b = load 'two' as (name, age, somethingelse);"+
@@ -1281,8 +1199,9 @@
// test that we can refer to "a::name" field and not name
try {
buildPlan(query);
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Invalid field projection. Projected field [name] does not exist"));
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("Invalid field projection. Projected field [name] does not exist"));
+ throw e;
}
}
@@ -1297,9 +1216,9 @@
LOForEach foreach = (LOForEach)lp.getPredecessors(store).get(0);
LOCogroup cogroup = (LOCogroup) lp.getPredecessors(foreach).get(0);
String s = cogroup.getSchema().toString(false);
- Assert.assertTrue( s.equals("group:bytearray,a:bag{:tuple(name:bytearray,age:bytearray,gpa:bytearray)}"));
+ assertEquals("group:bytearray,a:bag{:tuple(name:bytearray,age:bytearray,gpa:bytearray)}", s);
s = foreach.getSchema().toString(false);
- Assert.assertTrue( s.equals("d::name:bytearray,d::age:bytearray,d::gpa:bytearray,max_age:double"));
+ assertEquals("d::name:bytearray,d::age:bytearray,d::gpa:bytearray,max_age:double", s);
}
@Test
@@ -1320,27 +1239,27 @@
LogicalPlan foreachPlans = foreach.getInnerPlan();
// LogicalPlan flattenPlan = foreachPlans.get(1);
// LogicalOperator project = flattenPlan.getLeaves().get(0);
- // Assert.assertTrue(project instanceof LOProject);
+ // assertTrue(project instanceof LOProject);
// LogicalOperator sort = flattenPlan.getPredecessors(project).get(0);
- // Assert.assertTrue(sort instanceof LOSort);
+ // assertTrue(sort instanceof LOSort);
// LogicalOperator distinct = flattenPlan.getPredecessors(sort).get(0);
- // Assert.assertTrue(distinct instanceof LODistinct);
+ // assertTrue(distinct instanceof LODistinct);
//
// //testing the presence of the nested foreach
// LogicalOperator nestedForeach = flattenPlan.getPredecessors(distinct).get(0);
- // Assert.assertTrue(nestedForeach instanceof LOForEach);
+ // assertTrue(nestedForeach instanceof LOForEach);
// LogicalPlan nestedForeachPlan = ((LOForEach)nestedForeach).getForEachPlans().get(0);
// LogicalOperator nestedProject = nestedForeachPlan.getRoots().get(0);
- // Assert.assertTrue(nestedProject instanceof LOProject);
- // Assert.assertTrue(((LOProject)nestedProject).getCol() == 2);
+ // assertTrue(nestedProject instanceof LOProject);
+ // assertTrue(((LOProject)nestedProject).getCol() == 2);
//
// //testing the filter inner plan for the absence of the project connected to project
// LogicalOperator filter = flattenPlan.getPredecessors(nestedForeach).get(0);
- // Assert.assertTrue(filter instanceof LOFilter);
+ // assertTrue(filter instanceof LOFilter);
// LogicalPlan comparisonPlan = ((LOFilter)filter).getComparisonPlan();
// LOLesserThan lessThan = (LOLesserThan)comparisonPlan.getLeaves().get(0);
// LOProject filterProject = (LOProject)lessThan.getLhsOperand();
- // Assert.assertTrue(null == comparisonPlan.getPredecessors(filterProject));
+ // assertTrue(null == comparisonPlan.getPredecessors(filterProject));
}
/*
@Test
@@ -1353,28 +1272,28 @@
lp = buildPlan(query + "b = foreach a generate 1;" + store);
foreach = (LOForEach)lp.getPredecessors(op);
-// Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("x: int"), false, true));
+// assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("x: int"), false, true));
lp = buildPlan(query + "b = foreach a generate 1L;" + store);
op = lp.getSinks().get(0);
Operator op = lp.getSinks().get(0);
foreach = (LOForEach)lp.getPredecessors(op);
-// Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("x: long"), false, true));
+// assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("x: long"), false, true));
lp = buildPlan(query + "b = foreach a generate 1.0;" + store);
op = lp.getSinks().get(0);
foreach = (LOForEach)lp.getPredecessors(op);
-// Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("x: double"), false, true));
+// assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("x: double"), false, true));
lp = buildPlan(query + "b = foreach a generate 1.0f;" + store);
op = lp.getSinks().get(0);
foreach = (LOForEach)lp.getPredecessors(op);
-// Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("x: float"), false, true));
+// assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("x: float"), false, true));
lp = buildPlan(query + "b = foreach a generate 'hello';" + store);
op = lp.getSinks().get(0);
foreach = (LOForEach)lp.getPredecessors(op);
-// Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("x: chararray"), false, true));
+// assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("x: chararray"), false, true));
}
@Test
@@ -1386,31 +1305,31 @@
lp = buildPlan("b = foreach a generate (1);");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: int)"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: int)"), false, true));
lp = buildPlan("b = foreach a generate (1L);");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: long)"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: long)"), false, true));
lp = buildPlan("b = foreach a generate (1.0);");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: double)"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: double)"), false, true));
lp = buildPlan("b = foreach a generate (1.0f);");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: float)"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: float)"), false, true));
lp = buildPlan("b = foreach a generate ('hello');");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: chararray)"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: chararray)"), false, true));
lp = buildPlan("b = foreach a generate ('hello', 1, 1L, 1.0f, 1.0);");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: chararray, y: int, z: long, a: float, b: double)"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: chararray, y: int, z: long, a: float, b: double)"), false, true));
lp = buildPlan("b = foreach a generate ('hello', {(1), (1.0)});");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: chararray, ib:{it:(d: double)})"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("t:(x: chararray, ib:{it:(d: double)})"), false, true));
}
@@ -1423,39 +1342,39 @@
lp = buildPlan("b = foreach a generate {(1, 'hello'), (2, 'world')};");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: int, y: chararray)}"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: int, y: chararray)}"), false, true));
lp = buildPlan("b = foreach a generate {(1, 'hello'), (1L, 'world')};");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: long, y: chararray)}"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: long, y: chararray)}"), false, true));
lp = buildPlan("b = foreach a generate {(1, 'hello'), (1.0f, 'world')};");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: float, y: chararray)}"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: float, y: chararray)}"), false, true));
lp = buildPlan("b = foreach a generate {(1, 'hello'), (1.0, 'world')};");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: double, y: chararray)}"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: double, y: chararray)}"), false, true));
lp = buildPlan("b = foreach a generate {(1L, 'hello'), (1.0f, 'world')};");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: float, y: chararray)}"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: float, y: chararray)}"), false, true));
lp = buildPlan("b = foreach a generate {(1L, 'hello'), (1.0, 'world')};");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: double, y: chararray)}"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: double, y: chararray)}"), false, true));
lp = buildPlan("b = foreach a generate {(1.0f, 'hello'), (1.0, 'world')};");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: double, y: chararray)}"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: double, y: chararray)}"), false, true));
lp = buildPlan("b = foreach a generate {(1.0, 'hello'), (1.0f, 'world')};");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: double, y: chararray)}"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:(x: double, y: chararray)}"), false, true));
lp = buildPlan("b = foreach a generate {(1.0, 'hello', 3.14), (1.0f, 'world')};");
foreach = (LOForEach) lp.getLeaves().get(0);
- Assert.assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:()}"), false, true));
+ assertTrue(Schema.equals(foreach.getSchema(), Util.getSchemaFromString("b:{t:()}"), false, true));
}
@@ -1518,7 +1437,7 @@
Operator store = lp.getSinks().get(0);
LOForEach foreach = (LOForEach)lp.getPredecessors(store).get(0);
String s = foreach.getSchema().toString(false);
- Assert.assertTrue( s.equals("name:bytearray,age:bytearray,gpa:bytearray"));
+ assertEquals("name:bytearray,age:bytearray,gpa:bytearray", s);
}
@Test
@@ -1529,19 +1448,19 @@
LOForEach foreach = (LOForEach)lp.getPredecessors(store).get(0);
LOGenerate gen = (LOGenerate) foreach.getInnerPlan().getSinks().get(0);
LogicalExpressionPlan foreachPlan = gen.getOutputPlans().get(0);
- Assert.assertTrue(checkPlanForProjectStar(foreachPlan));
+ assertTrue(checkPlanForProjectStar(foreachPlan));
}
@Test
public void testQuery108() throws Exception {
- String query = "a = load 'one' as (name, age, gpa);" +
+ String query = "a = load 'one' as (name, age, gpa);" +
"b = group a by *;" +
"store b into 'output';";
LogicalPlan lp = buildPlan(query);
Operator store = lp.getSinks().get(0);
LOCogroup cogroup = (LOCogroup)lp.getPredecessors(store).get(0);
String s = cogroup.getSchema().toString(false);
- Assert.assertTrue(s.equals("group:tuple(name:bytearray,age:bytearray,gpa:bytearray),a:bag{:tuple(name:bytearray,age:bytearray,gpa:bytearray)}"));
+ assertEquals("group:tuple(name:bytearray,age:bytearray,gpa:bytearray),a:bag{:tuple(name:bytearray,age:bytearray,gpa:bytearray)}", s);
}
@Test
@@ -1554,22 +1473,21 @@
Operator store = lp.getSinks().get(0);
LOCogroup cogroup = (LOCogroup)lp.getPredecessors(store).get(0);
String s = cogroup.getSchema().toString(false);
- Assert.assertTrue(s.equals("group:tuple(name:bytearray,age:bytearray,gpa:bytearray),a:bag{:tuple(name:bytearray,age:bytearray,gpa:bytearray)},b:bag{:tuple(first_name:bytearray,enrol_age:bytearray,high_school_gpa:bytearray)}"));
+ assertEquals("group:tuple(name:bytearray,age:bytearray,gpa:bytearray),a:bag{:tuple(name:bytearray,age:bytearray,gpa:bytearray)},b:bag{:tuple(first_name:bytearray,enrol_age:bytearray,high_school_gpa:bytearray)}", s);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testQuery110Fail() throws Exception {
String query = "a = load 'one' as (name, age, gpa);" +
"b = load 'two';" + "c = cogroup a by $0, b by *;";
try {
buildPlan( query );
- } catch(AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Cogroup/Group by '*' or 'x..' (range of columns to the end) is only allowed " +
+ } catch(Exception e) {
+ assertTrue(e.getMessage().contains("Cogroup/Group by '*' or 'x..' (range of columns to the end) is only allowed " +
"if the input has a schema" ) );
- return;
+ throw e;
}
- Assert.fail( "Test case should fail." );
}
@Test
@@ -1582,13 +1500,13 @@
LOSort sort = (LOSort)lp.getPredecessors(store).get(0);
for(LogicalExpressionPlan sortPlan: sort.getSortColPlans() ) {
- Assert.assertTrue(checkPlanForProjectStar(sortPlan) == false);
+ assertFalse(checkPlanForProjectStar(sortPlan));
}
}
@Test
public void testQuery112() throws Exception {
- String query = "a = load 'one' as (name, age, gpa);" +
+ String query = "a = load 'one' as (name, age, gpa);" +
"b = group a by *;" +
"c = foreach b {a1 = order a by *; generate a1;};" +
"store c into 'y';";
@@ -1597,7 +1515,7 @@
LOForEach foreach = (LOForEach)lp.getPredecessors(store).get(0);
LOGenerate gen = (LOGenerate) foreach.getInnerPlan().getSinks().get(0);
for(LogicalExpressionPlan foreachPlan: gen.getOutputPlans()) {
- Assert.assertTrue(checkPlanForProjectStar(foreachPlan) == true);
+ assertTrue(checkPlanForProjectStar(foreachPlan));
}
LogicalPlan foreachPlan = foreach.getInnerPlan();
@@ -1606,13 +1524,13 @@
// project (*) operator here is translated to a list of projection
// operators
for(LogicalExpressionPlan sortPlan: sort.getSortColPlans()) {
- Assert.assertTrue(checkPlanForProjectStar(sortPlan) == false);
+ assertFalse(checkPlanForProjectStar(sortPlan));
}
}
@Test
public void testQuery114() throws Exception {
- String query = "a = load 'one' as (name, age, gpa);" +
+ String query = "a = load 'one' as (name, age, gpa);" +
"b = foreach a generate " + Identity.class.getName() + "(name, age);" +
"store b into 'y';";
@@ -1620,7 +1538,7 @@
Operator store = lp.getSinks().get(0);
LOForEach foreach = (LOForEach)lp.getPredecessors(store).get(0);
String s = foreach.getSchema().toString(false);
- Assert.assertTrue(s.equals(":tuple(name:bytearray,age:bytearray)"));
+ assertEquals(":tuple(name:bytearray,age:bytearray)", s);
}
@Test
@@ -1633,7 +1551,7 @@
Operator store = lp.getSinks().get(0);
LOForEach foreach = (LOForEach)lp.getPredecessors(store).get(0);
String s = foreach.getSchema().toString(false);
- Assert.assertTrue(s.equals(":tuple(name:bytearray,age:bytearray,gpa:bytearray)"));
+ assertEquals(":tuple(name:bytearray,age:bytearray,gpa:bytearray)", s);
}
@Test
@@ -1646,19 +1564,19 @@
Operator store = lp.getSinks().get(0);
LOForEach foreach = (LOForEach)lp.getPredecessors(store).get(0);
String s = foreach.getSchema().toString(false);
- Assert.assertTrue(s.equals(":tuple(:bytearray,:bytearray)"));
+ assertEquals(":tuple(:bytearray,:bytearray)", s);
}
@Test
public void testQuery117() throws Exception {
- String query = "a = load 'one';" +
+ String query = "a = load 'one';" +
"b = foreach a generate " + Identity.class.getName() + "(*);" +
"store b into 'y';";
LogicalPlan lp = buildPlan(query);
Operator store = lp.getSinks().get(0);
LOForEach foreach = (LOForEach)lp.getPredecessors(store).get(0);
String s = foreach.getSchema().toString(false);
- Assert.assertTrue(s.equals(":tuple()"));
+ assertTrue(s.equals(":tuple()"));
}
@Test
@@ -1709,7 +1627,7 @@
@Test
public void testNullConsConcatSize() throws Exception {
String query = "a = load 'a' as (x:int, y:double, str:chararray);" +
- "b = foreach a generate SIZE(null), CONCAT(str, null), " +
+ "b = foreach a generate SIZE(null), CONCAT(str, null), " +
"CONCAT(null, str);" +
"store b into 'output';";
buildPlan(query);
@@ -1771,7 +1689,7 @@
@Test
public void testCast() throws Exception {
String query = "a = load 'one.txt' as (x,y); " +
- "b = foreach a generate (int)$0, (double)$1;" +
+ "b = foreach a generate (int)$0, (double)$1;" +
"c = group b by $0;"+
"store c into 'output';";
buildPlan(query);
@@ -1857,14 +1775,14 @@
@Test
public void testTokenizeSchema() throws Exception {
- String query = "a = load 'one' as (f1: chararray);" +
+ String query = "a = load 'one' as (f1: chararray);" +
"b = foreach a generate TOKENIZE(f1);" +
"store b into 'output';";
LogicalPlan lp = buildPlan(query);
Operator store = lp.getSinks().get(0);
LOForEach foreach = (LOForEach) lp.getPredecessors(store).get(0);
String s = foreach.getSchema().toString(false);
- Assert.assertTrue( s.equals("bag_of_tokenTuples_from_f1:bag{tuple_of_tokens:tuple(token:chararray)}"));
+ assertEquals("bag_of_tokenTuples_from_f1:bag{tuple_of_tokens:tuple(token:chararray)}", s);
}
@Test
@@ -1876,8 +1794,8 @@
Operator store = lp.getSinks().get(0);
LOForEach foreach = (LOForEach) lp.getPredecessors(store).get(0);
String s = foreach.getSchema().toString(false);
- assertEquals(s, "bag_of_tokenTuples_from_f1:bag{tuple_of_tokens:tuple(token:chararray)}"
- +",bag_of_tokenTuples_from_f2:bag{tuple_of_tokens:tuple(token:chararray)}");
+ assertEquals("bag_of_tokenTuples_from_f1:bag{tuple_of_tokens:tuple(token:chararray)}"
+ +",bag_of_tokenTuples_from_f2:bag{tuple_of_tokens:tuple(token:chararray)}", s);
}
@Test
@@ -1889,15 +1807,15 @@
LOGenerate gen = (LOGenerate)foreach.getInnerPlan().getSinks().get(0);
LogicalExpressionPlan exprPlan = gen.getOutputPlans().get(0);
Operator logOp = exprPlan.getSources().get(0);
- Assert.assertTrue( logOp instanceof ConstantExpression);
+ assertTrue(logOp instanceof ConstantExpression);
ConstantExpression loConst = (ConstantExpression)logOp;
- Assert.assertTrue(loConst.getType() == DataType.TUPLE);
- Assert.assertTrue(loConst.getValue() instanceof Tuple);
- Assert.assertTrue(loConst.getValue().equals(TupleFactory.getInstance().newTuple()));
+ assertEquals(DataType.TUPLE, loConst.getType());
+ assertTrue(loConst.getValue() instanceof Tuple);
+ assertEquals(TupleFactory.getInstance().newTuple(), loConst.getValue());
String s = foreach.getSchema().toString(false);
- Assert.assertTrue( s.equals(":tuple()"));
+ assertEquals(":tuple()", s);
}
@Test
@@ -1909,15 +1827,15 @@
LOGenerate gen = (LOGenerate)foreach.getInnerPlan().getSinks().get(0);
LogicalExpressionPlan exprPlan = gen.getOutputPlans().get(0);
Operator logOp = exprPlan.getSources().get(0);
- Assert.assertTrue( logOp instanceof ConstantExpression);
+ assertTrue(logOp instanceof ConstantExpression);
ConstantExpression loConst = (ConstantExpression)logOp;
- Assert.assertTrue(loConst.getType() == DataType.MAP);
- Assert.assertTrue(loConst.getValue() instanceof Map);
- Assert.assertTrue(loConst.getValue().equals(new HashMap<String,Object>()));
+ assertEquals(DataType.MAP, loConst.getType());
+ assertTrue(loConst.getValue() instanceof Map);
+ assertEquals(new HashMap<String,Object>(), loConst.getValue());
String s = foreach.getSchema().toString(false);
- Assert.assertTrue( s.equals(":map"));
+ assertTrue( s.equals(":map"));
}
@Test
@@ -1930,15 +1848,14 @@
LOGenerate gen = (LOGenerate)foreach.getInnerPlan().getSinks().get(0);
LogicalExpressionPlan exprPlan = gen.getOutputPlans().get(0);
Operator logOp = exprPlan.getSources().get(0);
- Assert.assertTrue( logOp instanceof ConstantExpression);
+ assertTrue(logOp instanceof ConstantExpression);
ConstantExpression loConst = (ConstantExpression)logOp;
- Assert.assertTrue(loConst.getType() == DataType.BAG);
- Assert.assertTrue(loConst.getValue() instanceof DataBag);
- Assert.assertTrue(loConst.getValue().equals(BagFactory.getInstance().newDefaultBag()));
+ assertEquals(DataType.BAG, loConst.getType());
+ assertTrue(loConst.getValue() instanceof DataBag);
+ assertEquals(BagFactory.getInstance().newDefaultBag(), loConst.getValue());
- String s = foreach.getSchema().toString(false);
- Assert.assertTrue( s.equals(":bag{}") );
+ assertEquals(":bag{}", foreach.getSchema().toString(false));
}
@Test
@@ -1949,8 +1866,7 @@
Operator store = lp.getSinks().get(0);
LOForEach foreach = (LOForEach) lp.getPredecessors(store).get(0);
- String s = foreach.getSchema().toString(false);
- Assert.assertTrue( s.equals(":tuple(:tuple())") );
+ assertEquals(":tuple(:tuple())", foreach.getSchema().toString(false));
}
@Test
@@ -1961,8 +1877,7 @@
Operator store = lp.getSinks().get(0);
LOForEach foreach = (LOForEach) lp.getPredecessors(store).get(0);
- String s = foreach.getSchema().toString(false);
- Assert.assertTrue( s.equals(":tuple(:map)") );
+ assertEquals(":tuple(:map)", foreach.getSchema().toString(false));
}
@Test
@@ -1973,8 +1888,7 @@
Operator op = lp.getSinks().get(0);
LOForEach foreach = (LOForEach)lp.getPredecessors(op).get(0);
- String s = foreach.getSchema().toString(false);
- Assert.assertTrue( s.equals(":tuple(:bag{})") );
+ assertEquals(":tuple(:bag{})", foreach.getSchema().toString(false));
}
@Test
@@ -1985,8 +1899,7 @@
Operator op = lp.getSinks().get(0);
LOForEach foreach = (LOForEach)lp.getPredecessors(op).get(0);
- String s = foreach.getSchema().toString(false);
- Assert.assertTrue( s.equals(":bag{:tuple()}") );
+ assertEquals(":bag{:tuple()}", foreach.getSchema().toString(false));
}
@Test
@@ -2015,42 +1928,36 @@
buildPlan( query );
}
- @Test
+ @Test(expected = FrontendException.class)
public void testCogroupByStarFailure1() throws Exception {
- boolean exceptionThrown = false;
try {
String query = " a = load '1.txt' as (a0:int, a1:int);" +
" b = load '2.txt'; " +
"c = cogroup a by *, b by *;" +
"store c into 'output';";
buildPlan(query);
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Cogroup/Group by '*' or 'x..' (range of columns to the end) is only" +
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("Cogroup/Group by '*' or 'x..' (range of columns to the end) is only" +
" allowed if the input has a schema"));
- exceptionThrown = true;
+ throw e;
}
- Assert.assertEquals("An exception was expected but did " +
- "not occur", true, exceptionThrown);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testCogroupByStarFailure2() throws Exception {
- boolean exceptionThrown = false;
try {
String query = " a = load '1.txt' ;" +
" b = load '2.txt' as (b0:int, b1:int); " +
"c = cogroup a by *, b by *;" +
"store c into 'output';";
buildPlan( query );
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("Cogroup/Group by '*' or 'x..' (range of columns to the end) is only allowed if the input has a schema"));
- exceptionThrown = true;
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("Cogroup/Group by '*' or 'x..' (range of columns to the end) is only allowed if the input has a schema"));
+ throw e;
}
- Assert.assertEquals("An exception was expected but did " +
- "not occur", true, exceptionThrown);
}
- @Test
+ @Test(expected = FrontendException.class)
public void testMissingSemicolon() throws Exception {
try {
String query = "A = load '1.txt' \n" +
@@ -2058,32 +1965,27 @@
"C = union A, B;\n" +
"store C into 'output';";
buildPlan( query );
- } catch (AssertionFailedError e) {
- Assert.assertTrue(e.getMessage().contains("mismatched input 'B' expecting SEMI_COLON"));
- return;
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("mismatched input 'B' expecting SEMI_COLON"));
+ throw e;
}
- Assert.fail("An exception was expected but did not occur");
}
- @Test
+ @Test(expected = FrontendException.class)
public void testCogroupByIncompatibleSchemaFailure() throws Exception {
- boolean exceptionThrown = false;
try {
String query = " a = load '1.txt' as (a0:int, a1:int);" +
" b = load '2.txt' as (a0:int, a1:chararray); " +
- "c = cogroup a by (a0,a1), b by (a0,a1);" +
- "store c into 'output';";
+ "c = cogroup a by (a0,a1), b by (a0,a1);";
buildPlan( query );
- } catch (AssertionFailedError e) {
+ } catch (Exception e) {
String msg =
"group column no. 2 in relation no. 2 of group statement" +
" has datatype chararray which is incompatible with type of" +
" corresponding column in earlier relation(s) in the statement";
- Assert.assertTrue(e.getMessage().contains(msg));
- exceptionThrown = true;
+ assertTrue(e.getCause().getMessage().contains(msg));
+ throw e;
}
- Assert.assertEquals("An exception was expected but did " +
- "not occur", true, exceptionThrown);
}
@Test
@@ -2095,7 +1997,7 @@
LOLoad load = (LOLoad)plan.getPredecessors(op).get(0);
// the signature is now a unique string of the format "{alias}_{scope id}-{id}" example: "a_12-0"
String udfContextSignature = ((PigStorageWithSchema)(load).getLoadFunc()).getUDFContextSignature();
- Assert.assertTrue(udfContextSignature, udfContextSignature.matches("a_[0-9]*-[0-9]*"));
+ assertTrue(udfContextSignature, udfContextSignature.matches("a_[0-9]*-[0-9]*"));
query = " b = load '1.txt' using org.apache.pig.test.PigStorageWithSchema();" +
"store b into 'output';";
@@ -2103,20 +2005,15 @@
op = plan.getSinks().get(0);
load = (LOLoad)plan.getPredecessors(op).get(0);
udfContextSignature = ((PigStorageWithSchema)(load).getLoadFunc()).getUDFContextSignature();
- Assert.assertTrue(udfContextSignature, udfContextSignature.matches("b_[0-9]*-[0-9]*"));
+ assertTrue(udfContextSignature, udfContextSignature.matches("b_[0-9]*-[0-9]*"));
}
@Test
public void testLastAlias() throws Exception {
- try {
- String query = "B = load '2.txt' as (b0:int, b1:int);\n" +
- "C = ORDER B by b0;" ;
- buildPlan( query );
-
- } catch (AssertionFailedError e) {
- // Ignore the exception
- }
- Assert.assertEquals("C", pigServer.getPigContext().getLastAlias());
+ String query = "B = load '2.txt' as (b0:int, b1:int);\n" +
+ "C = ORDER B by b0;";
+ buildPlan(query);
+ assertEquals("C", pigServer.getPigContext().getLastAlias());
}
@Test
@@ -2217,19 +2114,6 @@
// Helper Functions
public LogicalPlan buildPlan(String query) throws Exception {
- try {
- return Util.buildLp(pigServer, query);
- } catch(Throwable t) {
- PigException pigEx = LogUtils.getPigException(t);
- Throwable cause = null;
- if(pigEx != null){
- cause = pigEx;
- }else{
- cause = t.getCause();
- }
- String msg = cause != null ? cause.toString() : t.toString();
- throw new AssertionFailedError( msg );
- }
+ return Util.buildLp(pigServer, query);
}
-
-}
+}
\ No newline at end of file