o
    :i                     @   sV   d dl Z d dlZd dlmZmZ d dlmZ d dlmZ e j	dkZ
G dd deZdS )    N)AnyIterable)StreamCompleteException)
ByteSourcebigc                   @   s  e Zd ZdZdd ZdeddfddZd	efd
dZdefddZ	defddZ
defddZdefddZ		d&dededededee f
ddZd	ededee fddZd	edededee fddZdededee fd d!Zedefd"d#Zd$d% ZdS )'ResponseBuffer)slice_szbuf_locendgenbufferslicec                 C   sn   d| _ d| _d| _|| _|j| _t | _t|dd | _| jr5| j	 }d| | _
|d | _d| _d | _d S d S )Ni   r   exception_tags   __exception__    )r   r	   buf_szsourcer   bytesr   getattrr   encode_open_marker_close_marker
_carryover_exception_buf)selfr   	tag_bytes r   m/home/aiteam/pcaa-dev/dashboard-backend/venv/lib/python3.10/site-packages/clickhouse_connect/driver/buffer.py__init__   s   



zResponseBuffer.__init__	new_chunkreturnNc                 C   s   | j sdS | jdur!|  j|7  _| j| jv rt| j| _tdS | j| }|| j}|dkrIt	||d | _| j| jv rGt| j| _tdS t
| jd }t
||kr`|| d | _dS || _dS )zICheck if the stream contains a complete exception block matching our tag.N   )r   r   r   r   r   r   r   findr   	bytearraylen)r   r   search_data
marker_pos
carry_sizer   r   r   _check_for_exception   s(   


z#ResponseBuffer._check_for_exceptionszc                 C   s   | j | | jkr|  j |7  _ | j| j | | j  S t| j| j | j }d| _ d| _t||k rpt| jd }|s;t| | t|}t|| |krR|	| n|t| }|	|d |  || _|| _|| _ t||k s1|S )Nr   )
r	   r   r   r#   r$   nextr   r   r(   extend)r   r)   bridgechunkxtailr   r   r   
read_bytes8   s*   
zResponseBuffer.read_bytesc                 C   s~   | j | jk r|  j d7  _ | j| j d  S d| _d| _ t| jd }|s%t| | t|}|dkr;|| _d| _ || _|d S )Nr!   r   )r	   r   r   r*   r   r   r(   r$   )r   r-   r.   r   r   r   	read_byteP   s   
zResponseBuffer.read_bytec                 C   s<   d}d}	 |   }||d@ |> 7 }|d@ dkr|S |d7 }qNr   T         )r1   )r   r)   shiftbr   r   r   read_leb128a   s   zResponseBuffer.read_leb128c                 C   s   |   }| | S N)r8   r0   decode)r   r)   r   r   r   read_leb128_strk   s   zResponseBuffer.read_leb128_strc                 C   s   t j| ddddS )N   littleF)signed)int
from_bytesr0   r   r   r   r   read_uint64o   s   zResponseBuffer.read_uint64Fnum_rowsencodingnullablenull_objc              	   C   s   g }|j }|r| |nd }t|D ]N}d}	d}
	 |  }|	|d@ |
> 7 }	|d@ dkr,n|
d7 }
q| |	}|rA|| rA|| q|r\z	||| W q ty[   ||  Y qw || q|S r2   )appendr0   ranger1   r:   UnicodeDecodeErrorhex)r   rC   rD   rE   rF   columnappnull_mapixr)   r6   r7   r.   r   r   r   read_str_colr   s0   


zResponseBuffer.read_str_colc                    s.   |  |   fddtd| D S )Nc                    s    g | ]}t  ||  qS r   )r   ).0r.   r   r)   r   r   
<listcomp>   s     z1ResponseBuffer.read_bytes_col.<locals>.<listcomp>r   )r0   rH   )r   r)   rC   r   rQ   r   read_bytes_col   s    zResponseBuffer.read_bytes_colc              	   C   s   |  || }g }|j}td|| |D ])}z|t||||  |d W q ty=   |||||    Y qw |S )Nr    )r0   rG   rH   strrstriprI   rJ   )r   r)   rC   rD   r   rK   rL   rN   r   r   r   read_fixed_str_col   s   $z!ResponseBuffer.read_fixed_str_col
array_typec                 C   s8   t  |}|j| }| |}|| tr|  |S r9   )arrayitemsizer0   	frombytes	must_swapbyteswap)r   rX   rC   rK   r)   r7   r   r   r   
read_array   s   



zResponseBuffer.read_arrayc                 C   s   | j S r9   )r   rA   r   r   r   last_message   s   zResponseBuffer.last_messagec                 C   s   | j r| j   d | _ d S d S r9   )r   closerA   r   r   r   r`      s   

zResponseBuffer.close)FN)__name__
__module____qualname__slotsr   r   r(   r?   r0   r1   r8   rU   r;   rB   boolr   r   rO   rS   rW   r^   propertyr_   r`   r   r   r   r   r      s8    

	r   )sysrY   typingr   r   $clickhouse_connect.driver.exceptionsr   clickhouse_connect.driver.typesr   	byteorderr\   r   r   r   r   r   <module>   s    
