U
    dª/ež  ã                   @   s@   d dl mZmZ ddlmZ G dd„ deƒZG dd„ deƒZdS )	é    )ÚStructÚerroré   )Ú
exceptionsc                       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                    sD   d| _ || _d| _d|kr2|d j}| dd¡| _tt| ƒ ¡  d S )NFÚcontextZinput_format_null_as_default)ÚnullableÚtypes_check_enabledÚinput_null_as_defaultZclient_settingsÚgetÚsuperr   Ú__init__)ÚselfZtypes_checkÚkwargsÚsettings©Ú	__class__© úB/tmp/pip-unpacked-wheel-mds_o03w/clickhouse_driver/columns/base.pyr      s    
 ÿzColumn.__init__c                 C   s   t d |¡ƒS )Nz<{}B©r   Úformat©r   Ún_itemsr   r   r   Úmake_null_struct   s    zColumn.make_null_structc                 C   s   |   |¡}| | |j¡¡S ©N)r   ÚunpackÚreadÚsize©r   r   ÚbufÚsr   r   r   Ú_read_nulls_map    s    
zColumn._read_nulls_mapc                 C   s0   |   t|ƒ¡}dd„ |D ƒ}| |j|Ž ¡ d S )Nc                 S   s   g | ]}|d k‘qS r   r   )Ú.0Úxr   r   r   Ú
<listcomp>&   s     z+Column._write_nulls_map.<locals>.<listcomp>)r   ÚlenÚwriteÚpack)r   Úitemsr   r    r   r   r   Ú_write_nulls_map$   s    zColumn._write_nulls_mapc                 C   s   t || jƒst |¡‚d S r   )Ú
isinstanceÚpy_typesr   ZColumnTypeMismatchException)r   Úvaluer   r   r   Úcheck_item_type)   s    zColumn.check_item_typec           
      C   sÌ   | j }| j}| j}| j}| jr&| j}nd}| j sF|sF|sF|sF| jsF|S | j rZdgt|ƒ nd }t|ƒD ]L\}}	|	d kr’|rˆd||< |}	qª|rª|}	n|rž||	ƒ |rª||	ƒ |	||< qf| jrÈ| j||d |S )NFT©Ú	nulls_map)	r   Ú
null_valuer
   Ú
check_itemr	   r-   Úbefore_write_itemsr%   Ú	enumerate)
r   r(   r   r0   Znull_as_defaultr1   r-   r/   Úir#   r   r   r   Úprepare_items-   s:    ÿÿ
zColumn.prepare_itemsc                 C   s"   | j r|  ||¡ |  ||¡ d S r   )r   r)   Ú_write_data©r   r(   r   r   r   r   Ú
write_dataS   s    zColumn.write_datac                 C   s   |   |¡}|  ||¡ d S r   )r5   Úwrite_items)r   r(   r   Úpreparedr   r   r   r6   Y   s    
zColumn._write_datac                 C   s   t ‚d S r   ©ÚNotImplementedErrorr7   r   r   r   r9   ]   s    zColumn.write_itemsc                 C   s(   | j r|  ||¡}nd }| j|||dS )Nr.   )r   r!   Ú
_read_data©r   r   r   r/   r   r   r   Ú	read_data`   s    zColumn.read_datac                    sD   |   ||¡‰ | jr|  ˆ |¡S |d k	r@t‡ fdd„t|ƒD ƒƒS ˆ S )Nc                 3   s"   | ]\}}|rd nˆ | V  qd S r   r   )r"   r4   Zis_null©r(   r   r   Ú	<genexpr>n   s   ÿz$Column._read_data.<locals>.<genexpr>)Ú
read_itemsÚafter_read_itemsÚtupler3   r>   r   r@   r   r=   h   s    þzColumn._read_datac                 C   s   t ‚d S r   r;   )r   r   r   r   r   r   rB   t   s    zColumn.read_itemsc                 C   s   d S r   r   ©r   r   r   r   r   Úread_state_prefixw   s    zColumn.read_state_prefixc                 C   s   d S r   r   rE   r   r   r   Úwrite_state_prefixz   s    zColumn.write_state_prefix)F)N)Ú__name__Ú
__module__Ú__qualname__Zch_typer+   r1   rC   r2   r	   r0   r   r   r!   r)   r-   r5   r8   r6   r9   r?   r=   rB   rF   rG   Ú__classcell__r   r   r   r   r      s*   &
r   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   sT   |   t|ƒ¡}z| |j|Ž ¡ W n, tk
rN } zt |¡‚W 5 d }~X Y nX d S r   )rM   r%   r&   r'   Ústruct_errorr   ZStructPackException)r   r(   r   r    Úer   r   r   r9   ˆ   s
    zFormatColumn.write_itemsc                 C   s   |   |¡}| | |j¡¡S r   )rM   r   r   r   r   r   r   r   rB      s    
zFormatColumn.read_items)rH   rI   rJ   Ú__doc__r   rM   r9   rB   r   r   r   r   rL   ~   s
   rL   N)	Ústructr   r   rN   Ú r   Úobjectr   rL   r   r   r   r   Ú<module>   s   x