Esempio n. 1
0
    def _get_server_information(self):
        i = 0
        packet = MysqlPacket(self)
        data = packet.get_all_data()

        if DEBUG: dump_packet(data)
        #packet_len = byte2int(data[i:i+1])
        #i += 4
        self.protocol_version = byte2int(data[i:i+1])

        i += 1
        server_end = data.find(int2byte(0), i)
        # TODO: is this the correct charset? should it be default_charset?
        self.server_version = data[i:server_end].decode(self.charset)

        i = server_end + 1
        self.server_thread_id = struct.unpack('<h', data[i:i+2])

        i += 4
        self.salt = data[i:i+8]

        i += 9
        if len(data) >= i + 1:
            i += 1

        self.server_capabilities = struct.unpack('<h', data[i:i+2])[0]

        i += 1
        self.server_language = byte2int(data[i:i+1])
        self.server_charset = charset_by_id(self.server_language).name

        i += 16
        if len(data) >= i+12-1:
            rest_salt = data[i:i+12]
            self.salt += rest_salt
Esempio n. 2
0
def convert_characters(data, charset=None, field=None, use_unicode=None):
    field_charset = charset_by_id(field.charsetnr).name
    if field.flags & FLAG.SET:
        return convert_set(data.decode(field_charset))
    if field.flags & FLAG.BINARY:
        if PYTHON3 and field_charset != 'binary':
            return data.decode(field_charset)
        else:
            return data

    if use_unicode or PYTHON3:
        data = data.decode(field_charset)
    elif charset != field_charset:
        data = data.decode(field_charset)
        data = data.encode(charset)
    return data
Esempio n. 3
0
 def __parse_field_descriptor(self):
     """Parse the 'Field Descriptor' (Metadata) packet.
     This is compatible with MySQL 4.1+ (not compatible with MySQL 4.0).
     """
     self.catalog = self._read_length_coded_string()
     self.db = self._read_length_coded_string()
     self.table_name = self._read_length_coded_string()
     self.org_table = self._read_length_coded_string()
     self.name = self._read_length_coded_string().decode(self.connection.encoding)
     self.org_name = self._read_length_coded_string()
     self._skip(1)  # non-null filler
     self.charsetnr = unpack_uint16(self._read(2))
     self.charset = charset_by_id(self.charsetnr).name
     self.encoding = encoding_by_charset(self.charset)
     self.length = unpack_uint32(self._read(4))
     self.type_code = ord(self._read(1))
     self.flags = unpack_uint16(self._read(2))
     self.is_set = self.flags & FLAG.SET
     self.is_binary = self.flags & FLAG.BINARY
     self.scale = ord(self._read(1))  # "decimals"
     self._skip(2)  # filler (always 0x00)
Esempio n. 4
0
 def __parse_field_descriptor(self):
     """Parse the 'Field Descriptor' (Metadata) packet.
 
     This is compatible with MySQL 4.1+ (not compatible with MySQL 4.0).
     """
     self.catalog = self._read_length_coded_string()
     self.db = self._read_length_coded_string()
     self.table_name = self._read_length_coded_string()
     self.org_table = self._read_length_coded_string()
     self.name = self._read_length_coded_string().decode(
         self.connection.charset)
     self.org_name = self._read_length_coded_string()
     self._skip(1)  # non-null filler
     self.charsetnr = unpack_uint16(self._read(2))
     self.charset = charset_by_id(self.charsetnr).name
     self.length = unpack_uint32(self._read(4))
     self.type_code = ord(self._read(1))
     self.flags = unpack_uint16(self._read(2))
     self.is_set = self.flags & FLAG.SET
     self.is_binary = self.flags & FLAG.BINARY
     self.scale = ord(self._read(1))  # "decimals"
     self._skip(2)  # filler (always 0x00)