in datahub/batch/binary_record.py [0:0]
def __get_field(self, pos):
if self.__is_field_none(pos):
return None
field_byte = self.__read_field(pos)
if self._schema is None: # BLOB
return self.__get_byte_field(field_byte)
else: # TUPLE
field_type = self._schema.get_field(pos).type
value = None
# length = 1
if field_type is FieldType.BOOLEAN:
value = byte2bool(field_byte[:1])
elif field_type is FieldType.TINYINT:
value = byte2int(field_byte[:1], size=1)
# length = 2
elif field_type is FieldType.SMALLINT:
value = byte2int(field_byte[:2], size=2)
# length = 4
elif field_type is FieldType.INTEGER:
value = byte2int(field_byte[:4], size=4)
elif field_type is FieldType.FLOAT:
value = byte2float(field_byte[:4])
# length = 8
elif field_type is FieldType.BIGINT or field_type is FieldType.TIMESTAMP:
value = byte2int(field_byte, size=8)
elif field_type is FieldType.DOUBLE:
value = byte2double(field_byte)
# length = ?
elif field_type is FieldType.STRING or field_type is FieldType.DECIMAL:
value = self.__get_str_field(field_byte)
if field_type is FieldType.DECIMAL:
value = Decimal(value)
return value