o
    EDi                  
   @   s  d dl Z d dlmZmZmZ d dlmZ d dlmZmZm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ dZdZdedefddZdededee fddZdedefddZdedefddZdedefddZdedefddZdede dede	fd d!Z!ded"e"de	fd#d$Z#d%ed&e j de	fd'd(Z$d)efd*d+Z%d,ee d-ed.edee fd/d0Z&d)ed1e'd2ee  d3e(def
d4d5Z)dS )6    N)datetimedatetzinfo)IPv4Address)SequenceOptionalAny)UUIDSafeUUID)tzutil)int_size)NONE_IN_NULLABLE_COLUMN)
ByteSource)np)r      ;   Z   x               i  i0  iN  m  )r   r   <   [   y               i  i1  iO  in  sourcenum_rowsc                 C   s@   |  d|}tj}g }|j}|D ]}|t}||_|| q|S )NI)
read_arrayr   __new__append_ip)r    r!   column
fast_ip_v4new_colappxipv4 r-   [/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_connect/driver/dataconv.pyread_ipv4_col   s   
r/   tz_infoc                    sF   |  d|}d u rtj  fdd|D S tj  fdd|D S )Nr"   c                    s   g | ]} |qS r-   r-   .0ts)ftsr-   r.   
<listcomp>#       z%read_datetime_col.<locals>.<listcomp>c                    s   g | ]} |qS r-   r-   r1   r4   r0   r-   r.   r5   %   s    )r#   r   utcfromtimestampr   fromtimestamp)r    r!   r0   	src_arrayr-   r7   r.   read_datetime_col   s   r;   daysreturnc           	      C   s   t | d d\}}t |d\}}t |d\}}t |d\}}|d> |d  |d  | d	 }|d
ks6|d
kr>t|d ddS |dkrN|dksL|d dkrNtnt}|d d? }||| k rf|d8 }||| k s\t||d |d ||  S )Niv i: i  i  r      i  d   iA           r      i  r         )divmodr   MONTH_DAYS_LEAP
MONTH_DAYS)	r<   	cycles400rem	cycles100cyclesyearsyearm_listmonthr-   r-   r.   epoch_days_to_date(   s    $rQ   c                 C   s   |  d|}dd |D S )NHc                 S      g | ]}t |qS r-   rQ   r2   r+   r-   r-   r.   r5   9   r6   z!read_date_col.<locals>.<listcomp>)r#   r    r!   r'   r-   r-   r.   read_date_col7   s   rW   c                 C   s&   |  tdkrdnd|}dd |D S )Nr>   lic                 S   rS   r-   rT   rU   r-   r-   r.   r5   >   r6   z#read_date32_col.<locals>.<listcomp>)r#   r   rV   r-   r-   r.   read_date32_col<   s   rZ   c                 C   s   |  d|d }tdd}tj}tj}tj}g }|j}t|D ]/}	|	d> }
||
 d> ||
d  B }|dkr:|| q|t}||d| ||d| || q|S )	NQr>   r   )intrA   @   r\   is_safe)	r#   r	   r$   r
   unsafeobject__setattr__r%   range)r    r!   v
empty_uuidnew_uuidr_   osetr'   r*   rY   ix	int_value	fast_uuidr-   r-   r.   read_uuid_colA   s"   


rj   
array_typenull_objc                    s0   |  || ||  fddt|D S )Nc                    s    g | ]}| r
n | qS r-   r-   r2   rg   r'   null_maprl   r-   r.   r5   Y   s     z'read_nullable_array.<locals>.<listcomp>)
read_bytesr#   rb   )r    rk   r!   rl   r-   rn   r.   read_nullable_arrayV   s   
rq   ro   c                    s    fddt tD S )Nc                    s$   g | ]} | d kr| nqS )r   r-   rm   ro   rl   r    r-   r.   r5   ]   s   $ z)build_nullable_column.<locals>.<listcomp>)rb   len)r    ro   rl   r-   rr   r.   build_nullable_column\   s   rt   indexkeysc                 C   s4   g }|D ]}|dkr| | q| | |  q|S )Nr   )r%   )ru   rv   rl   r'   keyr-   r-   r.   build_lc_nullable_column`   s   rx   r'   c                 C   s&   t jt| ft jd}| |d d < |S )N)dtype)r   emptyrs   r`   )r'   arrr-   r-   r.   to_numpy_arrayj   s   r|   data	start_rowend_rowc                 C   s   t t| ||  S )N)tuplezip)r}   r~   r   r-   r-   r.   pivotp   s   r   nullableencodingdestc                 C   s   |j }| D ]@}|s|s|d u rt  S |d q|r ||}nt|}t|}	 |d@ }|dL }|dkr:|| n|d|B  q)||7 }qdS )Nr   T         )r%   r   encodebytesrs   )r'   r   r   r   r*   r+   szbr-   r-   r.   write_str_colt   s(   

r   )*arrayr   r   r   	ipaddressr   typingr   r   r   uuidr	   r
   clickhouse_connect.driverr    clickhouse_connect.driver.commonr    clickhouse_connect.driver.errorsr   clickhouse_connect.driver.typesr   !clickhouse_connect.driver.optionsr   rH   rG   r\   r/   r;   rQ   rW   rZ   rj   strrq   r   rt   rx   r|   r   bool	bytearrayr   r-   r-   r-   r.   <module>   s0    	
"&