switch (itemType) { case BINARY: result = new DataByteArray((byte[]) o); break; case STRUCT: result = new DateTime(d.getYear(), d.getMonth(), d.getDay(), 0, 0, DateTimeZone.UTC); break; case TIMESTAMP: result = new DateTime(((Timestamp)o).toEpochMilli(), DateTimeZone.UTC); break; default:
switch (type) { case BINARY: return ((DataByteArray) pigObj).get(); List<Object> all = ((Tuple) pigObj).getAll(); ArrayList<Object> converted = new ArrayList<Object>(all.size()); for (int i = 0; i < all.size(); i++) { bagContents.add(getJavaObj(needTuple ? bagItr.next() : bagItr.next().get(0), tupFS)); BigDecimal bd = (BigDecimal)pigObj; DecimalTypeInfo dti = (DecimalTypeInfo)hcatFS.getTypeInfo(); if(bd.precision() > dti.precision() || bd.scale() > dti.scale()) { handleOutOfRangeValue(pigObj, hcatFS); return null; case TIMESTAMP: DateTime dt = (DateTime)pigObj; return Timestamp.ofEpochMilli(dt.getMillis());//toEpochMilli() returns UTC time regardless of TZ case DATE: if(dateTime.getMillisOfDay() != 0) { handleOutOfRangeValue(pigObj, hcatFS, "Time component must be 0 (midnight) in local timezone; Local TZ val='" + pigObj + "'"); return null; return Date.of(dateTime.getYear(), dateTime.getMonthOfYear(), dateTime.getDayOfMonth()); default: throw new BackendException("Unexpected HCat type " + type + " for value " + pigObj
} else if (obj instanceof DataByteArray) { if (null != caster) { result = caster.bytesToBag(((DataByteArray)obj).get(), fs); } else { int errCode = 1075; String msg = unknownByteArrayErrorMessage + "bag for " + this.getOriginalLocations(); throw new ExecException(msg, errCode, PigException.INPUT); result = caster.bytesToTuple(((DataByteArray)obj).get(), fs); } else { int errCode = 1075; } else if (obj instanceof DataByteArray) { if (null != caster) { result = caster.bytesToMap(((DataByteArray)obj).get(), fs); } else { int errCode = 1075; switch (DataType.findType(obj)) { case DataType.BYTEARRAY: if (null != caster) { result = caster.bytesToBoolean(((DataByteArray) obj).get()); } else { int errCode = 1075; switch (DataType.findType(obj)) { case DataType.BYTEARRAY: if (null != caster) { result = caster.bytesToInteger(((DataByteArray) obj).get());
return new DataByteArray(data.getBytes()); case DataType.DOUBLE: return Double.valueOf(data); return Long.valueOf(data); case DataType.BIGINTEGER: return new BigInteger(data); case DataType.BIGDECIMAL: return new BigDecimal(data); case DataType.DATETIME: return new DateTime(data); case DataType.CHARARRAY: return data;
return extractString(bytes, startIndex, endIndex, true); } else if (fs.type == DataType.BYTEARRAY) { return new DataByteArray(bytes, startIndex, endIndex+1); return ToDate.extractDateTime(val); } else if (fs.type == DataType.BIGINTEGER) { return new BigInteger(val); } else if (fs.type == DataType.BIGDECIMAL) { return new BigDecimal(val); } else { throw new ExecException("Can't deserialize type: " + DataType.findTypeName(fs.type));
return BigInteger.valueOf(((Integer)o).longValue()); return BigInteger.valueOf(((Long)o).longValue()); return BigInteger.valueOf(((Float)o).longValue()); return new BigInteger(((DataByteArray)o).toString()); return ((BigDecimal)o).toBigInteger(); return BigInteger.valueOf(((DateTime)o).getMillis()); default: int errCode = 1071; String msg = "Cannot convert a " + findTypeName(o) + " to a BigInteger."; throw new ExecException(msg, errCode, PigException.INPUT); int errCode = 1074; String msg = "Problem with formatting. Could not convert " + o + " to BigInteger."; throw new ExecException(msg, errCode, PigException.INPUT, nfe); } catch (Exception e) { int errCode = 2054; String msg = "Internal error. Could not convert " + o + " to BigInteger."; throw new ExecException(msg, errCode, PigException.BUG);
return BigDecimal.valueOf(((Integer)o).longValue()); return BigDecimal.valueOf(((Long)o).longValue()); return BigDecimal.valueOf(((Float)o).doubleValue()); return new BigDecimal(((DataByteArray)o).toString()); return BigDecimal.valueOf(((DateTime)o).getMillis()); default: int errCode = 1071; String msg = "Cannot convert a " + findTypeName(o) + " to a BigDecimal."; throw new ExecException(msg, errCode, PigException.INPUT); int errCode = 1074; String msg = "Problem with formatting. Could not convert " + o + " to BigDecimal."; throw new ExecException(msg, errCode, PigException.INPUT, nfe); } catch (Exception e) { int errCode = 2054; String msg = "Internal error. Could not convert " + o + " to BigDecimal."; throw new ExecException(msg, errCode, PigException.BUG);
realType = DataType.findType(res.result); res.result = DataType.toBigInteger(res.result, realType); } catch (ClassCastException cce) { realType = DataType.findType(res.result); res.result = DataType.toBigInteger(res.result, realType); res.result = caster.bytesToBigInteger(dba.get()); } else { int errCode = 1075; String msg = unknownByteArrayErrorMessage + "BigInteger for " + this.getOriginalLocations(); throw new ExecException(msg, errCode, PigException.INPUT); Result res = in.getNextInteger(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = BigInteger.valueOf(((Integer) res.result).longValue()); Result res = in.getNextDouble(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = BigInteger.valueOf(((Double) res.result).longValue()); Result res = in.getNextLong(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = BigInteger.valueOf(((Long) res.result).longValue());
realType = DataType.findType(res.result); try { res.result = DataType.toBigDecimal(res.result, realType); } catch (ClassCastException cce) { realType = DataType.findType(res.result); res.result = DataType.toBigDecimal(res.result, realType); res.result = caster.bytesToBigDecimal(dba.get()); } else { int errCode = 1075; String msg = unknownByteArrayErrorMessage + "BigDecimal for " + this.getOriginalLocations(); throw new ExecException(msg, errCode, PigException.INPUT); Result res = in.getNextInteger(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = BigDecimal.valueOf(((Integer) res.result).longValue()); Result res = in.getNextDouble(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = BigDecimal.valueOf(((Double) res.result).doubleValue()); Result res = in.getNextLong(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = BigDecimal.valueOf(((Long) res.result).longValue());
Object GetLargerValue(Object v) { byte type = DataType.findType(v); return (String) v + "0"; case DataType.BYTEARRAY: String str = ((DataByteArray) v).toString(); str = str + "0"; return new DataByteArray(str); case DataType.INTEGER: return Integer.valueOf((Integer) v + 1); return Double.valueOf((Double) v + 1); case DataType.BIGINTEGER: return ((BigInteger)v).add(BigInteger.ONE); case DataType.BIGDECIMAL: return ((BigDecimal)v).add(BigDecimal.ONE); case DataType.DATETIME: DateTime dt = (DateTime) v; if (dt.getMillisOfSecond() != 0) { return dt.plusMillis(1); } else if (dt.getSecondOfMinute() != 0) { return dt.plusSeconds(1); } else if (dt.getMinuteOfHour() != 0) {
writeField(out, ((BigInteger)field).toString().getBytes(Charset.defaultCharset()), DataType.BIGINTEGER, includeTypeInformation); break; writeField(out, ((BigDecimal)field).toString().getBytes(Charset.defaultCharset()), DataType.BIGDECIMAL, includeTypeInformation); break; writeField(out, ((DateTime)field).toString().getBytes(Charset.defaultCharset()), DataType.DATETIME, includeTypeInformation); break; writeField(out, ((DataByteArray)field).get(), DataType.BYTEARRAY, includeTypeInformation); break; putField(out, t.get(i), delims, includeTypeInformation); } catch (ExecException ee) { throw ee; int errCode = 2108; String msg = "Could not determine data type of field: " + field; throw new ExecException(msg, errCode, PigException.BUG);
realType = DataType.findType(res.result); res.result = DataType.toDateTime(res.result, realType); } catch (ClassCastException cce) { realType = DataType.findType(res.result); res.result = DataType.toDateTime(res.result, realType); res.result = caster.bytesToDateTime(dba.get()); } else { int errCode = 1075; String msg = unknownByteArrayErrorMessage + "datetime for " + this.getOriginalLocations(); throw new ExecException(msg, errCode, PigException.INPUT); Result res = in.getNextInteger(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = new DateTime(((Integer) res.result).longValue()); Result res = in.getNextDouble(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = new DateTime(((Double) res.result).longValue()); Result res = in.getNextLong(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = new DateTime(((Long) res.result).longValue());
return null; case BYTEARRAY: return new DateTime(((DataByteArray) o).toString()); case CHARARRAY: return new DateTime(((Integer) o).longValue()); case LONG: return new DateTime(((Long) o).longValue()); case FLOAT: return new DateTime(((Float) o).longValue()); return new DateTime(((Double) o).longValue()); case BIGINTEGER: return new DateTime(((BigInteger) o).longValue()); case BIGDECIMAL: return new DateTime(((BigDecimal) o).longValue()); case DATETIME: return (DateTime) o; default: int errCode = 1071; String msg = "Cannot convert a " + findTypeName(o) + " to a DateTime"; throw new ExecException(msg, errCode, PigException.INPUT);
realType = DataType.findType(res.result); try { res.result = DataType.toString(res.result, realType); } catch (ClassCastException cce) { realType = DataType.findType(res.result); res.result = DataType.toString(res.result, realType); res.result = caster.bytesToCharArray(dba.get()); } else { int errCode = 1075; String msg = unknownByteArrayErrorMessage + "string for " + this.getOriginalLocations(); throw new ExecException(msg, errCode, PigException.INPUT); Result res = in.getNextDateTime(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = ((DateTime) res.result).toString(); Result res = in.getNextBigInteger(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = ((BigInteger)res.result).toString(); Result res = in.getNextBigDecimal(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = ((BigDecimal)res.result).toString();
return ((DateTime)o).toString(); return ((DataByteArray)o).toString(); return ((BigInteger)o).toString(); return ((BigDecimal)o).toString(); default: int errCode = 1071; String msg = "Cannot convert a " + findTypeName(o) + " to a String"; throw new ExecException(msg, errCode, PigException.INPUT); int errCode = 2054; String msg = "Internal error. Could not convert " + o + " to String."; throw new ExecException(msg, errCode, PigException.BUG);
Object val) throws IOException { out.writeLong(((DateTime)val).getMillis()); out.writeShort(((DateTime)val).getZone().getOffset((DateTime)val) / 60000); break; out.writeByte(DataType.BYTEARRAY); DataByteArray bytes = (DataByteArray)val; out.writeInt(bytes.size()); out.write(bytes.mData); break; byte[] bytes = ((BigInteger)val).toByteArray(); out.writeInt(bytes.length); out.write(bytes); byte[] bt = ((BigDecimal)val).toString().getBytes(DataReaderWriter.UTF8); out.writeInt(bt.length); out.write(bt);
realType = DataType.findType(res.result); try { res.result = DataType.toLong(res.result, realType); } catch (ClassCastException cce) { realType = DataType.findType(res.result); res.result = DataType.toLong(res.result, realType); res.result = caster.bytesToLong(dba.get()); } else { int errCode = 1075; String msg = unknownByteArrayErrorMessage + "long for " + this.getOriginalLocations(); throw new ExecException(msg, errCode, PigException.INPUT); Result res = in.getNextDateTime(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Long.valueOf(((DateTime) res.result).getMillis()); Result res = in.getNextBigInteger(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Long.valueOf(((BigInteger)res.result).longValue()); Result res = in.getNextBigDecimal(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Long.valueOf(((BigDecimal)res.result).longValue());
return Long.valueOf(((DataByteArray)o).toString()); return Long.valueOf(((BigInteger)o).longValue()); return Long.valueOf(((BigDecimal)o).longValue()); return Long.valueOf(((DateTime)o).getMillis()); case MAP: case INTERNALMAP: default: int errCode = 1071; String msg = "Cannot convert a " + findTypeName(o) + " to a Long"; throw new ExecException(msg, errCode, PigException.INPUT); int errCode = 1074; String msg = "Problem with formatting. Could not convert " + o + " to Long."; throw new ExecException(msg, errCode, PigException.INPUT, nfe); } catch (Exception e) { int errCode = 2054; String msg = "Internal error. Could not convert " + o + " to Long."; throw new ExecException(msg, errCode, PigException.BUG);
realType = DataType.findType(res.result); try { res.result = DataType.toInteger(res.result, realType); } catch (ClassCastException cce) { realType = DataType.findType(res.result); res.result = DataType.toInteger(res.result, realType); res.result = caster.bytesToInteger(dba.get()); } else { int errCode = 1075; String msg = unknownByteArrayErrorMessage + "int for " + this.getOriginalLocations(); throw new ExecException(msg, errCode, PigException.INPUT); Result res = in.getNextDateTime(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Integer.valueOf(Long.valueOf(((DateTime) res.result).getMillis()).intValue()); Result res = in.getNextBigInteger(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Integer.valueOf(((BigInteger)res.result).intValue()); Result res = in.getNextBigDecimal(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Integer.valueOf(((BigDecimal)res.result).intValue());