o
    9f>                     @   sl   d dl mZ ddlmZ ddlmZ dZdZdZG dd	 d	e	Z
d
d ZG dd deZG dd deZdS )    )uuid4   )Escaper)RequestsTransportz2.0   pyformatc                   @   s   e Zd ZdZdS )Errorz
    Exception that is the base class of all other error exceptions.
    You can use this to catch all errors with one single except statement.
    N)__name__
__module____qualname____doc__ r   r   e/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_sqlalchemy/drivers/http/connector.pyr      s    r   c                  O   s   t | i |S )z
    Make new connection.
    )
Connection)argskwargsr   r   r   connect   s   r   c                       s@   e Zd ZeZ fddZdd Zdd Zdd Zd	d
 Z	  Z
S )r   c                    s<   t |dd }| | _| j|i || _tt|   d S )Nstream)boolpop	_prefetchtransport_cls	transportsuperr   __init__)selfr   r   r   	__class__r   r   r       s   zConnection.__init__c                 C      d S Nr   r   r   r   r   close)      zConnection.closec                 C   r   r   r   r    r   r   r   commit,   r"   zConnection.commitc                 C   r   r   r   r    r   r   r   rollback/   r"   zConnection.rollbackc                 C   s   t | S r   )Cursorr    r   r   r   cursor2   s   zConnection.cursor)r	   r
   r   r   r   r   r!   r#   r$   r&   __classcell__r   r   r   r   r      s    	r   c                       s  e Zd ZdZG dd deZe Ze ZdZ	dZ
dZdZ fddZedd Zed	d
 Zdd Zd/ddZd0ddZd/ddZdd Zdd Zd1ddZdd Zedd Zejdd Zdd  Zd/d!d"Zd#d$ Zed%d& Zd'd( Zd)d* Z d+d, Z!d-d. Z"  Z#S )2r%   a  
    These objects represent a database cursor, which is used to manage
    the context of a fetch operation.

    Cursors are not isolated, i.e., any changes done to the database
    by a cursor are immediately visible by other cursors or connections.
    c                   @   s   e Zd Zed\ZZZdS )zCursor.States   N)r	   r
   r   rangeNONERUNNINGFINISHEDr   r   r   r   States>   s    r-   Nc                    s&   || _ |   d| _tt|   d S )Nr   )_connection_reset_state
_arraysizer   r%   r   )r   
connectionr   r   r   r   P   s   zCursor.__init__c                 C   s   dS )Nr   r    r   r   r   rowcountV   s   zCursor.rowcountc                 C   s(   | j pg }| jp	g }dd t||D S )Nc              	   S   s"   g | ]\}}||d d d d dfqS )NTr   ).0name	type_coder   r   r   
<listcomp>`   s    z&Cursor.description.<locals>.<listcomp>)_columns_typeszip)r   columnstypesr   r   r   description[   s
   

zCursor.descriptionc                 C   r   r   r   r    r   r   r   r!   e   r"   zCursor.closec                 C   sF   |r|j }ni }|d}|r!ddd | D }|d | }|S )Nsettings, c                 s   s"    | ]\}}| d | V  qdS )=Nr   )r4   keyvaluer   r   r   	<genexpr>p   s    
z"Cursor._prepare.<locals>.<genexpr>z
 SETTINGS )execution_optionsgetjoinitems)r   raw_sqlcontextrD   r>   raw_settingsr   r   r   _prepareh   s   

zCursor._preparec                 C   sn   |}|d ur|| j | }|   |   | jj}d| ji}| ||}|j||d}| 	| | 
  d S )Nquery_idparams)_params_escaperescaper/   _begin_queryr.   r   	_query_idrK   execute_process_response
_end_query)r   	operation
parametersrI   rH   r   rN   response_genr   r   r   rS   w   s   

zCursor.executec                    sN   | dd }||d  d fdd|D } |d | |  d S )NVALUES   r?   c                 3   s     | ]} j | V  qd S r   )rO   rP   )r4   rN   r   
values_tplr   r   rC      s
    
z%Cursor.executemany.<locals>.<genexpr>)indexrF   rS   )r   rV   seq_of_parametersrI   r]   rN   r   r[   r   executemany   s   zCursor.executemanyc                 C   s   | j | jjkrtdd S )NNo query yet)_state_statesr*   RuntimeErrorr    r   r   r   check_query_started   s   zCursor.check_query_startedc                 C   s4   |    | jd ur| jsd S | jdS t| jd S )Nr   )rd   _rowsr   next	_responser    r   r   r   fetchone   s   
zCursor.fetchoner   c                 C   sj   |    | jd ur| jd | }| j|d  | _|S g }t|D ]}|  }|d u r- |S || q |S r   )rd   re   r)   rh   append)r   sizervrows_rowr   r   r   	fetchmany   s   
zCursor.fetchmanyc                 C   sJ   |    | jd ur| j}g | _|S g }	 |  }|d u r	 |S || qr   )rd   re   rh   ri   )r   rk   rl   rn   r   r   r   fetchall   s   

zCursor.fetchallc                 C   s   | j S r   r0   r    r   r   r   	arraysize   s   zCursor.arraysizec                 C   s
   || _ d S r   rq   )r   rB   r   r   r   rr      s   
c                 C   r   r   r   )r   sizesr   r   r   setinputsizes   r"   zCursor.setinputsizesc                 C   r   r   r   )r   rj   columnr   r   r   setoutputsize   r"   zCursor.setoutputsizec                 C   sX   | j | jjks| jdu rtd| jj}d| ji}|jd|d |   d| _d| _	dS )z9
        Cancels query. Not in PEP 249 standard.
        Nr`   rL   zSELECT 1rM   )
ra   rb   r*   rR   rc   r.   r   rS   rU   re   )r   r   rN   r   r   r   cancel   s   

zCursor.cancelc                 C   s   | j jS r   )r.   r   r    r   r   r   r      s   zCursor._prefetchc                 C   s>   t |}t|d | _t|d | _|| _| jrt|| _d S d S r   )iterrf   r8   r9   rg   r   listre   )r   responser   r   r   rT      s   zCursor._process_responsec                 C   s,   d| _ | jj| _d| _d| _d| _d| _dS )zE
        Resets query state and get ready for another query.
        N)rR   rb   r*   ra   r8   r9   re   rg   r    r   r   r   r/      s   

zCursor._reset_statec                 C   s   | j j| _t | _d S r   )rb   r+   ra   r   rR   r    r   r   r   rQ      s   
zCursor._begin_queryc                 C   s   | j j| _d S r   )rb   r,   ra   r    r   r   r   rU      s   zCursor._end_queryr   )NN)r   )$r	   r
   r   r   objectr-   rb   r   rO   r8   r9   rg   re   r   propertyr3   r=   r!   rK   rS   r_   rd   rh   ro   rp   rr   setterrt   rv   rw   r   rT   r/   rQ   rU   r'   r   r   r   r   r%   6   sF    

	


	





r%   N)uuidr   escaperr   r   r   apilevelthreadsafety
paramstyle	Exceptionr   r   r{   r   r%   r   r   r   r   <module>   s    