o
    8Di                     @  sL  d dl mZ d dlZd dlZd dlmZmZmZm	Z	 d dl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dl m!Z!m"Z" d dl#m$Z$m%Z% d dlm&Z& ej'ej(ej)ej*ej+ej,f Z-d.ddZ.d/ddZ/d0ddZ0d1ddZ1d2ddZ2d3d d!Z3d4d$d%Z4d5d'd(Z5d6d*d+Z6G d,d- d-eZ7dS )7    )annotationsN)exp	generatorparsertokens)DialectNormalizationStrategyarg_max_or_min_no_countbuild_date_deltabuild_formatted_timeinline_array_sqljson_extract_segmentsjson_path_key_only_namelength_or_char_length_sqlno_pivot_sqlbuild_json_extract_pathrename_funcremove_from_array_using_filter
sha256_sqlstrposition_sqlvar_map_sqltimestamptrunc_sqlunit_to_vartrim_sql)	Generator)is_intseq_get)Token	TokenType)unsupported_argsargst.Listreturnexp.TimeToStrc                 C  s.   t tjd| }t| d}|r|d| |S )N
clickhouse   zone)r   r   	TimeToStrr   set)r    exprtimezone r+   T/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/clickhouse.py_build_date_format"   s
   
r-   selfClickHouse.Generator
expressionexp.UnixToTimestrc                 C  s   |j d}|j}|d tjjfv r| dt|tjj	j
S |tjjkr1| dt|tjj	j
S |tjjkrD| dt|tjj	j
S |tjjkrW| dt|tjj	j
S | dttj|tdd|dtjj	j
S )	NscalefromUnixTimestampfromUnixTimestamp64MillifromUnixTimestamp64MicrofromUnixTimestamp64NanoPOW
   thisr0   )r    getr;   r   
UnixToTimeSECONDSfunccastDataTypeTypeBIGINTMILLISMICROSNANOSDiv)r.   r0   r3   	timestampr+   r+   r,   _unix_to_time_sql,   s    rI   sqlc                 C  s&   |  d}| d |  | |d   S )N()indexlower)rJ   rL   r+   r+   r,   _lower_funcA   s   
rN   exp.Quantilec                 C  sX   |j d }d| |d d}t|tjr"| jdg|R  }|| S | d|}|| S )NquantilerK   r;   )	quantiles)r    rJ   
isinstancer   Arrayr?   )r.   r0   rP   r    r?   r+   r+   r,   _quantile_sqlF   s   
rU   !exp.CountIf | exp.CombinedAggFuncc                 C  s,   t | dkrtjt| ddS tjd| dS )N   r   r;   countIfr;   expressions)lenr   CountIfr   CombinedAggFuncr    r+   r+   r,   _build_count_ifR   s   r`   exp.Cast | exp.Anonymousc                 C  s@   t | dkrtjd| dS tj| }t|tjtjjj	S )N   STR_TO_DATErZ   )
r\   r   	Anonymous	StrToDatefrom_arg_listr@   rA   buildrB   DATETIME)r    	strtodater+   r+   r,   _build_str_to_dateY   s   rj   name0   t.Callable[[Generator, DATEΤΙΜΕ_DELTA], str]c                   s   d	 fdd}|S )
Nr.   r   r0      DATEΤΙΜΕ_DELTAr"   r2   c              	     s6   |j s
t | |S |  t||j|j|jdS )Nr&   )unitr   r?   r   r0   r;   r    r<   r.   r0   rk   r+   r,   
_delta_sqlb   s   
z'_datetime_delta_sql.<locals>._delta_sql)r.   r   r0   rm   r"   r2   r+   )rk   rq   r+   rp   r,   _datetime_delta_sqla   s   rr   exp.TimeStrToTimec                 C  s<  |j }|jd}|rpt|tjrp|j }|d}t	|dkr\d|d v r)dnd}|d |}t	|}|d 
dd	|d< d
|d d|d |dkrO|nd
|dkrX|d nd
g}tj|jd djdd}	tj|	}|rytj|dgng }
tjjtjjjtjtjddg|
dd}| tj||| jdS )Nr&   .r%   +rW   -r      0 )tzinfo )seprX   F)r[   nullable)dialect)r;   r    r<   rS   r   Literalrk   stripsplitr\   ljustjoindatetimefromisoformatreplace	isoformatstringDataTypeParamrA   rg   rB   
DATETIME64numberrJ   r@   r~   )r.   r0   tstz	ts_stringts_parts
offset_septs_frac_partsnum_frac_partsts_without_tzr[   datatyper+   r+   r,   _timestrtotime_sqlq   s8   

r   exp.Map | exp.VarMapc                 C  s   |j r	|j jdkstt| |S |jd}|jd}t|tjr(t|tjs/| 	d dS g }t
|j|jD ]\}}|| | d| |  q8d|}d| d	S )
Nsettingskeysvaluesz&Cannot convert array columns into map.ry   : z, {})parentarg_keyrN   r   r    r<   rS   r   rT   unsupportedzipr[   appendrJ   r   )r.   r0   r   r   r    keyvaluecsv_argsr+   r+   r,   _map_sql   s   
"
r   c                   @  s   e Zd ZU dZded< dZdZdZdZded< dZ	dZ
dZdZdZejZd	d
iZddiZejdejdejdiZded< dddZG dd dejZG dd dejZG dd dejZdS )
ClickHouseFz
bool | strNORMALIZE_FUNCTIONSnulls_are_lastTNzt.Optional[bool]LOG_BASE_FIRSTz\0 DATABASESCHEMAz0t.Dict[t.Type[exp.Expression], t.Optional[bool]]SET_OP_DISTINCT_BY_DEFAULTr0   
exp.Valuesr"   t.List[exp.Identifier]c                 C  s   |j d j }t|dkr|d jrt|d tjr|d nd }|r5dd |jdD }dd |D }|S dd tt|d j D }|S )Nr   rW   c                 S  s   g | ]}|  qS r+   )r   .0coldefr+   r+   r,   
<listcomp>       z6ClickHouse.generate_values_aliases.<locals>.<listcomp>,c                 S  s    g | ]}t |d d qS )r{   r   )r   to_identifierr   r   r+   r+   r,   r          c                 S  s    g | ]}t d |d  qS )crW   )r   r   )r   ir+   r+   r,   r      r   )	r[   r\   	is_stringrS   r   Tuplerk   r   range)r.   r0   r   	structurestructure_coldefscolumn_aliasesr+   r+   r,   generate_values_aliases   s   &	z"ClickHouse.generate_values_aliasesc                   @  s  e Zd Zg dZddgZdgZddgZdgZddgZd	gZ	i e
jji d
ejdejdejdejdejdejdejdejdejdejdejdejdejdejdejdejdeji dejdejdej dej!dej"d ej#d!ej$d"ej%d#ej&d$ej'd%ej(d&ej)d'ej*d(ej+d)ej,d*ej-d+ej.ejej/d,Ze0d- i e
jj1d	ej2iZ1d.S )/zClickHouse.Tokenizer)z--#z#!)z/*z*/"`\')0bry   )0xry   )0Xry   $.:ATTACHDATE32r   
DICTIONARYDYNAMICENUM8ENUM16EXCHANGEFINALFIXEDSTRINGFLOAT32FLOAT64GLOBALLOWCARDINALITYMAPNESTEDNOTHINGSAMPLETUPLEUINT16UINT32UINT64UINT8IPV4IPV6POINTRING
LINESTRINGMULTILINESTRINGPOLYGONMULTIPOLYGONAGGREGATEFUNCTIONSIMPLEAGGREGATEFUNCTION)SYSTEMPREWHEREz/*+N)3__name__
__module____qualname__COMMENTSIDENTIFIERSIDENTIFIER_ESCAPESSTRING_ESCAPESBIT_STRINGSHEX_STRINGSHEREDOC_STRINGSr   	TokenizerKEYWORDSr   DOTCOLONCOMMANDr   r   r   r   r   r   r   r   FLOATDOUBLEr   r   r   r   r   TABLE_SAMPLESTRUCT	USMALLINTUINTUBIGINTUTINYINTr   r   r   r   r   r   r   r   r   r   r   popSINGLE_TOKENSHEREDOC_STRINGr+   r+   r+   r,   r      s    	
 !"#$
'
r   c                      sV  e Zd ZdZdZdZdZi ejj	i de
jjde
jjde
jjde
jjdedee
jd	d
dee
jd	d
dee
jd	dddee
jd	dddedee
jd	d
dee
jd	d
dedee
jddddd dejde
jji de
jjdede
jjdee
jd	d
dee
jd	d
dee
jd	d
d ee
jd	d
d!e
jjd"d#d d$e
j jd%d&d d'd(d d)e
j!jd*e
j"jd+e
j#jd,e
j#jZ	e	$d- h d.Z%g d/Z&h ejj'e(j)e(j*e(j+Z'ejj,e(j-h Z,h ejj.e(j/Z.d0d e%e&Z0h ejj1dZ1i ejj2d1d d2d d3d d4d d5Z2e2$d i ejj3d6d7d iZ3e3$d8 ejj45 Z4e4$d ejj65 Z6e6$e(j7 i ejj8e(j9d9d iZ8ejj:5 Z:e:$e(j; h ejj<e(j=e(j>e(j?Z<ejj@e(j=e(j?e(jAe(jBe(jCh Z@ejjDe(jBh ZDdZEi ejjFe(jCd:d e(jBd;d iZFi ejjGd<d d=d d>ZGi ejjHd?d@d iZHh ejjIdAZIi ejjJe(jKdBd iZJddEdFZLddHdIZM	dd fdNdOZNd fdQdRZOd fdSdTZPddUdVZQ		dd fdXdYZRdd fd\d]ZSdd_d`ZT								dd fdhdiZUdd fdldmZVd fdodpZWddrdsZX	dd fdvdwZY					dd fd}d~ZZ		ddddZ[dddZ\dd fddZ]	dd fddZ^dddZ_		ddddZ`dddZadddZbdddZcd fddZd	ddƇ fddZed fddZfdddZgddɇ fddZh  ZiS )zClickHouse.ParserFTANYARRAYSUMARRAYREVERSE
ARRAYSLICECOUNTIFDATE_ADDN)default_unitDATEADD	DATE_DIFF)r  supports_timezoneDATEDIFFDATE_FORMATDATE_SUBDATESUBFORMATDATETIMEJSONEXTRACTSTRING)zero_based_indexingLENGTHc                 C  s   t jt| dddS )Nr   T)r;   binary)r   Lengthr   r_   r+   r+   r,   <lambda>@  r   zClickHouse.Parser.<lambda>r   MATCHRANDCANONICALrc   r   TIMESTAMP_SUBTIMESTAMPSUBTIMESTAMP_ADDTIMESTAMPADDUNIQXORc                 C  s   t j| dS )Nr[   )r   Xorr_   r+   r+   r,   r  K  s    MD5SHA256c                 C     t jt| dt jddS )Nr      r;   lengthr   SHA2r   r   r   r_   r+   r+   r,   r  M      SHA512c                 C  r'  )Nr   i   r)  r+  r_   r+   r+   r,   r  N  r-  SUBSTRINGINDEX
TOTYPENAMEEDITDISTANCELEVENSHTEINDISTANCE	TRANSFORM>q   anyavgmaxminsumcorrtopKuniqcountargMaxargMinmaxMapmedianminMapsumMapvarPopanyLastentropykurtPopskewPoptheilsUvarSampanyHeavycovarPopcramersVdeltaSumkurtSamprP   rankCorrskewSampsparkBarsumCountsumKahanuniqUpTo	covarSamp	histogram	meanZTestrR   	retention	stddevPop	uniqExact	uniqHLL12	uniqTheta
groupArray
groupBitOr
last_value
quantileGK
stddevSamp
welchTTestavgWeightedcontingencyfirst_valuegroupBitAndgroupBitXorgroupBitmapquantilesGKstudentTTesttopKWeighteduniqCombinedwindowFunnelboundingRatiogroupBitmapOrquantileExactsequenceCountsequenceMatchgroupArrayLastgroupBitmapAndgroupBitmapXorgroupUniqArrayquantileTimingquantilesExactuniqCombined64quantileTDigestquantilesTimingsumWithOverflowgroupArraySamplemannWhitneyUTestmaxIntersectionsquantileBFloat16quantileExactLowquantilesTDigestsequenceNextNodedeltaSumTimestampintervalLengthSumquantileExactHighquantilesBFloat16quantilesExactLowgroupArrayInsertAtquantilesExactHighgroupArrayMovingAvggroupArrayMovingSumcramersVBiasCorrectedkolmogorovSmirnovTestquantileDeterministicquantileExactWeightedquantileTimingWeightedquantilesDeterministicquantilesExactWeightedsimpleLinearRegressionquantileTDigestWeightedquantilesTimingWeightedexponentialMovingAveragemaxIntersectionsPositionquantileBFloat16WeightedquantilesTDigestWeightedexponentialTimeDecayedAvgquantilesBFloat16WeightedstochasticLinearRegressioncategoricalInformationValuelargestTriangleThreeBucketsquantileInterpolatedWeightedstochasticLogisticRegressionquantilesInterpolatedWeighted)IfrT   ArrayIfMapSimpleStateStateMerge
MergeStateForEachDistinct	OrDefaultOrNullResampleArgMinArgMaxc                   s    fdd|dg D S )Nc                   s(   i | ]} D ]}| | ||fqqS r+   r+   )r   sfxf	functionsr+   r,   
<dictcomp>  s
    z.ClickHouse.Parser.<lambda>.<locals>.<dictcomp>ry   r+   )r  suffixesr+   r  r,   r    s   
 c                 C  s   | j tj|  dS )NrX   )r0   r   Explode_parse_expressionr.   r+   r+   r,   r    r   c                 C     |   S N_parse_quantiler  r+   r+   r,   r        c                 C  r  r  r  r  r+   r+   r,   r    r  c                 C  r  r  )_parse_columnsr  r+   r+   r,   r    r  )	ARRAYJOINQUANTILEMEDIANCOLUMNSENGINEc                 C  r  r  )_parse_engine_propertyr  r+   r+   r,   r    r  r   c                 C  
   |  |S r  )_parse_global_inr.   r;   r+   r+   r,   r  
     
 c                 C  s   d|   p
| | jfS )Nr   )_advance
_parse_csv_parse_assignmentr  r+   r+   r,   r  )  s   c                 C  s   d|   p|  fS )Nformat)r  _parse_id_varr  r+   r+   r,   r  -  r   c                 C  r  r  )_parse_index_constraintr  r+   r+   r,   r  2  r  c                 C  r  r  )_parse_compressr  r+   r+   r,   r  3  r  )INDEXCODECREPLACEc                 C  r  r  )_parse_alter_table_replacer  r+   r+   r,   r  8  r  r  c                 C  r  r  )_parse_query_parameterr  r+   r+   r,   r  B  r  r"   exp.EnginePropertyc                 C  s&   |  tj | jtj| jddddS )NT)	any_tokenanonymous_funcrX   )_matchr   EQr0   r   EngineProperty_parse_fieldr  r+   r+   r,   r  E  s
   z(ClickHouse.Parser._parse_engine_propertyt.Optional[exp.Expression]c                 C  r  r  )_parse_lambdar  r+   r+   r,   '_parse_user_defined_function_expressionM  s   z9ClickHouse.Parser._parse_user_defined_function_expression
check_funcboolschemaallow_identifiersc                   s>   t  j|||d}t|tjr|jddur|dd |S )N)r  r  r  r}   TF)super_parse_typesrS   r   rA   r    r<   r(   )r.   r  r  r  dtype	__class__r+   r,   r  P  s   zClickHouse.Parser._parse_typesexp.Extract | exp.Anonymousc                   sT   | j }|  }| tjr| | t  S | tj | j	t
jd||  gdS )NextractrZ   )_index_parse_bitwiser  r   FROM_retreatr  _parse_extractCOMMAr0   r   rd   r.   rL   r;   r  r+   r,   r  `  s   

z ClickHouse.Parser._parse_extractc                   sB   t   }| tjr| jtj||  | tjo|  dS |S )N)r;   truefalse)	r  r  r  r   PLACEHOLDERr0   r   r  COLONr  r  r+   r,   r  q  s   
z#ClickHouse.Parser._parse_assignmentc                 C  s   | j }|  }| tj | jdddp| dod}|s$| | dS | tjs/| 	d t
|tjr>|js>t|j}| jtj||dS )z
            Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}
            https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters
            F)r  r  
IDENTIFIER
IdentifierNzExpecting })r;   kind)r  r  r  r   r  r  _match_text_seqr  R_BRACEraise_errorrS   r   r  quotedvarrk   r0   Placeholder)r.   rL   r;   r  r+   r+   r,   r  ~  s   

z(ClickHouse.Parser._parse_query_parameterr;   c                   s   | j tjdd}t |}|rJt|tjrJtjt	 t	 d}|j
D ]#}t|tjs/ |S |jd dtj|j |jd d|j q$|S |S )NFadvance)r   r   r   r[   r   )r  r   L_BRACEr  _parse_bracketrS   r   StructVarMaprT   r[   
PropertyEQr    r   r   r   rk   r0   )r.   r;   l_bracebracketvarmapr0   r  r+   r,   r    s   
z ClickHouse.Parser._parse_bracket	is_globalexp.Inc                   s   t  |}|d| |S )Nr	  )r  	_parse_inr(   )r.   r;   r	  r  r+   r,   r    s   zClickHouse.Parser._parse_inexp.Not | exp.Inc                 C  s>   |  tj}|  tjo| j|dd}|r| jtj|dS |S )NT)r	  rX   )r  r   NOTINr  r0   r   Not)r.   r;   
is_negatedr+   r+   r,   r    s   z"ClickHouse.Parser._parse_global_injoinsalias_tokens#t.Optional[t.Collection[TokenType]]parse_bracketis_db_referenceparse_partitionconsume_pipec                   s~   t  j|||||d}t|tjr/|j}	|jd}
t|	tjr/|
r/|
j	s/|

dtdg | tjr=| jtj|d}|S )N)r  r  r  r  r  aliascolumnsgenerate_seriesrX   )r  _parse_tablerS   r   Tabler;   r    r<   GenerateSeriesr  r(   r   r  r   r   r0   Final)r.   r  r  r  r  r  r  r  r;   innerr  r  r+   r,   r    s   
zClickHouse.Parser._parse_tablehaystack_firstexp.StrPositionc                      t  jddS )NT)r   )r  _parse_position)r.   r   r  r+   r,   r#       z!ClickHouse.Parser._parse_positiont.Optional[exp.CTE]c                   s2   |  t j}|s| jtj|  |  dd}|S )NT)r;   r  scalar)
_try_parser  
_parse_cter0   r   CTEr  _parse_table_alias)r.   cter  r+   r,   r(    s   zClickHouse.Parser._parse_cte@t.Tuple[t.Optional[Token], t.Optional[Token], t.Optional[Token]]c                 C  s   |  tjo| j}| j| jddo| j}|r-| | jo| j}| | jo'| j}|||fS || | jo6| j| | jo>| jfS )NFr  )r  r   r   _prev
_match_set
JOIN_KINDS
JOIN_SIDES)r.   r	  kind_prer  sider+   r+   r,   _parse_join_parts  s   
z#ClickHouse.Parser._parse_join_partsskip_join_tokent.Optional[exp.Join]c                   sX   t  j|dd}|r*|d|jdd  |jdkr*|tjD ]	}|	|
  q |S )NT)r4  r  globalmethodARRAY)r  _parse_joinr(   r    r  r  find_allr   r  r   	to_column)r.   r4  r  r   tabler  r+   r,   r9    s   
zClickHouse.Parser._parse_joinr  #t.Optional[t.Dict[str, t.Callable]]	anonymousoptional_parensr  c                   s   t  j||||d}t|tjr|jn|}t|tjr"| j|jnd }|ryt	
tj|}| |}	|j|jd}
|d rF|	rBtjntj}n|	rKtjntj}||
d< |	rX|	|
d< | jdi |
}t|tjrn|d| |S |	rw| |}|S |}|S )N)r  r>  r?  r  rZ   rW   	exp_classparamsr;   r+   )r  _parse_functionrS   r   Windowr;   rd   AGG_FUNC_MAPPINGr<   tr@   _parse_func_paramsr[   CombinedParameterizedAggr^   ParameterizedAggAnonymousAggFuncr0   r(   _parse_window)r.   r  r>  r?  r  r)   r?   parts	anon_funcrA  kwargsr@  r  r+   r,   rB    s>   

z!ClickHouse.Parser._parse_functiont.Optional[exp.Func]"t.Optional[t.List[exp.Expression]]c                 C  sF   |  tjtjr| | jS | tjr!| | j}| | |S d S r  )_match_pairr   R_PARENL_PARENr  r  r  _match_r_parenr.   r;   rA  r+   r+   r,   rF  ;  s   
z$ClickHouse.Parser._parse_func_paramsrO   c                 C  sD   |   }|  }|r| jtj|d |dS | jtj|tjddS )Nr   )r;   rP   g      ?)r  rF  r0   r   Quantiler   r   rT  r+   r+   r,   r  H  s
   z!ClickHouse.Parser._parse_quantileoptionalt.List[exp.Expression]c                   r"  )NT)rV  )r  _parse_wrapped_id_vars)r.   rV  r  r+   r,   rX  O  r$  z(ClickHouse.Parser._parse_wrapped_id_varswrapped_optionalin_props/exp.PrimaryKeyColumnConstraint | exp.PrimaryKeyc                   s   t  j|p||dS )N)rY  rZ  )r  _parse_primary_key)r.   rY  rZ  r  r+   r,   r\  R  s   z$ClickHouse.Parser._parse_primary_keyc                 C  sB   | j }| dr|  p|  }|r| jtj|dS | | d S )NCLUSTERrX   )r  r  _parse_stringr  r0   r   	OnClusterr  r  r+   r+   r,   _parse_on_propertyY  s   

z$ClickHouse.Parser._parse_on_propertyr  t.Optional[str]exp.IndexColumnConstraintc                 C  sR   |   }|  }| do|  p|  }| do|  }| jtj||||dS )NTYPEGRANULARITY)r;   r0   
index_typegranularity)	r  r  r  rB  
_parse_var_parse_termr0   r   IndexColumnConstraint)r.   r  r;   r0   re  rf  r+   r+   r,   r  c  s   
z)ClickHouse.Parser._parse_index_constraintt.Optional[exp.Partition]c                 C  sJ   |  tjsd S | dr| jtj|  dg}n|  }| jtj	|dS )NIDrX   r#  )
r  r   	PARTITIONr  r0   r   PartitionIdr^  _parse_expressions	Partition)r.   r[   r+   r+   r,   _parse_partitionx  s   
z"ClickHouse.Parser._parse_partitionc                 C  s2   |   }|r| tjsd S | jtj||  dS )N)r0   source)rp  r  r   r  r0   r   ReplacePartition_parse_table_parts)r.   	partitionr+   r+   r,   r    s   z,ClickHouse.Parser._parse_alter_table_replacet.Optional[exp.ProjectionDef]c                 C  s,   |  dsd S | jtj|  | | jdS )N
PROJECTIONr:   )r  r0   r   ProjectionDefr  _parse_wrapped_parse_statementr  r+   r+   r,   _parse_projection_def  s   

z'ClickHouse.Parser._parse_projection_defc                   s   t   p|  S r  )r  _parse_constraintrz  r  r  r+   r,   r{       z#ClickHouse.Parser._parse_constraintexplicitc                   s(   | j tjtjddr|S t j||dS )NFr  )r;   r}  )rP  r   APPLYrR  r  _parse_alias)r.   r;   r}  r  r+   r,   r    s   zClickHouse.Parser._parse_aliasc                   sP   t   }| tjtjr&tj|| jddd}| 	tj
 | tjtjs|S )NTr  r:   )r  r  rP  r   r~  rR  r   Applyrg  r  rQ  r  r  r+   r,   r    s   
z#ClickHouse.Parser._parse_expressionexp.Expressionc                 C  sb   | j tj|  d}| jr/| dddr/| tj tj	|| j
ddd}| jr/| ddds|S )NrX   rQ   r~  rK   Tr  r:   )r0   r   Columnsr  _nextr  r  r   rQ  r  rg  r  r+   r+   r,   r    s   z ClickHouse.Parser._parse_columnsr   t.Optional[exp.Tuple]c                   sN   t  j|d}|sd S |j}|r%t|d tjs%|d fdd|D  |S )N)r   r[   c                   s   g | ]} j tj|gd qS )r#  )r0   r   r   )r   r)   r  r+   r,   r         z2ClickHouse.Parser._parse_value.<locals>.<listcomp>)r  _parse_valuer[   rS   r   r   r(   )r.   r   r   r[   r  r  r,   r    s   zClickHouse.Parser._parse_value)r"   r  )r"   r  )FFT)r  r  r  r  r  r  r"   r  )r"   r  r  )r;   r  r"   r  )F)r;   r  r	  r  r"   r
  )r;   r  r"   r  )FFNFFFF)r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"   r  )r   r  r"   r!  )r"   r%  )r"   r,  )FF)r4  r  r  r  r"   r5  )NFTF)
r  r=  r>  r  r?  r  r  r  r"   r  )r;   rN  r"   rO  )r"   rO   )rV  r  r"   rW  )rY  r  rZ  r  r"   r[  )r  ra  r"   rb  )r"   rj  )r"   ru  )r;   r  r}  r  r"   r  )r"   r  T)r   r  r"   r  )jr   r   r   MODIFIERS_ATTACHED_TO_SET_OPINTERVAL_SPANSOPTIONAL_ALIAS_TOKEN_CTEJOINS_HAVE_EQUAL_PRECEDENCEr   Parser	FUNCTIONSr   AnyValuerf   ArraySumArrayReverse
ArraySlicer`   r
   DateAddDateDiffr-   DateSubr   JSONExtractScalarbuild_var_map
RegexpLikeRandrj   r  TimestampSubTimestampAddApproxDistinct	MD5DigestSubstringIndexTypeofLevenshteinr  AGG_FUNCTIONSAGG_FUNCTIONS_SUFFIXESFUNC_TOKENSr   ANDORSETRESERVED_TOKENSSELECTID_VAR_TOKENSLIKErD  FUNCTIONS_WITH_ALIASED_ARGSFUNCTION_PARSERSPROPERTY_PARSERSNO_PAREN_FUNCTION_PARSERScopyNO_PAREN_FUNCTIONSCURRENT_TIMESTAMPRANGE_PARSERSr   COLUMN_OPERATORSr  r/  r  ASOFr8  TABLE_ALIAS_TOKENSr   FORMATSETTINGSALIAS_TOKENSLOG_DEFAULTS_TO_LNQUERY_MODIFIER_PARSERSCONSTRAINT_PARSERSALTER_PARSERSSCHEMA_UNNAMED_CONSTRAINTSPLACEHOLDER_PARSERSr  r  r  r  r  r  r  r  r  r  r  r#  r(  r3  r9  rB  rF  r  rX  r\  r`  r  rp  r  rz  r{  r  r  r  r  __classcell__r+   r+   r  r,   r  %  s   	
 !"#$
&t





	





8









r  c                      s  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZejjjdejjjdejjjdejjjdejjjdejjjdejjjdejjjdejjjdejjjdejjjdiZ ej!ej"ej#hZ$i e%j&j'e i ejjj(dejjj)d	ejjj*d
ejjj+dejjj,dejjj-dejjj.dejjj/dejjj0dejjj1dejjj2dejjj3dejjj4dejjj5dejjj6dejjj7dejjj8di ejjj9dejjj:dejjj;dejjj<dejjj=dejjj>dejjj?dejjj@dejjjAdejjjBdejjjCdejjjDdejjjEdejjjFd ejjjGd!ejjjHd"ejjjId#i ejjjJd$ejjjKd%ejjjLd&ejjjMd'ejjjNd(ejjjOd)ejjjPd*ejjjQd+ejjjRd,ejjjSd-ejjjTd.ejjjUd/ejjjVd0ejjjWd1ejjjXd2ejjjYd3Z'i e%j&jZi ej[e\d4ej]e\d5ej^e\d6ej_d7d8 ej`eaejbe\d9ejce\d:ejde\d;ejeefd<ejgefd=ejheiejje\d>ejke\d?ejld@d8 ejmdAd8 ejndBd8 ejoepdCi ejqepdDejre\dEejsepdFejte\dGejudHd8 ejve\dIejwdJd8 ejxeydKddLejzeydKddLej!e{ej"dMd8 ej|e}ej~eeje\dNeje\dOejdPd8 ejei ejeejdQd8 eje\dReje\dSeje\dTejdUd8 ejdVd8 ejeejepdWejepdXeje\dYejeejdZd8 eje\d[ejd\d8 eje\d]ejeejeejedd^ejd_d8 eje\d`ejdad8 eje\dbeje\dcejddd8 ejded8 ejedfdgdhdie\dji
ZZi e%j&jejejjjejejjjejejjjejejjjiZh dkZejjj(ejjjCejjjGejjjQejjjRejjjSejjjTejjjUejjjVh	ZddpdqZddɇ fdvdwZdʇ fdydzZdd|d}ZdddZ	ddddZdχ fddZdЇ fddZdddZd҇ fddZdӇ fddZdԇ fddZdddZdddZdׇ fddZd؇ fddZdddZdddZdddZdddZdddZdddZd߇ fddZd fddZd fddZdd fddƄZʇ  ZS )r/   F)rK   rQ   r   Try   r  StringrT   BoolInt64Date32DateTime
DateTime64Decimal	Decimal32	Decimal64
Decimal128
Decimal256Float64EnumEnum8Enum16FixedStringFloat32Int32Int128Int256LowCardinalityr  NestedNothingInt16r   Int8UInt64UInt32UInt128UInt256UInt16UInt8IPv4IPv6PointRing
LineStringMultiLineStringPolygonMultiPolygonAggregateFunctionSimpleAggregateFunctionDynamicr4  r;  arrayConcatc                 C     |  d|j|jS )NarrayFilterr?   r0   r;   r.   er+   r+   r,   r  .      zClickHouse.Generator.<lambda>arrayReverse
arraySlicearraySumr=  r>  CASTrY   c                 C  s   d| j |ddd dS )NzCODEC(r;   Tr   flatrQ   r#  r  r+   r+   r,   r  8  s   c                 C  s&   |j drdnd d| |d S )N	persistedMATERIALIZEDALIASr{   r;   )r    r<   rJ   r  r+   r+   r,   r  :  s   &c                 C  s
   |  dS )NCURRENT_DATE)r?   r  r+   r+   r,   r  <  r  r  r  toDater  	arrayJoinc                 C  s   |  |d dS )Nr;   z FINALrJ   r  r+   r+   r,   r  B  r  isNaNc                 C  s   |  |d d|  |d S )Nr;   r   tor  r  r+   r+   r,   r  D  r  JSONExtractString)quoted_indexc                  G  s   dS )Nry   r+   )_r+   r+   r,   r  H  s    r@  nullIfc                 C     d|  |d S )NzPARTITION BY r;   r  r  r+   r+   r,   r  M  r  c                 C  r  )Nmatch)r?   r;   r0   r  r+   r+   r,   r  P  r  randCanonical
startsWithendsWithc                 C  s   t | |ddddS )NPOSITIONTF)	func_namesupports_positionuse_ansi_position)r   r  r+   r+   r,   r  T  s    c                 C  s    |  d|j| ||jdS )NformatDateTimer&   )r?   r;   format_timer    r<   r  r+   r+   r,   r  [  s    r  r  
toTypeNamec                 C  s   | j d|j|jg|jR  S )Nxor)r?   r;   r0   r[   r  r+   r+   r,   r  c  r-  r%  c              
   C  s   |  d|  d|  d|jS )NLOWERHEXr%  )r?   r;   r  r+   r+   r,   r  e  r  SHA1)r&   c                 C  s   t | |ddS )NBOTH)default_trim_type)r   r  r+   r+   r,   r  j  s    rI  c                 C  r  r  )naked_propertyr  r+   r+   r,   r  l  r  ra  CHARc                 C  "   |  d|j|jd|jdS )N
lagInFrameoffsetdefaultr?   r;   r    r<   r  r+   r+   r,   r  o      c                 C  r  )NleadInFramer  r  r  r  r+   r+   r,   r  r  r  ins_costdel_costsub_costmax_disteditDistance>   NAMED COLLECTIONVIEWr  TABLEr   r   FUNCTIONr   r0   exp.StrToDater"   r2   c                 C  s.   |  |}t|jtjs| t|dS |S )NDATE)function_fallback_sqlrS   r   r   Castcast_sqlr@   )r.   r0   strtodate_sqlr+   r+   r,   r.    s   
z"ClickHouse.Generator.strtodate_sqlNexp.Castsafe_prefixra  c                   s>   |j }t|tjr|jtjdkr| |S t j	||dS )Nr   )r0  )
r;   rS   r   re   r   rA   rg   rJ   r  r-  )r.   r0   r0  r;   r  r+   r,   r-    s   
zClickHouse.Generator.cast_sqlexp.TryCastc                   s0   |j }|j| jddis|dd t |S )Ncheck_nullableTr}   )r   is_typeNON_NULLABLE_TYPESr(   r  r-  )r.   r0   r  r  r+   r,   trycast_sql  s   z ClickHouse.Generator.trycast_sqlexp.JSONPathSubscriptc                 C  s(   |  |j}t|rtt|d S |S )NrW   )json_path_partr;   r   r2   intr.   r0   r;   r+   r+   r,   _jsonpathsubscript_sql  s   z+ClickHouse.Generator._jsonpathsubscript_sqlexp.LikePropertyc                 C  r  )NzAS r;   r  ro   r+   r+   r,   likeproperty_sql  r|  z%ClickHouse.Generator.likeproperty_sqlexp.EQ | exp.NEQr  t.Callable[[t.Any], str]prefixc                 C  sX   t |jtjr|j}|j}nt |jtjr|j}|j}n||S || d|j | S )Nhas)rS   leftr   Anyrightr?   r;   unnest)r.   r0   r  r?  arrr;   r+   r+   r,   _any_to_has  s   z ClickHouse.Generator._any_to_hasexp.EQc                   s   |  |t jS r  )rF  r  eq_sqlro   r  r+   r,   rH    s   zClickHouse.Generator.eq_sqlexp.NEQc                   s   |  |t jdS )NzNOT )rF  r  neq_sqlro   r  r+   r,   rJ    r|  zClickHouse.Generator.neq_sqlexp.RegexpILikec                 C  s    |  dd|j}|  d|j|S )NCONCATz'(?i)'r  r  )r.   r0   regexr+   r+   r,   regexpilike_sql  s   z$ClickHouse.Generator.regexpilike_sqlexp.DataTypec                   s   |j | jv r	d}nt |}|j}|jd}|du s>|d u rDt|tj	r5|j
tj	jjddr5|jdv sD|j
| jddisDd| d}|S )	Nr  r}   T)r2  )Nr   r2  z	Nullable(rQ   )r;   STRING_TYPE_MAPPINGr  datatype_sqlr   r    r<   rS   r   rA   r3  rB   r   rL   r4  )r.   r0   r  r   r}   r  r+   r,   rQ    s    	

z!ClickHouse.Generator.datatype_sqlexp.CTEc                   s>   |j dr| |d}| |d}| d| S t |S )Nr&  r;   r  z AS )r    r<   rJ   r  cte_sql)r.   r0   r;   r  r  r+   r,   rS    s
   zClickHouse.Generator.cte_sqlr  t.List[str]c                   s`   t  ||jdr| d| j|ddd nd|jdr,| d| |d g S dg S )Nr   z	SETTINGS Tr  ry   r  zFORMAT )r  after_limit_modifiersr    r<   segr[   rJ   ro   r  r+   r,   rU    s   


	z*ClickHouse.Generator.after_limit_modifiersexp.Placeholderc                 C  s   d|j  d| |d dS )Nr   r   r  r   )rk   rJ   ro   r+   r+   r,   placeholder_sql  s   z$ClickHouse.Generator.placeholder_sqlexp.OnClusterc                 C  r  )NzON CLUSTER r;   r  ro   r+   r+   r,   oncluster_sql  r|  z"ClickHouse.Generator.oncluster_sql
exp.Create	locationst.DefaultDictc                   s   |j  jv rM|tjjjrM t|j	tj
r|j	n|d}d fdd|tjjj D } |j	}|r?   | nd}|    | | S t ||S )Nr;   r{   c                   s   g | ]}  |qS r+   r  )r   propr  r+   r,   r     s    z7ClickHouse.Generator.createable_sql.<locals>.<listcomp>ry   )r  ON_CLUSTER_TARGETSr<   r   
PropertiesLocation	POST_NAMErJ   rS   r;   Schemar   schema_columns_sqlr|   r  createable_sql)r.   r0   r\  	this_namethis_propertiesthis_schemar  r  r,   re    s   z#ClickHouse.Generator.createable_sqlc                   st   |j }t|tjr|tj}|r|  |t| nd }t	 
|}| |}|r2d| nd}| | S )Nr{   ry   )r0   rS   r   QueryfindSchemaCommentPropertyr  r   parenr  
create_sqlrJ   )r.   r0   querycomment_proprm  comment_sqlr  r+   r,   rm  '  s   
zClickHouse.Generator.create_sqlexp.PreWherec                 C  s,   |  | |d}| d |   | S )Nr;   r   )indentrJ   rV  r|   r9  r+   r+   r,   prewhere_sql9  s   z!ClickHouse.Generator.prewhere_sqlrb  c                 C  s   |  |d}|rd| nd}|  |d}|rd| nd}|  |d}|r+d| nd}|  |d}|r:d| nd}d	| | | | S )
Nr;   r{   ry   r0   re  z TYPE rf  z GRANULARITY r  r  )r.   r0   r;   r)   re  rf  r+   r+   r,   indexcolumnconstraint_sql=  s   z.ClickHouse.Generator.indexcolumnconstraint_sqlexp.Partitionc                 C  s   d| j |dd S )Nz
PARTITION T)r  r#  ro   r+   r+   r,   partition_sqlI  s   z"ClickHouse.Generator.partition_sqlexp.PartitionIdc                 C  s   d|  |j S )NzID )rJ   r;   ro   r+   r+   r,   partitionid_sqlL  r|  z$ClickHouse.Generator.partitionid_sqlexp.ReplacePartitionc                 C  s    d|  |j d|  |d S )NzREPLACE z FROM rq  )rJ   r0   ro   r+   r+   r,   replacepartition_sqlO  s   z)ClickHouse.Generator.replacepartition_sqlexp.ProjectionDefc                 C  s    d|  |j d| |j S )NzPROJECTION r{   )rJ   r;   wrapr0   ro   r+   r+   r,   projectiondef_sqlT  s    z&ClickHouse.Generator.projectiondef_sqlexp.Isc                   s(   t  |}t|jtjr| |}|S r  )r  is_sqlrS   r   r   r  r|  )r.   r0   r  r  r+   r,   r  W  s   
zClickHouse.Generator.is_sqlr
  c                   s8   t  |}t|jtjr|jdr|ddd}|S )Nr	  z	GLOBAL INzGLOBAL NOT INrW   )	r  in_sqlrS   r   r   r  r    r<   r   )r.   r0   r  r  r+   r,   r  `  s   zClickHouse.Generator.in_sqlexp.Notc                   s4   t |jtjr|jjdr| |dS t |S )Nr	  r;   )	rS   r;   r   Inr    r<   rJ   r  not_sqlro   r  r+   r,   r  h  s   zClickHouse.Generator.not_sqlr   values_as_tabler  c                   sV   |j d}|r!|j dr!|jr!|jd j}tdd |D }nd}t j||dS )Nr  r  r   c                 s  s    | ]	}t |tjV  qd S r  )rS   r   r   )r   r   r+   r+   r,   	<genexpr>v  s    z2ClickHouse.Generator.values_sql.<locals>.<genexpr>T)r  )r    r<   r[   r4  r  
values_sql)r.   r0   r  r  r   r  r+   r,   r  o  s   zClickHouse.Generator.values_sql)r0   r)  r"   r2   r  )r0   r/  r0  ra  r"   r2   )r0   r1  r"   r2   )r0   r6  r"   r2   )r0   r;  r"   r2   )ry   )r0   r=  r  r>  r?  r2   r"   r2   )r0   rG  r"   r2   )r0   rI  r"   r2   )r0   rK  r"   r2   )r0   rO  r"   r2   )r0   rR  r"   r2   )r0   r  r"   rT  )r0   rW  r"   r2   )r0   rY  r"   r2   )r0   r[  r\  r]  r"   r2   )r0   r[  r"   r2   )r0   rq  r"   r2   )r0   rb  r"   r2   )r0   ru  r"   r2   )r0   rw  r"   r2   )r0   ry  r"   r2   )r0   r{  r"   r2   )r0   r~  r"   r2   )r0   r
  r"   r2   )r0   r  r"   r2   r  )r0   r   r  r  r"   r2   )r   r   r   QUERY_HINTSSTRUCT_DELIMITERNVL2_SUPPORTEDTABLESAMPLE_REQUIRES_PARENSTABLESAMPLE_SIZE_IS_ROWSTABLESAMPLE_KEYWORDSLAST_DAY_SUPPORTS_DATE_PARTCAN_IMPLEMENT_ARRAY_ANYSUPPORTS_TO_NUMBER
JOIN_HINTSTABLE_HINTSGROUPINGS_SEPSET_OP_MODIFIERSARRAY_SIZE_NAMEWRAP_DERIVED_VALUESr   rA   rB   BLOBr  LONGBLOBLONGTEXT
MEDIUMBLOB
MEDIUMTEXTTINYBLOBTINYTEXTTEXT	VARBINARYVARCHARrP  JSONPathKeyJSONPathRootJSONPathSubscriptSUPPORTED_JSON_PATH_PARTSr   r   TYPE_MAPPINGr8  BOOLEANrC   r   rh   	DATETIME2SMALLDATETIMEr   DECIMAL	DECIMAL32	DECIMAL64
DECIMAL128
DECIMAL256	TIMESTAMPTIMESTAMPNTZTIMESTAMPTZr   ENUMr   r   r   r   INT	MEDIUMINTINT128INT256r   r   r   r   SMALLINTr   TINYINTr  r   UINT128UINT256r   r  r   r   r   r   r   r   r   r   r   r   r   
TRANSFORMSr  r   r  ArrayConcatArrayFilterArrayRemover   r  r  r  r  r	   r  rT   r   CastToStrTyper]   CompressColumnConstraintComputedColumnConstraintCurrentDater  rr   r  DateStrToDater  r  r  IsNanJSONCastJSONExtractr   r  r   r  r   r  r   MedianNullifPartitionedByPropertyPivotr   rU  rU   r  r  
StartsWithEndsWithStrPositionr'   TimeStrToTimer   r  r  r  r  r$  r  r%  SHAr,  r   r=   rI   TimestampTruncr   TrimVariancerk  StddevChrLagLeadr  r   PROPERTIES_LOCATIONr_  r`  ra  rb  POST_SCHEMAToTablePropertyVolatilePropertyUNSUPPORTEDr_  r4  r.  r-  r5  r:  r<  rF  rH  rJ  rN  rQ  rS  rU  rX  rZ  re  rm  rs  rt  rv  rx  rz  r}  r  r  r  r  r  r+   r+   r  r,   r     sZ   

















	























 
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
47






	
















 !
"
#
$%&
'
(
)
*
+
25
6
7
89
:
;
<
=>?






Q





 







	r   )r0   r   r"   r   )r   r   r   r   __annotations__NULL_ORDERINGSUPPORTS_USER_DEFINED_TYPESSAFE_DIVISIONr   FORCE_EARLY_ALIAS_REF_EXPANSIONPRESERVE_ORIGINAL_NAMES#NUMBERS_CAN_BE_UNDERSCORE_SEPARATED IDENTIFIERS_CAN_START_WITH_DIGITHEX_STRING_IS_INTEGER_TYPEr   CASE_SENSITIVENORMALIZATION_STRATEGYUNESCAPED_SEQUENCESCREATABLE_KIND_MAPPINGr   Except	IntersectUnionr   r   r   r   r   r  r   r   r+   r+   r+   r,   r      s8   
 
7     -r   )r    r!   r"   r#   )r.   r/   r0   r1   r"   r2   )rJ   r2   r"   r2   )r.   r/   r0   rO   r"   r2   )r    r!   r"   rV   )r    r!   r"   ra   )rk   r2   r"   rl   )r.   r/   r0   rs   )r.   r/   r0   r   r"   r2   )8
__future__r   typingrE  r   sqlglotr   r   r   r   sqlglot.dialects.dialectr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sqlglot.generatorr   sqlglot.helperr   r   sqlglot.tokensr   r   r   r  r  r  r  r  r     DATEΤΙΜΕ_DELTAr-   rI   rN   rU   r`   rj   rr   r   r   r   r+   r+   r+   r,   <module>   s(    T









4