in odps-sdk-impl/odps-mapred-bridge/src/main/java/com/aliyun/odps/mapred/bridge/WritableRecord.java [107:206]
public void set(int idx, Object value) {
if (value == null || value.equals(NullWritable.get())) {
values[idx] = null;
return;
}
if (value instanceof Writable) {
values[idx] = (Writable) value;
return;
}
switch (columns[idx].getType()) {
case STRING:
if (value instanceof String) {
setString(idx, (String) value);
} else {
setString(idx, (byte[]) value);
}
break;
case BIGINT:
if (value instanceof Long) {
setBigint(idx, (Long) value);
} else if (value instanceof Integer) {
setBigint(idx, new Long((Integer) value));
} else {
throw new RuntimeException("Unsupported value type " + value.getClass().getName() +
" for column type " + columns[idx].getType());
}
break;
case BOOLEAN:
setBoolean(idx, (Boolean) value);
break;
case DOUBLE:
if (value instanceof Double) {
setDouble(idx, (Double) value);
} else if (value instanceof Float) {
setDouble(idx, new Double((Float) value));
} else {
throw new RuntimeException("Unsupported value type " + value.getClass().getName() +
" for column type " + columns[idx].getType());
}
break;
case DATETIME:
setDatetime(idx, (Date) value);
break;
case DECIMAL:
if (value instanceof Long) {
setDecimal(idx, new BigDecimal( (Long) value));
} else if (value instanceof Integer) {
setDecimal(idx, new BigDecimal( (Integer) value));
} else if (value instanceof Double) {
setDecimal(idx, new BigDecimal( (Double) value));
} else if (value instanceof Float) {
setDecimal(idx, new BigDecimal( (Float) value));
} else if (value instanceof BigDecimal) {
setDecimal(idx, (BigDecimal) value);
} else {
setDecimal(idx, new BigDecimal( (String) value));
}
break;
case TINYINT:
setTinyint(idx, (Byte)value);
break;
case SMALLINT:
setSmallint(idx, (Short)value);
break;
case INT:
setInt(idx, (Integer)value);
break;
case FLOAT:
setFloat(idx, (Float)value);
break;
case CHAR:
setChar(idx, (Char) value);
break;
case VARCHAR:
setVarchar(idx, (Varchar) value);
break;
case DATE:
setDate(idx, (java.sql.Date) value);
break;
case TIMESTAMP:
setTimestamp(idx, (java.sql.Timestamp) value);
break;
case BINARY:
setBinary(idx, (Binary) value);
break;
case INTERVAL_DAY_TIME:
setIntervalDayTime(idx, (IntervalDayTime) value);
break;
case INTERVAL_YEAR_MONTH:
setIntervalYearMonth(idx, (IntervalYearMonth) value);
break;
case STRUCT:
case MAP:
case ARRAY:
values[idx] = (Writable)value;
default:
throw new RuntimeException("Unsupported type " + columns[idx].getType());
}
}