o
    8DiT                      @   s  d dl Z d dlZd dlZd dl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 G dd dZdd	d
Zdd ZedddddZeddddZedd Zdd Zedd ZedddddZedddd Zi deded ed!d" d#eed$krejnejd%ed&d" d'd(eed)eed*eed+ed,d" d-ed.d" d/ed0d" d1ed2ed3d" d4ed5d" d6ed7d" d8ed9d" d:ed;d" i d<ed=d" d>ed?d@d" dAedBd" dCedDd" dEedFd" dGedHd" dIedJd" dKedLd" dMedNd" dOedPd" dQedRd" dSedTd" dUedVd" dWdXd" dYedZd" d[ei d\ed]ed^d" d_ed`d" daedbd" dceddd" deedfd" dgedhd" diedjd" dkedld" dmednd" doeedpedqedredsd" dteddud"dvedwedxd" eedyd" edzd" ed{d" ed|d" ed}d" e j j e j j e j j e j!j"ed~d" edd" eddd"dd" edd" dZ#dS )    Nwraps)exp)	Generator)PYTHON_VERSIONis_intseq_getc                   @   s$   e Zd Zdd Zdd Zdd ZdS )reverse_keyc                 C   s
   || _ d S Nobj)selfr    r   M/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/executor/env.py__init__   s   
zreverse_key.__init__c                 C   s   |j | j kS r
   r   r   otherr   r   r   __eq__      zreverse_key.__eq__c                 C   s   |j | j k S r
   r   r   r   r   r   __lt__   r   zreverse_key.__lt__N)__name__
__module____qualname__r   r   r   r   r   r   r   r	      s    r	   Tc                    s   t  fdd}|S )Nc                    s&   t dd | D }|s rd S |S )Nc                 s       | ]	}|d ur|V  qd S r
   r   ).0vr   r   r   	<genexpr>       z.filter_nulls.<locals>._func.<locals>.<genexpr>)tuple)valuesfiltered
empty_nullfuncr   r   _func   s   zfilter_nulls.<locals>._funcr   )r#   r"   r$   r   r!   r   filter_nulls   s   r%   c                     sD   d}t  dkrt d r d }d  fdd}|r ||S |S )a  
    Decorator that makes a function return `None` if any of the `required` arguments are `None`.

    This also supports decoration with no arguments, e.g.:

        @null_if_any
        def foo(a, b): ...

    In which case all arguments are required.
    N   r   r   c                    sR   rfddt t jD fddndd t  fdd}|S )Nc                    s   g | ]
\}}| v r|qS r   r   )r   iparamrequiredr   r   
<listcomp>4   s    z2null_if_any.<locals>.decorator.<locals>.<listcomp>c                     s   t  fddD S )Nc                 3   s    | ]	} | d u V  qd S r
   r   )r   r'   argsr   r   r   9   r   Dnull_if_any.<locals>.decorator.<locals>.predicate.<locals>.<genexpr>anyr,   )required_indicesr,   r   	predicate8   s   z1null_if_any.<locals>.decorator.<locals>.predicatec                  W      t dd | D S )Nc                 s   s    | ]}|d u V  qd S r
   r   r   ar   r   r   r   >       r.   r/   r,   r   r   r   r2   =   s   c                     s   |  rd S  |  S r
   r   r,   )r#   r2   r   r   r$   @   s   z-null_if_any.<locals>.decorator.<locals>._func)	enumerateinspect	signature
parametersr   )r#   r$   r)   )r#   r2   r1   r   	decorator2   s   
znull_if_any.<locals>.decorator)lencallable)r*   fr;   r   r)   r   null_if_any"   s   r?   thissubstrc                 C   s$   |d ur|d n|}|  ||d S )Nr&   )find)r@   rA   positionr   r   r   str_positionN   s   rD   c                 C   sV   |d u r| S |dkrdS |dk rt | | }n|d8 }|d u r!d n|| }| || S )Nr    r&   )r<   )r@   startlengthendr   r   r   	substringT   s   rI   c                 C   sb  |t jjjkr$t| tjr|  S t| tjr| S t| tr$tj| S |t jjj	krHt| tjr5| 
 S t| tj
r=| S t| trHtj
| S |t jjjt jjjfv rwt| tjr\| S t| tjrlt| j| j| jS t| trwtj| S |t jjjkrt| S |t jjv rt| S |t jjjt jjjhv rt| S |t jjv rt| S td|  d| d)NzCasting z to 'z' not implemented.)r   DataTypeTypeDATE
isinstancedatetimedatestrfromisoformatTIMEtimeDATETIME	TIMESTAMPyearmonthdayBOOLEANbool
TEXT_TYPESFLOATDOUBLEfloatNUMERIC_TYPESintNotImplementedError)r@   tor   r   r   castd   s<   


rc   c                 C   s   |rt | S | S r
   )r	   )r@   descnulls_firstr   r   r   ordered   s   rf   c                 C   s2   |d }|t jv r|}tjdi | t| iS )NSr   )r   TIME_PART_SINGULARSrN   	timedeltalowerr^   )r@   unitpluralr   r   r   interval   s   
rm   
expressionc                    s"   | dd  fdd| D D S )Nc                 s   r   r
   r   r   xr   r   r   r      r   z arraytostring.<locals>.<genexpr>c                 3   s     | ]}|d ur
|n V  qd S r
   r   ro   nullr   r   r      s    join)r@   rn   rr   r   rq   r   arraytostring   s   "ru   c                 C   sj   |D ]0}t | tr| |} nt | tr t|r t| t|} ntd|  d| d| d u r2 | S q| S )NzUnable to extract value for z at .)rM   dictgetlistr   r   r`   ra   )r@   rn   path_segmentr   r   r   jsonextract   s   
r{   r   ARRAYAGGARRAYUNIQUEAGGc                 C   s   t t| S r
   )ry   setaccr   r   r   <lambda>       r   AVG)      COUNTc                 C   r3   )Nc                 s   s    | ]}d V  qdS r&   Nr   )r   _r   r   r   r      s    <lambda>.<locals>.<genexpr>)sumr   r   r   r   r          FMAXMINSUMABSc                 C   s   t | S r
   )abs)r@   r   r   r   r          ADDc                 C   s   | | S r
   r   er@   r   r   r   r      r   ARRAYANYc                    s   t  fdd| D S )Nc                 3   s    | ]} |V  qd S r
   r   )r   r   r#   r   r   r      r6   r   r/   )arrr#   r   r   r   r      s    ARRAYTOSTRINGBETWEENc                 C   s   || ko| |kS r
   r   )r@   lowhighr   r   r   r      s    
BITWISEANDc                 C   s   | |@ S r
   r   r@   r   r   r   r   r      r   BITWISELEFTSHIFTc                 C   s   | |> S r
   r   r   r   r   r   r      r   	BITWISEORc                 C   s   | |B S r
   r   r   r   r   r   r      r   BITWISERIGHTSHIFTc                 C   s   | |? S r
   r   r   r   r   r   r      r   
BITWISEXORc                 C   s   | |A S r
   r   r   r   r   r   r      r   CASTCOALESCEc                  G   s   t dd | D d S )Nc                 s   r   r
   r   r4   r   r   r   r      r   r   )nextr,   r   r   r   r          CONCATc                  G   s
   d | S )NrE   rs   r,   r   r   r   r         
 
SAFECONCATc                  G   s   d dd | D S )NrE   c                 s   s    | ]}t |V  qd S r
   )rP   )r   argr   r   r   r      r6   r   rs   r,   r   r   r   r      r   CONCATWSc                 G   
   |  |S r
   rs   )r@   r-   r   r   r   r      r   DATEDIFFc                 G   s
   | | j S r
   )days)r@   rn   r   r   r   r   r      r   DATESTRTODATEc                 C   s   t j| S r
   )rN   rO   rQ   r   r   r   r   r      r   DIVc                 C   s   | | S r
   r   r   r   r   r   r      r   DOTc                 C   s   | | S r
   r   r   r   r   r   r      r   EQc                 C   s   | |kS r
   r   r   r   r   r   r      r   EXTRACTc                 C   s
   t || S r
   )getattrr   r   r   r   r      r   GTc                 C   s   | |kS r
   r   r   r   r   r   r      r   GTEc                 C   s   | |kS r
   r   r   r   r   r   r      r   IFc                 C   s   | r|S |S r
   r   )r2   truefalser   r   r   r      r   INTDIVc                 C   s   | | S r
   r   r   r   r   r   r      r   INTERVALJSONEXTRACTLEFTc                 C   s   | d | S r
   r   r   r   r   r   r      r   LIKEc                 C   s    t t|dddd| S )Nr   rv   %z.*)rZ   rematchreplacer   r   r   r   r      s     LOWERc                 C      |   S r
   )rj   r   r   r   r   r      r   LTc                 C   s   | |k S r
   r   r   r   r   r   r      r   LTEc                 C   s   | |kS r
   r   r   r   r   r   r      r   MAPc                  G   s   t t|  S r
   )rw   zipr,   r   r   r   r      r   MODc                 C   s   | | S r
   r   r   r   r   r   r      r   MULc                 C   s   | | S r
   r   r   r   r   r   r      r   NEQc                 C   s   | |kS r
   r   r   r   r   r   r      r   ORDORDEREDPOWRIGHTc                 C   s   | | d  S r
   r   r   r   r   r   r          ROUNDc                 C   s   t | |dS )N)ndigits)round)r@   decimalstruncater   r   r   r      r   STRPOSITIONSUBc                 C   s   | | S r
   r   r   r   r   r   r      r   c                 C   s   t j | S r
   )rN   rQ   r   r   r   r   r      r   c                 C   r   r
   )upperr   r   r   r   r      r   c                 C      | j S r
   )rV   r   r   r   r   r          c                 C   r   r
   )rW   r   r   r   r   r      r   c                 C   r   r
   )rX   r   r   r   r   r      r   c                 C   s   t j || S r
   )rN   rQ   strftime)fmtr   r   r   r   r      r   c                 C   s   t j | |S r
   )rN   strptime)r   formatr   r   r   r      r   c                 C   r   r
   )stripr   r   r   r   r      r   c                     s    fddt dt dD S )Nc                    s:   i | ]} |d   dur | dur |  |d   qS r   r   ro   r,   r   r   
<dictcomp>   s
    z<lambda>.<locals>.<dictcomp>r      )ranger<   r,   r   r,   r   r      s   
 c                 C   s   t j | t jjS r
   )rN   fromtimestamptimezoneutcr   r   r   r   r      r   )	SUBSTRINGTIMESTRTOTIMEUPPERYEARMONTHDAYCURRENTDATETIMECURRENTTIMESTAMPCURRENTTIMECURRENTDATESTRFTIME	STRTOTIMETRIMSTRUCT
UNIXTOTIME)Tr
   )NN)$rN   r8   r   
statistics	functoolsr   sqlglotr   sqlglot.generatorr   sqlglot.helperr   r   r   r	   r%   r?   rD   rI   rc   rf   rm   ru   r{   ry   fmeanmeanmaxminr   ordpownowrO   todayENVr   r   r   r   <module>   s&   
,
!

	 !"#$%&'*+,-./012345678






