o
    ŠhÈ<  ã                   @   sò   d dl Z d dlmZmZmZmZmZ d dlmZm	Z	 d dl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 G dd„ dƒZ3dS )é    N)ÚNULL_COLUMNÚUNSIGNED_CHAR_COLUMNÚUNSIGNED_INT24_COLUMNÚUNSIGNED_INT64_COLUMNÚUNSIGNED_SHORT_COLUMN)ÚeventsÚ
row_events)&ÚANONYMOUS_GTID_LOG_EVENTÚBEGIN_LOAD_QUERY_EVENTÚDELETE_ROWS_EVENT_V1ÚDELETE_ROWS_EVENT_V2ÚEXECUTE_LOAD_QUERY_EVENTÚFORMAT_DESCRIPTION_EVENTÚGTID_LOG_EVENTÚHEARTBEAT_LOG_EVENTÚINTVAR_EVENTÚJSONB_LITERAL_FALSEÚJSONB_LITERAL_NULLÚJSONB_LITERAL_TRUEÚJSONB_TYPE_DOUBLEÚJSONB_TYPE_INT16ÚJSONB_TYPE_INT32ÚJSONB_TYPE_INT64ÚJSONB_TYPE_LARGE_ARRAYÚJSONB_TYPE_LARGE_OBJECTÚJSONB_TYPE_LITERALÚJSONB_TYPE_SMALL_ARRAYÚJSONB_TYPE_SMALL_OBJECTÚJSONB_TYPE_STRINGÚJSONB_TYPE_UINT16ÚJSONB_TYPE_UINT32ÚJSONB_TYPE_UINT64ÚPREVIOUS_GTIDS_LOG_EVENTÚQUERY_EVENTÚROTATE_EVENTÚ
STOP_EVENTÚTABLE_MAP_EVENTÚUNSIGNED_INT24_LENGTHÚUNSIGNED_INT64_LENGTHÚUNSIGNED_SHORT_LENGTHÚUPDATE_ROWS_EVENT_V1ÚUPDATE_ROWS_EVENT_V2ÚWRITE_ROWS_EVENT_V1ÚWRITE_ROWS_EVENT_V2Ú	XID_EVENT)Úbyte2intc                   @   sÄ  e Zd Zi eej“eej“eej	“e
ej“eej“eej“eej“eej“eej“eej“eej“eej“eej“eej“e ej“e!ej“e"ej#“e$ej%e&ej%i¥Z'dd„ Z(dd„ Z)dd„ Z*dd„ Z+d	d
„ Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0dd„ Z1dd„ Z2dd„ Z3dd„ Z4dd„ Z5dd„ Z6dd „ Z7d!d"„ Z8d#d$„ Z9d%d&„ Z:d'd(„ Z;d)d*„ Z<d+d,„ Z=d-d.„ Z>d/d0„ Z?d1d2„ Z@d3d4„ ZAd5d6„ ZBd7d8„ ZCd9d:„ ZDd;d<„ ZEd=d>„ ZFd?d@„ ZGdAdB„ ZHdCdD„ ZIeJdEdF„ ƒZKdGS )HÚBinLogPacketc                 C   sÖ   d| _ d| _|| _t d| j d¡¡}|d | _|d | _|d | _|d | _	|d	 | _
|d
 | _|r9| j	d }n| j	d }d | _| j | jtj¡}||vrPd S || |||||||	|
d	| _| jjdu rid | _d S d S )Nr   ó    z<cIBIIIHé   é   é   é   é   é   é   é   é   )Úonly_tablesÚignored_tablesÚonly_schemasÚignored_schemasÚfreeze_schemaF)Ú
read_bytesÚ_data_bufferÚ_packetÚstructÚunpackÚreadÚ	timestampÚ
event_typeÚ	server_idÚ
event_sizeÚlog_posÚflagsÚeventÚ
_event_mapÚgetr   ÚNotImplementedEventÚ	processed)ÚselfÚpacketÚ	table_mapÚ
connectionÚuse_checksumÚallowed_eventsr;   r<   r=   r>   r?   rD   Úevent_size_without_headerÚevent_class© rY   ú^/var/www/html/aiguide_backend/venv/lib/python3.10/site-packages/asyncmy/replication/packets.pyÚ__init__P   s>   






÷
ÿzBinLogPacket.__init__c                 Ã   s"   | j o| j  ¡ I d H  d S  d S ©N)rL   Úinit©rQ   rY   rY   rZ   r]   ‹   s   € zBinLogPacket.initc                 C   sv   t |ƒ}|  j|7  _t| jƒdkr5| jd |… }| j|d … | _t|ƒ|kr)|S || j |t|ƒ ¡ S | j |¡S ©Nr   )Úintr@   ÚlenrA   rB   rE   )rQ   ÚsizeÚdatarY   rY   rZ   rE   Ž   s   zBinLogPacket.readc                 C   s$   |  j t|ƒ8  _ |  j|7  _d S r\   )r@   ra   rA   )rQ   rc   rY   rY   rZ   Úunreadš   s   zBinLogPacket.unreadc                 C   sh   t |ƒ}|  j|7  _t| jƒ}|dkr,| j|d … | _||kr*| j || ¡ d S d S | j |¡ d S r_   )r`   r@   ra   rA   rB   Úadvance)rQ   rb   Ú
buffer_lenrY   rY   rZ   re   ž   s   
ÿzBinLogPacket.advancec                 C   sr   t |  d¡ƒ}|tkrd S |tk r|S |tkr|  |  t¡¡S |tkr+|  |  t	¡¡S |t
kr7|  |  t¡¡S d S )Nr3   )r/   rE   r   r   r   Úunpack_uint16r)   r   Úunpack_int24r'   r   Úunpack_int64r(   )rQ   ÚcrY   rY   rZ   Úread_length_coded_binary©   s   ÿz%BinLogPacket.read_length_coded_binaryc                 C   s"   |   ¡ }|du r
dS |  |¡ ¡ S )a7  Read 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".)

        From PyMYSQL source code
        N)rk   rE   Údecode)rQ   ÚlengthrY   rY   rZ   Úread_length_coded_string¶   s   	z%BinLogPacket.read_length_coded_stringc                 C   s*   t | j|ƒrt| j|ƒS td| j|f ƒ‚)Nz!%s instance has no attribute '%s')ÚhasattrrB   ÚgetattrÚAttributeErrorÚ	__class__)rQ   ÚkeyrY   rY   rZ   Ú__getattr__Ä   s   zBinLogPacket.__getattr__c                 C   sœ   |dkrt  d|  |¡¡d S |dkrt  d|  |¡¡d S |dkr&|  ¡ S |dkr5t  d|  |¡¡d S |d	kr=|  ¡ S |d
krLt  d|  |¡¡d S dS )z5Read a big endian integer values based on byte numberr3   z>br   r4   z>hr5   r6   z>ir7   é   z>lN)rC   rD   rE   Úread_int24_beÚread_int40_be©rQ   rb   rY   rY   rZ   Úread_int_be_by_sizeÊ   s   ÿz BinLogPacket.read_int_be_by_sizec                 C   s„   |dkr|   ¡ S |dkr|  ¡ S |dkr|  ¡ S |dkr |  ¡ S |dkr(|  ¡ S |dkr0|  ¡ S |dkr8|  ¡ S |dkr@|  ¡ S d	S )
z8Read a little endian integer values based on byte numberr3   r4   r5   r6   r7   r8   é   ru   N)Ú
read_uint8Úread_uint16Úread_uint24Úread_uint32Úread_uint40Úread_uint48Úread_uint56Úread_uint64rx   rY   rY   rZ   Úread_uint_by_sizeÙ   s"   ÿzBinLogPacket.read_uint_by_sizec                 C   s   |   |¡}|  |¡S )zoRead a string with length coded using pascal style.
        The string start by the size of the string
        )rƒ   rE   )rQ   rb   rm   rY   rY   rZ   Úread_length_coded_pascal_stringì   s   

z,BinLogPacket.read_length_coded_pascal_stringc                 C   s\   d}d}d}|d@ dkr)t  d|  d¡¡d }||d@ |> B }|d }|d@ dks|  |¡S )zÇRead a variable length string where the first 1-5 bytes stores the
        length of the string.

        For each byte, the first bit being high indicates another byte must be
        read.
        é€   r   z!Br3   é   rz   ©rC   rD   rE   )rQ   Úbyterm   Ú	bits_readrY   rY   rZ   Úread_variable_length_stringó   s   ý
z(BinLogPacket.read_variable_length_stringc                 C   s@   t  d|  d¡¡\}}}||d> B |d> B }|dkr|d8 }|S )NÚBBBr5   ru   é   é  € é   r‡   ©rQ   ÚaÚbrj   ÚresrY   rY   rZ   Ú
read_int24  ó
   zBinLogPacket.read_int24c                 C   s@   t  d|  d¡¡\}}}|d> |d> B |B }|dkr|d8 }|S )Nr‹   r5   rŒ   ru   r   rŽ   r‡   r   rY   rY   rZ   rv   
  r”   zBinLogPacket.read_int24_bec                 C   ó   t  d|  d¡¡d S )Nz<Br3   r   r‡   r^   rY   rY   rZ   r{     ó   zBinLogPacket.read_uint8c                 C   r•   )Nz<hr4   r   r‡   r^   rY   rY   rZ   Ú
read_int16  r–   zBinLogPacket.read_int16c                 C   r•   )Nú<Hr4   r   r‡   r^   rY   rY   rZ   r|     r–   zBinLogPacket.read_uint16c                 C   ó,   t  d|  d¡¡\}}}||d>  |d>  S )Nz<BBBr5   ru   rŒ   r‡   ©rQ   r   r‘   rj   rY   rY   rZ   r}     ó   zBinLogPacket.read_uint24c                 C   r•   )Nz<Ir6   r   r‡   r^   rY   rY   rZ   r~     r–   zBinLogPacket.read_uint32c                 C   r•   )Nz<ir6   r   r‡   r^   rY   rY   rZ   Ú
read_int32!  r–   zBinLogPacket.read_int32c                 C   s"   t  d|  d¡¡\}}||d>  S )Nz<BIr7   ru   r‡   ©rQ   r   r‘   rY   rY   rZ   r   $  ó   zBinLogPacket.read_uint40c                 C   s"   t  d|  d¡¡\}}||d>  S )Nz>IBr7   ru   r‡   r   rY   rY   rZ   rw   (  rž   zBinLogPacket.read_int40_bec                 C   r™   )Nz<HHHr8   rŒ   é    r‡   rš   rY   rY   rZ   r€   ,  r›   zBinLogPacket.read_uint48c                 C   r™   )Nz<BHIrz   ru   é   r‡   rš   rY   rY   rZ   r   0  r›   zBinLogPacket.read_uint56c                 C   r•   )Nz<Qru   r   r‡   r^   rY   rY   rZ   r‚   4  r–   zBinLogPacket.read_uint64c                 C   r•   )Nz<qru   r   r‡   r^   rY   rY   rZ   Ú
read_int647  r–   zBinLogPacket.read_int64c                 C   s   t  d|dd… ¡d S )Nr˜   r   r4   )rC   rD   ©rQ   ÚnrY   rY   rZ   rg   :  s   zBinLogPacket.unpack_uint16c                 C   sz   z#t  d|d ¡d t  d|d ¡d d>  t  d|d ¡d d>  W S  ty<   |d |d d>  |d d>   Y S w )NÚBr   r3   ru   r4   rŒ   ©rC   rD   Ú	TypeErrorr¢   rY   rY   rZ   rh   =  s   ÿþÿ$ÿzBinLogPacket.unpack_int24c                 C   sž   z/t  d|d ¡d t  d|d ¡d d>  t  d|d ¡d d>  t  d|d ¡d d>  W S  tyN   |d |d d>  |d d>  |d d>   Y S w )	Nr¤   r   r3   ru   r4   rŒ   r5   r    r¥   r¢   rY   rY   rZ   Úunpack_int32G  s   ÿþýÿ0ÿzBinLogPacket.unpack_int32c                 C   s2   |   |¡}|  |¡}|  |¡ |  ¡ }|  ||¡S r\   )rƒ   rE   rd   r{   Úread_binary_json_type)rQ   rb   rm   ÚpayloadÚtrY   rY   rZ   Úread_binary_jsonR  s
   


zBinLogPacket.read_binary_jsonc                 C   s  |t tfv }|tt fv r|  |d |¡S |ttfv r"|  |d |¡S |tfv r+|  ¡ S |tfv rG|  	¡ }|t
kr:d S |tkr@dS |tkrFdS n@|tkrO|  ¡ S |tkrW|  ¡ S |tfv rgt d|  d¡¡d S |tkro|  ¡ S |tkrw|  ¡ S |tkr|  ¡ S |tkr‡|  ¡ S td| ƒ‚)Nr3   TFz<dru   r   úJson type %d is not handled)r   r   r   Úread_binary_json_objectr   Úread_binary_json_arrayr   rŠ   r   r{   r   r   r   r   r—   r   r|   r   rC   rD   rE   r   rœ   r    r~   r   r¡   r!   r‚   Ú
ValueError)rQ   rª   rm   ÚlargeÚvaluerY   rY   rZ   r¨   Z  s>   

ÿ
z"BinLogPacket.read_binary_json_typec                 C   s¾   |t kr!|r
|  ¡ n|  ¡ }|tkrd S |tkrdS |tkr dS n8|tkr/|r+|  ¡ S |  ¡ S |t	kr=|r9|  ¡ S |  ¡ S |t
krK|rG|  ¡ S |  ¡ S |tkrY|rU|  ¡ S |  ¡ S td| ƒ‚)NTFr¬   )r   r~   r|   r   r   r   r   rœ   r—   r   r   r¡   r    r‚   r¯   )rQ   rª   r°   r±   rY   rY   rZ   Úread_binary_json_type_inlined{  s$   ÿz*BinLogPacket.read_binary_json_type_inlinedc                    sê   ˆ rˆ  ¡ }ˆ  ¡ }nˆ ¡ }ˆ ¡ }||krtdƒ‚ˆ r)‡fdd„t|ƒD ƒ}n‡fdd„t|ƒD ƒ}‡ ‡fdd„t|ƒD ƒ}‡fdd„|D ƒ}i }t|ƒD ]#}	||	 d d u r`||	 d }
n||	 d	 }ˆ ||¡}
|
|||	 < qO|S )
Nú(Json length is larger than packet lengthc                    s   g | ]
}ˆ   ¡ ˆ  ¡ f‘qS rY   )r~   r|   ©Ú.0Ú_r^   rY   rZ   Ú
<listcomp>›  ó    ýþÿz8BinLogPacket.read_binary_json_object.<locals>.<listcomp>c                    s   g | ]
}ˆ   ¡ ˆ   ¡ f‘qS rY   )r|   r´   r^   rY   rZ   r·   £  r¸   c                    ó   g | ]}ˆ  ˆˆ ¡‘qS rY   ©Úread_offset_or_inliner´   ©r°   rQ   rY   rZ   r·   «  ó    ÿc                    s   g | ]	}ˆ   |d  ¡‘qS )r3   )rE   ©rµ   Úxr^   rY   rZ   r·   ¯  s    r3   r4   r   )r~   r|   r¯   Úranger¨   )rQ   rm   r°   Úelementsrb   Úkey_offset_lengthsÚvalue_type_inlined_lengthsÚkeysÚoutÚirc   rª   rY   r¼   rZ   r­     s4   

û
ûÿz$BinLogPacket.read_binary_json_objectc                    sn   ˆrˆ  ¡ }ˆ  ¡ }nˆ ¡ }ˆ ¡ }|ˆkrtdƒ‚‡‡fdd„t|ƒD ƒ}‡‡fdd„‰ ‡ fdd„|D ƒS )Nr³   c                    r¹   rY   rº   r´   r¼   rY   rZ   r·   Ç  r½   z7BinLogPacket.read_binary_json_array.<locals>.<listcomp>c                    s$   | d d u r
| d S ˆ  | d ˆ ¡S )Nr3   r4   r   )r¨   )r¿   )rm   rQ   rY   rZ   Ú_readË  s   z2BinLogPacket.read_binary_json_array.<locals>._readc                    s   g | ]}ˆ |ƒ‘qS rY   rY   r¾   )rÇ   rY   rZ   r·   Ð  s    )r~   r|   r¯   rÀ   )rQ   rm   r°   rÁ   rb   Úvalues_type_offset_inlinerY   )rÇ   r°   rm   rQ   rZ   r®   ¼  s   
ÿz#BinLogPacket.read_binary_json_arrayc                 C   sj   |   ¡ }|tttfv r|d |  ||¡fS |r%|ttfv r%|d |  ||¡fS |r.||  ¡ d fS ||  ¡ d fS r\   )	r{   r   r   r   r²   r   r    r~   r|   )rR   r°   rª   rY   rY   rZ   r»   Ò  s   z"BinLogPacket.read_offset_or_inlineN)LÚ__name__Ú
__module__Ú__qualname__r#   r   Ú
QueryEventr$   ÚRotateEventr   ÚFormatDescriptionEventr.   ÚXidEventr   ÚIntvarEventr   Ú	GtidEventr%   Ú	StopEventr
   ÚBeginLoadQueryEventr   ÚExecuteLoadQueryEventr   ÚHeartbeatLogEventr*   r   ÚUpdateRowsEventr,   ÚWriteRowsEventr   ÚDeleteRowsEventr+   r-   r   r&   ÚTableMapEventr	   rO   r"   rM   r[   r]   rE   rd   re   rk   rn   rt   ry   rƒ   r„   rŠ   r“   rv   r{   r—   r|   r}   r~   rœ   r   rw   r€   r   r‚   r¡   rg   rh   r§   r«   r¨   r²   r­   r®   Ústaticmethodr»   rY   rY   rY   rZ   r0   6   s–    þýüûúùø	÷
öõóòñðïîíê;
!-r0   )4rC   Úasyncmy.constants.COLUMNr   r   r   r   r   Úasyncmy.replicationr   r   Úasyncmy.replication.constantsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   Úasyncmy.replication.utilsr/   r0   rY   rY   rY   rZ   Ú<module>   s     (