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;
+ }
}