o
    EDih                     @   sl   d dl mZmZ ddlmZ ddl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 )    )Structerror   )
exceptions   )read_varintc                       ,   e Zd Z fddZdd Zdd Z  ZS )CommonSerializationc                    s   || _ tt|   d S N)columnsuperr	   __init__)selfr   	__class__ W/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_driver/columns/base.pyr      s   zCommonSerialization.__init__c                 C      |S r
   r   r   n_itemsbufr   r   r   read_sparse      zCommonSerialization.read_sparsec                 C   r   r
   r   )r   itemsr   r   r   apply_sparse   r   z CommonSerialization.apply_sparse__name__
__module____qualname__r   r   r   __classcell__r   r   r   r   r	      s    r	   c                       r   )SparseSerializationc                    s&   g | _ d | _tt| j|i | d S r
   )sparse_indexesitems_totalr   r    r   )r   argskwargsr   r   r   r      s   zSparseSerialization.__init__c           	      C   sh   g }d}d}d}d}|s,t |}||@ }|| M }||d 7 }|s*|d7 }|| |r|| _|| _|S )Nr   l            Fr   )r   appendr!   r"   )	r   r   r   r!   r"   non_default_itemsEND_OF_GRANULE_FLAGend_of_granule
group_sizer   r   r   r      s"   


zSparseSerialization.read_sparsec                 C   sZ   | j j}| j jr| j |gd }|g| jd  }t| jD ]\}}|| ||d < q|S )Nr   r   )r   
null_valueafter_read_itemsr"   	enumerater!   )r   r   defaultrvitem_numberir   r   r   r   1   s   z SparseSerialization.apply_sparser   r   r   r   r   r       s    r    c                       s   e Zd ZdZdZdZdZdZdZdZ	d  f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!ddZdd Zdd Zdd Z  ZS )"ColumnNFr   c                    sP   d| _ || _|| _t| | _d| _|d | _| jjdd| _t	t
|   d S )NFcontextinput_format_null_as_default)nullabletypes_check_enabledhas_custom_serializationr	   serializationinput_null_as_defaultr2   client_settingsgetr   r1   r   )r   types_checkr6   r$   r   r   r   r   I   s   

zColumn.__init__c                 C   s   t d|S )Nz<{}Br   formatr   r   r   r   r   make_null_structW   s   zColumn.make_null_structc                 C      |  |}|||jS r
   )r?   unpackreadsizer   r   r   sr   r   r   _read_nulls_mapZ      
zColumn._read_nulls_mapc                 C   s0   |  t|}dd |D }||j|  d S )Nc                 S   s   g | ]}|d u qS r
   r   ).0xr   r   r   
<listcomp>`   s    z+Column._write_nulls_map.<locals>.<listcomp>)r?   lenwritepack)r   r   r   rE   r   r   r   _write_nulls_map^   s   zColumn._write_nulls_mapc                 C   s   t || jst|d S r
   )
isinstancepy_typesr   ColumnTypeMismatchException)r   valuer   r   r   check_item_typec   s   
zColumn.check_item_typec           
      C   s   | j }| j}| j}| j}| jr| j}nd}| j s#|s#|s#|s#| js#|S | j r-dgt| nd }t|D ]&\}}	|	d u rI|rDd||< |}	n|rH|}	n|rO||	 |rU||	 |	||< q3| jrd| j||d |S )NFT	nulls_map)	r4   r*   r8   
check_itemr5   rS   before_write_itemsrK   r,   )
r   r   r4   r*   null_as_defaultrV   rS   rU   r0   rI   r   r   r   prepare_itemsg   s<   
zColumn.prepare_itemsc                 C   s"   | j r	| || | || d S r
   )r4   rN   _write_datar   r   r   r   r   r   
write_data   s   zColumn.write_datac                 C   s   |  |}| || d S r
   )rY   write_items)r   r   r   preparedr   r   r   rZ      s   
zColumn._write_datac                 C      t r
   NotImplementedErrorr[   r   r   r   r]      r   zColumn.write_itemsc                 C   sB   | j ||}| jr| ||}nd }| j|||d}| j |S )NrT   )r7   r   r4   rF   
_read_datar   )r   r   r   rU   r   r   r   r   	read_data   s   zColumn.read_datac                    sD   |  || | jr|  |S |d ur t fddt|D S  S )Nc                 3   s$    | ]\}}|r
d n | V  qd S r
   r   )rH   r0   is_nullr   r   r   	<genexpr>   s
    
z$Column._read_data.<locals>.<genexpr>)
read_itemsr+   tupler,   )r   r   r   rU   r   re   r   rb      s   zColumn._read_datac                 C   r_   r
   r`   r   r   r   r   rg      r   zColumn.read_itemsc                 C   s(   | j rt|}|rt| | _d S d S d S r
   )r6   r   r    r7   )r   r   use_custom_serializationr   r   r   read_state_prefix   s   zColumn.read_state_prefixc                 C   s   d S r
   r   )r   r   r   r   r   write_state_prefix   r   zColumn.write_state_prefix)FFr
   )r   r   r   ch_typerP   rV   r+   rW   r5   r*   r   r?   rF   rN   rS   rY   r\   rZ   r]   rc   rb   rg   rj   rk   r   r   r   r   r   r1   =   s,    &
r1   c                   @   s,   e Zd ZdZdZdd Zdd Zdd ZdS )	FormatColumnz2
    Uses struct.pack for bulk items writing.
    Nc                 C   s   t d|| jS )Nz<{}{}r<   r>   r   r   r   make_struct   s   zFormatColumn.make_structc              
   C   sH   |  t|}z||j|  W d S  ty# } zt|d }~ww r
   )rn   rK   rL   rM   struct_errorr   StructPackException)r   r   r   rE   er   r   r   r]      s   
zFormatColumn.write_itemsc                 C   r@   r
   )rn   rA   rB   rC   rD   r   r   r   rg      rG   zFormatColumn.read_items)r   r   r   __doc__r=   rn   r]   rg   r   r   r   r   rm      s    rm   N)structr   r   ro    r   varintr   objectr	   r    r1   rm   r   r   r   r   <module>   s    * 