o
    9fG                     @   sP   d dl mZ d dlmZ d dlmZ ddlmZm	Z	m
Z
mZ G dd deZdS )	    )exc)_generative)Query   )	ArrayJoinLeftArrayJoinLimitByClausesample_clausec                       s   e Zd ZdZdZdZdZdZdZdZ	 fddZ
edd Zedd Zed	d
 Zdd Zedd Zedd Zedd Zedd ZedddZd fdd	Zdd Z  ZS )r   FNc                    s\   t t| j|i |}|j}| j|_| j|_| j|_| j|_t	| j
|_| j|_| j|_|S N)superr   _compile_contextquery
_with_cube_with_rollup_with_totals_final_final_clauser	   _sample_sample_clause	_limit_by_limit_by_clause_array_join)selfargskwargscontextr   	__class__ X/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_sqlalchemy/orm/query.pyr      s   zQuery._compile_contextc                 C   *   | j std| jrtdd| _| S )NzKQuery.with_cube() can be used only with specified GROUP BY, call group_by()@Query.with_cube() and Query.with_rollup() are mutually exclusiveT)_group_by_clausesr   InvalidRequestErrorr   r   r   r   r   r   	with_cube$      zQuery.with_cubec                 C   r    )NzMQuery.with_rollup() can be used only with specified GROUP BY, call group_by()r!   T)r"   r   r#   r   r   r$   r   r   r   with_rollup4   r&   zQuery.with_rollupc                 C   s   | j stdd| _| S )NzMQuery.with_totals() can be used only with specified GROUP BY, call group_by()T)r"   r   r#   r   r$   r   r   r   with_totalsD   s   zQuery.with_totalsc                 C   s   |st nt}|| | _d S r
   )r   r   r   )r   columnsleft	join_typer   r   r   _add_array_joinO   s   zQuery._add_array_joinc                 O   s   | dd}| j||d | S )Nr*   Fr*   )getr,   )r   r)   r   r*   r   r   r   
array_joinS   s   zQuery.array_joinc                 G   s   | j |dd | S )NTr-   )r,   )r   r)   r   r   r   left_array_joinY      zQuery.left_array_joinc                 C   s
   d| _ | S )NT)r   r$   r   r   r   final^      zQuery.finalc                 C   s
   || _ | S r
   )r   )r   sampler   r   r   r4   c   r3   zQuery.samplec                 C   s   t |||| _| S r
   )r   r   )r   
by_clauseslimitoffsetr   r   r   limit_byh   r1   zQuery.limit_byc                    sl   | dd | dd | dd d}t j||fi |}|jd }t|}|d d |d< ||d d< |S )Ntype
strictnessdistribution)r9   r:   r;   full)popr   join_setup_joinsdict)r   targetonclauser   specrvxx_specr   r   r   r?   m   s   



z
Query.joinc                 O   s"   | dpd|d< | j|i |S )Nr9   z
LEFT OUTER)r.   r?   )r   propsr   r   r   r   	outerjoin|   s   zQuery.outerjoinr
   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r%   r'   r(   r,   r/   r0   r2   r4   r8   r?   rI   __classcell__r   r   r   r   r      s8    







r   N)
sqlalchemyr   sqlalchemy.sql.baser   sqlalchemy.orm.queryr   	BaseQueryext.clausesr   r   r   r	   r   r   r   r   <module>   s
    