o
    8Di                     @  s  d dl mZ d dlZd dlmZ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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* d dl+m,Z,m-Z- d dl.m/Z/ d d	l0m1Z1 d d
l2m3Z3 d dl4m5Z5 ej6ej7ej8ej9f Z:dIddZ;dJddZ<dKddZ=dLddZ>dMddZ?dNd!d"Z@dOd$d%ZAdPd'd(ZBdQd,d-ZCdQd.d/ZDdRd1d2ZEdSd4d5ZFdTd6d7ZGdUd9d:ZH	;dVdWd@dAZIdXdCdDZJdYdEdFZKG dGdH dHeZLdS )Z    )annotationsN)exp	generatorparsertokens
transforms)DialectNormalizationStrategybinary_from_functionbool_xor_sql'build_replace_with_optional_replacementdate_trunc_to_timedatestrtodate_sqlencode_decode_sqlbuild_formatted_timeif_sqlleft_to_substring_sqlno_ilike_sqlno_pivot_sqlno_timestamp_sqlregexp_extract_sqlrename_funcright_to_substring_sql
sha256_sqlstrposition_sqlstruct_extract_sqltimestamptrunc_sqltimestrtotime_sqlts_or_ds_add_castunit_to_strsequence_sqlbuild_regexp_extractexplode_to_unnest_sql	space_sql)Hive)MySQL)apply_index_offsetseq_get)find_all_in_scope)	TokenType)unqualify_columns)unsupported_argsselfPresto.Generator
expressionexp.Initcapreturnstrc                 C  s   d}d|  |d d| dS )Nz	(\w)(\w*)zREGEXP_REPLACE(thisz, 'z#', x -> UPPER(x[1]) || LOWER(x[2]))sql)r,   r.   regex r6   P/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/presto.py_initcap_sql/   s   r8   exp.SortArrayc                 C  s.   |j dt krd}nd }| d|j|S )Nascz>(a, b) -> CASE WHEN a < b THEN 1 WHEN a > b THEN -1 ELSE 0 END
ARRAY_SORT)argsgetr   falsefuncr2   )r,   r.   
comparatorr6   r6   r7   _no_sort_array4   s   rA   
exp.Schemac                   s   t |jtjr(|jdd dd  fdd|jD } tjdd |D dS |jrO|jtj	D ]}||u r9q2|tj
}|rNt |jtjrN|j| q2 |S )	Nc                 S  s   t | tjr	| jS | S N)
isinstancer   
Identifiername)nr6   r6   r7   <lambda>?       z_schema_sql.<locals>.<lambda>F)copyc                   s4   g | ]}t |tjtjfr |n |d qS r2   )rD   r   FuncPropertyr4   .0cr,   r6   r7   
<listcomp>A   s    &z_schema_sql.<locals>.<listcomp>c                 S  s   g | ]}t j|qS r6   )r   LiteralstringrN   r6   r6   r7   rR   E   s    expressions)rD   parentr   PartitionedByProperty	transformrV   r4   Arrayfind_allSchema	ColumnDefrM   extend
schema_sql)r,   r.   partition_exprsschemacolumn_defsr6   rQ   r7   _schema_sql<   s   

rc   exp.Quantilec                 C  s"   |  d | d|j|jdS )Nz'Presto does not support exact quantilesAPPROX_PERCENTILEquantile)unsupportedr?   r2   r<   r=   r,   r.   r6   r6   r7   _quantile_sqlS   s   
ri   0exp.StrToDate | exp.StrToTime | exp.TsOrDsToDatec                 C     |  d|j| |S )N
DATE_PARSEr?   r2   format_timerh   r6   r6   r7   _str_to_time_sqlX   s   ro   exp.TsOrDsToDatec                 C  sd   |  |}|r|tjtjfvr| tt| |tjj	j
S | tt|jtjj	jtjj	j
S rC   )rn   PrestoTIME_FORMATDATE_FORMATr4   r   castro   DataTypeTypeDATEr2   	TIMESTAMP)r,   r.   time_formatr6   r6   r7   _ts_or_ds_to_date_sql^   s   
 rz   exp.TsOrDsAddc                 C  s$   t |}t|}| d||j|jS )NDATE_ADD)r   r   r?   r.   r2   )r,   r.   unitr6   r6   r7   _ts_or_ds_add_sqlg   s   r~   exp.TsOrDsDiffc                 C  s@   t |jt jjj}t |jt jjj}t|}| d|||S N	DATE_DIFF)	r   rt   r2   ru   rv   rx   r.   r   r?   )r,   r.   r2   exprr}   r6   r6   r7   _ts_or_ds_diff_sqlm   s   r   r<   t.Listexp.Expressionc                 C  sp   t | dkrtjt| dt| dt| dt| ddS t | dkr2tjt| dt| dt| ddS tj| S )N   r            )r2   weightrf   accuracy)r2   rf   r   )lenr   ApproxQuantiler'   from_arg_listr<   r6   r6   r7   _build_approx_percentilet   s   r   c                 C  s`   t | dkrtjt| dt| dt| ddS t | dkr*tjt| dt| ddS tj| S )Nr   r   r   r   )r2   hoursminutes)r2   zone)r   r   
UnixToTimer'   r   r   r6   r6   r7   _build_from_unixtime   s   r   exp.Funcc                 C  s0   t |tjtjtjr| |S td| |S )aB  
    Trino doesn't support FIRST / LAST as functions, but they're valid in the context
    of MATCH_RECOGNIZE, so we need to preserve them in that case. In all other cases
    they're converted into an ARBITRARY call.

    Reference: https://trino.io/docs/current/sql/match-recognize.html#logical-navigation-functions
    	ARBITRARY)rD   find_ancestorr   MatchRecognizeSelectfunction_fallback_sqlr   rh   r6   r6   r7   _first_last_sql   s   
r   exp.UnixToTimec                 C  sH   |j d}| |d}|d tjjfv rtd| |S d| d| dS )Nscaler2   FROM_UNIXTIMEzFROM_UNIXTIME(CAST(z AS DOUBLE) / POW(10, )))r<   r=   r4   r   r   SECONDSr   )r,   r.   r   	timestampr6   r6   r7   _unix_to_time_sql   s
   r   c                 C  sN   |j sddlm} ||| jd |j r%|j jtjjvr%tj|tjj	j
dS |S )Nr   annotate_typesdialect)to)type sqlglot.optimizer.annotate_typesr   r   r2   r   ru   INTEGER_TYPESrt   rv   BIGINT)r,   r.   r   r6   r6   r7   _to_int   s   r   exp.TimeToStrc                 C  s8   t | d}t|tjr|d|j  ttjd| S )Nr   r2   teradata)	r'   rD   r   rS   setr2   upperr   	TimeToStr)r<   fmtr6   r6   r7   _build_to_char   s   
r   FrF   negate_intervalbool4t.Callable[[Presto.Generator, DATE_ADD_OR_SUB], str]c                   s   d	 fdd}|S )
Nr,   r-   r.   DATE_ADD_OR_SUBr0   r1   c                   s4   t | |j}|  t|r|d |jS ||jS )N)r   r.   r?   r   r2   )r,   r.   intervalrF   r   r6   r7   
_delta_sql   s   
z#_date_delta_sql.<locals>._delta_sql)r,   r-   r.   r   r0   r1   r6   )rF   r   r   r6   r   r7   _date_delta_sql   s   	r   exp.Lateralc                 C  s   |j }t|tjrE|j j}|jd}t|tjrDt|tjrD|	tjj
jrD|jrD|jd 	tjj
jrD|ddd |jd jD  nt|tjrW|tj|j  d t| |S )Naliasr   columnsc                 S  s   g | ]}|j  qS r6   )r2   rJ   rN   r6   r6   r7   rR      rI   z*_explode_to_unnest_sql.<locals>.<listcomp>rK   )r2   rD   r   Exploder   r<   r=   
TableAliasru   is_typerv   ARRAYrV   STRUCTr   InlinereplacerJ   r"   )r,   r.   explodeexploded_typer   r6   r6   r7   _explode_to_unnest_sql   s&   


r   c                 C  s  t | tjr| jr| jdpg D ]o}|jd}t |jtjr-t |tjr-t	|j
dkr.q|j}|j
d j }t| tjD ]@}|j |krT|d|jd   q?|j |krd|d|  q?|j |krt |jtjr|jtj|jj|d q?q| S )Nlateralsr   r   r   tabledb)r   )rD   r   r   r   r<   r=   r2   r   r   r   r   rF   lowerr(   Columnr   r   popr   rJ   rW   Dotr   columnr.   )r.   lateralr   	new_table	old_tabler   r6   r6   r7   amend_exploded_column_table   s*   
r   c                   @  s   e Zd ZU dZdZejZdZdZdZ	dZ
dZded< dZejZejZi ejejdd	 ejd
d	 ejdd	 ejdd	 ejdd	 ejdd	 ejdd	 iZh ej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 )rq   r   nulls_are_lastTFNzt.Optional[bool]LOG_BASE_FIRSTc                 C     |  |dS Nr2   _annotate_by_argsr,   er6   r6   r7   rH         zPresto.<lambda>c                 C  r   r   r   r   r6   r6   r7   rH     r   c                 C  s   |  |ddS )Nr2   r.   r   r   r6   r6   r7   rH         c                 C  r   r   r   r   r6   r6   r7   rH     r   c                 C  r   r   r   r   r6   r6   r7   rH     r   c                 C  r   r   r   r   r6   r6   r7   rH     r   c                 C  s$   |j r	| |dS | |tjjjS r   )r2   r   	_set_typer   ru   rv   DOUBLEr   r6   r6   r7   rH     s   variant_extract_is_json_extractc                   @  s   e Zd ZddgZdd eeje ej	j
D ZdZi ej	jejejejejejejejejejejejdZed ed d	S )
zPresto.Tokenizer)zx'')zX'r   c                 C  s"   g | ]}d D ]}|| |fqqS ))zU&zu&r6   )rO   qprefixr6   r6   r7   rR   %  s    
zPresto.Tokenizer.<listcomp>F)zDEALLOCATE PREPAREzDESCRIBE INPUTzDESCRIBE OUTPUTzRESET SESSIONSTARTMATCH_RECOGNIZEROW	IPADDRESSIPPREFIXTDIGESTHYPERLOGLOGz/*+QUALIFYN)__name__
__module____qualname__HEX_STRINGStrt   Listr1   r   	TokenizerQUOTESUNICODE_STRINGSNESTED_COMMENTSKEYWORDSr)   COMMANDBEGINr   r   r   r   r   	HLLSKETCHr   r6   r6   r6   r7   r   #  s.    
r   c                   @  s  e Zd ZdZdZi ejji dej	j
dejj
dedeejddd	 d
eejdeejdejj
dejj
ddd	 ddd	 deejddeejddedejj
dejj
dejj
i ddd	 dejj
deddd	 dd d	 d!ejj
d"ejj
d#eejd$eejd%d&d	 d'e d(ej!j
d)ej"j
d*ej#j
d+ej$j
d,d-d	 d.ej%j
e&ej'j
d/d	 ej(j
d0d	 d1d	 d2Zejj)* Z)e)+d3 d4S )5zPresto.ParserFTr   APPROX_DISTINCTre   BITWISE_ANDBITWISE_NOTc                 C  s   t jt| ddS )Nr   rK   )r   
BitwiseNotr'   r   r6   r6   r7   rH   H      zPresto.Parser.<lambda>
BITWISE_ORBITWISE_XORCARDINALITYCONTAINSr|   c                 C  "   t jt| dt| dt| ddS Nr   r   r   )r2   r.   r}   )r   DateAddr'   r   r6   r6   r7   rH   M      r   c                 C  r  r  )r   DateDiffr'   r   r6   r6   r7   rH   P  r	  rs   prestorl   
DATE_TRUNCDAY_OF_WEEKDOWDOY
ELEMENT_ATc                 C  s    t jt| dt| dgdddS )Nr   r   T)r2   rV   offsetsafe)r   Bracketr'   r   r6   r6   r7   rH   Y  s    FROM_HEXr   	FROM_UTF8c                 C  s$   t jt| dt| dt jddS )Nr   r   utf-8)r2   r   charset)r   Decoder'   rS   rT   r   r6   r6   r7   rH   ^  s    JSON_FORMATc                 C  s   t jt| dt| dddS )Nr   r   T)r2   optionsis_json)r   
JSONFormatr'   r   r6   r6   r7   rH   a      LEVENSHTEIN_DISTANCENOWREGEXP_EXTRACTREGEXP_EXTRACT_ALLREGEXP_REPLACEc                 C  s.   t jt| dt| dt| dpt jddS )Nr   r   r    )r2   r.   replacement)r   RegexpReplacer'   rS   rT   r   r6   r6   r7   rH   h  s
    REPLACEr   SEQUENCESET_AGGSPLIT_TO_MAPSTRPOSc                 C  r  )Nr   r   r   )r2   substr
occurrence)r   StrPositionr'   r   r6   r6   r7   rH   r  r	  SLICEc                 C     t jt| dt jddS )Nr   r  r2   r  )r   Encoder'   rS   rT   r   r6   r6   r7   rH   x  r  c                 C  r/  )Nr      r2   lengthr   SHA2r'   rS   numberr   r6   r6   r7   rH   |      c                 C  r/  )Nr   i   r3  r5  r   r6   r6   r7   rH   }  r8  )TO_CHARTO_UNIXTIMETO_UTF8MD5SHA256SHA512TRIMN),r   r   r   VALUES_FOLLOWED_BY_PAREN ZONE_AWARE_TIMESTAMP_CONSTRUCTORr   Parser	FUNCTIONSr   AnyValuer   ApproxDistinctr   r
   
BitwiseAnd	BitwiseOr
BitwiseXor	ArraySizeArrayContainsr   r   	StrToTimer   DayOfWeekIso	DayOfYearUnhexr   LevenshteinCurrentTimestampr!   RegexpExtractRegexpExtractAllr   StructGenerateSeriesArrayUniqueAggStrToMap
ArraySlicer   
TimeToUnix	MD5DigestFUNCTION_PARSERSrJ   r   r6   r6   r6   r7   rB  >  s    


	
"#
$
%&+,-./034>rB  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dZdZdZdZi ejjejejjjejejjjiZi ejj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	ej j!j-diZi ejj.i ej/e0dej1e0dej2e0dej3e0dej4dd ej5e0dej6e0dej7e0dej8e0dej9e0dej:e0dej;e0dej<dd ej=dd ej>dd ej?d d ej@d!d i ejAd"d ejBeCDeCjEgejFd#d ejGd$d ejHd%d ejIeJd&ejKd'd ejLeMejNd(d ejOeJd&dd)ejPd*d ejQe0d+ejRd,d ejSd-d ejTd.d ejUd/d ejVeWi ejXd0d ejYeZej[eZej\eCDeCj]gej^e_ ej`eaejbecejdeWejed1d ejfegejheiejjekd2d3d4d5e0d6ejle0d7ejme0d8ejneoejpeqejresi ejtesejuevejwexejyd9d ejzeCDeCj{eCj|eCj}eC~d:eCjegejeejeejd;d ejd<d eje0d=ejeejeejeCDeCjgejeejeJd&eje ejei ejeejd>d ejd?d eje0d@ejdAd ejeCDeCjEgejdBd ejeejeejeeje0dCejdDd ejeejdEd eje0dFejeCDeCjgejeCDeCjgejeeje0dGeje0dHejeiZ.h dIZdvdNdOZdwdQdRZdxdTdUZdy fdWdXZdzdZd[Zd{ fd]d^Zd|d`daZd}dhdiZd~ fdkdlZd fdndoZddqdrZddtduZ  ZS )r-   FT)()TO_HEX
JSON_PARSEr  	VARBINARYBOOLEANrx   REALr   INTEGERr   VARCHARTIMEr   re   MAX_BYMIN_BYc                 C  s   d| j |dd dS )NzARRAY[T)flat]rU   r   r6   r6   r7   rH     rI   zPresto.Generator.<lambda>	ANY_MATCHCONCATr  
ARRAY_JOINr(  r.  AT_TIMEZONEc                 C     |  d|j|jS )Nr   r?   r2   r.   r   r6   r6   r7   rH     r  c                 C  rm  )NBITWISE_ARITHMETIC_SHIFT_LEFTrn  r   r6   r6   r7   rH         
c                 C     |  d|jS )Nr   r?   r2   r   r6   r6   r7   rH     r   c                 C  rm  )Nr  rn  r   r6   r6   r7   rH     r  c                 C  rm  )NBITWISE_ARITHMETIC_SHIFT_RIGHTrn  r   r6   r6   r7   rH     rp  c                 C  rm  )Nr  rn  r   r6   r6   r7   rH     r  c                  G     dS )NCURRENT_TIMEr6   _r6   r6   r7   rH         c                  G  rt  )NCURRENT_TIMESTAMPr6   rv  r6   r6   r7   rH     rx  c                  G  rt  )NCURRENT_USERr6   rv  r6   r6   r7   rH     rx  r|   c                 C  s   |  dt||j|jS r   )r?   r   r.   r2   r   r6   r6   r7   rH     s    c                 C     d|  |d dtj dS )NzCAST(DATE_FORMAT(r2   , z	) AS INT)r4   rq   DATEINT_FORMATr   r6   r6   r7   rH        )r   c                 C  s   d|  d|j dS )Nz((r  z
 % 7) + 1)rr  r   r6   r6   r7   rH     rI   r  c                 C     t | |dS )Nr  r   r   r6   r6   r7   rH     r   c                 C  r{  )NzCAST(DATE_PARSE(CAST(r2   z AS VARCHAR), z
) AS DATE)r}  r   r6   r6   r7   rH     r  c                 C  r  )Nr;  r  r   r6   r6   r7   rH     r   c                 C  s   d|  tj|j S )Nzformat=)r4   r   rS   rT   rF   r   r6   r6   r7   rH     s   c                 C  s"   d|  |d d|  |d dS )NzWITH_TIMEZONE(r2   r|  r   z) AT TIME ZONE 'UTC'r3   r   r6   r6   r7   rH     s   "c                 C  rq  )NLAST_DAY_OF_MONTHrr  r   r6   r6   r7   rH     r   ins_costdel_costsub_costmax_distr  BOOL_ANDBOOL_ORc                 C  s
   |  |S rC   )naked_propertyr   r6   r6   r7   rH     s   
 r   c                 C  s   t | |ddS )NT)supports_occurrence)r   r   r6   r6   r7   rH     r   c                 C  s   dt | | dS )NzCAST(z	 AS DATE))ro   r   r6   r6   r7   rH      r  r)  c                 C  s   |  d|  d|jtjS )Nr:  rl   )r?   r2   rq   rr   r   r6   r6   r7   rH   
  s    c                 C  rk   Nrs   rm   r   r6   r6   r7   rH     rI   r:  c                 C  rk   r  rm   r   r6   r6   r7   rH     rI   c                 C     d|  |d dS )NzCAST(SUBSTR(REPLACE(CAST(r2   z% AS VARCHAR), '-', ''), 1, 8) AS INT)r3   r   r6   r6   r7   rH        r  c                 C  s    d|  |d d| | dS )NzDATE_FORMAT(FROM_UNIXTIME(r2   z), r\  )r4   rn   r   r6   r6   r7   rH     s    c                 C  r  )NzCAST(FROM_UNIXTIME(r2   z) AS VARCHAR)r3   r   r6   r6   r7   rH     r  VAR_POPr<  SHA1>:   asbyinisonorandendfornotcasert   dropelsefromfullintojoinleftlikenullthentruewhenwithaltercrossr>   groupinnerorderouterrightr   unionusingwherecreatedeleteescapeexceptexistshavinginsertselectvaluesbetweenexecuteextractnaturalpreparedescribedistinct	intersect
constraint
deallocatecurrent_timecurrent_timestampr.   exp.JSONFormatr0   r1   c                 C  sp   |j }|jd}|r|s|jsddlm} ||| jd}|s3|tj	j
js3|t|tj	j
j | |S )Nr  r   r   r   )r2   r<   r=   r   r   r   r   r   r   ru   rv   JSONr   rt   r   )r,   r.   r2   r  r   r6   r6   r7   jsonformat_sqld  s   
zPresto.Generator.jsonformat_sqlexp.MD5c                 C  sl   |j }|jsddlm} ||| jd}|jtjj r%tj	|tj
dd}| d| d| d| |S )	Nr   r   r   r  r0  LOWERr]  r<  )r2   r   r   r   r   r   r   ru   
TEXT_TYPESr1  rS   rT   r?   r4   )r,   r.   r2   r   r6   r6   r7   md5_sqlr  s   "zPresto.Generator.md5_sqlexp.StrToUnixc           	   	   C  s   |j }t|tjjj}|jrt|tjjjn|}| d|| 	|}| d|| 	|}| d|| 	|t
jt
j}| d| d||}| d|S )Nrl   rs   PARSE_DATETIMECOALESCETRYr:  )r2   r   rt   ru   rv   TEXT	is_stringrx   r?   rn   r$   INVERSE_TIME_MAPPINGINVERSE_TIME_TRIE)	r,   r.   r2   value_as_textvalue_as_timestampparse_without_tzformatted_valueparse_with_tz	coalescedr6   r6   r7   strtounix_sql  s   zPresto.Generator.strtounix_sqlexp.Bracketc                   sN   |j dr!| d|jtt|j|jd|j dd | jddS t 	|S )Nr  r  r   r  r   r   )
r<   r=   r?   r2   r'   r&   rV   r   superbracket_sqlrh   	__class__r6   r7   r    s   zPresto.Generator.bracket_sql
exp.Structc                 C  s   ddl m} ||| jd}g }g }d}|jD ];}t|tjrI|jr-|jtj	j
jr-d}n|| |d d| |j  || |d q|| | qt|j}|r_t||kro|rf| d	 | jd
g|R  S dd| dd| dS )Nr   r   r   FTr2    r.   zBCannot convert untyped key-value definitions (try annotate_types).r   z	CAST(ROW(r|  z	) AS ROW(r   )r   r   r   rV   rD   r   
PropertyEQr   r   ru   rv   UNKNOWNappendr4   r   rg   r?   r  )r,   r.   r   r  ra   unknown_typer   sizer6   r6   r7   
struct_sql  s(   
$
zPresto.Generator.struct_sqlexp.Intervalc                   s6   |j r|d drd|j j dS t |S )Nr}   WEEKr[  z * INTERVAL '7' DAY))r2   textr   
startswithrF   r  interval_sqlrh   r  r6   r7   r    s   zPresto.Generator.interval_sqlexp.Transactionc                 C  s.   |j d}|rdd| nd}d| S )Nmodesr  r|  r#  zSTART TRANSACTION)r<   r=   r  )r,   r.   r  r6   r6   r7   transaction_sql  s   
z Presto.Generator.transaction_sqlr   fetchr   limit!t.Optional[exp.Fetch | exp.Limit]t.List[str]c                 C  s   |  |d|  |gS )Nr  r3   )r,   r.   r  r  r6   r6   r7   offset_limit_modifiers  s   
z'Presto.Generator.offset_limit_modifiers
exp.Createc                   s8   |j d }|j}|dkr|jr|jdd t |S )z
            Presto doesn't support CREATE VIEW with expressions (ex: `CREATE VIEW x (cola)` then `(cola)` is the expression),
            so we need to remove them
            kindVIEWrV   N)r<   r2   rV   r   r  
create_sql)r,   r.   r  ra   r  r6   r7   r    s
   
zPresto.Generator.create_sql
exp.Deletec                   s   |j dp	|jg}t|dkrt |S |d }|d| |dd t|tj	rB|j d}|rB|
  ttj|t}t |S )a"  
            Presto only supports DELETE FROM for a single table without an alias, so we need
            to remove the unnecessary parts. If the original DELETE statement contains more
            than one table to be deleted, we can't safely map it 1-1 to a Presto statement.
            tablesr   r   r2   Nr   )r<   r=   r2   r   r  
delete_sqlr   rD   r   Tabler   r   rt   DeleterY   r*   )r,   r.   r  r   table_aliasr  r6   r7   r    s   zPresto.Generator.delete_sqlexp.JSONExtractc                 C  s   | j jdd}|jdr|r| jd|j|jg|jR  S | |d}g }|jjdd  D ])}t	|t
js@| d| d q.|j}t
j|sOd	| d	}|d
|  q.d|}| | S )Nr   Tvariant_extractJSON_EXTRACTr2   r   z#Cannot transpile JSONPath segment 'z' to ROW access".r#  )r   settingsr=   r<   r?   r2   r.   rV   r4   rD   r   JSONPathKeyrg   SAFE_IDENTIFIER_REmatchr  r  )r,   r.   is_json_extractr2   segmentspath_keykeyr   r6   r6   r7   jsonextract_sql  s*   


z Presto.Generator.jsonextract_sqlexp.GroupConcatc                 C  s    |  d|  d|j|jdS )Nrk  	ARRAY_AGG	separator)r?   r2   r<   r=   rh   r6   r6   r7   groupconcat_sql  s
   
z Presto.Generator.groupconcat_sql)r.   r  r0   r1   )r.   r  r0   r1   )r.   r  r0   r1   )r.   r  r0   r1   )r.   r  r0   r1   )r.   r  r0   r1   )r.   r  r0   r1   )r.   r   r  r   r  r  r0   r  )r.   r  r0   r1   )r.   r  r0   r1   )r.   r  r0   r1   )r.   r  r0   r1   )r   r   r   INTERVAL_ALLOWS_PLURAL_FORM
JOIN_HINTSTABLE_HINTSQUERY_HINTSIS_BOOL_ALLOWEDTZ_TO_WITH_TIME_ZONENVL2_SUPPORTEDSTRUCT_DELIMITERLIMIT_ONLY_LITERALSSUPPORTS_SINGLE_ARG_CONCATLIKE_PROPERTY_INSIDE_SCHEMAMULTI_ARG_DISTINCTSUPPORTS_TO_NUMBERHEX_FUNCPARSE_JSON_NAMEPAD_FILL_PATTERN_IS_REQUIRED#EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSESUPPORTS_MEDIANARRAY_SIZE_NAMEr   	GeneratorPROPERTIES_LOCATIONr   LocationProperty
PropertiesLocationUNSUPPORTEDVolatilePropertyTYPE_MAPPINGru   rv   BINARYBITDATETIME
DATETIME64FLOATr   INTr   r  TIMESTAMPTZTIMESTAMPNTZTIMETZ
TRANSFORMSrD  r   r   ArgMaxArgMinrZ   ArrayAnyArrayConcatrJ  ArrayToStringrU  rW  
AtTimeZonerF  BitwiseLeftShiftr   rG  BitwiseRightShiftrH  Castr   
preprocessepoch_cast_to_tsCurrentTimerP  CurrentUserr  r   r
  DateStrToDater   DateToDiDateSub	DayOfWeekrL  r  DiToDater1  FileFormatPropertyFirstr   FromTimeZonerT  r    GenerateDateArrayGroupunalias_groupIfr   ILiker   Initcapr8   LastLastDayLateralr   Leftr   rO  r+   
LogicalAnd	LogicalOrPivotr   Quantileri   rQ  r   rR  Rightr   r\   rc   SchemaCommentPropertyr   eliminate_window_clauseeliminate_qualifyeliminate_distinct_onexplode_projection_to_unnesteliminate_semi_and_anti_joinsr   Spacer#   	SortArrayrA   r-  	StrToDaterV  rK  ro   StructExtractr   r  unnest_generate_series	Timestampr   TimestampAddTimestampTruncr   TimeStrToDater   TimeStrToTimeTimeStrToUnixr   rX  ToCharTryCast
TsOrDiToDi	TsOrDsAddr~   
TsOrDsDiffr   TsOrDsToDaterz   rN  	UnixToStrr   r   UnixToTimeStrVariancePopWithadd_recursive_cte_column_namesWithinGroup#remove_within_group_for_percentilesXorr   rY  SHAr6  r   RESERVED_KEYWORDSr  r  r  r  r  r  r  r  r  r  r  r  __classcell__r6   r6   r  r7   r&    s   



















	















 
!#
$
%
&
'
)
*,
-/012345
6789
<
=>?@ABC
DEOP
Q
R
STUVW
XYZ[
\
_
`
ab
cefg
h
ik
l
nops

y
=





r&  )#r   r   r   INDEX_OFFSETNULL_ORDERINGr%   rr   STRICT_STRING_CONCATSUPPORTS_SEMI_ANTI_JOINTYPED_DIVISIONTABLESAMPLE_SIZE_IS_PERCENTr   __annotations__SUPPORTS_VALUES_DEFAULTTIME_MAPPINGr	   CASE_INSENSITIVENORMALIZATION_STRATEGYr   
ANNOTATORSr   FloorCeilModRoundSignAbsRandSUPPORTED_SETTINGSr   r   r   rB  r   r&  r6   r6   r6   r7   rq      s>   
 






Erq   )r,   r-   r.   r/   r0   r1   )r,   r-   r.   r9   r0   r1   )r,   r-   r.   rB   r0   r1   )r,   r-   r.   rd   r0   r1   )r,   r-   r.   rj   r0   r1   )r,   r-   r.   rp   r0   r1   )r,   r-   r.   r{   r0   r1   )r,   r-   r.   r   r0   r1   )r<   r   r0   r   )r,   r-   r.   r   r0   r1   )r,   r-   r.   r   r0   r1   )r,   r-   r.   r   r0   r   )r<   r   r0   r   )F)rF   r1   r   r   r0   r   )r,   r-   r.   r   r0   r1   )r.   r   r0   r   )M
__future__r   typingr   sqlglotr   r   r   r   r   sqlglot.dialects.dialectr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   sqlglot.dialects.hiver$   sqlglot.dialects.mysqlr%   sqlglot.helperr&   r'   sqlglot.optimizer.scoper(   sqlglot.tokensr)   sqlglot.transformsr*   sqlglot.generatorr+   Unionr  rh  rG  r   r8   rA   rc   ri   ro   rz   r~   r   r   r   r   r   r   r   r   r   r   rq   r6   r6   r6   r7   <module>   s>    x






	





	



