in src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POCast.java [1090:1214]
public Result getNextString() throws ExecException {
PhysicalOperator in = inputs.get(0);
Byte resultType = in.getResultType();
switch (resultType) {
case DataType.BAG:
case DataType.TUPLE:
case DataType.MAP:
return error();
case DataType.BYTEARRAY: {
DataByteArray dba;
Result res = in.getNextDataByteArray();
if (res.returnStatus == POStatus.STATUS_OK && res.result != null) {
try {
dba = (DataByteArray) res.result;
} catch (ClassCastException e) {
// res.result is not of type ByteArray. But it can be one of the types from which cast is still possible.
if (realType == null)
// Find the type in first call and cache it.
realType = DataType.findType(res.result);
try {
res.result = DataType.toString(res.result, realType);
} catch (ClassCastException cce) {
// Type has changed. Need to find type again and try casting it again.
realType = DataType.findType(res.result);
res.result = DataType.toString(res.result, realType);
}
return res;
}
try {
if (null != caster) {
res.result = caster.bytesToCharArray(dba.get());
} else {
int errCode = 1075;
String msg = unknownByteArrayErrorMessage + "string for " + this.getOriginalLocations();
throw new ExecException(msg, errCode, PigException.INPUT);
}
} catch (ExecException ee) {
throw ee;
} catch (IOException e) {
log
.error("Error while casting from ByteArray to CharArray");
}
}
return res;
}
case DataType.BOOLEAN: {
Result res = in.getNextBoolean();
if (res.returnStatus == POStatus.STATUS_OK && res.result != null) {
if ((Boolean) res.result) {
//res.result = "1";
res.result = Boolean.TRUE.toString();
} else {
//res.result = "0";
res.result = Boolean.FALSE.toString();
}
}
return res;
}
case DataType.INTEGER: {
Result res = in.getNextInteger();
if (res.returnStatus == POStatus.STATUS_OK && res.result != null) {
res.result = ((Integer) res.result).toString();
}
return res;
}
case DataType.DOUBLE: {
Result res = in.getNextDouble();
if (res.returnStatus == POStatus.STATUS_OK && res.result != null) {
// res.result = DataType.toInteger(res.result);
res.result = ((Double) res.result).toString();
}
return res;
}
case DataType.LONG: {
Result res = in.getNextLong();
if (res.returnStatus == POStatus.STATUS_OK && res.result != null) {
res.result = ((Long) res.result).toString();
}
return res;
}
case DataType.FLOAT: {
Result res = in.getNextFloat();
if (res.returnStatus == POStatus.STATUS_OK && res.result != null) {
res.result = ((Float) res.result).toString();
}
return res;
}
case DataType.DATETIME: {
Result res = in.getNextDateTime();
if (res.returnStatus == POStatus.STATUS_OK && res.result != null) {
res.result = ((DateTime) res.result).toString();
}
return res;
}
case DataType.CHARARRAY:
return in.getNextString();
case DataType.BIGINTEGER: {
BigInteger bi = null;
Result res = in.getNextBigInteger();
if (res.returnStatus == POStatus.STATUS_OK && res.result != null) {
res.result = ((BigInteger)res.result).toString();
}
return res;
}
case DataType.BIGDECIMAL: {
Result res = in.getNextBigDecimal();
if (res.returnStatus == POStatus.STATUS_OK && res.result != null) {
res.result = ((BigDecimal)res.result).toString();
}
return res;
}
}
return error();
}