private static OneParamInfo readOneParameter(ByteBuffer in) throws IOException { Object value; int len; byte[] encodedString = null; byte[][] encodedStringArray = null; byte nextTypeByte = in.get(); if (nextTypeByte == ARRAY) { VoltType nextType = null; byte etype = in.get(); try { nextType = VoltType.get(etype); } catch (AssertionError ae) { throw new RuntimeException("ParameterSet doesn't support type " + etype); } if (nextType == null) { value = null; } else if (nextType == VoltType.STRING) { encodedStringArray = (byte[][]) SerializationHelper.readArray(byte[].class, in); String[] sval = new String[encodedStringArray.length]; for (int i = 0; i < encodedStringArray.length; ++i) { if (encodedStringArray[i] == null) { sval[i] = null; } else { sval[i] = new String(encodedStringArray[i], Constants.UTF8ENCODING); } } value = sval; } else { value = SerializationHelper.readArray(nextType.classFromType(), in); } } else { VoltType nextType; try { nextType = VoltType.get(nextTypeByte); } catch (AssertionError ae) { throw new RuntimeException("ParameterSet doesn't support type " + nextTypeByte); } switch (nextType) { case NULL: value = null; break; case TINYINT: value = in.get(); break; case SMALLINT: value = in.getShort(); break; case INTEGER: value = in.getInt(); break; case BIGINT: value = in.getLong(); break; case FLOAT: value = in.getDouble(); break; case STRING: len = in.getInt(); if (len == VoltType.NULL_STRING_LENGTH) { value = VoltType.NULL_STRING_OR_VARBINARY; } else { encodedString = new byte[len]; in.get(encodedString); value = new String(encodedString, Constants.UTF8ENCODING); } break; case VARBINARY: len = in.getInt(); if (len == VoltType.NULL_STRING_LENGTH) { value = VoltType.NULL_STRING_OR_VARBINARY; } else { encodedString = new byte[len]; in.get(encodedString); value = encodedString; } break; case TIMESTAMP: final long micros = in.getLong(); value = new TimestampType(micros); break; case VOLTTABLE: final int tableSize = in.getInt(); byte[] tableBytes = new byte[tableSize]; in.get(tableBytes); value = PrivateVoltTableFactory.createVoltTableFromBuffer(ByteBuffer.wrap(tableBytes), false); break; case DECIMAL: { BigDecimal decimal_val = SerializationHelper.getBigDecimal(in); if (decimal_val == null) { value = VoltType.NULL_DECIMAL; } else { value = decimal_val; } break; } case GEOGRAPHY_POINT: value = GeographyPointValue.unflattenFromBuffer(in); if (value == null) { value = VoltType.NULL_POINT; } break; case GEOGRAPHY: len = in.getInt(); if (len == VoltType.NULL_STRING_LENGTH) { value = VoltType.NULL_GEOGRAPHY; } else { value = GeographyValue.unflattenFromBuffer(in); } break; case BOOLEAN: value = in.get(); break; default: throw new RuntimeException("ParameterSet doesn't support type " + nextType); } } OneParamInfo retval = new OneParamInfo(); retval.value = value; retval.encodedString = encodedString; retval.encodedStringArray = encodedStringArray; return retval; }