1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
U
·ý°dS.ã@s¤ddlmZddlmZmZddlmZddlZddlZdZ    dZ
dZ dZ d    Z d
Zd d „ZGd d„dƒZGdd„deƒZGdd„dƒZGdd„dƒZGdd„dƒZdS)é)ÚMBLENGTH)Ú
FIELD_TYPEÚ SERVER_STATUS)ÚerréNFéûéüéýéþcsîdd„‰zLtdtˆƒƒtddƒD]&}t |¡}td||jj|jfƒq"tdƒWntk
rhYnX‡fdd    „td
t    tˆƒd ƒd ƒDƒ}|D]H}td  
dd„|Dƒ¡dd t|ƒdd 
‡fdd„|Dƒ¡ƒq’tdƒtƒdS)NcSs$d|krdkr nnt|ƒSdS)Né éÚ.)Úchr©Údata©rúGd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pymysql/protocol.pyÚ    printableszdump_packet.<locals>.printablezpacket length:rézcall[%d]: %s (line %d)zB------------------------------------------------------------------csg|]}ˆ||d…‘qS)ér)Ú.0ÚirrrÚ
<listcomp>#szdump_packet.<locals>.<listcomp>rérú css|]}d |¡VqdS)z{:02X}N)Úformat©rÚxrrrÚ    <genexpr>&szdump_packet.<locals>.<genexpr>z   z  Úc3s|]}ˆ|ƒVqdS©Nrr)rrrr)s) ÚprintÚlenÚrangeÚsysÚ    _getframeÚf_codeÚco_nameÚf_linenoÚ
ValueErrorÚminÚjoin)rrÚfZ    dump_dataÚdr)rrrÚ dump_packets,
 $ÿþýÿr.c@sèeZdZdZdZdd„Zdd„Zdd„Zd    d
„Zd d „Z    d:dd„Z
d;dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9S)<Ú MysqlPacketzrRepresentation of a MySQL response packet.
 
    Provides an interface for reading/parsing the packet results.
    ©Ú    _positionÚ_datacCsd|_||_dS)Nrr0©ÚselfrÚencodingrrrÚ__init__7szMysqlPacket.__init__cCs|jSr ©r2©r4rrrÚ get_all_data;szMysqlPacket.get_all_datacCsl|j|j|j|…}t|ƒ|krZd|t|ƒ|jt|jƒf}trRt|ƒ| ¡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)r2r1r"ÚDEBUGr!ÚdumpÚAssertionError)r4ÚsizeÚresultÚerrorrrrÚread>s þÿzMysqlPacket.readcCs|j|jd…}d|_|S)z`Read all remaining data in the packet.
 
        (Subsequent read() will return errors.)
        N©r2r1©r4r>rrrÚread_allNszMysqlPacket.read_allcCs:|j|}|dks |t|jƒkr0td||fƒ‚||_dS)z1Advance the cursor in data buffer 'length' bytes.rz4Invalid advance amount (%s) for cursor.  Position=%sN)r1r"r2Ú    Exception)r4ÚlengthZ new_positionrrrÚadvanceWs
ÿÿzMysqlPacket.advancercCs,|dks|t|jƒkr"td|ƒ‚||_dS)z9Set the position of the data buffer cursor to 'position'.rz)Invalid position to rewind cursor to: %s.N)r"r2rDr1)r4ÚpositionrrrÚrewindas 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!
        r7)r4rGrErrrÚ    get_bytesgs    zMysqlPacket.get_bytescCs|j|j}|jd7_|S©NrrArBrrrÚ
read_uint8rs zMysqlPacket.read_uint8cCs(t d|j|j¡d}|jd7_|S)Nz<Hré©ÚstructÚ unpack_fromr2r1rBrrrÚ read_uint16wszMysqlPacket.read_uint16cCs0t d|j|j¡\}}|jd7_||d>S)Nz<HBérrM)r4ÚlowÚhighrrrÚ read_uint24|szMysqlPacket.read_uint24cCs(t d|j|j¡d}|jd7_|S)Nz<IrérMrBrrrÚ read_uint32szMysqlPacket.read_uint32cCs(t d|j|j¡d}|jd7_|S)Nz<QrérMrBrrrÚ read_uint64†szMysqlPacket.read_uint64cCs:|j d|j¡}|dkrdS|j|j|…}|d|_|S)Nórr)r2Úfindr1)r4Zend_posr>rrrÚ read_string‹s 
zMysqlPacket.read_stringcCsT| ¡}|tkrdS|tkr |S|tkr0| ¡S|tkr@| ¡S|tkrP| ¡SdS)z´Read a 'Length Coded Binary' number from the data buffer.
 
        Length coded numbers can be anywhere from 1 to 9 bytes depending
        on the value of the first byte.
        N)    rKÚ NULL_COLUMNÚUNSIGNED_CHAR_COLUMNÚUNSIGNED_SHORT_COLUMNrPÚUNSIGNED_INT24_COLUMNrTÚUNSIGNED_INT64_COLUMNrX)r4ÚcrrrÚread_length_encoded_integer“sz'MysqlPacket.read_length_encoded_integercCs| ¡}|dkrdS| |¡S)aRead a 'Length Coded String' from the data buffer.
 
        A 'Length Coded String' consists first of a length coded
        (unsigned, positive) integer represented in 1-9 bytes followed by
        that many bytes of binary data.  (For example "cat" would be "3cat".)
        N)rbr@)r4rErrrÚread_length_coded_string¥sz$MysqlPacket.read_length_coded_stringcCs.t |¡}| |j|j¡}|j|j7_|Sr )rNÚStructrOr2r1r=)r4ÚfmtÚsr>rrrÚ read_struct±s
zMysqlPacket.read_structcCs|jddkot|jƒdkS)Nrr©r2r"r8rrrÚ is_ok_packet·szMysqlPacket.is_ok_packetcCs|jddkot|jƒdkS)Nrr
é    rhr8rrrÚ is_eof_packet»szMysqlPacket.is_eof_packetcCs|jddkS)Nrr
r7r8rrrÚis_auth_switch_requestÁsz"MysqlPacket.is_auth_switch_requestcCs|jddkS)Nrrr7r8rrrÚis_extra_auth_dataÅszMysqlPacket.is_extra_auth_datacCs"|jd}d|kodkSS)Nrréúr7)r4Z field_countrrrÚis_resultset_packetÉs
zMysqlPacket.is_resultset_packetcCs|jddkS)Nrrr7r8rrrÚis_load_local_packetÍsz MysqlPacket.is_load_local_packetcCs|jddkS)Nréÿr7r8rrrÚis_error_packetÐszMysqlPacket.is_error_packetcCs| ¡r| ¡dSr )rrÚraise_for_errorr8rrrÚ check_errorÓszMysqlPacket.check_errorcCs8| ¡| d¡| ¡}tr(td|ƒt |j¡dS)Nrzerrno =)rHrFrPr:r!rZraise_mysql_exceptionr2)r4Úerrnorrrrs×s 
 
zMysqlPacket.raise_for_errorcCst|jƒdSr )r.r2r8rrrr;ßszMysqlPacket.dumpN)r)r)Ú__name__Ú
__module__Ú __qualname__Ú__doc__Ú    __slots__r6r9r@rCrFrHrIrKrPrTrVrXr[rbrcrgrirkrlrmrorprrrtrsr;rrrrr//s8    
 
 
 r/c@s8eZdZdZdd„Zdd„Zdd„Zdd    „Zd
d „Zd S) ÚFieldDescriptorPacketzçA 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 )r/r6Ú_parse_field_descriptorr3rrrr6êszFieldDescriptorPacket.__init__cCsv| ¡|_| ¡|_| ¡ |¡|_| ¡ |¡|_| ¡ |¡|_| ¡ |¡|_| d¡\|_    |_
|_ |_ |_ dS)z…Parse the 'Field Descriptor' (Metadata) packet.
 
        This is compatible with MySQL 4.1+ (not compatible with MySQL 4.0).
        z    <xHIBHBxxN)rcÚcatalogÚdbÚdecodeÚ
table_nameZ    org_tableÚnameZorg_namergÚ    charsetnrrEÚ    type_codeÚflagsÚscale)r4r5rrrr|îs
 
úûz-FieldDescriptorPacket._parse_field_descriptorcCs*|j|jd| ¡| ¡|j|jddkfS)zBProvides a 7-item tuple compatible with the Python PEP249 DB Spec.NrLr)rrƒÚget_column_lengthr…r„r8rrrÚ descriptions ùz!FieldDescriptorPacket.descriptioncCs*|jtjkr$t |jd¡}|j|S|jSrJ)rƒrZ
VAR_STRINGrÚgetr‚rE)r4Zmblenrrrr†s 
z'FieldDescriptorPacket.get_column_lengthcCs d|j|j|j|j|j|jfS)Nz%s %r.%r.%r, type=%s, flags=%x)Ú    __class__r~r€rrƒr„r8rrrÚ__str__súzFieldDescriptorPacket.__str__N)    rvrwrxryr6r|r‡r†rŠrrrrr{ãs  r{c@s eZdZdZdd„Zdd„ZdS)ÚOKPacketWrapperzÉ
    OK Packet Wrapper. It uses an existing packet object, and wraps
    around it, exposing useful variables while still providing access
    to the original packet objects variables and methods.
    cCsz| ¡s tdt|jjƒdƒ‚||_|j d¡|j ¡|_|j ¡|_    | 
d¡\|_ |_ |j  ¡|_|j tj@|_dS)NzCannot create z  object from invalid packet typerz<HH)rir)Ústrr‰rvÚpacketrFrbZ affected_rowsZ    insert_idrgÚ server_statusÚ warning_countrCÚmessagerÚSERVER_MORE_RESULTS_EXISTSÚhas_next©r4Z from_packetrrrr6's
ÿþÿ    zOKPacketWrapper.__init__cCs t|j|ƒSr ©Úgetattrr©r4ÚkeyrrrÚ __getattr__8szOKPacketWrapper.__getattr__N©rvrwrxryr6r˜rrrrr‹ sr‹c@s eZdZdZdd„Zdd„ZdS)ÚEOFPacketWrapperzÊ
    EOF Packet Wrapper. It uses an existing packet object, and wraps
    around it, exposing useful variables while still providing access
    to the original packet objects variables and methods.
    cCsV| ¡std|j›dƒ‚||_|j d¡\|_|_trDtd|jƒ|jt    j
@|_ dS)NúCannot create 'ú!' object from invalid packet typez<xhhzserver_status=) rkr)r‰rrgrrŽr:r!rr‘r’r“rrrr6Cs ÿ zEOFPacketWrapper.__init__cCs t|j|ƒSr r”r–rrrr˜OszEOFPacketWrapper.__getattr__Nr™rrrrrš<s ršc@s eZdZdZdd„Zdd„ZdS)ÚLoadLocalPacketWrapperzÑ
    Load Local Packet Wrapper. It uses an existing packet object, and wraps
    around it, exposing useful variables while still providing access
    to the original packet objects variables and methods.
    cCsH| ¡std|j›dƒ‚||_|j ¡dd…|_trDtd|jƒdS)Nr›rœrz    filename=)rpr)r‰rr9Úfilenamer:r!r“rrrr6Zs ÿzLoadLocalPacketWrapper.__init__cCs t|j|ƒSr r”r–rrrr˜esz"LoadLocalPacketWrapper.__getattr__Nr™rrrrrSs r)ÚcharsetrÚ    constantsrrrrrNr$r:r\r]r^r_r`r.r/r{r‹ršrrrrrÚ<module>s"  5=