def __get_field()

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