o
    ED©i§  ã                   @   s„   d dl mZmZ d dlmZmZmZ d dlmZ d dl	m
Z
mZ G dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZdS )é   )Úget_inner_specÚget_inner_columns_with_types)Úread_varintÚread_binary_uint8Úread_binary_int32)Úwrite_varint)Úwrite_binary_uint8Úwrite_binary_int32c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )Ú	BlockInfoFéÿÿÿÿc                 C   s:   t d|ƒ t| j|ƒ t d|ƒ t| j|ƒ t d|ƒ d S )Nr   é   é    )r   r   Úis_overflowsr	   Ú
bucket_num)ÚselfÚbuf© r   úP/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_driver/block.pyÚwrite   s
   

zBlockInfo.writec                 C   s>   	 t |ƒ}|s	d S |dkrtt|ƒƒ| _n	|dkrt|ƒ| _q)NTr   r   )r   Úboolr   r   r   r   )r   r   Ú	field_numr   r   r   Úread   s   
÷zBlockInfo.readN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r
      s
    
r
   c                       sb   e Zd Z		d‡ fdd„	Zdd„ Zedd„ ƒZed	d
„ ƒZdd„ Zdd„ Z	dd„ Z
dd„ Z‡  ZS )Ú	BaseBlockNFc                    s>   |pg | _ || _|ptƒ | _|  |pg ¡| _tt| ƒ ¡  d S ©N)	Úcolumns_with_typesÚtypes_checkr
   ÚinfoÚ	normalizeÚdataÚsuperr   Ú__init__)r   r   r!   r   r   ©Ú	__class__r   r   r#   #   s
   
zBaseBlock.__init__c                 C   s   |S r   r   ©r   r!   r   r   r   r    ,   ó   zBaseBlock.normalizec                 C   ó   t ‚r   ©ÚNotImplementedError©r   r   r   r   Únum_columns/   ó   zBaseBlock.num_columnsc                 C   r(   r   r)   r+   r   r   r   Únum_rows3   r-   zBaseBlock.num_rowsc                 C   r(   r   r)   r+   r   r   r   Úget_columns7   r'   zBaseBlock.get_columnsc                 C   r(   r   r)   r+   r   r   r   Úget_rows:   r'   zBaseBlock.get_rowsc                 C   r(   r   r)   ©r   Úindexr   r   r   Úget_column_by_index=   r'   zBaseBlock.get_column_by_indexc                 C   s   t t| jŽ ƒS r   )ÚlistÚzipr!   r+   r   r   r   Ú
transposed@   s   zBaseBlock.transposed)NNNF)r   r   r   r#   r    Úpropertyr,   r.   r/   r0   r3   r6   Ú__classcell__r   r   r$   r   r   "   s    ÿ	

r   c                   @   sT   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚColumnOrientedBlockc                 C   s    |sg S |   |¡ |  |¡ |S r   )Ú_check_number_of_columnsÚ_check_all_columns_equal_lengthr&   r   r   r   r    E   s
   

zColumnOrientedBlock.normalizec                 C   ó
   t | jƒS r   ©Úlenr!   r+   r   r   r   r,   M   ó   
zColumnOrientedBlock.num_columnsc                 C   s   | j r
t| jd ƒS dS ©Nr   )r,   r>   r!   r+   r   r   r   r.   Q   s   zColumnOrientedBlock.num_rowsc                 C   ó   | j S r   ©r!   r+   r   r   r   r/   U   ó   zColumnOrientedBlock.get_columnsc                 C   ó   |   ¡ S r   ©r6   r+   r   r   r   r0   X   ó   zColumnOrientedBlock.get_rowsc                 C   s
   | j | S r   rB   r1   r   r   r   r3   [   s   
z'ColumnOrientedBlock.get_column_by_indexc                 C   s2   t | jƒ}t |ƒ}||krd ||¡}t|ƒ‚d S )NúExpected {} columns, got {})r>   r   ÚformatÚ
ValueError)r   r!   Úexpected_row_lenÚgotÚmsgr   r   r   r:   ^   s   
þz,ColumnOrientedBlock._check_number_of_columnsc                 C   s>   t |d ƒ}|D ]}t |ƒ}||krd ||¡}t|ƒ‚qd S )Nr   zExpected {} rows, got {})r>   rH   rI   )r   r!   ÚexpectedÚcolumnrK   rL   r   r   r   r;   f   s   þþz3ColumnOrientedBlock._check_all_columns_equal_lengthN)r   r   r   r    r7   r,   r.   r/   r0   r3   r:   r;   r   r   r   r   r9   D   s    

r9   c                   @   sŠ   e Zd ZefZeefZee Zdd„ Z	e
dd„ ƒZe
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„ Zdd„ ZdS )ÚRowOrientedBlockc                 C   sF   |sg S |d }| j r|  |¡ t|tƒr|  |¡ |S |  |¡ |S r@   )r   Ú_check_row_typeÚ
isinstanceÚdictÚ_mutate_dicts_to_rowsÚ_check_rows)r   r!   Ú	first_rowr   r   r   r    u   s   



þzRowOrientedBlock.normalizec                 C   s,   | j d ur
t| j ƒS | jrt| jd ƒS dS r@   )r   r>   r.   r!   r+   r   r   r   r,   †   s   

zRowOrientedBlock.num_columnsc                 C   r<   r   r=   r+   r   r   r   r.      r?   zRowOrientedBlock.num_rowsc                 C   rD   r   rE   r+   r   r   r   r/   ‘   rF   zRowOrientedBlock.get_columnsc                 C   rA   r   rB   r+   r   r   r   r0   ”   rC   zRowOrientedBlock.get_rowsc                    s   ‡ fdd„| j D ƒS )Nc                    s   g | ]}|ˆ  ‘qS r   r   )Ú.0Úrow©r2   r   r   Ú
<listcomp>˜   s    z8RowOrientedBlock.get_column_by_index.<locals>.<listcomp>rB   r1   r   rX   r   r3   —   s   z$RowOrientedBlock.get_column_by_indexc                 C   s    d}| j r| j}|  || j|¡S )NF)r   Ú_check_dict_row_typeÚ_pure_mutate_dicts_to_rowsr   )r   r!   Úcheck_row_typer   r   r   rS   š   s   ýz&RowOrientedBlock._mutate_dicts_to_rowsc              	   C   s¬   g }|D ]\}}d }|  d¡rtd|ƒ}t|ƒ}| ||f¡ qt|ƒD ]/\}	}
|r.||
ƒ g }|D ]\}}|d u rB| |
| ¡ q2| |  |
| ||¡¡ q2|||	< q$|S )NÚNested)Ú
startswithr   r   ÚappendÚ	enumerater[   )r   r!   r   r\   Úcolumns_with_cwtÚnameÚtype_ÚcwtÚ
inner_specÚirW   Únew_datar   r   r   r[   ¥   s&   


ÿ
z+RowOrientedBlock._pure_mutate_dicts_to_rowsc                 C   sX   t | jƒ}t |d ƒ}||krd ||¡}t|ƒ‚| jr(| j}|D ]}||ƒ q!d S d S )Nr   rG   )r>   r   rH   rI   r   Ú_check_tuple_row_type)r   r!   rJ   rK   rL   r\   rW   r   r   r   rT   Ã   s   

ýzRowOrientedBlock._check_rowsc                 C   ó"   t || jƒstd t|ƒ¡ƒ‚d S )Nz:Unsupported row type: {}. dict, list or tuple is expected.)rQ   Úsupported_row_typesÚ	TypeErrorrH   Útype©r   rW   r   r   r   rP   Ð   ó   
þÿz RowOrientedBlock._check_row_typec                 C   ri   )Nz4Unsupported row type: {}. list or tuple is expected.)rQ   Útuple_row_typesrk   rH   rl   rm   r   r   r   rh   ×   rn   z&RowOrientedBlock._check_tuple_row_typec                 C   ri   )Nz+Unsupported row type: {}. dict is expected.)rQ   Údict_row_typesrk   rH   rl   rm   r   r   r   rZ   Þ   rn   z%RowOrientedBlock._check_dict_row_typeN)r   r   r   rR   rp   r4   Útuplero   rj   r    r7   r,   r.   r/   r0   r3   rS   r[   rT   rP   rh   rZ   r   r   r   r   rO   p   s$    

rO   N)Úcolumns.utilr   r   Úreaderr   r   r   Úvarintr   Úwriterr   r	   Úobjectr
   r   r9   rO   r   r   r   r   Ú<module>   s    ",