U
    d/e                     @   sD   d dl mZ ddlmZ ddlmZ ddlmZ G dd deZd	S )
    UUID   )FormatColumn   )errors)
MAX_UINT64c                   @   s@   e Zd ZdZeefZdZdd Zdd Z	ddd	Z
dd
dZdS )
UUIDColumnr   Qc           	      C   sr   t |}d gd | }t|D ]0\}}d| }|d? t@ ||< |t@ ||d < q| d| }||j|  d S Nr   @   r   )len	enumerater   make_structwritepack)	selfitemsbufn_itemsZuint_64_pairsixi2s r   H/tmp/pip-unpacked-wheel-mds_o03w/clickhouse_driver/columns/uuidcolumn.pywrite_items   s    zUUIDColumn.write_itemsc                 C   sd   |  d| }|||j}d g| }t|D ](}d| }|| d> ||d   ||< q2t|S r   )r   unpackreadsizerangetuple)r   r   r   r   r   Zuint_128_itemsr   r   r   r   r   
read_items   s    
zUUIDColumn.read_itemsNc                    s8   |d krt dd  D S t  fddt|D S d S )Nc                 s   s   | ]}t |d V  qdS )intNr   ).0itemr   r   r   	<genexpr>(   s     z.UUIDColumn.after_read_items.<locals>.<genexpr>c                 3   s(   | ] \}}|rd nt  | dV  qd S )Nr#   r   )r%   r   Zis_nullr   r   r   r'   *   s   )r!   r   )r   r   	nulls_mapr   r(   r   after_read_items&   s
    zUUIDColumn.after_read_itemsc              	   C   sx   | j }t|D ]d\}}|r,|| r,|||< qzt|ts@t|}W n$ tk
rf   td|Y nX |j||< qd S )NzCannot parse uuid '{}')	
null_valuer   
isinstancer   
ValueErrorr   ZCannotParseUuidErrorformatr$   )r   r   r)   r+   r   r&   r   r   r   before_write_items/   s    

zUUIDColumn.before_write_items)N)N)__name__
__module____qualname__Zch_typestrr   Zpy_typesr.   r   r"   r*   r/   r   r   r   r   r	      s   
	r	   N)	uuidr   baser    r   writerr   r	   r   r   r   r   <module>   s   