o
    EDi                     @   s   d dl Z d dlZd dlmZmZmZmZ 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 d dlmZ e eZed	ejZed
ZedZG dd dZdS )    N)OptionalSequenceListDict)get_from_nameunescape_identifier)ProgrammingError)Client)parse_callable)remove_sql_commentsz^\s*INSERT\s+INTO\s+(.*$)StringInt32c                   @   s   e Zd ZdZdefddZdd Zedd Zed	d
 Z	ede
eeef  fddZdd Zd$defddZdefddZdd Zdd Zdd Zd%defddZd d! Zd"d# ZdS )&Cursorz6
    See :ref:`https://peps.python.org/pep-0249/`
    clientc                 C   s4   || _ d| _d | _g | _g | _d| _g | _d| _d S )N   r   )r   	arraysizedatanamestypes	_rowcount_summary_ix)selfr    r   X/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_connect/dbapi/cursor.py__init__   s   
zCursor.__init__c                 C   s   | j d u r	tdd S )NzCursor is not valid)r   r	   r   r   r   r   check_valid$   s   
zCursor.check_validc                 C   s   dd t | j| jD S )Nc              	   S   s"   g | ]\}}||d d d d dfqS )NTr   ).0ntr   r   r   
<listcomp>*   s   " z&Cursor.description.<locals>.<listcomp>)zipr   r   r   r   r   r   description(   s   zCursor.descriptionc                 C      | j S N)r   r   r   r   r   rowcount,      zCursor.rowcountreturnc                 C   r%   r&   )r   r   r   r   r   summary0   r(   zCursor.summaryc                 C   s
   d | _ d S r&   )r   r   r   r   r   close4   s   
zCursor.closeN	operationc                 C   s   | j ||}|j| _t| j| _| j|j d| _	|j
r-|j
| _dd |jD | _d S | jrLdd tt| jd D | _dd | jd D | _d S d S )Nr   c                 S      g | ]}|j qS r   )namer   xr   r   r   r"   B       z"Cursor.execute.<locals>.<listcomp>c                 S   s   g | ]}d | qS )col_r   r/   r   r   r   r"   D   s    c                 S   r-   r   )	__class__r/   r   r   r   r"   E   r1   )r   query
result_setr   lenr   r   appendr*   r   column_namesr   column_typesr   range)r   r,   
parametersquery_resultr   r   r   execute7   s   zCursor.executec                 C   s   t t|}|sdS |d}t|d|d}|d |  }||d   }|d dkr9t|\}}}nd }d| vrCdS t	|d 
 }	|rZdd |D t|	krZdS d	d
 |D }
| j||
|	 g | _dS )NFr    (r   VALUESc                 S   s   h | ]}t |qS r   r   r/   r   r   r   	<setcomp>V   s    z*Cursor._try_bulk_insert.<locals>.<setcomp>c                 S   s   g | ]}t | qS r   )listvalues)r   rowr   r   r   r"   X   s    z+Cursor._try_bulk_insert.<locals>.<listcomp>T)	insert_rematchr   groupminfindstripr   upperrB   keyssetr   insertr   )r   r,   r   rF   temp	table_endtable_
op_columns	col_namesdata_valuesr   r   r   _try_bulk_insertG   s&   
zCursor._try_bulk_insertc              
   C   s   |r|  ||r
d S g | _z;|D ]6}| j||}| j|j | js&| jr7|j| jkr6t	
d| j|j| n|j| _|j| _| j|j qW n ty] } z	td| d|d }~ww t| j| _d| _d S )NzHInconsistent column names %s : %s for operation %s in cursor executemanyzInvalid parameters z passed to cursor executemanyr   )rV   r   r   r4   extendr5   r   r   r8   loggerwarningr9   r   r7   r*   	TypeErrorr	   r6   r   r   )r   r,   r;   	param_rowr<   exr   r   r   executemany]   s.   

zCursor.executemanyc                 C   s$   |    | j| jd  }| j| _|S r&   )r   r   r   r   )r   retr   r   r   fetchallt   s   zCursor.fetchallc                 C   s6   |    | j| jkrd S | j| j }|  jd7  _|S )Nr   )r   r   r   r   )r   valr   r   r   fetchonez   s   zCursor.fetchonesizec                 C   sV   |    |dk r| j| j }n|dkrg S t| j| | j}| j| j| }|| _|S )Nr   )r   r   r   rH   r   )r   rc   endr^   r   r   r   	fetchmany   s   zCursor.fetchmanyc                 C      t r&   NotImplementedErrorr   r   r   r   nextset      zCursor.nextsetc                 O   rf   r&   rg   )r   argskwargsr   r   r   callproc   rj   zCursor.callprocr&   )rb   )__name__
__module____qualname____doc__r
   r   r   propertyr$   r'   r   r   strr*   r+   r=   rV   r]   r_   ra   intre   ri   rm   r   r   r   r   r      s&    


r   )loggingretypingr   r   r   r   %clickhouse_connect.datatypes.registryr    clickhouse_connect.driver.commonr   $clickhouse_connect.driver.exceptionsr	   clickhouse_connect.driverr
    clickhouse_connect.driver.parserr   clickhouse_connect.driver.queryr   	getLoggerrn   rX   compile
IGNORECASErE   str_typeint_typer   r   r   r   r   <module>   s    
