public Result getNextString()

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();
    }