§
    öÛg¹  ã                   óv   — d Z dgZddlmZ ddlZddlmZ  ej        d¦  «        j        Z G d„ de	¦  «        Z
dS )	zˆ
Pure Python message buffer implementation.

Given data read from the wire, buffer the data until a complete message has been
received.
Úpq_message_streamé    )ÚBytesIONé   )Úmessage_typesz!xLc                   ó~   — e Zd ZdZdZedz  Zd„ Zd„ Zdd„Ze	e
fd„Ze	e
fd	„Zee
e	fd
„Zd„ Zd„ Zde
fd„Zd„ Zd„ ZdS )r   z+provide a message stream from a data streami   é   c                 ó:   — t          ¦   «         | _        d| _        d S ©Nr   )r   Ú_strioÚ_start©Úselfs    úQ/granary/edev/quantum/lib/python3.11/site-packages/postgresql/protocol/pbuffer.pyÚ__init__zpq_message_stream.__init__   s   € Ý‘	”	€$„+Ø€$„+€+€+ó    c                 óH   — | j                              d¦  «         d| _        dS )zremove all data in the bufferr   N)r   Útruncater   r   s    r   r   zpq_message_stream.truncate   s#   € à„+×Ò�qÑÔÐØ€$„+€+€+r   Nc                 óH  — | j         }|€| j                              ¦   «         }|                     dd¦  «         |                     ¦   «         }||k    r|                     d¦  «         dS d}|}	 |                     |¦  «         |                     | j        ¦  «        }|                     ¦   «         }|                     |¦  «         |                     |¦  «         t          |¦  «        | j        k    rn|                     ¦   «         }Œ›|                     ||z
  ¦  «         dS )z*[internal] remove the given amount of dataNr   é   )r   ÚtellÚseekr   ÚreadÚ_blockÚwriteÚlen)r   ÚamtÚstrioÚsizeÚ
copyto_posÚcopyfrom_posÚdatas          r   Ú
_rtruncatezpq_message_stream._rtruncate   s  € à
Œ+€%Ø€[Ø	Œ×	Ò	Ñ	Ô	€3Ø‡*‚*ˆQ�ÑÔÐØ	�Š‰Œ€$ð 
ˆS‚[€[Ø‡>‚>�!ÑÔÐØ	€6à€*Ø€,ð
Ø‡:‚:ˆlÑÔÐØ
�*Š*�T”[Ñ
!Ô
!€4à—*’*‘,”,€<Ø‡:‚:ˆjÑÔÐØ‡;‚;ˆtÑÔÐÝ	ˆ$�i„i�4”;ÒÐØ	à—
’
‘”€:ð
ð ‡.‚.�˜‘ÑÔÐÐÐr   c                 óN  — | j         }|                     | j        ¦  «         |                     d¦  «        } ||¦  «        dk     rdS  ||¦  «        \  }|dk     rt	          d|fz  ¦  «        ‚|                     dd¦  «         |                     ¦   «         | j        z
  |dz   k    S )z%if the buffer has a message availableé   Fr   úinvalid message size '%d'r   r   r   )r   r   r   r   Ú
ValueErrorr   )r   Ú	xl_unpackr   r   ÚheaderÚlengths         r   Úhas_messagezpq_message_stream.has_message<   s¤   € à
Œ+€%Ø‡*‚*ˆTŒ[ÑÔÐØ�:Š:�a‰=Œ=€&Ø€Sˆ�[„[�1‚_€_Ø
ˆ%ØˆI�fÑÔ�'€&Øˆa‚Z€ZÝ	Ð/°&°Ñ:Ñ	;Ô	;Ð;Ø‡*‚*ˆQ�ÑÔÐØ
�*Š*‰,Œ,˜œÑ
$¨°!©Ò	3Ð3r   c                 ó–  — d}| j         }| j        }|                     | j         ¦  «         	 |                     d¦  «        }|dz  } ||¦  «        dk     rns ||¦  «        \  }||dz
  z  }|dk     rt	          d|fz  ¦  «        ‚|                     |dz
  dz
  d¦  «          ||                     d¦  «        ¦  «        dk    rn|dz  }Œ�|S )znumber of messages in bufferr   Tr$   r   r%   r   )r   r   r   r   r&   )r   r'   r   ÚcountÚrposr   r(   r)   s           r   Ú__len__zpq_message_stream.__len__I   së   € à
€%Ø	Œ€$Ø
Œ+€%Ø‡*‚*ˆTŒ[ÑÔÐðà�JŠJ�q‰MŒM€6Øˆ1�9€4Ø	€cˆ&�k„k�A‚o€oà	àˆY�vÑÔ�7€6Øˆ6�A‰:Ñ€4àˆq‚j€jÝ
Ð0°6°)Ñ;Ñ
<Ô
<Ð<Ø‡:‚:ˆf�q‰j˜1‰n˜aÑ Ô Ð à	€cˆ%�*Š*�Q‰-Œ-ÑÔ˜AÒÐØ	ØˆA�:€5ð#ð$ 
€,r   c                 ó"  — | j         }|                     d¦  «        } ||¦  «        dk     rd S  ||¦  «        \  }||d                  }|dk     rt          d|fz  ¦  «        ‚|dz  }|                     |¦  «        } ||¦  «        |k     rd S ||fS )Nr$   r   r   r%   )r   r   r&   )	r   Úmtypesr   r'   r   r(   r)   ÚtypÚbodys	            r   Ú_get_messagezpq_message_stream._get_messagec   sª   € ð
 Œ+€%Ø�:Š:�a‰=Œ=€&Ø€Sˆ�[„[�1‚_€_Ø	€6ØˆI�fÑÔ�'€&Øˆv�aŒyÔ€#àˆa‚Z€ZÝ	Ð/°&°Ñ:Ñ	;Ô	;Ð;ØˆA�+€&Ø	�Š�FÑ	Ô	€$Ø€Sˆ�Y„Y�ÒÐà	€6Ø
ˆtˆÐr   c                 ó  — | j         | j        k    r!|                      | j         ¦  «         d| _         | j                             | j         ¦  «         |                      ¦   «         }|�| j                             ¦   «         | _         |S r
   )r   Ú_limitr"   r   r   r3   r   ©r   Úmsgs     r   Únext_messagezpq_message_stream.next_messagex   st   € Ø	„[�4”;ÒÐØ‡?‚?�4”;ÑÔÐØ€4„;à„+×Ò�4”;ÑÔÐØ×ÒÑÔ€#Ø€_Ø”×!Ò!Ñ#Ô#€4„;Ø	€*r   c                 ó  — | j         | j        k    r!|                      | j         ¦  «         d| _         | j                             | j         ¦  «         |                      ¦   «         }|€t          ‚| j                             ¦   «         | _         |S r
   )r   r5   r"   r   r   r3   ÚStopIterationr   r6   s     r   Ú__next__zpq_message_stream.__next__ƒ   sz   € Ø	„[�4”;ÒÐØ‡?‚?�4”;ÑÔÐØ€4„;à„+×Ò�4”;ÑÔÐØ×ÒÑÔ€#Ø€[Ý	ÐØ”× Ò Ñ"Ô"€$„+Ø	€*r   l   ÿÿ c                 ó~  — | j         | j        k    r!|                      | j         ¦  «         d| _         | j         }| j                             |¦  «         g } ||¦  «        |k     rR|                      ¦   «         }|€n;|                     |¦  «         |d ||d         ¦  «        z   z  } ||¦  «        |k     °R|| _         |S )Nr   r$   r   )r   r5   r"   r   r   r3   Úappend)r   Únumr   Ú	new_startÚlr7   s         r   r   zpq_message_stream.read�   sÂ   € Ø	„[�4”;ÒÐØ‡?‚?�4”;ÑÔÐØ€4„;àŒk€)Ø„+×Ò�9ÑÔÐØ€!ØˆˆA‰Œ�ŠˆØ	×	Ò	Ñ	Ô	€3Ø	€kØ	Ø‡8‚8ˆC�=„=€=Ø��S�S˜˜Qœ‘[”[‘Ñ!€9ð 	ˆˆA‰Œ�Šˆð €$„+Ø	
€(r   c                 óp   — | j                              dd¦  «         | j                              |¦  «         d S )Nr   r   )r   r   r   )r   r!   s     r   r   zpq_message_stream.write    s6   € à„+×Ò�1�aÑÔÐØ„+×Ò�DÑÔÐÐÐr   c                 ór   — | j                              | j        ¦  «         | j                              ¦   «         S ©N)r   r   r   r   r   s    r   Úgetvaluezpq_message_stream.getvalue¥   s.   € Ø„+×Ò�4”;ÑÔÐØ	Œ×	Ò	Ñ	Ô	Ðr   rC   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r5   r   r   r"   r'   r   r*   r.   r   r3   r8   r;   r   r   rD   © r   r   r   r      s  € € € € € Ø.Ð.Ø
€Ø
�1‰*€ðð ð ðð ð ð
ð ð ð ð: $-°Cð 4ð 4ð 4ð 4ð  )°ð ð ð ð ð6 ØØðð ð ð ð*	ð 	ð 	ð
ð 
ð 
ð !¨ð ð ð ð ð"ð ð ð
ð ð ð ð r   )rH   Ú__all__Úior   Ústructr   ÚStructÚunpack_fromr'   Úobjectr   rI   r   r   ú<module>rP      s˜   ððð ð Ð
€à Ð Ð Ð Ð Ð Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (àˆFŒM˜%Ñ Ô Ô,€	ðUð Uð Uð Uð U˜ñ Uô Uð Uð Uð Ur   