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 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(m)Z)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d d	l4m5Z5 ej6ej7ej8ej9ej:ej;ej<f Z=dSddZ>dTddZ?dUddZ@e/ddVddZAdWddZBdXd"d#ZCdXd$d%ZDdYdZd*d+ZEdXd,d-ZFd[d1d2ZGd\d4d5ZHd]d7d8ZId^d:d;ZJd_d=d>ZKejLejMejNfZOd`d@dAZPejQjRjSfdadFdGZTdbdIdJZUdcdLdMZVdddOdPZWG dQdR dReZXdS )e    )annotationsN)exp	generatorparsertokens
transforms)	DATA_TYPE)!DialectJSON_EXTRACT_TYPENormalizationStrategyVersionapprox_count_distinct_sqlarrow_json_extract_sqlbinary_from_functionbool_xor_sqlbuild_default_decimal_typecount_if_to_sumdate_trunc_to_timedatestrtodate_sqlno_datetime_sqlencode_decode_sqlbuild_formatted_timeinline_array_unless_query no_comment_column_constraint_sqlno_time_sqlno_timestamp_sqlpivot_column_namesrename_funcremove_from_array_using_filterstrposition_sqlstr_to_time_sqltimestamptrunc_sqltimestrtotime_sqlunit_to_varunit_to_str
sha256_sqlbuild_regexp_extractexplode_to_unnest_sqlno_make_interval_sqlgroupconcat_sql)unsupported_args)seq_get)	TokenType)binary_range_parserselfDuckDB.Generator
expressionDATETIME_DELTAreturnstrc                 C  s   |j }t|}t|tjtjtjtjfrdnd}d }t|tjr$|j}n|j	r:t|tjtj
fr5tjjjntjjj}|rBt||n|}|j}t|tjrO|ntj||d}| | d| d| | S )N+-thisunit )r7   r#   
isinstancer   DateAddTimeAddDatetimeAdd	TsOrDsAddreturn_type	is_stringDatetimeSubDataTypeTypeDATETIMEDATEcastr0   Intervalsql)r.   r0   r7   r8   opto_typeexprinterval rM   P/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/duckdb.py_date_delta_sql4   s$    rO   exp.Datec                 C  sR   d|  |d d}|  |d}|r'| d|d}| d| }| d|d	}|S )
NCAST(r7   	 AS DATE)zoneSTRFTIMEz
'%d/%m/%Y'z || ' ' || STRPTIMEz'%d/%m/%Y %Z')rH   func)r.   r0   resultrS   date_strrM   rM   rN   	_date_sqlQ   s   rY   exp.TimeDiffc                 C  s<   t |jt jjj}t |jt jjj}| dt|||S N	DATE_DIFF)	r   rF   r7   rB   rC   TIMEr0   rV   r$   r.   r0   r7   rK   rM   rM   rN   _timediff_sql`   s   r_   )r0   z2DuckDB's ARRAY_SORT does not support a comparator.exp.ArraySortc                 C  s   |  d|jS )N
ARRAY_SORTrV   r7   r.   r0   rM   rM   rN   _array_sort_sqli   s   rd   exp.SortArrayc                 C  s*   |j dt krdnd}| ||jS )NascARRAY_REVERSE_SORTra   )argsgetr   falserV   r7   )r.   r0   namerM   rM   rN   _sort_array_sqln   s   rl   rh   t.Listexp.Expressionc                 C  s   t jt| dt  dS )Nr   )r7   rf   )r   	SortArrayr+   rj   rh   rM   rM   rN   _build_sort_array_descs   s   rq   c                 C  s"   t jt| dt| dt| ddS )N      r   )r7   r0   r8   )r   DateDiffr+   rp   rM   rM   rN   _build_date_diffw   s   "ru   Fend_exclusivebool(t.Callable[[t.List], exp.GenerateSeries]c                   s   d fdd}|S )Nrh   rm   r2   exp.GenerateSeriesc                   s<   t | dkr| dtjd tj| }|d  |S )Nrs   r   0is_end_exclusive)leninsertr   LiteralnumberGenerateSeriesfrom_arg_listset)rh   
gen_seriesrv   rM   rN   _builder|   s
   z(_build_generate_series.<locals>._builder)rh   rm   r2   ry   rM   )rv   r   rM   r   rN   _build_generate_series{   s   r   c              	   C  s^   t | dkrtjt| dtjjdS tjt| dt| dt| dt| dt| dt| ddS )	Nrs   r   r7   scalerr            )yearmonthdayhourminsec)r|   r   
UnixToTimer+   MICROSTimestampFromPartsrp   rM   rM   rN   _build_make_timestamp   s   r   t.Anykwargs%t.Callable[[DuckDB.Parser], exp.Show]c                    s   d fdd}|S )Nr.   DuckDB.Parserr2   exp.Showc                   s   | j  i S N)_parse_show_duckdbr.   rh   r   rM   rN   _parse      z_show_parser.<locals>._parse)r.   r   r2   r   rM   )rh   r   r   rM   r   rN   _show_parser   s   r   
exp.Structc                 C  s   g }| tj}|tjd u o|otdd |tjD }t|j	D ]:\}}t
|tj}|r3|jn|}|r@|| | q$|rE|jnd| }	|| tj|	 d| |  q$d|}
|rld|
 dS d|
 d	S )
Nc                 s  s     | ]}| tjjjV  qd S r   )is_typer   rB   rC   STRUCT).0casted_typerM   rM   rN   	<genexpr>   s
    
z_struct_sql.<locals>.<genexpr>_z: , zROW(){})find_ancestorr   Castfind
PropertyEQanyfind_allrB   	enumerateexpressionsr:   r0   appendrH   rk   r~   stringjoin)r.   r0   rh   ancestor_castis_bq_inline_structirK   is_property_eqvaluekeycsv_argsrM   rM   rN   _struct_sql   s$   
	*
r   exp.DataTypec                 C  sb   | dr| j|dd d| j|ddd dS | tjjjtjjjtjjjr,|jj	S | 
|S )NarrayT)flat[values)r   r   ])r   r   r   rB   rC   r]   TIMETZTIMESTAMPTZr7   r   datatype_sqlrc   rM   rM   rN   _datatype_sql   s   
&
r   exp.JSONFormatc                 C  s$   |  d|j|jd}d| dS )NTO_JSONoptionsrQ   z	 AS TEXT))rV   r7   rh   ri   )r.   r0   rH   rM   rM   rN   _json_format_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 | dtj	|tdd|dS )Nr   TO_TIMESTAMPEPOCH_MSMAKE_TIMESTAMPPOW
   r7   r0   )
rh   ri   r7   r   r   SECONDSrV   MILLISr   Div)r.   r0   r   	timestamprM   rM   rN   _unix_to_time_sql   s    r   r
   c                 C  s*   t | |}|jst|jtr| |}|S r   )r   same_parentr:   parent WRAPPED_JSON_EXTRACT_EXPRESSIONSwrap)r.   r0   	arrow_sqlrM   rM   rN   _arrow_json_extract_sql   s   

r   argt.Optional[exp.Expression]typeexp.DataType.Typec                 C  s   t | tjrt| |S | S r   )r:   r   r~   rF   )r   r   rM   rM   rN   _implicit_datetime_cast   s   r   exp.DateDiffc                 C  s(   t |j}t |j}| dt|||S r[   )r   r7   r0   rV   r$   r^   rM   rM   rN   _date_diff_sql   s   

r   :t.Union[exp.GenerateDateArray, exp.GenerateTimestampArray]c                 C  s   t |tj}|rtjjjntjjj}t|j	d|d}t|j	d|d}tj
|||j	dd}|r>t|tjd}| |S )Nstart)r   endstep)r   r   r   zARRAY<DATE>)r:   r   GenerateDateArrayrB   rC   rE   	TIMESTAMPr   rh   ri   r   rF   buildrH   )r.   r0   is_generate_date_arrayr   r   r   r   rM   rM   rN   _generate_datetime_array_sql   s   
r   )exp.JSONValueArray | exp.JSONExtractArrayc                 C  sB   t j|j|jd}t|t jrdnd}| t j|t j	|dS )Nr   zARRAY<STRING>zARRAY<JSON>)to)
r   JSONExtractr7   r0   r:   JSONValueArrayrH   rF   rB   r   )r.   r0   json_extract	data_typerM   rM   rN   _json_extract_value_array_sql  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i ejddiZed d fddZG dd dejZG dd dejZG dd dejZ  ZS )DuckDBnulls_are_lastTrs   FDAYOFWEEKISOISODOWWEEKDAYpathr   r2   c                   s4   t |tjr|j}|dsd|v r|S t |S )N/z[#)r:   r   r~   rk   
startswithsuperto_json_path)r.   r   	path_text	__class__rM   rN   r   +  s
   zDuckDB.to_json_pathc                   @  s&  e Zd ZddgZdgZdZej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 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'e	j
j(ej)h Z(dS )zDuckDB.Tokenizer)ze'')zE'r  $T//z**z^@z@>z<@ATTACHBINARY	BITSTRINGBPCHARCHARrD   DETACHEXCLUDELOGICALONLYPIVOT_WIDER
POSITIONAL)SIGNEDSTRING	SUMMARIZEr   TIMESTAMP_STIMESTAMP_MSTIMESTAMP_NSTIMESTAMP_USUBIGINTUINTEGER	USMALLINTUTINYINTVARCHARz/*+N)*__name__
__module____qualname__BYTE_STRINGSHEREDOC_STRINGSHEREDOC_TAG_IS_IDENTIFIERr,   	PARAMETERHEREDOC_STRING_ALTERNATIVEr   	TokenizerKEYWORDSDIVDSTARCARET_ATAT_GTLT_ATr  	VARBINARYBITTEXTTIMESTAMPNTZr  EXCEPTBOOLEANr  PIVOTr  INTr  r  r  r  r   r  UINTr  r  popSINGLE_TOKENSCOMMANDSSHOWrM   rM   rM   rN   r&  7  s~    	

!r&  c                	      s  e Zd Zi ejjejej	iZe
ej i ejjejeejejeejiZi ejjejejejejiZh ejjdZededdZi ejji dedejjdeded	ed
eddd dejjddd dejjddd de  dej!jde"ej#de"ej$dej%jdei dejjddd dej&jde'dej(jd ej)jd!e d"d#d$e*ej+d%e*ej,d&ej	jd'd(d d)d*d d+e-ej.d,d-ej/jd.ej0jd/ej/jd0e-ej1d,ej2jej/jej0jej3jej4jej5je6ej7d1Ze
d2 e
d3 i ejj8e9:d4d5d Z8e8
d i ejj;d6d d7d d8Z;ejj<ej=ej>h Z<i ejj?ej@d9d iZ?ejAjBjCeDd:d;d<ejAjBjEd=d iZFi ejjGejHd>d ejId?d ejJd@d iZGi ejjKdAdBd iZKdpdq fdHdIZLdr fdJdKZM	C	C	L	C	C	C	Cdsdt fdUdVZNdpdu fdYdZZO	Ldvdw fd\d]ZPdxd_d`ZQdpdydbdcZRdz fdgdhZSd{d|djdkZTd}dndoZU  ZVS )~r   STRUCT_PACKTABLES
ALL TABLES)r;  r<  rg   ra   DATEDIFFr\   
DATE_TRUNC	DATETRUNCDECODEc                 C     t jt| dt jddS Nr   zutf-8)r7   charset)r   Decoder+   r~   r   rp   rM   rM   rN   <lambda>      zDuckDB.Parser.<lambda>	EDITDIST3ENCODEc                 C  rA  rB  )r   Encoder+   r~   r   rp   rM   rM   rN   rE    rF  EPOCHr   c                 C  s   t jt| dt jjdS )Nr   r   )r   r   r+   r   rp   rM   rM   rN   rE    s    GENERATE_SERIESJSONJSON_EXTRACT_PATHJSON_EXTRACT_STRINGLIST_HASLIST_REVERSE_SORT	LIST_SORT
LIST_VALUEc                 C  s   t j| dS )Nr   )r   Arrayrp   rM   rM   rN   rE        	MAKE_TIMEr   QUANTILE_CONTQUANTILE_DISCRANGETr   REGEXP_EXTRACTREGEXP_EXTRACT_ALLREGEXP_MATCHESREGEXP_REPLACEc                 C  s*   t jt| dt| dt| dt| ddS )Nr   rs   rr   r   )r7   r0   replacement	modifiers)r   RegexpReplacer+   rp   rM   rM   rN   rE    s    SHA256c                 C  rA  )Nr      )r7   length)r   SHA2r+   r~   r   rp   rM   rM   rN   rE    s    rT   duckdbSTRING_SPLITSTRING_SPLIT_REGEXSTRING_TO_ARRAYrU   )r:  	STR_SPLITSTR_SPLIT_REGEXTIME_BUCKETr   UNNESTXORDATE_SUBGLOB)GROUP_CONCATLISTAGG	STRINGAGGc                 C     |   S r   )_parse_string_aggr   rM   rM   rN   rE        c                 C  rs  r   )
_parse_mapr   rM   rM   rN   rE    ru  c                 C  s   t j|  dS Nr7   )r   Abs_parse_bitwiser   rM   rM   rN   rE        )MAP@c                 C  s0   |  tjs| | jr| jtj| jj	dS d S rw  )
_matchr,   NUMBER
_match_setID_VAR_TOKENSr0   r   Placeholder_prevtextr   rM   rM   rN   rE    s
   

   r   )	precisionr   c                 C  s   t jdS )Nr/  )r   rB   r   )dtyperM   rM   rN   rE    rU  c                 C  rs  r   _parse_attach_detachr   rM   rM   rN   rE    ru  c                 C  s   | j ddS )NF)	is_attachr  r   rM   rM   rN   rE    rU  c                 C  rs  r   )_parse_showr   rM   rM   rN   rE    ru  VARIABLEc                 C  s
   |  dS )Nr  )_parse_set_item_assignmentr   rM   rM   rN   rE    s   
 Faliasrw   r2   r   c                   sh   | j }| dst j|dS | | j}| tjs"| 	| d S | 
|  |}| jtj||ddS )NLAMBDA)r  T)r7   r   colon)_index_match_text_seqr   _parse_lambda
_parse_csv_parse_lambda_argr~  r,   COLON_retreat_replace_lambda_parse_assignmentr0   r   Lambda)r.   r  indexr   r7   r  rM   rN   r    s   

zDuckDB.Parser._parse_lambdac                   sz   | j r8| j jtjkr8| j| jd}| tj | jpg }|  }t	|t
jr.|| p,g 7 }| jt
j|||dS t  S )N)r   )commentsr7   r  )_next
token_typer,   r  _parse_id_varALIAS_TOKENSr~  _prev_commentsr  r:   r   
Expressionpop_commentsr0   Aliasr   _parse_expression)r.   r  r  r7   r  rM   rN   r    s   

zDuckDB.Parser._parse_expressionNschemajoinsalias_tokens#t.Optional[t.Collection[TokenType]]parse_bracketis_db_referenceparse_partitionconsume_pipec                   s   | j r| j jtjkr| j|p| jd}| tj | jpg }	nd }g }	t j	||||||d}
t
|
tjrPt
|tjrP|	|
 pAg 7 }	| |	 |_|
d| |
S )N)r  )r  r  r  r  r  r  r  )r  r  r,   r  _parse_table_aliasTABLE_ALIAS_TOKENSr~  r  r   _parse_tabler:   r   r  
TableAliasr  r  r   )r.   r  r  r  r  r  r  r  r  r  tabler  rM   rN   r  	  s*   zDuckDB.Parser._parse_tableas_modifiert.Optional[exp.TableSample]c                   sV   t  j|d}|r)|jds)|jdr |dtd |S |dtd |S )N)r  methodsize	RESERVOIRSYSTEM)r   _parse_table_samplerh   ri   r   r   var)r.   r  sampler  rM   rN   r  .  s   z!DuckDB.Parser._parse_table_sampler7   c                   s8   t  |}| jjtdk rt|tjr|dd |S )Nz1.2.0returns_list_for_mapsT)	r   _parse_bracketdialectversionr   r:   r   Bracketr   )r.   r7   bracketr  rM   rN   r  9  s   zDuckDB.Parser._parse_bracketexp.ToMap | exp.Mapc                 C  sN   | j tjddr| jtj|  dS | | j}| jtj	t
|dt
|ddS )NFadvancerx  r   rs   )keysr   )r~  r,   L_BRACEr0   r   ToMapr  _parse_wrapped_csvr  Mapr+   )r.   rh   rM   rM   rN   rv  D  s   zDuckDB.Parser._parse_maptype_requiredc                 C  rs  r   )_parse_field_def)r.   r  rM   rM   rN   _parse_struct_typesK  s   z!DuckDB.Parser._parse_struct_typesaggregationst.List[exp.Expression]t.List[str]c                   s$   t |dkrt |S t|ddS )Nrs   re  r  )r|   r   _pivot_column_namesr   )r.   r  r  rM   rN   r  N  s   z!DuckDB.Parser._pivot_column_namesexp.Attach | exp.Detachc                   s   d fdd}  tj  j|d} j  dd} j tjdd	r* |}nd }|r8 jt	j
|||d
S  jt	j||dS )Nr2   exp.AttachOptionc                     s"    j tj jdd jdddS )NT)	any_tokenr   )r0   r   AttachOption
_parse_var_parse_fieldrM   r   rM   rN   _parse_attach_optionT  s
   

z@DuckDB.Parser._parse_attach_detach.<locals>._parse_attach_option)not_T)explicitFr  )r7   existsr   )r7   r  )r2   r  )r~  r,   DATABASE_parse_exists_parse_alias_parse_primary_or_varL_PARENr  r0   r   AttachDetach)r.   r  r  r  r7   r   rM   r   rN   r  S  s   z"DuckDB.Parser._parse_attach_detachr3   r   c                 C  s   | j tj|dS rw  )r0   r   Show)r.   r7   rM   rM   rN   r   j  r   z DuckDB.Parser._parse_show_duckdbF)r  rw   r2   r   )r2   r   )FFNFFFF)r  rw   r  rw   r  r  r  rw   r  rw   r  rw   r  rw   r2   r   )r  rw   r2   r  r   )r7   r   r2   r   )r2   r  )r  rw   r2   r   )r  r  r2   r  )T)r2   r  )r7   r3   r2   r   )Wr  r  r   r   ParserBITWISEr,   TILDAr   
RegexpLiker6  CARETRANGE_PARSERSDAMPr-   ArrayOverlapsr*  
StartsWithEXPONENTPowr)  FUNCTIONS_WITH_ALIASED_ARGSr   SHOW_PARSERS	FUNCTIONSrq   ro   r   ru   r   Levenshtein
TimeToUnixr   	ParseJSONbuild_extract_json_with_pathr   JSONExtractScalarArrayContainsTimeFromPartsr   PercentileContPercentileDiscr&   RegexpExtractRegexpExtractAllr   	TimeToStrSplitRegexpSplit	StrToTimeStructDateBinr   Exploder   
BitwiseXorFUNCTION_PARSERSdictfromkeysNO_PAREN_FUNCTION_PARSERSr  SEMIANTIPLACEHOLDER_PARSERSr$  rB   rC   DECIMALr   r/  TYPE_CONVERTERSSTATEMENT_PARSERSr  r  r9  SET_PARSERSr  r  r  r  r  rv  r  r  r  r   __classcell__rM   rM   r  rN   r  h  s@   

 
!"#)*+,-./
8





%
r  c                      s  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZ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#e!j$e%e!j&e'd
e!j(e)e!j*e+e!j,e'de!j-e'de!j.e/e!j0dd e!j1dd e!j2dd e!j3e'de!j4e'de!j5e'de!j6e'de!j7e8e!j9e:i e!j;e<e!j=e'de!j>e<e!j?e@e!jAeBe!jCeDe!jEe<e!jFe<e!jGdd e!jHdd e!jIdd e!jJdd e!jKeLe!jMeLe!jNdd e!jOdd e!jPe'di e!jQdd e!jRe'de!jSe'de!jTe'd e!jUeVe!jWeXe!jYeVe!jZe[e!j\eXe!j]e^e!j_e'd!e!j`e'd"e!jad#d e!jbd$d e!jcd%d e!jde'd&e!jee'd'i e!jfeghegjige!jjd(d e!jke'd)e!jld*d e!jme'd+e!jnd,d e!jod-d e!jpe'd.e!jqe'd/e!jrese!jte'd0e!jueve!jwexe!jyd1d e!jze{e!j|e'd2e!j}e<i e!j~ee!jee!jee!jd3d e!je e!jd4d e!jee!jd5d e!jd6d e!je'd7e!jd8d e!je<e!jd9d e!jd:d e!jd;d e!jee!jd<d e!je'd=e!je'd>e!jee!jed?d@dAdBe'dCe!je'dDe!je'dDe!je'dEiZ e!je!je!je!jhZi ejji e!j7jjdFe!j7jjdGe!j7jjdGe!j7jjdHe!j7jjdIe!j7jjdJe!j7jjdGe!j7jjdGe!j7jjdKe!j7jjdFe!j7jjdFe!j7jjdGe!j7jjdHe!j7jjdLe!j7jjdMe!j7jjdNZh dOZe!je!jfZdPdQ ejjD Ze!jjjee!j< e!jjjee!j< e!jjjee!jo< e!je!je!je!je!jfZ	dd fdZd[Zdd]d^Zdd`daZddcddZddfdgZddidjZddldmZddodpZ	qdd fdudvZd fdxdyZdd fd}d~Zd fddZdddZdddZd fddZdddZdddZdddZdƇ fddZdǇ fddZdȇ fddZdddZedddddZeddddZdddZd͇ fddZdddZ  ZS )r/   r  FLIMIT)(r   zUSING SAMPLE
REPEATABLE,Tr  LIST_FILTERLIST_SUMrm  c                  G     dS )NCURRENT_DATErM   r   rM   rM   rN   rE        zDuckDB.Generator.<lambda>c                  G  r  )NCURRENT_TIMErM   r  rM   rM   rN   rE    r  c                  G  r  )NCURRENT_TIMESTAMPrM   r  rM   rM   rN   rE    r  
DAYOFMONTH	DAYOFWEEKr   	DAYOFYEAR	MAKE_DATEc                 C     d|  |d dtj dS )NzCAST(STRFTIME(r7   r   z	) AS INT)rH   r   DATEINT_FORMATr.   erM   rM   rN   rE       c                 C     t | |dddS )Nr@  Freplacer   r%  rM   rM   rN   rE    r{  c                 C  r"  )NzCAST(STRPTIME(CAST(r7   z AS TEXT), z
) AS DATE)r#  r%  rM   rM   rN   rE    r'  c                 C  r(  )NrH  Fr)  r+  r%  rM   rM   rN   rE    r{  c                 C     t | |ddS )NF)within_group)r)   r%  rM   rM   rN   rE        c                 C  s   | j |ddS )NFROM_HEX)binary_function_repr)hexstring_sqlr%  rM   rM   rN   rE    r.  rl  c                 C     |  |dS )Nr  )binaryr%  rM   rM   rN   rE    rU  ISINFISNANJSON_EXISTSBOOL_ORBOOL_ANDc                 C  r,  )Nr9   )sep)r(   r%  rM   rM   rN   rE    r.  c                 C  s   |  d|  d|jS )NUNHEXMD5rb   r%  rM   rM   rN   rE        c              
   C  s8   |  ddtj|jtjjjddtj|jtjjjddS )Nr=  z'month'T)copy)rV   r   rF   r0   rB   rC   r   r7   r%  rM   rM   rN   rE    s    rW  rX  c              	   C  s&   |  d|j|j|jd|jdS )Nr]  r^  r_  )rV   r7   r0   rh   ri   r%  rM   rM   rN   rE    s    

r\  c                 C  s   |  d|j|jtjdS )Nr\  r   )rV   r7   r0   r   r~   r   r%  rM   rM   rN   rE        rj  c                 C  r2  Nr7   rH   r%  rM   rM   rN   rE    rU  c                 C  s   t |jtjr	dS dS )NTABLE )r:   r7   r   Schemar%  rM   rM   rN   rE    r<  RANDOMSHA1ri  c              
   C  s   |  d|  d|j| |S )NrJ  rU   rV   r7   format_timer%  rM   rM   rN   rE        LIST_TRANSFORMc                 C  s   |  dtj|j|j|jS r[   )rV   r   r~   r   r8   r0   r7   r%  rM   rM   rN   rE    rH  c                 C     |  t|jtjjjS r   )rH   r   rF   r7   rB   rC   rE   r%  rM   rM   rN   rE    s    c                 C  s   |  dt|jtjjjS )NrJ  )rV   r   rF   r7   rB   rC   r   r%  rM   rM   rN   rE    r>  c                 C  s   |  d|j| |S )NrT   rF  r%  rM   rM   rN   rE    r<  rJ  c                 C     d|  |d dS )NzCAST(SUBSTR(REPLACE(CAST(r7   z" AS TEXT), '-', ''), 1, 8) AS INT)r@  r%  rM   rM   rN   rE    s   c              	   C  sD   |  dd|jdpd dt|jtjjjt|j	tjjjS )Nr\   r  r8   DAY)
rV   rh   ri   r   rF   r0   rB   rC   r   r7   r%  rM   rM   rN   rE    s    c                 C  s   |  d|  d|j| |S )NrT   r   rF  r%  rM   rM   rN   rE    rH  c                 C  s"   |  dt|t|jtjjjS )Nr>  )rV   r$   r   rF   r7   rB   rC   rD   r%  rM   rM   rN   rE    s    c                 C  rK  )NzCAST(TO_TIMESTAMP(r7   z
) AS TEXT)r@  r%  rM   rM   rN   rE    s    VAR_POP
WEEKOFYEARins_costdel_costsub_costmax_distLEVENSHTEINJSON_GROUP_OBJECTrk  BLOBr/  r   REALrL  r  r  r  r  >M   asdoonorr   allandr   fornotbothcaserF   elsefromin_pintoonlysomethenuserwhenwithr   asc_pend_pfetchgrantlimitorderr  unionusingwherecolumndesc_pexcepthavingnull_poffsetselecttrue_puniquewindowanalyseanalyzecheck_pcollatedefaultfalse_pforeigngroup_pleadingplacingprimarycreate_pdistincttrailingvariadic	initially	intersect	lateral_p	localtime	returning	symmetric
asymmetric
constraint
deferrable
referencescurrent_datecurrent_rolecurrent_timecurrent_usersession_userlocaltimestampcurrent_catalogcurrent_timestampc                 C  s   i | ]}|t jjjqS rM   )r   
PropertiesLocationUNSUPPORTED)r   proprM   rM   rN   
<dictcomp>}  s    
zDuckDB.Generator.<dictcomp>->r0   
exp.Lambda	arrow_sepr3   r   rw   r2   c                   s<   |j drd}d}d}nd}t j|||d}| | S )Nr  zLAMBDA :FrB  )r  r   )rh   ri   r   
lambda_sql)r.   r0   r  r   prefixr  r  rM   rN   r    s   zDuckDB.Generator.lambda_sqlr   c                 C  s   d|j  S )NzSHOW )rk   rc   rM   rM   rN   show_sql  s   zDuckDB.Generator.show_sqlexp.FromISO8601Timestampc                 C  rJ  r   )rH   r   rF   r7   rB   rC   r   rc   rM   rM   rN   fromiso8601timestamp_sql  s   z)DuckDB.Generator.fromiso8601timestamp_sqlexp.StrToTimec                 C  s8   |j dr| |}d| d|j| dS t| |S )NsaferQ   TRY_STRPTIMEz AS TIMESTAMP)rh   ri   rG  rV   r7   r    r.   r0   formatted_timerM   rM   rN   strtotime_sql  s   

zDuckDB.Generator.strtotime_sqlexp.StrToDatec                 C  s@   |j dr| |}d| d|j| dS dt| | dS )Nr  rQ   r  rR   r  r  rM   rM   rN   strtodate_sql  s   
zDuckDB.Generator.strtodate_sqlexp.ParseJSONc                 C  sF   |j }|jdr| t td||t	 S | d|S )Nr  
json_validrL  )
r7   rh   ri   rH   r   r`  ri  rV   else_null)r.   r0   r   rM   rM   rN   parsejson_sql  s   (zDuckDB.Generator.parsejson_sqlexp.TimeFromPartsc                 C  sH   |j d}|d ur|d|j d | tjd   td| |S )Nnanor       eArV  )rh   ri   r   r6  r   r~   r   r   )r.   r0   r  rM   rM   rN   timefromparts_sql  s   z"DuckDB.Generator.timefromparts_sqlexp.TimestampFromPartsc                 C  s   |j d }|j d}|d ur|| tjd 7 }|j d}|d ur1|| tjd 7 }|s5|r;|d| td| |S )Nr   millig     @@r  r  r   )rh   ri   r6  r   r~   r   r   r   )r.   r0   r   r  r  rM   rM   rN   timestampfromparts_sql  s   
z'DuckDB.Generator.timestampfromparts_sqlNexp.TableSampletablesample_keywordt.Optional[str]c                   sp   t |jtjs	d}|jdr0|jd}|r0|j dkr0| d| d |	dt
d t j||dS )NTABLESAMPLEr  r  r  zSampling method zP is not supported with a discrete sample count, defaulting to reservoir sampling)r  )r:   r   r   Selectrh   ri   rk   upperunsupportedr   r  r   tablesample_sql)r.   r0   r  r  r  rM   rN   r    s   
z DuckDB.Generator.tablesample_sqlexp.Intervalc              
     sj   d }| d }|drd}|drd}|r/d| dt tj|jtdd	 d
S t |S )Nr8   week   quarterZ   r  z * rL  r6   r   )	r  lowerr   r   interval_sqlr   rG   r7   r  )r.   r0   
multiplierr8   r  rM   rN   r    s   

,zDuckDB.Generator.interval_sqlr9   exp.ColumnDefr9  c                   s(   t |jtjr| |dS t ||S r?  )r:   r   r   UserDefinedFunctionrH   r   columndef_sql)r.   r0   r9  r  rM   rN   r    s   zDuckDB.Generator.columndef_sqlexp.Joinc                   sF   |j dkr|jdst|jtjrt |	t
 S t |S )NLEFTrY  )siderh   ri   r:   r7   r   Unnestr   join_sqlrY  truerc   r  rM   rN   r    s   

zDuckDB.Generator.join_sqlry   c                 C  s$   |j drtd| |S | |S )Nr{   rY  )rh   ri   r   function_fallback_sqlrc   rM   rM   rN   generateseries_sql  s   
z#DuckDB.Generator.generateseries_sqlexp.CountIfc                 C  s$   | j jtdkr| |S t| |S )N1.2)r  r  r   r  r   rc   rM   rM   rN   countif_sql  s   

zDuckDB.Generator.countif_sqlexp.Bracketc                   s   | j jtdkrt |S |j}t|tjr|	t
| t |}|jdsI|js;ddlm} ||| j d}|tjjjrId| d}|S )Nr  r  r   annotate_typesr  r  z)[1])r  r  r   r   bracket_sqlr7   r:   r   rT  r*  parenrh   ri   r    sqlglot.optimizer.annotate_typesr  r   rB   rC   r|  )r.   r0   r7   r  r  r  rM   rN   r    s   zDuckDB.Generator.bracket_sqlexp.WithinGroupc                 C  sj   |  |d}|j}t|tjr%|tj}|r%|d|j |d|j |  |dd}| | dS )Nr0   r7   r   )	rH   r7   r:   r   PERCENTILESr   Orderedr   rstrip)r.   r0   expression_sqlrV   	order_colr7   rM   rM   rN   withingroup_sql%  s   z DuckDB.Generator.withingroup_sql
exp.Lengthc                 C  s   |j }|jdr|jr| d|S |js"ddlm} ||| jd}|j	t
jj r/| d|S t
|t
jjj}t
|t
jjj}t
| d|d| d|t
jd|gd	}| |S )
Nr3  LENGTHr   r  r  TYPEOFz'BLOB'OCTET_LENGTHr7   r   )r7   rh   ri   r@   rV   r   r  r  r  r   r   rB   
TEXT_TYPESrF   rC   r-  r  r`  ri  r  	AnonymousrH   )r.   r0   r   r  blobvarcharr`  rM   rM   rN   
length_sql5  s"   
zDuckDB.Generator.length_sqlexp.ObjectInsertc                 C  sn   |j }|jd}t|tjr|jnd}| |d}| d| }t|tjr0|j	s0| 
d|S | 
d||S )Nr   rB  r   z := r:  STRUCT_INSERT)r7   rh   ri   r:   r   r  rk   rH   r  r   rV   )r.   r0   r7   r   key_sql	value_sqlkv_sqlrM   rM   rN   objectinsert_sqlS  s   z!DuckDB.Generator.objectinsert_sql
exp.Unnestc                   s   |j d}|rJ|jtjtdtjdd |j d}|r5|	dd  tj
t|j ddd}t |}tj|gd	|}| |S t |S )
Nexplode_array	max_depthrr   r   r  columnsr   rx  rS  )rh   ri   r   r   r   Kwargr  r~   r   r   r  r+   r   
unnest_sqlr  subqueryrH   )r.   r0   r  r  r  rz  r  rM   rN   r  b  s   
zDuckDB.Generator.unnest_sqlexp.IgnoreNullsc                   0   t |j| jrt |S | d | |dS )Nz7IGNORE NULLS is not supported for non-window functions.r7   )r:   r7   %IGNORE_RESPECT_NULLS_WINDOW_FUNCTIONSr   ignorenulls_sqlr  rH   rc   r  rM   rN   r  w     
z DuckDB.Generator.ignorenulls_sqlexp.RespectNullsc                   r  )Nz8RESPECT NULLS is not supported for non-window functions.r7   )r:   r7   r  r   respectnulls_sqlr  rH   rc   r  rM   rN   r
    r  z!DuckDB.Generator.respectnulls_sqlexp.ArrayToStringc                 C  s>   |  |d}|  |d}|rd| d| d}| d||jS )Nr7   r  zLIST_TRANSFORM(z, x -> COALESCE(x, z))ARRAY_TO_STRING)rH   rV   r0   )r.   r0   r7   	null_textrM   rM   rN   arraytostring_sql  s
   z"DuckDB.Generator.arraytostring_sqlposition
occurrenceexp.RegexpExtractc                 C  sL   |j d}|j d}|s|r|jt| jjkrd }| d|j|j||S )Ngroup
parametersrZ  )	rh   ri   rk   r3   r  REGEXP_EXTRACT_DEFAULT_GROUPrV   r7   r0   )r.   r0   r  paramsrM   rM   rN   regexpextract_sql  s   z"DuckDB.Generator.regexpextract_sqlcultureexp.NumberToStrc                 C  sD   |j d}|r|jr| dd|j d|jS | d | |S )NformatFORMATz'{:,.zf}'z1Only integer formats are supported by NumberToStr)rh   ri   is_intrV   rk   r7   r  r  )r.   r0   fmtrM   rM   rN   numbertostr_sql  s
   


z DuckDB.Generator.numbertostr_sqlc                 C  s   |  d dS )Nz>The AUTOINCREMENT column constraint is not supported by DuckDBrB  )r  )r.   r   rM   rM   rN   !autoincrementcolumnconstraint_sql  s   
z2DuckDB.Generator.autoincrementcolumnconstraint_sqlexp.Aliasesc                   s(   |j }t|tjr| |S t |S r   )r7   r:   r   
Posexplodeposexplode_sqlr   aliases_sql)r.   r0   r7   r  rM   rN   r"    s   
zDuckDB.Generator.aliases_sqlexp.Posexplodec           
   	   C  s  |j }|j}tdtd}}t|tjr|j\}}nt|tjr8|j	d}|r8|j
p1||g\}}|  | tj|g|d}| tjtjd|tjdgdtjd |d}| ||}	t|tjss|rt|jtjr| tjtj|	gd	d
S |	S )Nposcolr  )r   r  GENERATE_SUBSCRIPTSrs   r  )r7   r  rS  rx  )r7   r   r   to_identifierr:   Aliasesr   Tablerh   ri   r   r6  rH   r  r  r  r~   r   format_argsFromSubqueryr  )
r.   r0   r7   r   r$  r%  r  r  gen_subscriptsr!  rM   rM   rN   r!    s2   

zDuckDB.Generator.posexplode_sql)r  T)r0   r  r  r3   r   rw   r2   r3   )r0   r   r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   r   )r0   r  r  r  r2   r3   )r0   r  r2   r3   )r9   )r0   r  r9  r3   r2   r3   )r0   r  r2   r3   )r0   ry   r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   )r0   r	  r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   )r0   r  r2   r3   )r2   r3   )r0   r  r2   r3   )r0   r#  r2   r3   )r  r  r   PARAMETER_TOKENNAMED_PLACEHOLDER_TOKEN
JOIN_HINTSTABLE_HINTSQUERY_HINTSLIMIT_FETCHSTRUCT_DELIMITERRENAME_TABLE_WITH_DBNVL2_SUPPORTEDSEMI_ANTI_JOIN_WITH_SIDETABLESAMPLE_KEYWORDSTABLESAMPLE_SEED_KEYWORDLAST_DAY_SUPPORTS_DATE_PARTJSON_KEY_VALUE_PAIR_SEPIGNORE_NULLS_IN_FUNC!JSON_PATH_BRACKETED_KEY_SUPPORTEDSUPPORTS_CREATE_TABLE_LIKEMULTI_ARG_DISTINCTCAN_IMPLEMENT_ARRAY_ANYSUPPORTS_TO_NUMBERSUPPORTS_WINDOW_EXCLUDECOPY_HAS_INTO_KEYWORDSTAR_EXCEPTPAD_FILL_PATTERN_IS_REQUIREDARRAY_CONCAT_IS_VAR_LENARRAY_SIZE_DIM_REQUIREDNORMALIZE_EXTRACT_DATE_PARTSr   	Generator
TRANSFORMSr   ApproxDistinctr   rT  r   ArrayFilterr   ArrayRemover   	ArraySortrd   ArraySumr  CommentColumnConstraintr   CurrentDateCurrentTimeCurrentTimestamp
DayOfMonth	DayOfWeekDayOfWeekIso	DayOfYearrB   r   DaterY   r;   rO   DateFromPartsDateSubrt   r   DateStrToDater   Datetimer   rA   r=   DateToDirD  DiToDaterI  r   r   GenerateTimestampArrayGroupConcat	HexStringr  IntDivIsInfIsNanJSONBExistsr   r   JSONExtractArrayr   r  
JSONFormatr   r   Lateralr'   	LogicalOr
LogicalAndMakeInterval	MD5DigestMonthsBetweenr  r  Pivotr   
preprocessunqualify_columnsr`  r  RegexpILiker   ReturnReturnsPropertyRandSHArd  r%   r  ro   rl   StrPositionr   	StrToUnixr  r   	Transformr<   Timer   TimeDiffr_   	Timestampr   TimestampDiffTimestampTruncr!   TimeStrToDateTimeStrToTimer"   TimeStrToUnixr  r  
TsOrDiToDir>   
TsOrDsDiff	UnixToStrDatetimeTruncr   r   UnixToTimeStrVariancePop
WeekOfYearXorr   r  r*   JSONObjectAggJSONBObjectAggr  JSONPathKeyJSONPathRootJSONPathSubscriptJSONPathWildcardSUPPORTED_JSON_PATH_PARTSTYPE_MAPPINGrC   r  r
  r  rD   FLOATJSONBNCHARNVARCHARr5  r-  
ROWVERSIONr  r0  r  r  r  RESERVED_KEYWORDSr~   ParenUNWRAPPED_INTERVAL_VALUESPROPERTIES_LOCATIONr  r  POST_SCHEMALikePropertyPOST_CREATETemporaryProperty
POST_ALIAS
FirstValueLag	LastValueLeadNthValuer  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!  r  rM   rM   r  rN   rI  m  sT   


	












 !"
#
$
%
&
'
(
)*+,-./
0
1
2
3
4
:
;>
?
F
G
J
K
L
M
NO
PQR
SV
WXYZ[
\_
`a
b
e
f
gi
j
p
sv
w
x



  







	








P	






	




	
		
rI  )r   r   r2   r   )r  r  r   NULL_ORDERINGSUPPORTS_USER_DEFINED_TYPESSAFE_DIVISIONINDEX_OFFSETCONCAT_COALESCESUPPORTS_ORDER_BY_ALLSUPPORTS_FIXED_SIZE_ARRAYSSTRICT_JSON_PATH_SYNTAX#NUMBERS_CAN_BE_UNDERSCORE_SEPARATEDr   CASE_INSENSITIVENORMALIZATION_STRATEGYr	   DATE_PART_MAPPINGr6  r   r   r&  r   r  r   rI  r  rM   rM   r  rN   r     s.    
1  r   )r.   r/   r0   r1   r2   r3   )r.   r/   r0   rP   r2   r3   )r.   r/   r0   rZ   r2   r3   )r.   r/   r0   r`   r2   r3   )r.   r/   r0   re   r2   r3   )rh   rm   r2   rn   r  )rv   rw   r2   rx   )rh   r   r   r   r2   r   )r.   r/   r0   r   r2   r3   )r.   r/   r0   r   r2   r3   )r.   r/   r0   r   r2   r3   )r.   r/   r0   r   r2   r3   )r.   r/   r0   r
   r2   r3   )r   r   r   r   r2   r   )r.   r/   r0   r   r2   r3   )r.   r/   r0   r   r2   r3   )r.   r/   r0   r   r2   r3   )Y
__future__r   typingtsqlglotr   r   r   r   r   sqlglot.expressionsr   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$   r%   r&   r'   r(   r)   sqlglot.generatorr*   sqlglot.helperr+   sqlglot.tokensr,   sqlglot.parserr-   Unionr;   r<   r=   r>   rZ  rA   r1   rO   rY   r_   rd   rl   rq   ru   r   r   r   r   r   r   r   Binaryr  Inr   r   rB   rC   rE   r   r   r   r   r   rM   rM   rM   rN   <module>   sF    #


	






!






