o
    8Di                     @  s<  d dl mZ d dlZd dlZd dlZd dl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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(m)Z) d dl*m+Z+ d dl,m-Z- ej.r}d d	lm/Z/ d d
l0m1Z1 e2dZ3ej4ej5ej6ej7f Z8dZ9dgddZ:dhddZ;diddZ<djddZ=djddZ>dkd#d$Z?dld&d'Z@dmd)d*ZAdnd,d-ZBdod/d0ZCdpd2d3ZDdqd5d6ZEdrd8d9ZFdsd;d<ZGdsd=d>ZH	dtdudDdEZIdvdGdHZJdwdJdKZKdxdNdOZLe-dPdQdRdydTdUZMdzdVdWZNd{dZd[ZOd|d]d^ZPd}d`daZQd~dcddZRG dedf dfeZSdS )    )annotationsN)exp	generatorparsertokens
transforms)E)DialectNormalizationStrategyannotate_with_type_lambdaarg_max_or_min_no_countbinary_from_functiondate_add_interval_sqldatestrtodate_sqlbuild_formatted_timefilter_array_using_unnestif_sqlinline_array_unless_querymax_or_greatestmin_or_leastno_ilike_sqlbuild_date_delta_with_intervalregexp_replace_sqlrename_func
sha256_sqltimestrtotime_sqlts_or_ds_add_castunit_to_varstrposition_sqlgroupconcat_sql	space_sql)seq_getsplit_num_words)	TokenType)unsupported_args)Lit)TypeAnnotatorsqlglot)
JSON_QUERY
JSON_VALUEJSON_QUERY_ARRAYselfBigQuery.Generator
expression
exp.Valuesreturnstrc                 C  s   | tjtjs| |S g }|jd}|tjD ]*}|r%|j	r%|j	ndd t
t|jD }dd t||jD }|tj|d q|rPtj|jgdnd }| tjtj|dd	ig|d
S )Naliasc                 s  s    | ]}d | V  qdS )_cN ).0ir3   r3   R/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/bigquery.py	<genexpr>>       z2_derived_table_values_to_unnest.<locals>.<genexpr>c                 S  s$   g | ]\}}t jt ||d qS thisr-   )r   
PropertyEQto_identifier)r4   namefldr3   r3   r6   
<listcomp>@   s    z3_derived_table_values_to_unnest.<locals>.<listcomp>expressions)columnscopyF)rB   r1   )find_ancestorr   FromJoin
values_sqlargsgetfind_allTuplerC   rangelenrB   zipappendStruct
TableAliasr;   
unnest_sqlUnnestarray)r+   r-   structsr1   tupfield_aliasesrB   alias_name_onlyr3   r3   r6   _derived_table_values_to_unnest4   s&   

rZ   exp.ReturnsPropertyc                 C  sF   |j }t|tjr| |d d| | d}n| |}d| S )Nr;   z <>zRETURNS )r;   
isinstancer   SchemasqlrB   r+   r-   r;   r3   r3   r6   _returnsproperty_sqlM   s
    

ra   
exp.Createc                 C  s`   | tj}|jdkr+|r+|jdr+|dd t|jtj	tj
fr+|d|jj | |S )NFUNCTIONis_tablekindzTABLE FUNCTIONr-   )findr   ReturnsPropertyre   rI   rJ   setr]   r-   SubqueryLiteralr;   
create_sql)r+   r-   returnsr3   r3   r6   _create_sqlV   s   
rm   exp.Expressionc                 C  sr   t | tjr7| jd}| jd}|r7|r7dd | jD }|jD ]}|jr'q!||}|r6|t	| q!| S )Ngrouporderc                 S  s&   i | ]}t |tjr|j|jd  qS )r1   )r]   r   Aliasr;   rI   )r4   selectr3   r3   r6   
<dictcomp>n   s    
z(_alias_ordered_group.<locals>.<dictcomp>)
r]   r   SelectrI   rJ   selectsrB   is_intreplacecolumn)r-   ro   rp   aliasesgroupedr1   r3   r3   r6   _alias_ordered_grouph   s   

r{   c                 C  s   t | tjrA| jrA| j}|jrtd | S | j}| jd 	dd t
||jD ]\}}|}t |tjr7|j}|t|| q(| S )zUBigQuery doesn't allow column names when defining a CTE, so we try to push them down.zCan't push down CTE column names for star queries. Run the query through the optimizer or use 'qualify' to expand the star projections first.r1   rC   N)r]   r   CTEalias_column_namesr;   is_starloggerwarningrI   rh   rO   ru   rq   rw   alias_)r-   	cte_querycolumn_namesr>   rr   
to_replacer3   r3   r6   _pushdown_cte_column_names~   s   r   rI   t.Listexp.StrToTimec                 C  s6   t tjdt| dt| dg}|dt| d |S )Nbigquery   r   zone   )r   r   	StrToTimer!   rh   )rI   r;   r3   r3   r6   _build_parse_timestamp   s    r   exp.Timestampc                 C  s   t j| }|dd |S )Nwith_tzT)r   	Timestampfrom_arg_listrh   )rI   	timestampr3   r3   r6   _build_timestamp   s   r   exp.Date | exp.DateFromPartsc                 C  s"   t | dkr	tjntj}|| S )N   )rN   r   DateFromPartsDater   )rI   	expr_typer3   r3   r6   _build_date   s   
r   exp.Hex | exp.MD5c                 C  s0   t | d}t|tjrtj|jdS tj|dS Nr   r;   )r!   r]   r   	MD5DigestMD5r;   LowerHex)rI   argr3   r3   r6   _build_to_hex   s   
&r   exp.ArrayContainsc              	   C  sJ   |  tjtdtj|jgdjddgdt	d
|jdS )N1rA   _unnest_col)tabler   )r_   r   Existsrr   from_rT   leftas_whererx   eqrightr+   r-   r3   r3   r6   _array_contains_sql   s   r   exp.TsOrDsAddc                 C  s   t dd| t|S )NDATEADD)r   r   r   r3   r3   r6   _ts_or_ds_add_sql   s   r   exp.TsOrDsDiffc                 C  sT   |j t|j tjjj |jt|jtjjj t|}| 	d|j |j|S N	DATE_DIFF)
r;   rw   r   castDataTypeType	TIMESTAMPr-   r   func)r+   r-   unitr3   r3   r6   _ts_or_ds_diff_sql   s   r   exp.UnixToTimec              	   C  s   |j d}|j}|d tjjfv r| d|S |tjjkr#| d|S |tjjkr/| d|S t	tj
|tdd|dtjjj}| d|S )NscaleTIMESTAMP_SECONDSTIMESTAMP_MILLISTIMESTAMP_MICROSPOW
   r:   )rI   rJ   r;   r   
UnixToTimeSECONDSr   MILLISMICROSr   Divr   r   BIGINT)r+   r-   r   r   unix_secondsr3   r3   r6   _unix_to_time_sql   s   r   exp.Funcc                 C  s@   t | dkrtj| d dS t | dkrtj| S tj| S )Nr   r   r   r   )rN   r   TsOrDsToTimeTimer   TimeFromPartsrI   r3   r3   r6   _build_time   s
   r   c                 C  s<   t | dkrtj| S t | dkrtj| S tj| S )Nr   r   )rN   r   TsOrDsToDatetimer   DatetimeTimestampFromPartsr   r3   r3   r6   _build_datetime   s
   r   r   	t.Type[E]default_groupt.Optional[exp.Expression]t.Callable[[t.List], E]c                   s   d fdd}|S )NrI   r   r/   r   c                   sr   zt | d jjdk}W n t jy   d}Y nw t| dt| dt| dt| d|r5tjddS  dS )Nr   Fr   r   r   )r;   r-   position
occurrencero   )	recompiler>   groupserrorr!   r   rj   number)rI   ro   r   r   r3   r6   _builder   s   z'_build_regexp_extract.<locals>._builder)rI   r   r/   r   r3   )r   r   r   r3   r   r6   _build_regexp_extract   s   r    t.Callable[[t.List, Dialect], E]c                   s   d	 fdd}|S )
NrI   r   dialectr	   r/   r   c                   s.   t | dkr| tjd t | |S )Nr   $)rN   rP   r   rj   stringr   build_extract_json_with_path)rI   r   r   r3   r6   r      s   z7_build_extract_json_with_default_path.<locals>._builder)rI   r   r   r	   r/   r   r3   r   r   r3   r   r6   %_build_extract_json_with_default_path   s   r   exp.StrToDate | exp.StrToTimec                 C  s   |  |d}t|tjrdnd}|jdr-| || jj| jj	}d| d| d| dS | |}| 
d	| |||jd
S )Nr;   r   r   safez
SAFE_CAST(z AS z FORMAT )PARSE_r   )r_   r]   r   	StrToDaterI   rJ   format_timer   INVERSE_FORMAT_MAPPINGINVERSE_FORMAT_TRIEr   )r+   r-   r;   dtypefmtr3   r3   r6   _str_to_datetime_sql  s   
r   r&   r   c                 C  s@   |  | |j}| ||jtjj rtjjj |S |j	 |S )a  
    Many BigQuery math functions such as CEIL, FLOOR etc follow this return type convention:
    +---------+---------+---------+------------+---------+
    |  INPUT  | INT64   | NUMERIC | BIGNUMERIC | FLOAT64 |
    +---------+---------+---------+------------+---------+
    |  OUTPUT | FLOAT64 | NUMERIC | BIGNUMERIC | FLOAT64 |
    +---------+---------+---------+------------+---------+
    )
_annotate_argsr;   	_set_typeis_typer   r   INTEGER_TYPESr   DOUBLEtyper`   r3   r3   r6   _annotate_math_functions  s   
	r   ins_costdel_costsub_costexp.Levenshteinc                 C  s8   |j d}|rtjtd|d}| d|j|j|S )Nmax_distmax_distancer:   EDIT_DISTANCE)rI   rJ   r   Kwargvarr   r;   r-   )r+   r-   r  r3   r3   r6   _levenshtein_sql+  s   r  c                 C  s4   t | d}tjt | dt | d|r|jdS d dS )Nr   r   r   )r;   r-   r  )r!   r   Levenshteinr-   )rI   r  r3   r3   r6   _build_levenshtein4  s   
r
  t.Type[exp.Expression]#t.Callable[[t.List], exp.TimeToStr]c                   s   d fdd}|S )NrI   r   r/   exp.TimeToStrc                   s(   t j t| ddt| dt| ddS )Nr   r   r   r   )r;   formatr   )r   	TimeToStrr!   r   r   r3   r6   r   >  s
   z$_build_format_time.<locals>._builder)rI   r   r/   r  r3   r   r3   r   r6   _build_format_time=  s   r  exp.Contains | exp.Anonymousc                 C  sL   t | dkrtjd| dS tjt| dd}tjt| dd}tj||dS )Nr   CONTAINS_SUBSTR)r;   rB   r   r   r   r:   )rN   r   	AnonymousLowerr!   Contains)rI   r;   exprr3   r3   r6   _build_contains_substringH  s
   r  JSON_EXTRACT_TYPEc                 C  sP   |j r	|jdp| }| }|tv }|rd| _t|| |}|r&d| _|S )Nr>   FT)_metametarJ   sql_nameupperDQUOTES_ESCAPING_JSON_FUNCTIONS#_quote_json_path_key_using_bracketsr   )r+   r-   r>   r  dquote_escapingr_   r3   r3   r6   _json_extract_sqlT  s   r   
exp.Concatc                 C  s4   |  |d}|tjjjtjjjstjjj|_|S )NrB   )	_annotate_by_argsr   r   r   r   BINARYUNKNOWNVARCHARr   )r+   r-   	annotatedr3   r3   r6   _annotate_concate  s   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ejZdZddddZdd	d
dddddddddddZddhZeejejejfdZi ejejjjejejjj iZe ejjj i ej!dd e" D dd ej#ej$ej%ej&ej'ej(ej)fD dd ej*ej+ej,ej-ej.ej/ej0ej1ej2ej3f
D ej4dd ej5e6ej7dd ej8dd ej9d 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!d2 fd*d+Z@G d,d- d-eAjBZBG d.d/ d/eCjDZDG d0d1 d1eEjFZF  ZGS )3BigQueryTFz%m/%d/%yz%S.%fz%-d)z%Dz%E6Sz%ez%dz%mz%bz%Bz%Yz%yz%Iz%Hz%Mz%Sz%fz%z)DDMMMONMONTHYYYYYYHHHH12HH24MISSSSSSSTZH_PARTITIONTIME_PARTITIONDATENc                 C  s$   i | ]\}}|D ]}|t |qqS r3   )r   )r4   	data_typerB   r   r3   r3   r6   rs     s    zBigQuery.<dictcomp>c                 C     i | ]}|d d qS )c                 S  s
   t | |S N)r   r+   er3   r3   r6   <lambda>  s   
 BigQuery.<dictcomp>.<lambda>r3   r4   r   r3   r3   r6   rs         c                 C  r:  )c                 S     |  |dS Nr;   r"  r<  r3   r3   r6   r>        r?  r3   r@  r3   r3   r6   rs     rA  c                 C     |  |ddS )Nr;   rB   rD  r<  r3   r3   r6   r>        zBigQuery.<lambda>c                 C     |  |tjjjS r;  _annotate_with_typer   r   r   r   r<  r3   r3   r6   r>        c                 C  rH  r;  rI  r<  r3   r3   r6   r>    rK  c                 C  rH  r;  rI  r<  r3   r3   r6   r>    rK  c                 C  rF  )Nr;   defaultrD  r<  r3   r3   r6   r>    rG  c                 C  rH  r;  rJ  r   r   r   r#  r<  r3   r3   r6   r>    rK  c                 C  rH  r;  rM  r<  r3   r3   r6   r>    rK  c                 C  rB  rC  rD  r<  r3   r3   r6   r>    rE  c                 C  s   | j |dddS )Nr;   T)rU   rD  r<  r3   r3   r6   r>        c                 C  rH  r;  )rJ  r   r   r   DATETIMEr<  r3   r3   r6   r>        
r-   r   r/   c                   s   t |tjrQ| jtju rQ|j}t |tjr|j}t |tjst |tjp?t |tj	o9|j
o9|jdp9|jd p?|jd}|sK|d|j  tt|S t |S )Nquoted_tablemaybe_columnrd   r;   )r]   r   
Identifiernormalization_strategyr
   CASE_INSENSITIVEparentDotUserDefinedFunctionTabledbr  rJ   rh   r;   lowertr   r   supernormalize_identifier)r+   r-   rV  case_sensitive	__class__r3   r6   r^    s&   

	zBigQuery.normalize_identifierc                   @  s"  e Zd Zg dZg dZdgZdgZddgZdd e	ej
e eD Zd	d e	ej
e e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 Ze!d e!d e!d dS ) zBigQuery.Tokenizer)'"z"""z''')z--#)z/*z*/`\)0x )0Xrh  c                 C  "   g | ]}d D ]}|| |fqqS ))bBr3   r4   qprefixr3   r3   r6   r@     
    zBigQuery.Tokenizer.<listcomp>c                 C  rj  ))rRr3   rm  r3   r3   r6   r@     rp  FANY TYPEBEGINBEGIN TRANSACTIONBYTEINTBYTESCURRENT_DATETIMErO  DECLAREELSEIF	EXCEPTIONEXPORTFLOAT64zFOR SYSTEM_TIMEMODELNOT DETERMINISTICRECORDr   DIVVALUESz/*+N)"__name__
__module____qualname__QUOTESCOMMENTSIDENTIFIERSSTRING_ESCAPESHEX_STRINGSr\  r   Listr0   BYTE_STRINGSRAW_STRINGSNESTED_COMMENTSr   	TokenizerKEYWORDSr#   VARIANTCOMMANDrt  INTr#  rx  r   r|  r   TIMESTAMP_SNAPSHOTr~  VOLATILESTRUCTTIMESTAMPTZpopr3   r3   r3   r6   r    sj    	


r  c                      s  e Zd ZdZdZdZdZejj	e
je
jh Z	ejje
je
jh Zejje
je
jh Zejje
je
jh Zejje
je
jh Zi ejji dededeejdeejddd d	ed
eejdeejdeejdedeejdej j!de"ej#de"ej$de%ej&de"ej$de"ej#i de"ej'ddd dej(j!de)ddd de*dej+j!de,ej-de,ej-d e,ej.ej/0d!d"d#d$d d%d&d d'd(d d)ej1j!d*e2d+eej3d,eej4e5eej6eej7d-d d.d d/d ej8j!eej9eej:d0	Zi ejj;d1d d2d d3d d4Z;e;<d5 i ejj=e
j>ej?iZ=h ejj@e
jAZ@i ejjBd6d d7d d8ZBi ejjCd9d:d iZCejjDE ZDeD<e
jF e
jGe
jHhZIe
jJe
jKe
jLhZMi ejjNe
jOd;d e
jPd<d e
jQd=d e
jRd>d iZNd?d@dAdBdCZSdodFdGZTdpdq fdLdMZU	Hdrds fdQdRZVdt fdSdTZWeXjYdudXdYZZeXjYdvd\dYZZdp fd]dY	ZZ	^dwdx fd`daZ[dydz fdddeZ\d{dgdhZ]d|djdkZ^d}dmdnZ_  Z`S )~zBigQuery.ParserTr  r   DATE_ADDDATE_SUB
DATE_TRUNCc                 C  s"   t jt| dt| dt| ddS )Nr   r   r   )r   r;   r   )r   	DateTruncr!   r   r3   r3   r6   r>  ,  s
    zBigQuery.Parser.<lambda>rO  DATETIME_ADDDATETIME_SUBr  r  FORMAT_DATEGENERATE_ARRAYJSON_EXTRACT_SCALARJSON_EXTRACT_ARRAYr(   r*   r)   JSON_VALUE_ARRAYLENGTHc                 C  s   t jt| dddS )Nr   T)r;   binary)r   Lengthr!   r   r3   r3   r6   r>  >  s    r   TO_HEX
PARSE_DATEc                 C  s    t tjdt| dt| dgS )Nr   r   r   )r   r   r   r!   r   r3   r3   r6   r>  A  s   
 PARSE_TIMESTAMPREGEXP_CONTAINSREGEXP_EXTRACTREGEXP_SUBSTRREGEXP_EXTRACT_ALLr   )r   SHA256c                 C     t jt| dt jddS )Nr      r;   lengthr   SHA2r!   rj   r   r   r3   r3   r6   r>  K      SHA512c                 C  r  )Nr   i   r  r  r   r3   r3   r6   r>  L  r  SPLITc                 C  s&   t jt| dt| dpt jddS )Nr   r   ,r:   )r   Splitr!   rj   r   r   r3   r3   r6   r>  M  s    STRPOSTIMETIME_ADDTIME_SUBc                 C     t jt| dt jjdS Nr   )r;   r   )r   r   r!   r   r   r3   r3   r6   r>  Y      c                 C  r  r  )r   r   r!   r   r   r3   r3   r6   r>  \  r  c                 C  s   t jt| ddS r   )r   r   r!   r   r3   r3   r6   r>  _  rK  )	r   TIMESTAMP_ADDTIMESTAMP_SUBr   r   r   TO_JSON_STRINGFORMAT_DATETIMEFORMAT_TIMESTAMPc                 C  s   | j tj|  gdS NrA   )r-   r   Array_parse_statementr+   r3   r3   r6   r>  g      c                 C     |   S r;  )_parse_make_intervalr  r3   r3   r6   r>  h      c                 C  r  r;  )_parse_features_at_timer  r3   r3   r6   r>  i  r  )ARRAYMAKE_INTERVALFEATURES_AT_TIMETRIMc                 C  s   | j tjtjddS )Nr  r   )r-   r   StabilityPropertyrj   r   r  r3   r3   r6   r>  y  r  c                 C  r  r;  )_parse_with_propertyr  r3   r3   r6   r>  |  r  )r  OPTIONSr  c                 C  s   t j|  dS r  )r   
Propertiesr  r  r3   r3   r6   r>    rN  c                 C     |  | jS r;  _parse_as_command_prevr  r3   r3   r6   r>    rE  c                 C  r  r;  r  r  r3   r3   r6   r>    rE  c                 C  r  r;  )_parse_for_inr  r3   r3   r6   r>    r  c                 C  r  r;  )_parse_export_datar  r3   r3   r6   r>    r  )r   F)r   F)r   T)r   T)OFFSETORDINALSAFE_OFFSETSAFE_ORDINALr/   	exp.ForInc                 C  s(   |   }| d | jtj||  dS )NDOr:   )_parse_range_match_text_seqr-   r   ForInr  )r+   r;   r3   r3   r6   r    s   
zBigQuery.Parser._parse_for_inFschemaboolr   c                   s  t  j|dp
|  }t|tjrh|j}| jtj	ddrX| j
rX| j}|  r>| j| jdds>|   |  r>| j| jddr.|| jkrDn|| || j7 }| jtj	ddrX| j
stj||jdd|}|S t|tjr|j}|  r| jddr|| jj7 }tj|dd|}|S )N)r  F)advancequotedr;   r  T)	any_token)r]  _parse_table_part_parse_numberr]   r   rS  r>   _matchr#   DASH_next_curr_is_connected
_match_setDASHED_TABLE_PART_FOLLOW_TOKENS_advance	_find_sqlr  rI   rJ   update_positionsrj   
_parse_vartext)r+   r  r;   
table_namestartr`  r3   r6   r    s8   
z!BigQuery.Parser._parse_table_partis_db_referencewildcard	exp.Tablec                   s  t  j||dd}|jsv|jrE|jd }|jd}t|dkrD|jd jsD|dt	j
|d d| |dt	j
|d	 d| n1|j}|jd}t|dkrv|jjsv|dt	j
|d d| |d
t	j
|d	 d| t|jt	j
rtdd |jD r|j}dd tddd |jD ddD ^}	}
}}|	|
|fD ]
}|r||j q|r|rt	j|g|}t	j||
|	|jdd}d|jd< nd }|j}t|d	krE|d j dkrEt	j|tt	j
|p|d ddd |d j d|d j }t	j
|ddj|d jd|d jd|d jd|d jdd}|d
| |dt|d |dt|d |S ) NT)r  r  r  rZ  .r   catalogr   r   r   r;   c                 s      | ]}d |j v V  qdS r  Nr>   r4   pr3   r3   r6   r7     r8   z5BigQuery.Parser._parse_table_parts.<locals>.<genexpr>c                 s      | ]
}t j|d dV  qdS T)r  Nr   r=   r  r3   r3   r6   r7     
    
c                 s      | ]}|j V  qd S r;  r  r  r3   r3   r6   r7         r   pivots)r;   rZ  r   r  rQ  INFORMATION_SCHEMAr)  F)r   rD   r  linecolr  end)r  r  r  r  )r]  _parse_table_partsr   rZ  rI   splitrN   r  rh   r   rS  r  r;   r>   r]   anypartsr"   joinrW  buildrY  rJ   r  r  r   r\  r   r!   )r+   r  r  r  r   previous_dbr  previous_thisr1   r   rZ  r;   restparttable_partsinfo_schema_viewnew_thisr`  r3   r6   r    sr   
""z"BigQuery.Parser._parse_table_partsc                   s   t   }t|tjrJ|j}tdd |D rJdd tddd |D ddD ^}}}}}|r<|r<tj	
|g|}tj||||d}d|jd	< |S )
Nc                 s  r  r  r  r  r3   r3   r6   r7     r8   z0BigQuery.Parser._parse_column.<locals>.<genexpr>c                 s  r  r  r  r  r3   r3   r6   r7     r	  r  c                 s  r
  r;  r  r  r3   r3   r6   r7     r     )r;   r   rZ  r   Tquoted_column)r]  _parse_columnr]   r   Columnr  r  r"   r  rW  r  r  )r+   rx   r  r   rZ  r   r;   r  r`  r3   r6   r#    s   

zBigQuery.Parser._parse_columnagg
Lit[False]exp.JSONObjectc                 C     d S r;  r3   r+   r%  r3   r3   r6   _parse_json_object%     z"BigQuery.Parser._parse_json_object	Lit[True]exp.JSONObjectAggc                 C  r(  r;  r3   r)  r3   r3   r6   r*  (  r+  c                   sf   t   }t|jd}|r1t|jtjr1t|jtjr1|jj}|jj}|	ddd t
||D  |S )Nr   rB   c                 S  s   g | ]\}}t j||d qS r9   )r   JSONKeyValue)r4   kvr3   r3   r6   r@   ;  s    z6BigQuery.Parser._parse_json_object.<locals>.<listcomp>)r]  r*  r!   rB   r]   r;   r   r  r-   rh   rO   )r+   r%  json_objectarray_kv_pairkeysvaluesr`  r3   r6   r*  +  s   
Nr;   c                   s   t  |}||u r|S t|tjr@|jD ]*}|j }|| jvr$ |S | j| \}}|	d| |	d| |
|jd  q|S )Noffsetr   r   )r]  _parse_bracketr]   r   BracketrB   r>   r  BRACKET_OFFSETSrh   rw   )r+   r;   bracketr-   r>   r5  r   r`  r3   r6   r6  @  s   


zBigQuery.Parser._parse_bracket
with_aliast.Optional[exp.Unnest]c                   sv   t  j|d}|sd S t|jd}|r9ddlm} ||| jd}|tj	j
jr9tdd |jjD r9|dd |S )	N)r:  r   annotate_typesr   c                 s  s     | ]}| tjjjV  qd S r;  )r   r   r   r   r  )r4   
array_elemr3   r3   r6   r7   d  s
    
z0BigQuery.Parser._parse_unnest.<locals>.<genexpr>explode_arrayT)r]  _parse_unnestr!   rB    sqlglot.optimizer.annotate_typesr=  r   r   r   r   r   r  r  _typerh   )r+   r:  unnestunnest_exprr=  r`  r3   r6   rA  V  s   zBigQuery.Parser._parse_unnestexp.MakeIntervalc                 C  sV   t  }|jD ]!}|  }|s |S t|t jr|jj}||| | 	t
j q|S r;  )r   MakeInterval	arg_types_parse_lambdar]   r  r;   r>   rh   r  r#   COMMA)r+   r  arg_keyvaluer3   r3   r6   r  l  s   
z$BigQuery.Parser._parse_make_intervalexp.FeaturesAtTimec                 C  sd   | j tj| tjr|  p| jddd}| tjr0| 	 }|r*|
|jj| | tjs|S )NT)nestedr   )r-   r   FeaturesAtTimer  r#   TABLE_parse_table_parse_selectrJ  rI  rh   r;   r>   )r+   r  r   r3   r3   r6   r    s   
z'BigQuery.Parser._parse_features_at_time
exp.Exportc                 C  s@   |  d | jtj|  ddo|  |  |  do|  dS )NDATAWITH
CONNECTIONAS)
connectionoptionsr;   )r  r-   r   Exportr  _parse_propertiesrR  r  r3   r3   r6   r    s   
z"BigQuery.Parser._parse_export_data)r/   r  )F)r  r  r/   r   )FFF)r  r  r  r  r  r  r/   r  )r/   r   )r%  r&  r/   r'  )r%  r,  r/   r-  r;  )r;   r   r/   r   )T)r:  r  r/   r;  )r/   rF  )r/   rM  )r/   rS  )ar  r  r  PREFIXED_PIVOT_COLUMNSLOG_DEFAULTS_TO_LNSUPPORTS_IMPLICIT_UNNESTJOINS_HAVE_EQUAL_PRECEDENCEr   ParserID_VAR_TOKENSr#   ASCDESCALIAS_TOKENSTABLE_ALIAS_TOKENSCOMMENT_TABLE_ALIAS_TOKENSUPDATE_ALIAS_TOKENS	FUNCTIONSr  r   r   r   DateAddDateSubr   DatetimeAddDatetimeSubr   IntDivr
  r  TsOrDsToDateGenerateSeriesr   r   JSONExtractScalarJSONExtractArrayr   JSONExtractJSONValueArrayr   r   r   
RegexpLiker   RegexpExtractRegexpExtractAllrj   r   StrPositionr   TimeAddTimeSubr   TimestampAddTimestampSub
JSONFormatr   TsOrDsToTimestampFUNCTION_PARSERSr  NO_PAREN_FUNCTIONSrx  CurrentDatetimeNESTED_TYPE_TOKENSrP  PROPERTY_PARSERSCONSTRAINT_PARSERSRANGE_PARSERSrD   OVERLAPSNULLr$  NULL_TOKENSDOTL_PARENR_PARENr  STATEMENT_PARSERSELSEENDFORr|  r8  r  r  r  r#  r\  overloadr*  r6  rA  r  r  r  __classcell__r3   r3   r`  r6   r`    s<   











 
!"%&',-
.
/0?




	
 U

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dZi ejji eje dej!e"d	ej#e"d
ej$e%ej&e'ej(e)ej*e)ej+e,-e,j.gej/dd ej0dd ej1e dej2e3ej4e,-e5gej6e7ddej8dd ej9e dej:e;i ej<e7ddej=e7ddej>e7ddej?dd ej@e dejAdd ejBdd ejCdd ejDeEddejFeGejHe dejIe dejJeKejLeKejMeKejNe dejOePi ejQeRejSdd ejTe dejUeVejWd d ejXd!d ejYd"d ejZe[ej\e d#ej]e^ej_d$d ej`e,-e,a e,jbe,jcede,jegejfe d%ejgehejiejejkd&d ejle d'i ejmd(d ejneoejpeoejqe7d)dejre d)ejse dejte7d)dejue7d*dejve d+ejwe7d*dejxeyejzd,d ej{e|ej}e~eje d)eje deje d*eje d-eje d.ejeejd/d ejeeje d0eje d1iZejejejhZi ejji ejjjd2ejjjdejjjd3ejjjd3ejjjd4ejjjd'ejjjd5ejjjd6ejjjd6ejjjdejjjd'ejjjd'ejjjdejjjd'ejjjdejjjdejjjd*ejjjd*ejjjdejjjd3ejjjd'ejjjd3ejjjd'ejjjd7iZi ejjejWejjjejejjjiZejjd8 ejjd9 d:Zh d;Zdid@dAZdjdCdDZdk fdFdGZdl fdIdJZdmdLdMZdndOdPZdo fdRdSZdpdUdVZdqdXdYZdrd[d\Zds fd^d_ZdtdadbZdudv fdgdhZ  ZS )wr,   FLIMITTr  @r  r  APPROX_COUNT_DISTINCTMAX_BYMIN_BYc                 C  s0   |j drd| |d S d| |d S )NrL  zDEFAULT COLLATE r;   zCOLLATE )rI   rJ   r_   r<  r3   r3   r6   r>    s   
zBigQuery.Generator.<lambda>c                  G     dS )NzCOMMIT TRANSACTIONr3   _r3   r3   r6   r>        COUNTIFr   r   c                 C  s   |  d|j|jt|S r   )r   r;   r-   r   r<  r3   r3   r6   r>    s    SUBrO  c              
   C  s"   |  d|  d|j|jddS )NrO  r   r   z'UTC')r   r;   rI   rJ   r<  r3   r3   r6   r>    s    r  c                 C  s   t | |dddS )N
STRING_AGGF)	func_namewithin_group)r   r<  r3   r3   r6   r>    s    c              
   C  s   |  d|  d| |dS )NUPPERr  r;   )r   r_   r<  r3   r3   r6   r>    r  c                 C     | j |ddS )NFROM_HEX)binary_function_repr)hexstring_sqlr<  r3   r3   r6   r>    rG  r  )false_valuer  INT64r  c                 C  s   |  d|  d|jS )Nr  r   )r   r;   r<  r3   r3   r6   r>    r  r   c                 C  s   d|  |d S )NzPARTITION BY r;   r_   r<  r3   r3   r6   r>    rK  c              	   C  s&   |  d|j|j|jd|jdS )Nr  r   r   )r   r;   r-   rI   rJ   r<  r3   r3   r6   r>    s    

c                 C  s   |  d|j|jS )Nr  )r   r;   r-   r<  r3   r3   r6   r>    rP  r  c                  G  r  )NzROLLBACK TRANSACTIONr3   r  r3   r3   r6   r>    r  SHA1c                 C  s   |j dkrdS dS )N	IMMUTABLEDETERMINISTICr  r  r<  r3   r3   r6   r>    s   STRINGc                 C  s   t | |ddddS )NINSTRT)r  supports_positionsupports_occurrence)r   r<  r3   r3   r6   r>    s   
r  r   TIMESTAMP_DIFFc                  G  r  )Nru  r3   r  r3   r3   r6   r>    r  r  	UNIX_DATEc                  G  r  )NzGENERATE_UUID()r3   r  r3   r3   r6   r>    r  VAR_POPSAFE_DIVIDE
BIGNUMERICrw  BOOLNUMERICr}  rs  qualifywindows)r  r  >`   asatbyifinisnoofonortoallandr  ascr  fornewnotrh   caser   cubedescelseenumfromfullhashintor  r   likenulloverrowssomethentruewhenwithrU   crossfalsefetchro   innerlimitmergenullsrp   outerprotorM   r   treatunionusingr   createdefineescapeexceptexistsr   havingignorelookuprolluprr   structrD  windowwithinbetweencollatecurrentrL  excludeextractlateralnaturalr  respectcontainsdistinctgroupinginterval	following	intersect	partition	preceding	recursive	unboundedtablesampleassert_rows_modifiedr-   exp.DateTruncr/   r0   c                 C  s6   |j }|jr	|jn| |}| d|j||jdS )Nr  r   )r   	is_stringr>   r_   r   r;   rI   rJ   )r+   r-   r   unit_sqlr3   r3   r6   datetrunc_sql  s   z BigQuery.Generator.datetrunc_sqlexp.Modc                 C  sD   |j }|j}| dt|tjr| n|t|tjr| S |S )NMOD)r;   r-   r   r]   r   ParenrD  r+   r-   r;   r  r3   r3   r6   mod_sql  s   zBigQuery.Generator.mod_sql
exp.Columnc                   s`   |j dr*ddd |jd d D }| tj|dd}| d| |d S t |S )	Nr"  r  c                 s  r
  r;  r  r  r3   r3   r6   r7     r  z2BigQuery.Generator.column_parts.<locals>.<genexpr>r)  Tr  r;   )	r  rJ   r  r  r_   r   rS  r]  column_parts)r+   r-   r  
table_pathr`  r3   r6   r    s
   zBigQuery.Generator.column_partsr  c                   sB   |j drddd |jD }| tj|ddS t |S )NrQ  r  c                 s  r
  r;  r  r  r3   r3   r6   r7     r  z1BigQuery.Generator.table_parts.<locals>.<genexpr>Tr  )	r  rJ   r  r  r_   r   rS  r]  r  )r+   r-   r  r`  r3   r6   r    s   	zBigQuery.Generator.table_partsr  c                 C  sl   |j }t|tjrd}nt|tjrd}nd}t|tjtjtjfr$|n|}| || ||j |j	dS )Nr  r  r  r   )
r;   r]   r   r   r}  rn  r   r   rI   rJ   )r+   r-   r;   r  	time_exprr3   r3   r6   timetostr_sql  s   z BigQuery.Generator.timetostr_sqlexp.EQc                 C  s:   t |jtjst |jtjrt |jtjsdS | |dS )Nr  =)r]   r   r   Nullr   rV  Updater  r   r3   r3   r6   eq_sql  s   zBigQuery.Generator.eq_sqlexp.AtTimeZonec              
     sJ   |j }t|tjr|jds| d| d|j|j	dS t
 |S )Nr  r   rO  r   )rV  r]   r   Castr  r   r   r;   rI   rJ   r]  attimezone_sql)r+   r-   rV  r`  r3   r6   r    s   z!BigQuery.Generator.attimezone_sqlexp.TryCastc                 C  r  )NSAFE_safe_prefix)cast_sqlr   r3   r3   r6   trycast_sql  s   zBigQuery.Generator.trycast_sqlexp.Bracketc                 C  s  |j }|j}t|dkrB|rB|tjjjrB|d }|jd u r,ddl	m
} ||| jd}|jrB|jj tjjv rB| | d|j S | j|dd}|jd}|dkrZd	| d
}n|dkred| d
}n|d urq| d|  |jdr|d| }| | d| dS )Nr   r   r<  r>  r  T)flatr5  zOFFSET(r   zORDINAL(zUnsupported array offset: r   r  [])r;   rB   rN   r   r   r   r   r  r   rB  r=  r   
TEXT_TYPESr_   r>   rI   rJ   unsupported)r+   r-   r;   rB   r   r=  expressions_sqlr5  r3   r3   r6   bracket_sql  s(    

zBigQuery.Generator.bracket_sql
exp.Unnestc                 C  s
   |  |S r;  r  r   r3   r3   r6   in_unnest_op%  s   
zBigQuery.Generator.in_unnest_opexp.Versionc                   s"   |j dkr|dd t |S )Nr   r;   SYSTEM_TIME)r>   rh   r]  version_sqlr   r`  r3   r6   r.  (  s   
zBigQuery.Generator.version_sqlexp.Containsc                 C  s>   |j }|j}t|tjrt|tjr|j }|j }| d||S )Nr  )r;   r-   r]   r   r  r   r  r3   r3   r6   contains_sql-  s   zBigQuery.Generator.contains_sqlNexp.Castr  t.Optional[str]c                   sX   |j }t|tjr$t|jd}|r|tjs$| |d | | S t	 j
||dS )Nr   r  r  )r;   r]   r   r  r!   rB   rf   Queryr_   r]  r   )r+   r-   r  r;   elemr`  r3   r6   r   7  s   zBigQuery.Generator.cast_sql)r-   r  r/   r0   )r-   r
  r/   r0   )r-   r  r/   r0   )r-   r  r/   r0   )r-   r  r/   r0   )r-   r  r/   r0   )r-   r  r/   r0   )r-   r  r/   r0   )r-   r"  r/   r0   )r-   r*  r/   r0   )r-   r,  r/   r0   )r-   r/  r/   r0   r;  )r-   r1  r  r2  r/   r0   )r  r  r  INTERVAL_ALLOWS_PLURAL_FORM
JOIN_HINTSQUERY_HINTSTABLE_HINTSLIMIT_FETCHRENAME_TABLE_WITH_DBNVL2_SUPPORTEDUNNEST_WITH_ORDINALITYCOLLATE_IS_FUNCLIMIT_ONLY_LITERALSSUPPORTS_TABLE_ALIAS_COLUMNSUNPIVOT_ALIASES_ARE_IDENTIFIERSJSON_KEY_VALUE_PAIR_SEPNULL_ORDERING_SUPPORTEDIGNORE_NULLS_IN_FUNCJSON_PATH_SINGLE_QUOTE_ESCAPECAN_IMPLEMENT_ARRAY_ANYSUPPORTS_TO_NUMBERNAMED_PLACEHOLDER_TOKENHEX_FUNCWITH_PROPERTIES_PREFIXSUPPORTS_EXPLODING_PROJECTIONS#EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSESUPPORTS_UNIX_SECONDSr   	Generator
TRANSFORMSr   ApproxDistinctr   ArgMaxr   ArgMinr  r   ArrayContainsr   ArrayFilterr   ArrayRemover  r   
preprocess$remove_precision_parameterized_typesCollatePropertyCommitCountIfCreaterm   r|   r   ri  r   DateDiffr   DateStrToDater   rj  rk  rl  FromTimeZonero  GroupConcatHex	HexStringIfr   ILiker   rm  Int64rr  r   rq  rp  r|  r	  r  Maxr   r   r   Minr   PartitionedByPropertyru  rv  RegexpReplacer   rt  rg   ra   Rollbackrt   explode_projection_to_unnestunqualify_unnesteliminate_distinct_onr{   eliminate_semi_and_anti_joinsSHAr  r   Spacer    r  Stringrw  r   r   r   rx  r   r   ry  rz  TimestampDiffr{  TimeStrToTimer   Transaction	TsOrDsAddr   
TsOrDsDiffr   r   r   r}  UnhexUnixDater   r   UuidValuesrZ   VariancePop
SafeDivideJSONPathKeyJSONPathRootJSONPathSubscriptSUPPORTED_JSON_PATH_PARTSTYPE_MAPPINGr   r   
BIGDECIMALr   r#  BLOBBOOLEANCHARDECIMALr   FLOATr  NCHARNVARCHARSMALLINTTEXTr   TIMESTAMPNTZr  TIMESTAMPLTZTINYINT
ROWVERSIONUUID	VARBINARYr%  r  PROPERTIES_LOCATIONr  LocationPOST_SCHEMAVolatilePropertyUNSUPPORTED AFTER_HAVING_MODIFIER_TRANSFORMSRESERVED_KEYWORDSr	  r  r  r  r  r  r  r!  r)  r+  r.  r0  r   r  r3   r3   r`  r6   rM    s   


	








 
#
$%&
'
()*+
,-.
/
01
2
3
:=
>?
@A
JKL
M
P
QVWX
Y
Z[\
]^_
`ab
c
d
e
f



p







	

















	

c
	







rM  )r-   r   r/   r   )Hr  r  r  WEEK_OFFSETUNNEST_COLUMN_ONLYSUPPORTS_USER_DEFINED_TYPESSUPPORTS_SEMI_ANTI_JOINLOG_BASE_FIRSTHEX_LOWERCASEFORCE_EARLY_ALIAS_REF_EXPANSIONPRESERVE_ORIGINAL_NAMESHEX_STRING_IS_INTEGER_TYPEr
   rU  NORMALIZATION_STRATEGYNORMALIZE_FUNCTIONSTIME_MAPPINGFORMAT_MAPPINGPSEUDOCOLUMNSdictfromkeysr   Except	IntersectUnionSET_OP_DISTINCT_BY_DEFAULTr	   TYPE_TO_EXPRESSIONSr   r   r  r   r  
ANNOTATORSitemsFloorCeilLogLnSqrtExpRoundLeftRightr  UpperPadTrimru  rg  Repeat	SubstringArrayConcatConcatr'  CorrCovarPop	CovarSampLagrm  r  Signr  r   r^  r   r  r   r`  r   rM  r  r3   r3   r`  r6   r(  p  s    









)*   r(  )r+   r,   r-   r.   r/   r0   )r+   r,   r-   r[   r/   r0   )r+   r,   r-   rb   r/   r0   )r-   rn   r/   rn   )rI   r   r/   r   )rI   r   r/   r   )rI   r   r/   r   )rI   r   r/   r   )r+   r,   r-   r   r/   r0   )r+   r,   r-   r   r/   r0   )r+   r,   r-   r   r/   r0   )r+   r,   r-   r   r/   r0   )rI   r   r/   r   r;  )r   r   r   r   r/   r   )r   r   r/   r   )r+   r,   r-   r   r/   r0   )r+   r&   r-   r   r/   r   )r+   r,   r-   r  r/   r0   )rI   r   r/   r  )r   r  r/   r  )rI   r   r/   r  )r+   r,   r-   r  r/   r0   )r+   r&   r-   r!  r/   r!  )T
__future__r   loggingr   typingr\  r'   r   r   r   r   r   sqlglot._typingr   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    sqlglot.helperr!   r"   sqlglot.tokensr#   sqlglot.generatorr$   TYPE_CHECKINGr%   rB  r&   	getLoggerr   r  rr  rp  rq  r  r  rZ   ra   rm   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r   r'  r(  r3   r3   r3   r6   <module>   sX    h



	












	






	


