o
    8Di                     @  sp   d dl mZ d dlmZmZmZ d dlmZmZm	Z	m
Z
 d dlmZmZ d dlmZ d dlZG dd deZdS )	    )annotations)expparser
transforms)merge_without_target_sqltrim_sqltimestrtotime_sqlgroupconcat_sql)amend_exploded_column_tablePresto)	TokenTypeNc                   @  s8   e Zd ZdZdZG dd dejZG dd dejZdS )TrinoFTc                   @  s^   e Zd ZU i ejjdd dd dd dZi eddZde	d	< dddZ
dddZdS )zTrino.Parserc                 C     |   S N)_parse_trimself r   O/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/trino.py<lambda>       zTrino.Parser.<lambda>c                 C  r   r   )_parse_json_queryr   r   r   r   r      r   c                 C  r   r   )_parse_string_aggr   r   r   r   r      r   )TRIM
JSON_QUERYLISTAGG)WITHWITHOUT)WRAPPER)ARRAYr   )CONDITIONALr   )r    r   WRAPPED)UNCONDITIONALr   )r"   r   r   zparser.OPTIONS_TYPEJSON_QUERY_OPTIONSreturn t.Optional[exp.JSONExtractQuote]c                 C  sJ   |  dds|  ddsd S | jtj| j| jd  j |  ddddS )	NKEEPQUOTESOMIT   ONSCALARSTRING)optionscalar)_match_text_seq
expressionr   JSONExtractQuote_tokens_indextextupperr   r   r   r   _parse_json_query_quote)   s   

z$Trino.Parser._parse_json_query_quoteexp.JSONExtractc              	   C  sB   | j tj|  | tjo|  | j| jddd| 	 | 
 dS )NF)raise_unmatchedT)thisr0   r-   
json_queryquoteon_condition)r0   r   JSONExtract_parse_bitwise_matchr   COMMA_parse_var_from_optionsr#   r6   _parse_on_conditionr   r   r   r   r   5   s   zTrino.Parser._parse_json_queryN)r$   r%   )r$   r7   )__name__
__module____qualname__r   ParserFUNCTION_PARSERSdictfromkeysr#   __annotations__r6   r   r   r   r   r   rF      s    
 
rF   c                      s   e Zd Zi ejjejejj	j
iZi ejjejdd ejdd ejdd ejdd ejeejeejejedejegejdd ejeiZejejejhZd fddZ   Z!S )zTrino.Generatorc                 C     d|  |d dS )NzREDUCE(r9   z%, 0, (acc, x) -> acc + x, acc -> acc)sqlr   er   r   r   r   H   s   zTrino.Generator.<lambda>c                 C  rK   )NzARRAY_AGG(DISTINCT r9   )rL   rN   r   r   r   r   J   s    c                 C     t | |ddS )NT)on_overflow)r	   rN   r   r   r   r   K       c                 C  s
   |  |S r   )property_sqlrN   r   r   r   r   L   s   
    c                 C  rQ   )NT)include_precision)r   rN   r   r   r   r   W   rS   r0   r7   r$   strc                   s   |j dst |S | |d}| |d}|rd| nd}| |d}|r.d| nd}| |d}|r=d| nd}| d|j|| | | S )	Nr:   r0   r-     r;   r<   r   )argsgetsuperjsonextract_sqlrM   funcr9   )r   r0   	json_pathr-   r;   r<   	__class__r   r   r]   a   s   zTrino.Generator.jsonextract_sql)r0   r7   r$   rW   )"rC   rD   rE   r   	GeneratorPROPERTIES_LOCATIONr   LocationProperty
PropertiesLocation	POST_WITH
TRANSFORMSArraySumArrayUniqueAggGroupConcatMerger   Selectr   
preprocesseliminate_qualifyeliminate_distinct_onexplode_projection_to_unnesteliminate_semi_and_anti_joinsr
   TimeStrToTimeTrimr   JSONPathKeyJSONPathRootJSONPathSubscriptSUPPORTED_JSON_PATH_PARTSr]   __classcell__r   r   r`   r   rb   @   s<    




	rb   N)rC   rD   rE   SUPPORTS_USER_DEFINED_TYPESLOG_BASE_FIRSTr   rF   rb   r   r   r   r   r      s
    -r   )
__future__r   sqlglotr   r   r   sqlglot.dialects.dialectr   r   r   r	   sqlglot.dialects.prestor
   r   sqlglot.tokensr   typingtr   r   r   r   r   <module>   s    