o
    8DiB                     @  s  d dl mZ d dlZd dlmZ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$ d dl%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/ ej0ryd d	l1m2Z2m3Z3 	
dVdWddZ4dXddZ5dYddZ6dZd d!Z7d[d$d%Z8d\d'd(Z9d\d)d*Z:d\d+d,Z;d]d1d2Z<d^d4d5Z=d_d9d:Z>d`d<d=Z?dad?d@Z@dadAdBZAdbdFdGZBdadHdIZCdZdJdKZDdcdMdNZEdddPdQZFdadRdSZGG dTdU dUeZHdS )e    )annotationsN)exp	generatorjsonpathparsertokens
transforms)DialectNormalizationStrategybuild_timetostr_or_tocharbinary_from_functionbuild_default_decimal_type'build_replace_with_optional_replacementbuild_timestamp_from_partsdate_delta_sqldate_trunc_to_timedatestrtodate_sqlbuild_formatted_timeif_sqlinline_array_sqlmax_or_greatestmin_or_leastrename_functimestamptrunc_sqltimestrtotime_sqlvar_map_sqlmap_date_partno_timestamp_sqlstrposition_sqltimestampdiff_sqlno_make_interval_sqlgroupconcat_sql)unsupported_args)flattenis_floatis_intseq_get)find_all_in_scope)	TokenType)EBFnamestrkindexp.DataType.Typesafeboolreturnt.Callable[[t.List], exp.Func]c                   s   d fdd}|S )Nargst.Listr1   exp.Funcc                   s<  t | d}t | d}|d uot|j}|d uo|j}t|tjs$|rm|rmt| dkrB|jrB|sBr<tj|tj	
 dS t| S  tj	jjkrmsV|sO|rVtj||dS |smt|jsmttjd| }|d |S  tj	jjtj	jjfv r|s tj	jjkrtjntj}t|d| }|d |S tj| dS )Nr      thisto)r8   scale	snowflaker/   r8   expressions)r&   r%   r+   
isinstancer   Literallen	is_stringTryCastDataTypebuildcastType	TIMESTAMP
UnixToTimer$   r   	StrToTimesetDATETIMETsOrDsToDateTsOrDsToTime	Anonymous)r3   valuescale_or_fmt	int_valueint_scale_or_fmtexprklassformatted_expr-   r+   r/    S/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/snowflake.py_builder.   s0   


z!_build_datetime.<locals>._builder)r3   r4   r1   r5   rX   )r+   r-   r/   rZ   rX   rW   rY   _build_datetime+   s   $r[   r3   r4    t.Union[exp.StarMap, exp.Struct]c                 C  s:   t | }t|tjr|S tjdd t|j|jD dS )Nc                 S  s   g | ]\}}t j||d qS )r8   
expression)r   
PropertyEQ).0kvrX   rX   rY   
<listcomp>\   s    z+_build_object_construct.<locals>.<listcomp>r=   )	r   build_var_mapr>   r   StarMapStructzipkeysvalues)r3   r^   rX   rX   rY   _build_object_constructU   s   
rk   exp.DateDiffc                 C  s&   t jt| dt| dtt| ddS N   r6   r   r8   r^   unit)r   DateDiffr&   r   r3   rX   rX   rY   _build_datediffb   s   rs   	expr_type	t.Type[E]t.Callable[[t.List], E]c                      d fdd}|S )Nr3   r4   r1   r)   c                   s$    t | dt | dtt | ddS rm   )r&   r   rr   rt   rX   rY   rZ   i   s
   z&_build_date_time_add.<locals>._builderr3   r4   r1   r)   rX   rt   rZ   rX   rx   rY   _build_date_time_addh   s   r{   	t.Type[B]'t.Callable[[t.List], B | exp.Anonymous]c                      d fdd}|S )Nr3   r4   r1   B | exp.Anonymousc                   s&   t | dkrtj| dS t | S )N   r<   )r@   r   rO   r   rr   rt   r+   rX   rY   rZ   t   s   z _build_bitwise.<locals>._builder)r3   r4   r1   r   rX   )rt   r+   rZ   rX   r   rY   _build_bitwises   s   r   exp.Ifc                 C  s   t t| dt j}t t| dt j}t j|t jddt j|t 	 d
 }t jd}t j||d}t j|||dS )Nr   r6   r]   r8   truefalse)r   _wrapr&   BinaryEQr?   numberand_Isnullnot_DivIf)r3   lhsrhscondr   r   rX   rX   rY   _build_if_from_div0~   s   r   c                 C  s6   t jt| dt  d}t j|t jdt| ddS Nr   r]   r   )r   r   r&   Nullr   r?   r   r3   r   rX   rX   rY   _build_if_from_zeroifnull   s   r   c                 C  s6   t jt| dt jdd}t j|t  t| ddS r   )r   r   r&   r?   r   r   r   r   rX   rX   rY   _build_if_from_nullifzero   s   r   selfSnowflake.Generatorr^   exp.RegexpILikec                 C  s6   | d}d|vr|d7 }| d|j|jtj|S )NflagiREGEXP_LIKE)textfuncr8   r^   r   r?   string)r   r^   r   rX   rX   rY   _regexpilike_sql   s   
r   exp.RegexpReplacec                 C  s0   t j| }|jds|dt jd |S )Nreplacement )r   RegexpReplacefrom_arg_listr3   getrJ   r?   r   )r3   regexp_replacerX   rX   rY   _build_regexp_replace   s   r   t.Anykwargs(t.Callable[[Snowflake.Parser], exp.Show]c                    r~   )Nr   Snowflake.Parserr1   exp.Showc                   s   | j  i S N)_parse_show_snowflaker   r3   r   rX   rY   _parse   s   z_show_parser.<locals>._parse)r   r   r1   r   rX   )r3   r   r   rX   r   rY   _show_parser   s   r   "exp.DateTrunc | exp.TimestampTruncc                 C  s"   t | }|dt|jd  |S )Nrp   )r   rJ   r   r3   )r3   truncrX   rX   rY   _date_trunc_to_time   s   r   exp.Expressionc                 C  sr   t | tjr7| jrt| } | S | jD ]#}t|r|jng d}t |tj	r6t|}t
tj|d|d q| S )a  
    Snowflake doesn't allow columns referenced in UNPIVOT to be qualified,
    so we need to unqualify them. Same goes for ANY ORDER BY <column>.

    Example:
        >>> from sqlglot import parse_one
        >>> expr = parse_one("SELECT * FROM m_sales UNPIVOT(sales FOR month IN (m_sales.jan, feb, mar, april))")
        >>> print(_unqualify_pivot_columns(expr).sql(dialect="snowflake"))
        SELECT * FROM m_sales UNPIVOT(sales FOR month IN (jan, feb, mar, april))
    r   r=   )r>   r   Pivotunpivotr   unqualify_columnsfieldsr&   r=   PivotAnytrE   
ExpressionrJ   )r^   field
field_exprunqualified_field_exprrX   rX   rY   _unqualify_pivot_columns   s   
	

r   c                 C  s   t | tjsJ d	dd}| jd}t | jtjr?|r"|tjs?| jj	D ]}t |tj
r>|j}t |tjr>|j|dd q&| S )
Nr^   exp.DataTyper1   c                 S  s   | j tjjv r| dd  | S )Nr=   )r8   r   rC   NESTED_TYPESrJ   )r^   rX   rX   rY   _flatten_structured_type   s   zJ_flatten_structured_types_unless_iceberg.<locals>._flatten_structured_type
propertiesFcopy)r^   r   r1   r   )r>   r   Creater3   r   r8   SchemafindIcebergPropertyr=   	ColumnDefr-   rC   	transform)r^   r   propsschema_expressioncolumn_typerX   rX   rY   (_flatten_structured_types_unless_iceberg   s   
r   unnest
exp.UnnestNonec           
      C  s  | j d }|jd}|jd}|jd}|r&|r&t|tjr&|jdkr(d S |jd}| jd}|rC| }t|j	dpAd}nd}t
tj|t|d	t|d
g|}tjjd tjdt|||gd g}	| d|	g | t||  | d S )Nr   startendstep1rp   aliasrP   intdateARRAY_GENERATE_RANGEr6   r=   )r=   r3   r   r>   r   Intervalr+   r   r&   columnsr{   DateAddrE   as_	SnowflakeParser	FUNCTIONSr?   r   rs   rJ   replaceselectfrom_subquery)
r   generate_date_arrayr   r   r   rp   unnest_aliassequence_value_namedate_addnumber_sequencerX   rX   rY   _unnest_generate_date_array   s,   

$r   c                 C  s   t | tjrO| tjD ]B}|j}t |tjs3tj| gd}|t	tj
t d|  t |tjrNt |jtjtjfrNt|jdkrNt| q| S )Nrd   r8   r6   )r>   r   Selectfind_allGenerateDateArrayparentUnnestr   r   r   ArrayAggStarr   r   FromJoinr@   r=   r   )r^   r   r   r   rX   rX   rY   _transform_generate_date_array  s    
r   c                   rw   )Nr3   r4   r1   r)   c              	     sD    t | dt | dt | dt | dt | dt | dptjddS )Nr   r6   rn   r         )r8   r^   position
occurrence
parametersgroup)r&   r   r?   r   rr   rx   rX   rY   rZ     s   z'_build_regexp_extract.<locals>._builderry   rX   rz   rX   rx   rY   _build_regexp_extract  s   
r  (exp.RegexpExtract | exp.RegexpExtractAllc              	   C  s   |j d}|r|jdkrd }|j dp|otjd}|j dp*|o*tjd}|j dp8|o8tjd}| t|tj	rCdnd	|j
|j||||S )
Nr  0r  cr   r6   r   REGEXP_SUBSTRREGEXP_EXTRACT_ALL)r3   r   r+   r   r?   r   r   r   r>   RegexpExtractr8   r^   )r   r^   r  r  r   r   rX   rX   rY   _regexpextract_sql)  s   r
  )exp.JSONValueArray | exp.JSONExtractArrayc                 C  sp   t j|j|jd}t d}t|t jrt j|t jj	j
d}n
t jd| dd}t j|g|d}| d||S )	Nr]   x)r9   zTO_JSON()r   )r=   r8   	TRANSFORM)r   JSONExtractr8   r^   to_identifierr>   JSONValueArrayrE   rC   rF   VARCHAR	ParseJSONLambdar   )r   r^   json_extractidentr8   transform_lambdarX   rX   rY   _json_extract_value_array_sqlB  s   
r  c                 C  s   t | tjrXt }t| tjD ]!}|jd}t |tjr0|j	s0t
|jdkr0||jd j q|rXt| tjD ]}|j|v rW|jd }tj|j}|tj||gd q9| S )Nr   r6   r   tabler<   )r>   r   r   rJ   r'   r   r3   r   
TableAliasr8   r@   r   addr+   Columnr  r?   r   r   Bracket)r^   unnest_aliasesr   r   r  bracket_lhsbracket_rhsrX   rX   rY   _eliminate_dot_variant_lookupR  s&   


r!  c                	      s  e Zd ZejZdZdZdZdZ	dZ
dZdZdZi ddddd	d
dd
ddddddddddddddddddddddddd d!d!d"d"d#d#d$d$d%Zi ejd&d'iZd7d8 fd-d.ZG d/d0 d0ejZG d1d2 d2ejZG d3d4 d4ejZG d5d6 d6ejZ  ZS )9r   nulls_are_largez'YYYY-MM-DD HH24:MI:SS'FTNYYYYz%YyyyyYYz%yyyMMMMz%BmmmmMONz%bmonMMz%mmmDDz%dddz%-dDYz%adyz%wHH24z%Hhh24HH12z%Iz%Mz%Sz%f)hh12MImiSSssFF6ff6ISOWEEKWEEKISOr^   r)   identifyr0   r1   c                   s<   t |tjrt |jtjr|j dkr|S t j||dS )Ndual)r=  )	r>   r   
Identifierr   Tabler+   lowersuperquote_identifier)r   r^   r=  	__class__rX   rY   rC    s   
zSnowflake.quote_identifierc                   @  s"   e Zd Zejj Zed dS )zSnowflake.JSONPathTokenizer$N)__name__
__module____qualname__r   JSONPathTokenizerSINGLE_TOKENSr   poprX   rX   rX   rY   rJ    s    rJ  c                      sX  e Zd ZdZdZdZh ejje	j
Zejje	jhB Zee	j
 ee	jhB Zi ejji dejjddd ddd d	d
d deejddeejddeejddeejddeejddeejddeejddeejddeejddedejjjdedeej de!i de"ddd dej#jddd dej$jdej%jd d!d d"d#d d$d%d d&e&d'e'd(e(ej)d)e*d*e(ej+d+e(ej)d,e,d-ej-ji d.d/d d0d1d d2eej.d3e!d4eej d5e!d6e/d7e/d8e/d9e/d:d;d d<ed<ejjjdd=d>ed>ejjj0dd=d?ed?ejjj1dd=d@e2dAedAejjjdBdCd edDejjj0edEejjj1edFejjj3edGejjj1edHejjj4ej5je6dIZi ejj7dJd dKd dLd dMZ7e78dN ejj9e	j0h Z9i ejj:e	j;e<ej=e	j>e<ej?iZ:i ejj@dOdPd iZ@i ejjAe	jBdQd e	jCdRd e	jDdSd iZAi ejjEdTd dUd dVd dWd dXd dYZEejjjFeGdZd[d\iZHi d]eId]d^eId]d_eId_d`eId_daeIdadbeIdadceIdcddeIdcdeeIdedfeIdedgeIdgdheIdgdieIdidjeIdidkeIdkdleIdkdmeIdmeIdmeIdneIdoeIdpeIdpeIdqeIdreIdseIdtdu	ZJi ejjKdvd dwd dxd dyd dzZKe	jLe	jMe	jNhZOg d{ZPh d|ZQh d}ZRi ejjSe	jTd~d iZSḋ fddZU	ddddZVdddZWdddZXdч fddZYd҇ fddZZdddZ[ddddZ\dև fddZ]	dd؇ fddZ^							ddڇ fddZ_		dd܇ fddZ`dddZadddZbdddZcdddZddddZedddZfdЇ fddZgd fddńZhdddȄZiddd˄Zj  ZkS )r   T	BERNOULLIAPPROX_PERCENTILEARRAY_CONSTRUCTc                 C  s   t j| dS Nrd   )r   Arrayrr   rX   rX   rY   <lambda>      zSnowflake.Parser.<lambda>ARRAY_CONTAINSc                 C  s   t jt| dt| ddS )Nr6   r   r]   )r   ArrayContainsr&   rr   rX   rX   rY   rR    s    r   c                 C  s4   t jt| dt jt| dt jddt| ddS )Nr   r6   r]   rn   )r   r   r   )r   GenerateSeriesr&   Subr?   r   rr   rX   rX   rY   rR    s
    BITXORBIT_XORBITORBIT_ORBITSHIFTLEFTBIT_SHIFTLEFTBITSHIFTRIGHTBIT_SHIFTRIGHTBOOLXORrK   
DATE_TRUNCDATEADDDATEDIFFDIV0EDITDISTANCEc                 C  s"   t jt| dt| dt| ddS )Nr   r6   rn   )r8   r^   max_dist)r   Levenshteinr&   rr   rX   rX   rY   rR    s    FLATTENGET_PATHc                 C  s    t jt| d|t| ddS )Nr   r6   r]   )r   r  r&   to_json_path)r3   dialectrX   rX   rY   rR    s    HEX_DECODE_BINARYIFFLAST_DAYc                 C  s   t jt| dtt| ddS )Nr   r6   )r8   rp   )r   LastDayr&   r   rr   rX   rX   rY   rR    s    LENc                 C     t jt| dddS Nr   T)r8   binaryr   Lengthr&   rr   rX   rX   rY   rR        LENGTHc                 C  rq  rr  rt  rr   rX   rX   rY   rR    rv  
NULLIFZEROOBJECT_CONSTRUCTr  REGEXP_REPLACEr  REGEXP_SUBSTR_ALLREPLACERLIKESQUAREc                 C  s   t jt| dt jddS )Nr   rn   r]   )r   Powr&   r?   r   rr   rX   rX   rY   rR    s    TABLEc                 C  s   t jt| ddS )Nr   r   )r   TableFromRowsr&   rr   rX   rX   rY   rR        TIMEADDTIMEDIFFTIMESTAMPADDTIMESTAMPDIFFTIMESTAMPFROMPARTSTIMESTAMP_FROM_PARTSTIMESTAMPNTZFROMPARTSTIMESTAMP_NTZ_FROM_PARTSTRY_PARSE_JSONc                 C  rq  )Nr   T)r8   r/   )r   r  r&   rr   rX   rX   rY   rR    rv  TRY_TO_DATE)r/   TRY_TO_TIMETRY_TO_TIMESTAMPTO_CHARTO_DATE	TO_NUMBERc                 C  s*   t jt| dt| dt| dt| ddS )Nr   r6   rn   r   )r8   format	precisionr:   )r   ToNumberr&   rr   rX   rX   rY   rR    s    TO_TIMETO_TIMESTAMPTO_TIMESTAMP_LTZTO_TIMESTAMP_NTZTO_TIMESTAMP_TZ)r  r  r  r  r  
TO_VARCHAR
ZEROIFNULLc                 C     |   S r   )_parse_date_partr   rX   rX   rY   rR        c                 C  r  r   )_parse_json_objectr   rX   rX   rY   rR    r  c                 C  r  r   )_parse_string_aggr   rX   rX   rY   rR    r  )	DATE_PARTOBJECT_CONSTRUCT_KEEP_NULLLISTAGGTRIMUNSETc                 C  s"   | j tj| d| | jddS )NTAGT)tagr=   unset)r^   r   Set_match_text_seq
_parse_csv_parse_id_varr   rX   rX   rY   rR    s    
c                 C  r  r   )
_parse_getr   rX   rX   rY   rR  '  r  c                 C  r  r   )
_parse_putr   rX   rX   rY   rR  (  r  c                 C  r  r   )_parse_showr   rX   rX   rY   rR  )  r  c                 C  r  r   )_parse_credentials_propertyr   rX   rX   rY   rR  .  r  c                 C  r  r   )_parse_file_format_propertyr   rX   rX   rY   rR  /  r  c                 C  r  r   )_parse_location_propertyr   rX   rX   rY   rR  0  r  c                 C  r  r   )
_parse_tagr   rX   rX   rY   rR  1  r  c                 C  s   |  do| jtj|  dS )NTEMPLATEr   )r  r^   r   UsingTemplateProperty_parse_statementr   rX   rX   rY   rR  2  s   
 )CREDENTIALSFILE_FORMATLOCATIONr  USING&   r   )r  r:   	DATABASESzTERSE DATABASESSCHEMASzTERSE SCHEMASOBJECTSzTERSE OBJECTSTABLESzTERSE TABLESVIEWSzTERSE VIEWSzPRIMARY KEYSzTERSE PRIMARY KEYSIMPORTED KEYSzTERSE IMPORTED KEYSUNIQUE KEYSzTERSE UNIQUE KEYS	SEQUENCESSTAGESCOLUMNSUSERSFILE FORMATSr   
PROCEDURES
WAREHOUSES)	zTERSE SEQUENCESr  r  r  zTERSE USERSr  r   r  r  c                 C  r  r   _parse_with_constraintr   rX   rX   rY   rR  Z  r  c                 C  r  r   r  r   rX   rX   rY   rR  [  r  c                 C  r  r   r  r   rX   rX   rY   rR  \  r  c                 C  r  r   r  r   rX   rX   rY   rR  ]  r  )WITHMASKING
PROJECTIONr  )SEQKEYPATHINDEXVALUETHIS>   r  r  r  r  r  r  >   r  	STREAMLIT	WAREHOUSESTORAGE INTEGRATIONc                 C  s(   | j tj| |  |dd |D dS )Nc                 S  s"   g | ]}t |tjr|jn|qS rX   )r>   r   Castr8   )r`   erX   rX   rY   rc   t  s   " z-Snowflake.Parser.<lambda>.<locals>.<listcomp>r<   )r^   r   r  _replace_lambda_parse_assignmentr   r=   rX   rX   rY   rR  n  s    r1   exp.Usec                   s`     ddr+ dot jj }|rd n  fdd} jtj	d||dS t
  S )N	SECONDARYROLES)ALLNONEc                     s    j ddS )NF)schema)_parse_tablerX   r   rX   rY   rR  {  rS  z-Snowflake.Parser._parse_use.<locals>.<lambda>zSECONDARY ROLES)r-   r8   r=   )r  _match_textsr   var_prevr   upperr  r^   UserB  
_parse_use)r   r8   rolesrD  r   rY   r  x  s   

zSnowflake.Parser._parse_useNr8   t.Optional[exp.Expression]c                 C  s\   |s|S |j d}t|tjr&t|tjr&| jtj|jtj	|
 ddS | jtj|dS )Nqueryr   r]   )r3   r   r>   r   InQueryr^   NEQr8   Allr   Not)r   r8   r  rX   rX   rY   _negate_range  s   zSnowflake.Parser._negate_rangeexp.Tagsc                 C  s   | j tj| | jdS rP  )r^   r   Tags_parse_wrapped_csv_parse_propertyr   rX   rX   rY   r    s   
zSnowflake.Parser._parse_tagc                 C  s   | j jtjkr| | jd  | ddr6|  }| jt	j
t|t	jr'| n|| tjo3| | jdS | ddrT|  }| jt	jt|t	jrP| dS |dS | tjr^|  S d S )Nr6   r  POLICYr<   r  r   )r  
token_typer(   r  _retreat_indexr  _parse_columnr^   r   MaskingPolicyColumnConstraintr>   r  to_dot_matchr  r  r   ProjectionPolicyColumnConstraintr  r  )r   policyrX   rX   rY   r    s*   
z'Snowflake.Parser._parse_with_constraint3t.Optional[exp.Expression] | t.List[exp.Expression]c                   s   |  tjr
|  S t  S r   )r  r(   r  r  rB  _parse_with_propertyr   rD  rX   rY   r    s   
z%Snowflake.Parser._parse_with_propertyexp.Create | exp.Commandc                   s6   t   }t|tjr|j| jv r|j|jj |S r   )	rB  _parse_creater>   r   r   r-   NON_TABLE_CREATABLESr8   r   r   r^   rD  rX   rY   r    s   
zSnowflake.Parser._parse_creater   c                 C  s   |   p|  }|sd S | tj |  }t|}|j }|	dr_|dkr+d}n|dkr2d}n	|dkr9d}nd }| j
tj|tjdd	}| j
tj|d
}|r]tj|tj|d}|S | j
tj||dS )NEPOCHEPOCH_MILLISECONDi  EPOCH_MICROSECOND@B EPOCH_NANOSECONDi ʚ;rG   r7   r   r]   )
_parse_var_parse_typer  r(   COMMA_parse_bitwiser   r+   r  
startswithr^   r   r  rC   rD   
TimeToUnixMulr?   r   Extract)r   r8   r^   r+   r:   tsto_unixrX   rX   rY   r    s*   

z!Snowflake.Parser._parse_date_partFis_mapr0   c                 C  s*   |r	|  |  S |  | j|  ddS )NT)explicit)_parse_slice_parse_string_parse_aliasr  )r   r  rX   rX   rY   _parse_bracket_key_value  s   z)Snowflake.Parser._parse_bracket_key_valuet.Optional[exp.Lateral]c                   sv   t   }|s	|S t|jtjr9|jd}dd | jD }|r.|jds.|	d| |S |s9tj
|d|dd |S )Nr   c                 S  s   g | ]}t |qS rX   )r   r  )r`   colrX   rX   rY   rc         z3Snowflake.Parser._parse_lateral.<locals>.<listcomp>r   
_flattenedF)r  r   )rB  _parse_lateralr>   r8   r   Exploder3   r   FLATTEN_COLUMNSrJ   alias_)r   lateraltable_aliasr   rD  rX   rY   r     s   
zSnowflake.Parser._parse_lateralr  is_db_referencewildcard	exp.Tablec                   s   | j tjddr|  }n| jdddr|  }nd }|rmd }d }|  tj}| jra|ra|  tjsa| ddrD|  pBt	 j
|d}n| ddrO|  }nn|  tj | jra|ra|  tjr2| jtj|||d}|S t	 j
||d	}|S )
NFadvance@r  z=>)r&  PATTERN)r8   r  pattern)r  r&  )r  r(   STRINGr  r  _parse_location_pathL_PAREN_currR_PARENrB  _parse_table_partsr  r^   r   r@  )r   r  r&  r'  r  file_formatr-  wrappedrD  rX   rY   r3    s.   


z#Snowflake.Parser._parse_table_partsjoinsalias_tokens#t.Optional[t.Collection[TokenType]]parse_bracketparse_partitionconsume_pipec                   sj   t  j||||||d}t|tjr3t|jtjr3|j}	tjjD ]}
|
dkr0|	|
|j	
|
 q |	}|S )N)r  r6  r7  r9  r&  r:  r8   )rB  r  r>   r   r@  r8   r  	arg_typesrJ   r3   r   )r   r  r6  r7  r9  r&  r:  r;  r  table_from_rowsargrD  rX   rY   r    s    
zSnowflake.Parser._parse_table	any_tokenr   c                   sP   |  ddr t j||dp|  }|   | jtjd|gdS t j||dS )N
IDENTIFIER()r?  r   r<   )r  rB  r  r  _match_r_parenr^   r   rO   )r   r?  r   
identifierrD  rX   rY   r  8  s   zSnowflake.Parser._parse_id_varr,   r   c                   sV  d }d } j  jd  j dk} d} tjr   nd } tj	ru dr0d}nE dr<d} 
 }n9 drQd} drL|d7 } 
 }n$  jre jj } jrd 
 }n jru| jv rod	nd
} 
 } jtjfi |||||| ddo     tjr  nd  ddo  fddd
S )Nrn   TERSEHISTORYACCOUNTCLASSAPPLICATIONPACKAGEz PACKAGESCHEMAr  STARTSr  
PRIVILEGESc                     s    j dddS )NT)r?  r  )r  rX   r   rX   rY   rR  s      z8Snowflake.Parser._parse_show_snowflake.<locals>.<lambda>)
terser8   historylikescope
scope_kindstarts_withlimitfrom
privileges)_tokensr  r   r  r  r  r(   LIKEr  INr3  
_match_setDB_CREATABLESr  r1  SCHEMA_KINDSr^   r   Show_parse_limitFROMr  )r   r8   rQ  rR  rN  rO  rP  rX   r   rY   r   G  sP   






z&Snowflake.Parser._parse_show_snowflakeexp.Put | exp.Commandc                 C  s:   | j jtjkr| | jS | jtj| 	 | 
 |  dS )Nr8   targetr   )r1  r  r(   r.  _parse_as_commandr  r^   r   Putr  r/  _parse_propertiesr   rX   rX   rY   r  w  s   zSnowflake.Parser._parse_putc                 C  sf   | j }| tjr| | jd  |  S |  }| jj	tj
kr%| |S | jtj|  ||  dS )Nrn   ra  )r  r  r(   r0  r  r  _parse_expressionr/  r1  r  	URI_STARTrc  r^   r   Getr  re  )r   r   rb  rX   rX   rY   r    s   
zSnowflake.Parser._parse_getexp.LocationPropertyc                 C  s    |  tj | jtj|  dS )Nr   )r  r(   r   r^   r   LocationPropertyr/  r   rX   rX   rY   r    s   z)Snowflake.Parser._parse_location_propertyc                 C  s&   | j tjddr| jdddS |  S )NFr)  T)r  parse_subquery_alias)r  r(   r0  _parse_selectr3  r   rX   rX   rY   _parse_file_location  s
   z%Snowflake.Parser._parse_file_locationexp.Varc                 C  sv   | j }| jdd |  r1| jtjtjtjfdds1| jdd |  r1| jtjtjtjfddrt	| 
|| jS )NT)ignore_reservedFr)  )r1  _advance_any_is_connectedrZ  r(   r  r0  r2  r   r  	_find_sqlr  )r   r   rX   rX   rY   r/    s   z%Snowflake.Parser._parse_location_pathc                   s4   t   }|s	|S |  }|r| jtj||dS |S )Nr7   )rB  _parse_lambda_arg_parse_typesr^   r   r  )r   r8   typrD  rX   rY   rs    s   
z"Snowflake.Parser._parse_lambda_argexp.ForeignKeyc                   s&   | j tjddr| tjS t  S )NFr)  )r  r(   
REFERENCESr^   r   
ForeignKeyrB  _parse_foreign_keyr   rD  rX   rY   ry    s   
z#Snowflake.Parser._parse_foreign_keyexp.FileFormatPropertyc                 C  s@   |  tj | j tjddr|  }n|  g}| jtj|dS )NFr)  rd   )	r  r(   r   r0  _parse_wrapped_options_parse_format_namer^   r   FileFormatPropertyr  rX   rX   rY   r    s   

z,Snowflake.Parser._parse_file_format_propertyexp.CredentialsPropertyc                 C  s   | j tj|  dS rP  )r^   r   CredentialsPropertyr{  r   rX   rX   rY   r    s   z,Snowflake.Parser._parse_credentials_property)r1   r  r   )r8   r  r1   r  )r1   r  )r1   r  )r1   r  )r1   r  )r   r   r1   r  F)r  r0   r1   r  )r1   r  )FFF)r  r0   r&  r0   r'  r0   r1   r(  )FFNFFFF)r  r0   r6  r0   r7  r8  r9  r0   r&  r0   r:  r0   r;  r0   r1   r  )TN)r?  r0   r   r8  r1   r  )r8   r,   r1   r   )r1   r`  )r1   ri  )r1   rn  )r1   rv  )r1   rz  )r1   r~  )lrG  rH  rI  IDENTIFY_PIVOT_STRINGSDEFAULT_SAMPLING_METHODCOLON_IS_VARIANT_EXTRACTr   r   ID_VAR_TOKENSr(   MATCH_CONDITIONTABLE_ALIAS_TOKENSWINDOWdiscardNUMBERCOLON_PLACEHOLDER_TOKENSr   r   ApproxQuantiler   r   
BitwiseXor	BitwiseOrBitwiseLeftShiftBitwiseRightShiftXorr[   rC   rF   rK   r   r{   r   rs   r   r!  Unhexr   r   rk   r  RegexpExtractAllr   r	  r   
RegexpLikeTimeAddr   rL   rG   r   TIMESTAMPLTZTIMESTAMPTZToCharr   FUNCTION_PARSERSrL  
TIMESTAMPSRANGE_PARSERSLIKE_ANYbinary_range_parserLikeAny	ILIKE_ANYILikeAnyALTER_PARSERSSTATEMENT_PARSERSGETPUTSHOWPROPERTY_PARSERSDECIMALr   TYPE_CONVERTERSr   SHOW_PARSERSCONSTRAINT_PARSERSDOTMODSLASHSTAGED_FILE_SINGLE_TOKENSr"  r\  r  LAMBDASARROWr  r  r  r  r  r  r  r  r   r3  r  r  r   r  r  r  rm  r/  rs  ry  r  r  __classcell__rX   rX   rD  rY   r     s   
"#$'()*
+,
-
./012
34
56789:;<=>ABCIR




	
	




	$

0




r   c                	   @  s  e Zd ZddgZddgZdgZg dZd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ejejejejejejej dZ
e
!d i ej	j"dej#iZ"dhZ$ej	j%ej&h Z%dS )zSnowflake.Tokenizer\')zx'r  )zX'r  z$$)z--z//)z/*z*/FzFILE://BYTEINTEXCLUDEzFILE FORMATr  z	ILIKE ANYzLIKE ANYr  MATCH_RECOGNIZEMINUSzNCHAR VARYINGr  REMOVERMSAMPLE
SQL_DOUBLESQL_VARCHAR)r  r  TIMESTAMP_TZTOPr  STAGEr  z/*+rF  N)'rG  rH  rI  STRING_ESCAPESHEX_STRINGSRAW_STRINGSCOMMENTSNESTED_COMMENTSr   	TokenizerKEYWORDSr(   rg  INTEXCEPTr  r  r  r  r  r  r  r  COMMANDTABLE_SAMPLEDOUBLESTORAGE_INTEGRATIONr  r  r  r  r  r  rL  rK  	PARAMETERVAR_SINGLE_TOKENSCOMMANDSr  rX   rX   rX   rY   r    sv    	

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dZdZdZdZdZdZdZdZi ejji ejed	ej ed
ej!edej"dd ej#dd ej$edej%dd ej&edej'edej(edej)edej*e+,e-gej.e/dej0e/dej1e/dej2e3ej4e5i ej6edej7edej8edej9edej:edej;dd ej<dd ej=dd ej>d d ej?d!d ej@eAd"d#d$ejBeCejDd%d ejEd&d ejFd'd ejGeCejHeId(d)d*ed+i ejJd,d ejKed-ejLed.ejMd/d ejNeOejPeQejReSejTd0d ejUd1d ejVe+,e+jWgejXe+,e+jWgejYe+,eZgej[e\ej]e\ej^e_ej`ed2ejae+,e+jbe+jce+d e+jeefeggi ejhed3ejied4ejjed5ejked6ejld7d ejmd8d ejned9ejoed:ejped;ejqe/d<ejresejte/dejud=d ejvew ejxeyejzd>d ej{ed?ej|d@d ej}edAej~e/dddBeje/dejdCd ejdDd ejedEejedFejedGejdHd ejedIejedJiZejejFejhZi ejjejjjdKejjjdKejjjdLiZejdMiZi ejjejejjjejJejjjejUejjjejejjjejejjjiZejMejiejejhZejfZddRdSZdd fdXdYZd fd[d\Zdd^d_ZddadbZdd fdgdhZd fdjdkZd fdmdnZddpdqZddsdtZddvdwZddydzZdd|d}ZdddZeIdddddZdddZdddZdddZdddZdddZdddZd fddZd fddZd fddZdddZ  ZS )r   rF  FT,z OVERWRITE INTO)rA  r  r  
ARRAY_SIZEAPPROX_COUNT_DISTINCTMAX_BYMIN_BYc                 C  s   | j |ddS )N	ARRAY_CAT)r+   )arrayconcat_sqlr   r  rX   rX   rY   rR  #  rM  zSnowflake.Generator.<lambda>c                 C     |  d|j|jS )NrT  )r   r^   r8   r  rX   rX   rY   rR  $  r  ARRAY_INTERSECTIONc                 C  s   |  d|jd|jS )NCONVERT_TIMEZONEzoner   r3   r   r8   r  rX   rX   rY   rR  &  s    rZ  rX  r\  r^  rb  rc  r  
DAYOFMONTH	DAYOFWEEKDAYOFWEEKISO	DAYOFYEARrh  c                 C  s   |  dt|j| j|jS )Nr  )r   r   r8   rk  r^   r  rX   rX   rY   rR  8      c                 C  s   d| j |ddd dS )NzFILE_FORMAT=(r=    sepr  rd   r  rX   rX   rY   rR  ;     c                 C  s   |  d|jdd|jS )Nr  r  z'UTC'r  r  rX   rX   rY   rR  =  r  c                 C  s(   |  d|jd |jd d |jdS )Nr   r   r   r6   r   )r   r3   r   r  rX   rX   rY   rR  @  s     c                 C  s   t | |ddS )Nr   r  )r!   r  rX   rX   rY   rR  C  rM  rm  NULL)r+   false_valuec                 C  r  )NJSON_EXTRACT_PATH_TEXT)r   r8   r^   r  rX   rX   rY   rR  F  s    
c                 C  s   | j dg|jR  S )Nr  )r   r=   r  rX   rX   rY   rR  I  rv  c                  G  s   dS )Nr   rX   )_rX   rX   rY   rR  J  s    ins_costdel_costsub_costre  c                 C     d|  |d S )Nz	LOCATION=r8   sqlr  rX   rX   rY   rR  O  r  BOOLAND_AGG
BOOLOR_AGGc                 C     t | |dS Nry  r   r  rX   rX   rY   rR  R  rS  c                 C  s$   |  |jdrd|jS d|jS )Nr/   r  
PARSE_JSONr  r  rX   rX   rY   rR  V  s
    c                 C  r  )NzPARTITION BY r8   r  r  rX   rX   rY   rR  Y  r  RANDOMSHA1ry  
STARTSWITHENDSWITHc                 C  s   t | |dddS )N	CHARINDEXT)	func_namesupports_position)r   r  rX   rX   rY   rR  s  s    c                 C  s   |  d|j| |S )NrK   )r   r8   format_timer  rX   rX   rY   rR  v  r  STRTOK_TO_ARRAYINSERTST_MAKEPOINTr  c                 C  s   |  d|j|j|jS )Nr  )r   rp   r^   r8   r  rX   rX   rY   rR  }  s    c                 C  s   d|  |d dS )NzEXTRACT(epoch_second FROM r8   r  r  r  rX   rX   rY   rR    rv  TO_ARRAYc                 C  s
   |  |S r   )function_fallback_sqlr  rX   rX   rY   rR    s   
 	TO_DOUBLE)rE   c                 C  &   |  |jdr
dnd|j| |S )Nr/   r  r  r   r3   r   r8   r  r  rX   rX   rY   rR        c                 C  r  )Nr/   r  r  r  r  rX   rX   rY   rR    r  rl  r  UUID_STRINGc                 C  r  r  r  r  rX   rX   rY   rR    rS  
WEEKOFYEARr`  OBJECTr  AUTOINCREMENTr   exp.Propertiesr1   r,   c                 C  s   | j |d| dddS )NFr   r  )r5  prefixr  )r   r  )r   r   rX   rX   rY   with_properties  r  z#Snowflake.Generator.with_propertiesr^   
exp.Valuesvalues_as_tabler0   c                   s    |j | j rd}t j||dS )NF)r  )r   UNSUPPORTED_VALUES_EXPRESSIONSrB  
values_sql)r   r^   r  rD  rX   rY   r    s   zSnowflake.Generator.values_sqlr   c                   s:   |j }|r|jtjj rtdd |D rdS t |S )Nc                 s  s    | ]	}t |tjV  qd S r   )r>   r   rC   )r`   
field_typerX   rX   rY   	<genexpr>  s    z3Snowflake.Generator.datatype_sql.<locals>.<genexpr>r  )r=   is_typer   rC   STRUCT_TYPESanyrB  datatype_sql)r   r^   r=   rD  rX   rY   r    s   z Snowflake.Generator.datatype_sqlexp.ToNumberc              	   C  s,   |  d|j|jd|jd|jdS )Nr  r  r  r:   r   r8   r3   r   r  rX   rX   rY   tonumber_sql  s   


z Snowflake.Generator.tonumber_sqlexp.TimestampFromPartsc                 C  sB   |j d}|d ur| tjd }|d| td| |S )Nmillir
  nanor  )r3   r   rL  r   r?   r   rJ   r   )r   r^   r  milli_to_nanorX   rX   rY   timestampfromparts_sql  s
   z*Snowflake.Generator.timestampfromparts_sqlNexp.Castsafe_prefixt.Optional[str]c                   sL   | tjjjr| d|jS | tjjjr| d|jS t j	||dS )NTO_GEOGRAPHYTO_GEOMETRY)r   )
r  r   rC   rF   	GEOGRAPHYr   r8   GEOMETRYrB  cast_sqlr   r^   r   rD  rX   rY   r&    s
   zSnowflake.Generator.cast_sqlexp.TryCastc                   s^   |j }|jd u rddlm} ||| jd}|jg tjjtjj	j
R  r*t |S | |S )Nr   )annotate_types)rk  )r8   type sqlglot.optimizer.annotate_typesr)  rk  r  r   rC   
TEXT_TYPESrF   UNKNOWNrB  trycast_sqlr&  )r   r^   rP   r)  rD  rX   rY   r.    s   

zSnowflake.Generator.trycast_sqlexp.Logc                   s    |j s
| d|jS t |S )NLN)r^   r   r8   rB  log_sqlr  rD  rX   rY   r1    s   zSnowflake.Generator.log_sqlr   c           
      C  s  |j d}|j d}|r|jng }t|dptd}tdtdtdt|tjr3| ntd|td	g}|rG|	d
| ntj
d|d}| |jd }|ds`d| }d| d}| |}	|	rrd|	 nd}	t|jtjtjfrdn| d}| | |	 S )Nr   offsetr   rP   seqkeypathindexr8   r   _u)r8   r   zINPUT =>z	INPUT => zTABLE(FLATTEN(z))z AS r    FROM )r3   r   r   r&   r   r  r>   r   rL  rJ   r  r  r=   r  r   r   r   )
r   r^   r   r2  unnest_alias_columnsrP   r   table_inputexploder   rX   rX   rY   
unnest_sql  s,   	


"zSnowflake.Generator.unnest_sqlr   c                 C  s  |j drdnd}|j drdnd}| |d}|r!d| nd}| |d}|r0d	| nd}| |d
}|r?d| }| |d}|rLd| }| |d}| |d}	|	r_d|	 }	| j|ddd}
|
rnd|
 nd}
d| |j | | | | | | |	 |
 S )NrN  zTERSE r   rO  z HISTORYrP  z LIKE rQ  r  rR  z IN rS  z STARTS WITH rT  rU  r8  rV  Tr4  flatz WITH PRIVILEGES zSHOW )r3   r   r  r=   r+   )r   r^   rN  rO  rP  rQ  rR  rS  rT  r   rV  rX   rX   rY   show_sql  s&   


0zSnowflake.Generator.show_sqlexp.Describec                 C  sf   |j dpd}|rd| nd}d| |d }| j|dd}|r(d| nd}d| | | S )	Nr-   r  r  r   r8   Tr>  DESCRIBE)r3   r   r  r=   )r   r^   
kind_valuer-   r8   r=   rX   rX   rY   describe_sql7  s   z Snowflake.Generator.describe_sql'exp.GeneratedAsIdentityColumnConstraintc                 C  st   |j d}|rd| nd}|j d}|rd| nd}|j d}|d ur/|r,dnd}nd}d	| | | S )
Nr   z START r   	incrementz INCREMENT orderz ORDERz NOORDERr	  )r3   r   )r   r^   r   rF  rG  order_clauserX   rX   rY   'generatedasidentitycolumnconstraint_sql@  s   z;Snowflake.Generator.generatedasidentitycolumnconstraint_sqlexp.Clusterc                 C  s   d| j |dd dS )NzCLUSTER BY (TrA  r  rd   r  rX   rX   rY   cluster_sqlP  s   zSnowflake.Generator.cluster_sql
exp.Structc                 C  s   g }g }t |jD ]6\}}t|tjr.|t|jtjr#tj	|j
n|j ||j q	|tj	d|  || q	| jdgtt||R  S )Nr  ry  )	enumerater=   r>   r   r_   appendr8   r?  r?   r   r+   r^   r   r#   rh   )r   r^   ri   rj   r   r  rX   rX   rY   
struct_sqlS  s    zSnowflake.Generator.struct_sqlweightaccuracyexp.ApproxQuantilec                 C  s   |  d|j|jdS )NrN  quantiler  r  rX   rX   rY   approxquantile_sqlc  s   z&Snowflake.Generator.approxquantile_sqlexp.AlterSetc                 C  s   | j |dd}|rd| nd}| j |dddd}|r!d| dnd}| j |d	ddd}|r4d
| dnd}| j |ddd}|rEd| nd}d| | | | S )NTrA  r  r   r4  )r4  r>  r  z STAGE_FILE_FORMAT = (r  copy_optionsz STAGE_COPY_OPTIONS = (r  r=  z TAG SETrd   )r   r^   exprsr4  rV  r  rX   rX   rY   alterset_sqlg  s   z Snowflake.Generator.alterset_sqlexp.StrToTimec                 C  s0   |j drdnd}| | d|j| |S )Nr/   TRY_r   r  )r3   r   r   r8   r  r'  rX   rX   rY   strtotime_sqls  s   z!Snowflake.Generator.strtotime_sqlexp.TimestampSubc                 C  s    |  tj|j|jd |jdS )Nro   )r  r   TimestampAddr8   r^   rp   r  rX   rX   rY   timestampsub_sqly  s   z$Snowflake.Generator.timestampsub_sqlexp.JSONExtractc                 C  s.   |j }| d|jrtj|d|jS ||jS )Nri  r   )r8   r   rA   r   r  r^   r   r^   r8   rX   rX   rY   jsonextract_sql  s   z#Snowflake.Generator.jsonextract_sqlexp.TimeToStrc                 C  s2   |j }|jrt|tjjj}| d|| |S )Nr  )	r8   rA   r   rE   rC   rF   rG   r   r  rb  rX   rX   rY   timetostr_sql  s   z!Snowflake.Generator.timetostr_sqlexp.DateSubc                 C  s2   |j }|r||d  n| d td| |S )Nr^  z?DateSub cannot be transpiled if the subtracted count is unknownrb  )r^   r   unsupportedr   )r   r^   rP   rX   rX   rY   datesub_sql  s
   
zSnowflake.Generator.datesub_sql
exp.Selectc                   s>   |j d}|j d}|r|s|jt dd t |S )NrT  r2  Fr   )r3   r   rT  r   r   rB  
select_sql)r   r^   rT  r2  rD  rX   rY   rj    s
   zSnowflake.Generator.select_sql
exp.Create	locationst.DefaultDictc           	        s   | tj}| tj}|jdkrN|rN|rN|tjjj }||	| | 
|jd}| 
|}| |j}|r@|   | nd}| |   | | S t ||S )NVIEWr8   r   )r   r   MaterializedPropertyCopyGrantsPropertyr-   
PropertiesLocationPOST_SCHEMArL  r6  r  r8   schema_columns_sqlr  rB  createable_sql)	r   r^   rl  is_materializedcopy_grants_propertypost_schema_properties	this_namecopy_grantsthis_schemarD  rX   rY   ru    s   
z"Snowflake.Generator.createable_sqlexp.ArrayAggc                   sX   |j }t|tjr|nd }|r|d|j   t |}|r*| tj	||d}|S )Nr8   r]   )
r8   r>   r   OrderrJ   rL  rB  arrayagg_sqlr  WithinGroup)r   r^   r8   rG  expr_sqlrD  rX   rY   r~    s   z Snowflake.Generator.arrayagg_sql	exp.Arrayc                 C  s   |j }t|d}t|tjrS|d dkrSg }|j D ]}t|tjr'|jn|}|	tj
|j|g qtjt|dd}|dd  |d|g | | S t| |S )Nr   r-   STRUCTrr   r   r=   )r=   r&   r>   r   r   r   r  Aliasr8   extendr?   r   alias_or_namer   rk   rJ   r  r   r   )r   r^   r=   
first_exprobject_construct_argsrT   r+   	array_aggrX   rX   rY   	array_sql  s   


zSnowflake.Generator.array_sql)r   r
  r1   r,   T)r^   r  r  r0   r1   r,   )r^   r   r1   r,   )r^   r  r1   r,   )r^   r  r1   r,   r   )r^   r  r   r!  r1   r,   )r^   r(  r1   r,   )r^   r/  r1   r,   )r^   r   r1   r,   )r^   r   r1   r,   )r^   r@  r1   r,   )r^   rE  r1   r,   )r^   rJ  r1   r,   )r^   rL  r1   r,   )r^   rR  r1   r,   )r^   rU  r1   r,   )r^   rZ  )r^   r]  )r^   ra  )r^   rd  r1   r,   )r^   rf  r1   r,   )r^   ri  r1   r,   )r^   rk  rl  rm  r1   r,   )r^   r|  r1   r,   )r^   r  r1   r,   )rG  rH  rI  PARAMETER_TOKENMATCHED_BY_SOURCESINGLE_STRING_INTERVAL
JOIN_HINTSTABLE_HINTSQUERY_HINTSAGGREGATE_FILTER_SUPPORTEDSUPPORTS_TABLE_COPYCOLLATE_IS_FUNCLIMIT_ONLY_LITERALSJSON_KEY_VALUE_PAIR_SEPINSERT_OVERWRITESTRUCT_DELIMITERCOPY_PARAMS_ARE_WRAPPEDCOPY_PARAMS_EQ_REQUIREDSTAR_EXCEPTSUPPORTS_EXPLODING_PROJECTIONSARRAY_CONCAT_IS_VAR_LENSUPPORTS_CONVERT_TIMEZONE#EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSESUPPORTS_MEDIANARRAY_SIZE_NAMESUPPORTS_DECODE_CASEr   	Generator
TRANSFORMSr   ApproxDistinctr   ArgMaxArgMinArrayConcatrU  ArrayIntersect
AtTimeZoner  r  r  r  r   r   
preprocessr   r   r   rq   DatetimeAddDatetimeDiffr   DateStrToDater   
DayOfMonth	DayOfWeekDayOfWeekIso	DayOfYearr!  r  r}  FromTimeZonerV  GroupConcatr   r   JSONExtractArrayr  JSONExtractScalar
JSONObjectJSONPathRootr  rg  r"   rj  
LogicalAnd	LogicalOrMapMakeIntervalr    Maxr   Minr   r  PartitionedByPropertyPercentileCont add_within_group_for_percentilesPercentileDiscr   r   r	  r
  r  RegexpILiker   Randr   eliminate_window_clauseeliminate_distinct_onexplode_projection_to_unnesteliminate_semi_and_anti_joinsr   r!  SHArf   
StartsWithEndsWithStrPosition	StrToDateStringToArrayStuffStPointr  	Timestampr   r_  TimestampDiffTimestampTruncr   TimeStrToTimer   r  ToArrayr  ToDouble	TsOrDsAdd
TsOrDsDiffrM   rN   r  rH   UuidVarMap
WeekOfYearr  JSONPathKeyJSONPathSubscriptSUPPORTED_JSON_PATH_PARTSTYPE_MAPPINGrC   rF   NESTEDr  
BIGDECIMALr(   AUTO_INCREMENTTOKEN_MAPPINGPROPERTIES_LOCATIONr  rq  rr  	POST_WITHrs  SetPropertyUNSUPPORTEDVolatilePropertyrg   r  r   ,RESPECT_IGNORE_NULLS_UNSUPPORTED_EXPRESSIONSr  r  r  r  r  r&  r.  r1  r<  r?  rD  rI  rK  rO  rT  rY  r\  r`  rc  re  rh  rj  ru  r~  r  r  rX   rX   rD  rY   r    s   






















"
%&'
(
+
,-.
1
2
3
4567
8
;<?BCDE
FG
Q
R
S
T
U
X
Y
Z
[
\]
^
_bc
d
e
f









y






	

 

	





	


	r  r  )r^   r)   r=  r0   r1   r)   )rG  rH  rI  r
   	UPPERCASENORMALIZATION_STRATEGYNULL_ORDERINGTIME_FORMATSUPPORTS_USER_DEFINED_TYPESSUPPORTS_SEMI_ANTI_JOINPREFER_CTE_ALIAS_COLUMNTABLESAMPLE_SIZE_IS_PERCENTCOPY_PARAMS_ARE_CSVARRAY_AGG_INCLUDES_NULLSTIME_MAPPINGr	   DATE_PART_MAPPINGrC  r   rJ  r   r   r   r  r   r  r  rX   rX   rD  rY   r   n  s    	
    2-r   r  )r+   r,   r-   r.   r/   r0   r1   r2   )r3   r4   r1   r\   )r3   r4   r1   rl   )rt   ru   r1   rv   )rt   r|   r+   r,   r1   r}   )r3   r4   r1   r   )r   r   r^   r   r1   r,   )r3   r4   r1   r   )r3   r   r   r   r1   r   )r3   r4   r1   r   )r^   r   r1   r   )r   r   r1   r   )r^   r  r1   r,   )r   r   r^   r  r1   r,   )I
__future__r   typingr   sqlglotr   r   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!   sqlglot.generatorr"   sqlglot.helperr#   r$   r%   r&   sqlglot.optimizer.scoper'   sqlglot.tokensr(   TYPE_CHECKINGsqlglot._typingr)   r*   r[   rk   rs   r{   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r!  r   rX   rX   rX   rY   <module>   s@     l
*








	




 



