o
    EDi                     @   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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   s,   d| _ d| _d| _|| _|j| _t | _d S )Ni   r   )r   r	   buf_szsourcer   bytesr   )selfr    r   Y/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_connect/driver/buffer.py__init__   s   zResponseBuffer.__init__szc                 C   s   | j | | jkr|  j |7  _ | j| j | | j  S t| j| j | j }d| _ d| _t||k rkt| jd }|s;tt|}t|| |krM|| n|t| }||d |  || _|| _|| _ t||k s1|S )Nr   )	r	   r   r   	bytearraylennextr   r   extend)r   r   bridgechunkxtailr   r   r   
read_bytes   s(   zResponseBuffer.read_bytesreturnc                 C   st   | j | jk r|  j d7  _ | j| j d  S d| _d| _ t| jd }|s%tt|}|dkr6|| _d| _ || _|d S )N   r   )r	   r   r   r   r   r   r   )r   r   r   r   r   r   	read_byte-   s   zResponseBuffer.read_bytec                 C   s<   d}d}	 |   }||d@ |> 7 }|d@ dkr|S |d7 }qNr   T         )r!   )r   r   shiftbr   r   r   read_leb128=   s   zResponseBuffer.read_leb128c                 C   s   |   }| | S N)r(   r   decode)r   r   r   r   r   read_leb128_strG   s   zResponseBuffer.read_leb128_strc                 C   s   t j| ddddS )N   littleF)signed)int
from_bytesr   r   r   r   r   read_uint64K   s   zResponseBuffer.read_uint64FN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 r"   )appendr   ranger!   r*   UnicodeDecodeErrorhex)r   r3   r4   r5   r6   columnappnull_mapixr   r&   r'   r   r   r   r   read_str_colN   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>m   s     z1ResponseBuffer.read_bytes_col.<locals>.<listcomp>r   )r   r8   )r   r   r3   r   rA   r   read_bytes_colk   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    )r   r7   r8   strrstripr9   r:   )r   r   r3   r4   r   r;   r<   r>   r   r   r   read_fixed_str_colo   s   $z!ResponseBuffer.read_fixed_str_col
array_typec                 C   s8   t  |}|j| }| |}|| tr|  |S r)   )arrayitemsizer   	frombytes	must_swapbyteswap)r   rH   r3   r;   r   r'   r   r   r   
read_arrayz   s   



zResponseBuffer.read_arrayc                 C   s   | j S r)   )r   r1   r   r   r   last_message   s   zResponseBuffer.last_messagec                 C   s   | j r| j   d | _ d S d S r)   )r   closer1   r   r   r   rP      s   

zResponseBuffer.close)FN)__name__
__module____qualname__slotsr   r/   r   r!   r(   rE   r+   r2   boolr   r   r?   r   rC   rG   rN   propertyrO   rP   r   r   r   r   r      s6    

	r   )sysrI   typingr   r   $clickhouse_connect.driver.exceptionsr   clickhouse_connect.driver.typesr   	byteorderrL   r   r   r   r   r   <module>   s    
