o
    9f
                     @   s   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 d dlmZ d d	lmZ d
Zedd edD ZG dd de
ZG dd deZG dd de	ZeZdS )    )quote)
TextClause)asbool   	connector   )ClickHouseDialectClickHouseExecutionContextBaseClickHouseSQLCompiler)ExecuteStyle)__version__)r   r   r   Nc                 c   s$    | ]}|  rt|n|V  qd S N)isdigitint).0x r   b/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_sqlalchemy/drivers/native/base.py	<genexpr>   s    
r   .c                   @   s   e Zd Zdd ZdS )ClickHouseExecutionContextc                 C   s8   | j r| jjjd u r| ji gkrtj| _d S d S d S d S r   )isinsertcompiled	statementselect
parametersr   EXECUTEMANYexecute_style)selfr   r   r   pre_exec   s
   z#ClickHouseExecutionContext.pre_execN)__name__
__module____qualname__r    r   r   r   r   r      s    r   c                       s   e Zd Zd fdd	Z  ZS )ClickHouseNativeSQLCompilerFc                    sZ   t t| j|fd|i|}|ds|jr|S | d}|dkr+|d |d  }|S )Nasfromliteral_bindszvalues (   )superr$   visit_insertget_valueslowerrfind)r   insert_stmtr%   kwrvpos	__class__r   r   r*      s   
z(ClickHouseNativeSQLCompiler.visit_insertF)r!   r"   r#   r*   __classcell__r   r   r3   r   r$      s    r$   c                   @   s:   e Zd ZdZeZeZdZe	dd Z
dd Zddd	Zd
S )ClickHouseDialect_nativenativeTc                 C   s   t S r   r   )clsr   r   r   import_dbapi7   s   z%ClickHouseDialect_native.import_dbapic                 C   s   t dk }|jdd}|jr|rt|jn|j}|j|d}|jr0|r't|jn|j}|j|d}t|jdd| _|j	dd	fi fS )
N)r   r      
clickhouse)
drivername)username)passwordengine_reflectiontrueF)hide_password)
sqlalchemy_versionsetr>   r   r?   r   queryr+   r@   render_as_string)r   url	use_quoter>   r?   r   r   r   create_connect_args;   s   z,ClickHouseDialect_native.create_connect_argsFc                 K   s,   t |tr	t|}|r|jn|j}|||S r   )
isinstancestrr   scalarexecute)r   
connectionsqlrL   kwargsfr   r   r   _executeM   s   

z!ClickHouseDialect_native._executeNr5   )r!   r"   r#   driverr   execution_ctx_clsr$   statement_compilersupports_statement_cacheclassmethodr:   rI   rR   r   r   r   r   r7   0   s    
r7   N)urllib.parser   sqlalchemy.sql.elementsr   sqlalchemy.utilr    r   baser	   r
   r   sqlalchemy.engine.interfacesr   
sqlalchemyr   rC   VERSIONtuplesplitr   r$   r7   dialectr   r   r   r   <module>   s    &