o
    EDi8                     @   sd   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	m
Z
mZmZ dd	 ZG d
d deZdS )    )log   )read_binary_uint64)write_binary_int64   )Column)UInt8ColumnUInt16ColumnUInt32ColumnUInt64Columnc                 C   s$   | dd }||}t |fi |S )N   )LowCardinalityColumn)speccolumn_by_spec_gettercolumn_optionsinnernested r   g/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_driver/columns/lowcardinalitycolumn.pycreate_low_cardinality_column	   s   r   c                       sh   e Zd ZdZeeeedZdZ	dZ
e	e
B Z fddZ fddZ fd	d
Zdd ZdddZ  ZS )r   z~
    Stores column as index (unique elements) and keys.
    Good for de-duplication of large values with low cardinality.
    )r   r   r      i   i   c                    s&   || _ || _tt| jdi | d S )Nr   )init_kwargsnested_columnsuperr   __init__)selfr   kwargs	__class__r   r   r   %   s   zLowCardinalityColumn.__init__c                    s   t t| | t| d S N)r   r   read_state_prefixr   r   bufr   r   r   r!   *   s   z&LowCardinalityColumn.read_state_prefixc                    s   t t| | td| d S )Nr   )r   r   write_state_prefixr   r"   r   r   r   r$   /   s   z'LowCardinalityColumn.write_state_prefixc                 C   s  g g }}i }d}| j jrG|| j j d| j _d}|D ])}|d u r(|d q||}|d u r>t|}|||< || ||d  qn"|D ]}||}|d u rct|}t|||< || || qIt|sod S ttt|dd }	| j|	 di | j	}
| j
|	B }t|| tt|| |r| j | j jg| |dd  }| j || n| j || tt|| |
|| d S )NFTr   r   r      r   )r   nullableappend
null_valuegetlenintr   	int_typesr   serialization_typer   write_items
write_data)r   itemsr#   indexkeyskey_by_index_elementnested_is_nullablexkeyint_type
int_columnr-   index_to_writer   r   r   _write_data5   sP   







z LowCardinalityColumn._write_dataNc           
         s   |st  S t|}|d@ }| j| di | j}| jj}d| j_t|}| j|| |r5d dd    t| |||}	t  fdd|	D S )Nr   Fr    r   c                 3   s    | ]} | V  qd S r    r   ).0r5   r1   r   r   	<genexpr>   s    z2LowCardinalityColumn._read_data.<locals>.<genexpr>r   )tupler   r,   r   r   r&   	read_data)
r   n_itemsr#   	nulls_mapr-   key_typekeys_columnr&   
index_sizer2   r   r<   r   
_read_datax   s   zLowCardinalityColumn._read_datar    )__name__
__module____qualname____doc__r   r	   r
   r   r,   has_additional_keys_bitneed_update_dictionaryr-   r   r!   r$   r:   rE   __classcell__r   r   r   r   r      s    
Cr   N)mathr   readerr   writerr   baser   	intcolumnr   r	   r
   r   r   r   r   r   r   r   <module>   s    