o {nh.@sddlmZddlmZddlmZmZddlmZm Z ddl m Z ddl m Z ddlZddlZd Zd Zd Zd Zd Zd ZddZGdddeZGdddeZGdddeZGdddeZGdddeZdS))print_function)MBLENGTH)PY2 range_type) FIELD_TYPE SERVER_STATUS)err)byte2intNFcsddz&tdttddD]}t|}td||jj|jfqtdWn ty3Ynwfdd t d t td d D}|D]$}td dd|Ddd t|dd fdd|DqHtdtdS)NcSs8dt|kr dkrndSt|trt|S|SdS)N .)r isinstanceintchrdatar;/usr/local/lib/python3.10/dist-packages/pymysql/protocol.py printables  zdump_packet..printablezpacket length:rzcall[%d]: %s (line %d)zB------------------------------------------------------------------csg|] }||dqS)r).0irrr (szdump_packet..rr css|] }dt|VqdS)z{:02X}N)formatr rxrrr *szdump_packet..z z c3s|]}|VqdSNrr")rrrr$,s) printlenrangesys _getframef_codeco_namef_lineno ValueErrorrminjoin)rrf dump_datadr)rrr dump_packets*   $ r5c@seZdZdZdZddZddZddZd d Zd d Z d9ddZ d:ddZ e r-ddZ nddZ ddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8S); MysqlPacketzrRepresentation of a MySQL response packet. Provides an interface for reading/parsing the packet results.  _position_datacCsd|_||_dS)Nrr7selfrencodingrrr__init__8s zMysqlPacket.__init__cCs|jSr&r9r;rrr get_all_data<szMysqlPacket.get_all_datacCsl|j|j|j|}t||kr-d|t||jt|jf}tr)t||t||j|7_|S)zCRead the first 'size' bytes in packet and advance cursor past them.z\Result length not requested length: Expected=%s. Actual=%s. Position: %s. Data Length: %s)r9r8r(DEBUGr'dumpAssertionError)r;sizeresulterrorrrrread?s zMysqlPacket.readcCs|j|jd}d|_|S)z`Read all remaining data in the packet. (Subsequent read() will return errors.) Nr9r8r;rErrrread_allMszMysqlPacket.read_allcCs:|j|}|dks|t|jkrtd||f||_dS)z1Advance the cursor in data buffer 'length' bytes.rz4Invalid advance amount (%s) for cursor. Position=%sN)r8r(r9 Exception)r;length new_positionrrradvanceVs  zMysqlPacket.advancercCs,|dks |t|jkrtd|||_dS)z9Set the position of the data buffer cursor to 'position'.rz)Invalid position to rewind cursor to: %s.N)r(r9rKr8)r;positionrrrrewind^s  zMysqlPacket.rewindrcCs|j|||S)a>Get 'length' bytes starting at 'position'. Position is start of payload (first four packet header bytes are not included) starting at index '0'. No error checking is done. If requesting outside end of buffer an empty string (or string shorter than 'length') may be returned! r>)r;rOrLrrr get_bytesds zMysqlPacket.get_bytescCs"t|j|j}|jd7_|SNr)ordr9r8rIrrr read_uint8pszMysqlPacket.read_uint8cCs|j|j}|jd7_|SrRrHrIrrrrTus cC(td|j|jd}|jd7_|S)NzS)Nzr?rrris_auth_switch_requestz"MysqlPacket.is_auth_switch_requestcCry)Nrrr>r?rrris_extra_auth_datar{zMysqlPacket.is_extra_auth_datacCs*t|jdd}d|kodkSS)Nrr)rSr9)r; field_countrrris_resultset_packetszMysqlPacket.is_resultset_packetcCry)Nrrr>r?rrris_load_local_packetz MysqlPacket.is_load_local_packetcCry)Nrrr>r?rrris_error_packetrzMysqlPacket.is_error_packetcCsD|r ||d|}trtd|t|jdSdS)Nrzerrno =) rrPrNrZrAr'r raise_mysql_exceptionr9)r;errnorrr check_errors zMysqlPacket.check_errorcCst|jdSr&)r5r9r?rrrrBszMysqlPacket.dumpN)r)r)__name__ __module__ __qualname____doc__ __slots__r=r@rGrJrNrPrQrrTrZr_rarcrgrnrorsrurxrzr}rrrrrBrrrrr61s<     r6c@s8eZdZdZddZddZddZdd Zd d Zd S) FieldDescriptorPacketzA MysqlPacket that represents a specific column's metadata in the result. Parsing is automatically done and the results are exported via public attributes on the class such as: db, table_name, name, length, type_code. cCst|||||dSr&)r6r=_parse_field_descriptorr:rrrr=szFieldDescriptorPacket.__init__cCsv||_||_|||_|||_|||_|||_|d\|_ |_ |_ |_ |_ dS)zParse the 'Field Descriptor' (Metadata) packet. This is compatible with MySQL 4.1+ (not compatible with MySQL 4.0). z s*    22