o
    EDi                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ e Ze eZG dd dZdedefddZdS )    N)Union)registry)write_leb128)StreamCompleteExceptionStreamFailureError)InsertContext)NumpyResult)QueryResultQueryContext)
ByteSource)get_compressorc                
   @   sD   e Zd Zeefdededeee	f fddZ
edefddZdS )	NativeTransformsourcecontextreturnc                    s   g g d j  fdd d u r%jr!t S tg S fdd}jrCdd D }t| tt|S td | ttjS )Nr   c            
   
      s.  g } zmzj rd  }W n ty   Y W d S w  }t|D ]H} } } dkrMd ur;|n|}| t|}| n| }|dkr\| t	  q%
| ||}| | q%W n! ty }	 z  t|	trjrttjd  d }	~	ww  d7  | S )N   r      )
block_info
read_bytesread_leb128r   rangeread_leb128_strappendr   get_from_nametuplestart_columnread_column	Exceptionclose
isinstancelast_messager   extract_error_message)
result_blocknum_colsnum_rowscol_num	orig_name	type_name	disp_namecol_typecolumnex)	block_num	col_typesr   namesrenamerr    \/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_connect/driver/transform.py	get_block   sF   




z1NativeTransform.parse_response.<locals>.get_blockc                  3   s$     V  	  } | d u rd S | V  q)Nr0   )
next_block)first_blockr2   r0   r1   genE   s   z+NativeTransform.parse_response.<locals>.genc                 S   s    g | ]}t |d r|jndqS )dtypeO)hasattrr6   ).0colr0   r0   r1   
<listcomp>N   s     z2NativeTransform.parse_response.<locals>.<listcomp>)column_renamer	use_numpyr   r	   r   column_oriented)r   r   r5   	res_typesr0   )r,   r-   r   r4   r2   r.   r/   r   r1   parse_response   s   &zNativeTransform.parse_responsec                    s   t j  fdd}| S )Nc                  3   s$     D ]} t }|| j7 }t| j| t| j| t| j| j| j	D ]Y\}}}|
 }tt|| ||7 }|j
 }tt|| ||7 }| z	||| W q$ ty} } ztjd||jdd |_d
 V  W Y d }~  d S d }~ww  |V  q  }|r|V  d S d S )Nz1Error serializing column `%s` into data type `%s`T)exc_infoz$INTERNAL EXCEPTION WHILE SERIALIZING)r3   	bytearrayprefixr   column_count	row_countzipcolumn_namescolumn_typescolumn_dataencodeleninsert_namer   write_columnr   loggererrornameinsert_exceptioncompress_blockflush)blockoutputcol_namer)   datacol_encr+   footer
compressorr   r0   r1   	chunk_genV   s<   





z/NativeTransform.build_insert.<locals>.chunk_gen)r   compression)r   r\   r0   rZ   r1   build_insertR   s   
zNativeTransform.build_insertN)__name__
__module____qualname__staticmethod
_EMPTY_CTXr   r
   r   r   r	   r@   r   r^   r0   r0   r0   r1   r      s
    $=r   messager   c                 C   sv   t | dkr| dd  } | d }|dkr| |d  } z|  }W |S  ty:   d|  dd   d}Y |S w )Ni   i zCode: z$unrecognized data found in stream: `   `)rK   findrJ   decodeUnicodeErrorhex)rd   error_startmessage_strr0   r0   r1   r!   x   s   
r!   )loggingtypingr   clickhouse_connect.datatypesr    clickhouse_connect.driver.commonr   $clickhouse_connect.driver.exceptionsr   r    clickhouse_connect.driver.insertr   !clickhouse_connect.driver.npqueryr   clickhouse_connect.driver.queryr	   r
   clickhouse_connect.driver.typesr   %clickhouse_connect.driver.compressionr   rc   	getLoggerr_   rN   r   bytesstrr!   r0   r0   r0   r1   <module>   s    
f