Author: daijy Date: Wed Oct 28 18:58:27 2009 New Revision: 830724 URL: http://svn.apache.org/viewvc?rev=830724&view=rev Log: PIG-790: Error message should indicate in which line number in the Pig script the error occured (debugging BinCond)
Modified: hadoop/pig/trunk/CHANGES.txt hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/validators/TypeCheckingVisitor.java Modified: hadoop/pig/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/pig/trunk/CHANGES.txt?rev=830724&r1=830723&r2=830724&view=diff ============================================================================== --- hadoop/pig/trunk/CHANGES.txt (original) +++ hadoop/pig/trunk/CHANGES.txt Wed Oct 28 18:58:27 2009 @@ -135,6 +135,8 @@ PIG-927: null should be handled consistently in Join (daijy) +PIG-790: Error message should indicate in which line number in the Pig script the error occured (debugging BinCond) (daijy) + Release 0.5.0 - Unreleased INCOMPATIBLE CHANGES Modified: hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/validators/TypeCheckingVisitor.java URL: http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/validators/TypeCheckingVisitor.java?rev=830724&r1=830723&r2=830724&view=diff ============================================================================== --- hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/validators/TypeCheckingVisitor.java (original) +++ hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/validators/TypeCheckingVisitor.java Wed Oct 28 18:58:27 2009 @@ -79,6 +79,8 @@ private boolean strictMode = false ; + private String currentAlias = null; + public static MultiMap<Byte, Byte> castLookup = new MultiMap<Byte, Byte>(); static{ //Ordering here decides the score for the best fit function. @@ -367,9 +369,7 @@ } else { int errCode = 1039; - String msg = "Incompatible types in Multiplication Operator" - + " left hand side:" + DataType.findTypeName(lhsType) - + " right hand side:" + DataType.findTypeName(rhsType) ; + String msg = generateIncompatibleTypesMessage(binOp, "Multiplication", lhsType, rhsType); msgCollector.collect(msg, MessageType.Error); throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } @@ -422,9 +422,7 @@ } else { int errCode = 1039; - String msg = "Incompatible types in Division Operator" - + " left hand side:" + DataType.findTypeName(lhsType) - + " right hand side:" + DataType.findTypeName(rhsType) ; + String msg = generateIncompatibleTypesMessage(binOp, "Division", lhsType, rhsType); msgCollector.collect(msg, MessageType.Error); throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } @@ -477,9 +475,7 @@ } else { int errCode = 1039; - String msg = "Incompatible types in Add Operator" - + " left hand side:" + DataType.findTypeName(lhsType) - + " right hand side:" + DataType.findTypeName(rhsType) ; + String msg = generateIncompatibleTypesMessage(binOp, "Add", lhsType, rhsType); msgCollector.collect(msg, MessageType.Error); throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } @@ -531,9 +527,7 @@ } else { int errCode = 1039; - String msg = "Incompatible types in Subtract Operator" - + " left hand side:" + DataType.findTypeName(lhsType) - + " right hand side:" + DataType.findTypeName(rhsType) ; + String msg = generateIncompatibleTypesMessage(binOp, "Subtract", lhsType, rhsType); msgCollector.collect(msg, MessageType.Error); throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } @@ -592,9 +586,7 @@ } else { int errCode = 1039; - String msg = "Incompatible types in GreaterThan operator" - + " left hand side:" + DataType.findTypeName(lhsType) - + " right hand side:" + DataType.findTypeName(rhsType) ; + String msg = generateIncompatibleTypesMessage(binOp, "GreaterThan", lhsType, rhsType); msgCollector.collect(msg, MessageType.Error) ; throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } @@ -644,9 +636,7 @@ } else { int errCode = 1039; - String msg = "Incompatible types in GreaterThanEqualTo operator" - + " left hand side:" + DataType.findTypeName(lhsType) - + " right hand side:" + DataType.findTypeName(rhsType) ; + String msg = generateIncompatibleTypesMessage(binOp, "GreaterThanEqualTo", lhsType, rhsType); msgCollector.collect(msg, MessageType.Error) ; throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } @@ -695,9 +685,7 @@ } else { int errCode = 1039; - String msg = "Incompatible types in LesserThan operator" - + " left hand side:" + DataType.findTypeName(lhsType) - + " right hand side:" + DataType.findTypeName(rhsType) ; + String msg = generateIncompatibleTypesMessage(binOp, "LesserThan", lhsType, rhsType); msgCollector.collect(msg, MessageType.Error) ; throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } @@ -747,9 +735,7 @@ } else { int errCode = 1039; - String msg = "Incompatible types in LesserThanEqualTo operator" - + " left hand side:" + DataType.findTypeName(lhsType) - + " right hand side:" + DataType.findTypeName(rhsType) ; + String msg = generateIncompatibleTypesMessage(binOp, "LesserThanEqualTo", lhsType, rhsType); msgCollector.collect(msg, MessageType.Error) ; throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } @@ -818,9 +804,7 @@ insertRightCastForBinaryOp(binOp, lhsType); } else { int errCode = 1039; - String msg = "Incompatible types in EqualTo Operator" - + " left hand side:" + DataType.findTypeName(lhsType) + " right hand side:" - + DataType.findTypeName(rhsType); + String msg = generateIncompatibleTypesMessage(binOp, "EqualTo", lhsType, rhsType); msgCollector.collect(msg, MessageType.Error); throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } @@ -888,9 +872,7 @@ insertRightCastForBinaryOp(binOp, lhsType); } else { int errCode = 1039; - String msg = "Incompatible types in NotEqual Operator" - + " left hand side:" + DataType.findTypeName(lhsType) - + " right hand side:" + DataType.findTypeName(rhsType) ; + String msg = generateIncompatibleTypesMessage(binOp, "NotEqual", lhsType, rhsType); msgCollector.collect(msg, MessageType.Error); throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } @@ -931,9 +913,7 @@ } else { int errCode = 1039; - String msg = "Incompatible types in Mod Operator" - + " left hand side:" + DataType.findTypeName(lhsType) - + " right hand side:" + DataType.findTypeName(rhsType) ; + String msg = generateIncompatibleTypesMessage(binOp, "Mod", lhsType, rhsType); msgCollector.collect(msg, MessageType.Error); throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } @@ -1921,7 +1901,7 @@ throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } - checkInnerPlan(condPlan) ; + checkInnerPlan(op.getAlias(), condPlan) ; byte innerCondType = condPlan.getLeaves().get(0).getType() ; if (innerCondType != DataType.BOOLEAN) { @@ -2028,7 +2008,7 @@ throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } - checkInnerPlan(sortColPlan) ; + checkInnerPlan(s.getAlias(), sortColPlan) ; // TODO: May have to check SortFunc compatibility here in the future } @@ -2065,7 +2045,7 @@ throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } - checkInnerPlan(comparisonPlan) ; + checkInnerPlan(filter.getAlias(), comparisonPlan) ; byte innerCondType = comparisonPlan.getLeaves().get(0).getType() ; if (innerCondType != DataType.BOOLEAN) { @@ -2276,7 +2256,7 @@ throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } - checkInnerPlan(innerPlans.get(j)) ; + checkInnerPlan(join.getAlias(), innerPlans.get(j)) ; } } @@ -2404,7 +2384,7 @@ throw new TypeCheckerException(msg, errCode, PigException.INPUT) ; } - checkInnerPlan(innerPlans.get(j)) ; + checkInnerPlan(cg.getAlias(), innerPlans.get(j)) ; } } @@ -2747,7 +2727,7 @@ } } - checkInnerPlan(plan) ; + checkInnerPlan(f.getAlias(), plan) ; } @@ -2774,9 +2754,10 @@ * @throws VisitorException */ - private void checkInnerPlan(LogicalPlan innerPlan) + private void checkInnerPlan(String alias, LogicalPlan innerPlan) throws VisitorException { // Preparation + currentAlias = alias; int errorCount = 0 ; List<LogicalOperator> rootList = innerPlan.getRoots() ; if (rootList.size() < 1) { @@ -3236,5 +3217,16 @@ } } - + private String generateIncompatibleTypesMessage(LogicalOperator op, String operatorDesc, byte lhsType, byte rhsType) + { + String alias = currentAlias; + if (op.getAlias()!=null) + alias = op.getAlias(); + String msg = "In alias " + alias + ", "; + + msg = msg + "incompatible types in " + operatorDesc + " Operator" + + " left hand side:" + DataType.findTypeName(lhsType) + + " right hand side:" + DataType.findTypeName(rhsType) ; + return msg; + } }