o
    9f@                     @   s   d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
 d dlmZ G dd deZdd	 ZG d
d dZG dd deZG dd deZG dd deZdS )    )exc)type_apiroles)BindParameterColumnElement
ClauseList)_offset_or_limit_clause)	Visitablec                   @   s   e Zd ZdS )SampleParamN)__name__
__module____qualname__ r   r   Z/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_sqlalchemy/ext/clauses.pyr
      s    r
   c                 C   s:   | du rdS t | dr|  S t| tr| S td| ddS )zConvert the given value to an "sample" clause.

    This handles incoming element to an expression; if
    an expression is already given, it is passed through.

    N__clause_element__T)unique)hasattrr   
isinstancer	   r
   )elementr   r   r   sample_clause   s   

r   c                   @   s   e Zd Zdd Zdd ZdS )LimitByClausec                 C   s*   t |dtji| _t|| _t|| _d S )N_literal_as_text_role)r   r   ByOfRole
by_clausesr   offsetlimit)selfr   r   r   r   r   r   __init__#   s   
zLimitByClause.__init__c                 C   s   t | jjS )N)boolr   clauses)r   r   r   r   __bool__*   s   zLimitByClause.__bool__N)r   r   r   r   r    r   r   r   r   r   !   s    r   c                   @   s   e Zd ZdZdZdd ZdS )Lambdaz9Represent a lambda function, ``Lambda(lambda x: 2 * x)``.lambdac                 C   s$   t |s	tdtj| _|| _d S )Nzfunc must be callable)callabler   ArgumentErrorr   NULLTYPEtypefunc)r   r'   r   r   r   r   3   s   

zLambda.__init__N)r   r   r   __doc____visit_name__r   r   r   r   r   r!   .   s    r!   c                   @      e Zd ZdZdS )	ArrayJoin
array_joinNr   r   r   r)   r   r   r   r   r+   ;       r+   c                   @   r*   )LeftArrayJoinleft_array_joinNr-   r   r   r   r   r/   ?   r.   r/   N)
sqlalchemyr   sqlalchemy.sqlr   r   sqlalchemy.sql.elementsr   r   r   sqlalchemy.sql.utilr   sqlalchemy.sql.visitorsr	   r
   r   r   r!   r+   r/   r   r   r   r   <module>   s    