U
    d/e
                     @   sx   d dl mZmZ d dlmZmZ d dlmZ 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dS )   )ColumnOrientedBlock	BlockInfo)read_columnwrite_column)read_binary_str)write_varintread_varint)write_binary_str)definesc                       s,   e Zd Z fddZdd Zdd Z  ZS )BlockOutputStreamc                    s   || _ || _tt|   d S N)foutcontextsuperr   __init__)selfr   r   	__class__ D/tmp/pip-unpacked-wheel-mds_o03w/clickhouse_driver/streams/native.pyr   
   s    zBlockOutputStream.__init__c           	   	   C   s   | j jj}|tjkr"|j| j |j}|j	}t
|| j t
|| j t|jD ]n\}\}}t|| j t|| j |rPz||}W n tk
r   tdY nX t| j |||| j|jd qP|   d S )NzDifferent rows length)types_check)r   server_inforevisionr
   !DBMS_MIN_REVISION_WITH_BLOCK_INFOinfowriter   Znum_columnsZnum_rowsr   	enumeratecolumns_with_typesr	   Zget_column_by_index
IndexError
ValueErrorr   r   finalize)	r   blockr   	n_columnsn_rowsiZcol_nameZcol_typeitemsr   r   r   r      s(    

 zBlockOutputStream.writec                 C   s   | j   d S r   )r   flush)r   r   r   r   r    +   s    zBlockOutputStream.finalize)__name__
__module____qualname__r   r   r    __classcell__r   r   r   r   r   	   s   r   c                       s&   e Zd Z fddZdddZ  ZS )BlockInputStreamc                    s   || _ || _tt|   d S r   )finr   r   r+   r   )r   r,   r   r   r   r   r   0   s    zBlockInputStream.__init__Nc                 C   s   t  }| jjj}|tjkr&|| j t| j}t| j}g g g   }}}t	|D ]P}	t
| j}
t
| j}||
 || |rRt| j||| j|d}|| qR| jjd rddlm} |}nt}|tt||||d}|S )N)	use_numpyr-   r   )NumpyColumnOrientedBlock)r   datar   )r   r   r   r   r
   r   readr,   r   ranger   appendr   Zclient_settingsZnumpy.blockr.   r   listzip)r   r-   r   r   r"   r#   r/   namestypesr$   Zcolumn_nameZcolumn_typecolumnr.   Z	block_clsr!   r   r   r   r0   6   s8    








 zBlockInputStream.read)N)r'   r(   r)   r   r0   r*   r   r   r   r   r+   /   s   r+   N)r!   r   r   Zcolumns.servicer   r   readerr   Zvarintr   r   writerr	    r
   objectr   r+   r   r   r   r   <module>   s   &