o
    8Di                     @  sj  U d dl mZ d dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZmZmZmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlm Z  d dl!m"Z" d d	l#m$Z$ ej%rhd d
l&m'Z' dddddddZ(ddddddddddddddddZ)e*dZ+ddhZ,e-dddZ.e
j/e
j0e
j1e
j2e
j3e
j4hZ5i e67de8 dddddddd d!d"d#d$ddd%Z9d&e:d'< i e67d(e8 d)d*d+Z;d&e:d,< d-Z<	dodpd4d5Z=dqd9d:Z>drd<d=Z?dsd?d@Z@h dAZAdtdFdGZBdudIdJZC	dodvdMdNZDdwdOdPZEdxdRdSZFdydUdVZGdzdZd[ZHd{d]d^ZId|dbdcZJd}dedfZKd~dhdiZLddkdlZMG dmdn dneZNdS )    )annotationsN)partialreduce)exp	generatorparsertokens
transforms)DialectNormalizationStrategyany_value_to_max_sqlbuild_date_deltadate_delta_sqldatestrtodate_sql'generatedasidentitycolumnconstraint_sqlmax_or_greatestmin_or_leastrename_funcstrposition_sqltimestrtotime_sqltrim_sql)seq_getbuild_coalesce)format_time)	TokenType)E%A%B)weekdaydwwmonthmmmyearquarterr"   weekday)r%   yyyyyyr&   qqqr"   r#   r$   r'   wwwkr(   dddz;([dD]{1,2})|([mM]{1,2})|([yY]{1,4})|([hH]{1,2})|([sS]{1,2})NCil     )DISABLE_OPTIMIZED_PLAN_FORCINGFAST%IGNORE_NONCLUSTERED_COLUMNSTORE_INDEXLABELMAXDOPMAXRECURSIONMAX_GRANT_PERCENTMIN_GRANT_PERCENTNO_PERFORMANCE_SPOOLQUERYTRACEON	RECOMPILE)UNION)EXTERNALPUSHDOWNSCALEOUTEXECUTION)VIEWS)r@   ORDERrA   )GROUPJOINr?   )PLAN)rE   )rE   r?   ))FORUNKNOWN)rD   )FORCEDSIMPLE)CONCATDISABLEEXPANDFORCEHASHKEEP	KEEPFIXEDLOOPMERGEOPTIMIZErC   PARAMETERIZATIONROBUSTUSEzparser.OPTIONS_TYPEOPTIONS)AUTOEXPLICITTYPE)XSINILABSENT)BASE64)ELEMENTSBINARYXML_OPTIONS)r:   r;   r7   	exp_class	t.Type[E]full_format_mappingt.Optional[bool]returnt.Callable[[t.List], E]c                      d fdd}|S )Nargst.Listrf   r   c                   sv   t | d}t|tjr!tjt|j ri t	j
tnt	j
}t | d}t|tjr5t|tjjj} ||dS )Nr   r3   )thisformat)r   
isinstancer   
ExpressionLiteralstringr   namelowerTSQLTIME_MAPPINGFULL_FORMAT_TIME_MAPPINGcastDataTypeType	DATETIME2)ri   fmtrk   rb   rd    N/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/tsql.py_builder   s   

z'_build_formatted_time.<locals>._builderri   rj   rf   r   r|   )rb   rd   r~   r|   r{   r}   _build_formatted_time~   s   r   ri   rj   exp.NumberToStr | exp.TimeToStrc                 C  s   t | d}t | d}t | d}|o|jtv pt|j }|r'tj|||dS |rBtjt	|jdkr:t
|jtjnt
|jtj}tj|||dS )Nr   r3      )rk   rl   culture)r   rq   TRANSPILE_SAFE_NUMBER_FMTDATE_FMT_REsearchr   NumberToStrro   rp   lenr   rs   FORMAT_TIME_MAPPINGrt   	TimeToStr)ri   rk   rz   r   
number_fmtr|   r|   r}   _build_format   s   


r   exp.LastDayc                 C  sZ   t jt| dd}t| d}|d u r|}ntd}t j|||o$t |d}t j|dS )Nr   rk   r3   r"   rk   
expressionunit)r   TsOrDsToDater   DATE_DELTA_INTERVALgetDateAddvarLastDay)ri   date	month_lagrk   r   r|   r|   r}   _build_eomonth   s   

r   exp.Expressionc                 C  s   | \}}|j r|j nd}|dkr| d tj|dS |dv r,| d tj|dS |dkr;tj|tj	ddS |d	krJtj|tj	d
dS tj
dg| R  S )N MD5r   r   )SHASHA1SHA2_256   )rk   lengthSHA2_512i   	HASHBYTES)	is_stringrq   upperpopr   r   r   SHA2ro   numberfunc)ri   kinddatar|   r|   r}   _build_hashbytes   s   

r   >   DWWKHOURQUARTERselfTSQL.Generatorr   strc                 C  s   |j d }t|tjs<|jr1t|jtj}|pd	 }|t
v r'| d||jS | tj|}n| |p:| |}n| |}| d|j||j dS )Nrl   r   DATEPARTFORMATr   )ri   rm   r   r   r   r   rq   rs   INVERSE_TIME_MAPPINGr   DATEPART_ONLY_FORMATSr   rk   sqlro   rp   r   )r   r   rz   
mapped_fmtrq   fmt_sqlr|   r|   r}   _format_sql   s   

r   exp.GroupConcatc                 C  s   |j }|tj}|r| d | jd }d}t|j tjr8|j j r*|j j  }d| 	|j dd   d}|j
dpCtjd}d	| || d| S )
Nz*T-SQL STRING_AGG doesn't support DISTINCT.r   r   z WITHIN GROUP (r3   )	separator,zSTRING_AGG()rk   findr   Distinctunsupportedr   expressionsrm   Orderr   ri   r   ro   rp   format_args)r   r   rk   distinctorderr   r|   r|   r}   _string_agg_sql   s   
r   unit_mappingt.Optional[t.Dict[str, str]]c                   rh   )Nri   rj   rf   r   c                   s   t | d}|rrt|j |j}t | d}|rA|jrA|jr7tt	j
| d }tj|d}n
 t | d||dS  tjt | ddtj|d|dS )Nr   r3   )daysz%Fr   r   r   )r   r   r   r   rq   rr   	is_numberis_intDEFAULT_START_DATEdatetime	timedeltato_pyro   rp   strftimeTimeStrToTime)ri   r   
start_dateaddsrb   r   r|   r}   r~      s   



z#_build_date_delta.<locals>._builderr   r|   )rb   r   r~   r|   r   r}   _build_date_delta   s   r   c                 C  s   | j d}t| tjtjfrPt|tjrP|jsPddlm	} | j
}dd t|jD }|| |j}|D ]}|| }|j
}t|j
tjrO|j d d|j
j q4| S )zIEnsures all (unnamed) output columns are aliased for CTEs and Subqueries.aliasr   )qualify_outputsc                 s  s*    | ]\}}t |tjr|js|V  qd S N)rm   r   Columnr   ).0icr|   r|   r}   	<genexpr>   s    
z0qualify_derived_table_outputs.<locals>.<genexpr>quoted)ri   r   rm   r   CTESubquery
TableAliascolumns!sqlglot.optimizer.qualify_columnsr   rk   	enumerateselects
Identifiersetr   )r   r   r   queryunaliased_column_indexesquery_selectsselect_indexcolumnr|   r|   r}   qualify_derived_table_outputs  s*   
r   exp.TimestampFromPartsc              
   C  sB   t jt| dt| dt| dt| dt| dt| dt| ddS )	Nr   r3   r               )r%   r"   r(   hourminsecmilli)r   TimestampFromPartsr   ri   r|   r|   r}   _build_datetimefromparts2  s   r   exp.TimeFromPartsc                 C  s2   t jt| dt| dt| dt| dt| ddS )Nr   r3   r   r   r   )r   r   r   	fractions	precision)r   TimeFromPartsr   r   r|   r|   r}   _build_timefromparts?  s   r  klasst.Type[exp.Expression]4t.Callable[[t.List[exp.Expression]], exp.Expression]c                   s   d fdd}|S )Nri   t.List[exp.Expression]rf   r   c                   sR   t | d}|r|jst|tjjj}t | d}d|i}|r"||d<  di |S )Nr   r3   rk   r   r|   )r   r   r   rv   rw   rx   TEXT)ri   rk   r   kwargsr  r|   r}   _parseL  s   


z'_build_with_arg_as_text.<locals>._parse)ri   r  rf   r   r|   )r  r	  r|   r  r}   _build_with_arg_as_textI  s   r
  exp.SplitPart | exp.Anonymousc                 C  s   t | dkr9tdd | D r9| d }| d }t |jd}|dkr9tj|tjdtj|d |	  dS tj
d	| d
S )Nr   c                 s      | ]	}t |tjV  qd S r   rm   r   ro   r   argr|   r|   r}   r   b      z#_build_parsename.<locals>.<genexpr>r   r3   .r   )rk   	delimiter
part_index	PARSENAMErk   r   )r   allrq   splitr   	SplitPartro   rp   r   r   	Anonymous)ri   rk   r  split_countr|   r|   r}   _build_parsename^  s   
r  dialectr
   exp.JSONExtractc                 C  s0   t | dkr| tjd ttj| |S )Nr3   $)r   appendr   ro   rp   r   build_extract_json_with_pathJSONExtract)ri   r  r|   r|   r}   _build_json_queryp  s   r"  'exp.JSONExtract | exp.JSONExtractScalarc                 C  s2   |  d|j|j}|  d|j|j}|  d||S )N
JSON_QUERY
JSON_VALUEISNULL)r   rk   r   )r   r   
json_query
json_valuer|   r|   r}   _json_extract_sqly  s   r)  exp.TimeStrToTimec                 C  s6   t | |}|jdr| tj|tjddS |S )NzoneUTC)rk   r+  )r   ri   r   r   r   
AtTimeZonero   rp   )r   r   r   r|   r|   r}   _timestrtotime_sql  s   
r.  exp.TimestampTruncc                 C  s>   t | d}t | d}|r|jrt|tjjj}tj||dS )Nr   r3   )rk   r   )r   r   r   rv   rw   rx   ry   TimestampTrunc)ri   r   rk   r|   r|   r}   _build_datetrunc  s
   


r1  c                   @  s  e Zd ZdZdZdZdZej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i ddd d!d"d!d#d$d%dd&d'd(dd)dd*d+d,d-d.d/d0d$d1d2d3d4d5d	d6d7d8d9d:d;ddd+d<Zi d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^i d_d`dadbdcdNddd^ded>dfdgdhdidjdkdldmdndodpdqdrdsdtdNdudPdvdwdxdydzd{d|dZd\d^d}d~Zi ddd6dgdd:dd;dd\ddddddddddd1dd&dddddddddddd(diZG dd dejZG dd dejZG dd dejZdS )rs   FTz'yyyy-mm-dd hh:mm:ss'r%   z%Y	dayofyearz%jr(   z%ddyyr'   z%Wr-   r.   r   z%hhhz%Iminutez%Mminsecondz%Ssssz%-Smillisecondz%fmsr   z%wr    r"   z%mr#   r$   z%-MYYYYYYYz%yMMMMr   MMMz%bMMMz%-mddddr   r/   r0   z%-dHHz%Hz%-Hz%-I)Hhffffffr)   r*   0z%b %d %Y %-I:%M%p1z%m/%d/%y2z%y.%m.%d3z%d/%m/%y4z%d.%m.%y5z%d-%m-%y6z%d %b %y7z	%b %d, %y8z%H:%M:%S9z%b %d %Y %-I:%M:%S:%f%p10zmm-dd-yy11zyy/mm/dd12yymmdd13z%d %b %Y %H:%M:ss:%f14z%H:%M:%S:%f20z%Y-%m-%d %H:%M:%S21z%Y-%m-%d %H:%M:%S.%f22z%m/%d/%y %-I:%M:%S %p23z%Y-%m-%d2425100101z%m/%d/%Y102z%Y.%m.%d103z%d/%m/%Y104z%d.%m.%Y105z%d-%m-%Y106z%d %b %Y107z	%b %d, %Y108109110z%m-%d-%Y111z%Y/%m/%d112z%Y%m%dz%d %b %Y %H:%M:%S:%fz%Y-%m-%dT%H:%M:%S.%f)113114120121126z%B %YrG  rH  Dz%A,%B,%Yfz%A,%B,%Y %-I:%M %pFz%A,%B,%Y %-I:%M:%S %pgz%m/%d/%Y %-I:%M %pGz%m/%d/%Y %-I:%M:%S %pz%B %-dOz%Y-%m-%dT%H:%M:%Suz%Y-%M-%D %H:%M:%S%zUz%A, %B %D, %Y %H:%M:%S%zTz%-I:%M:%S %ptz%-I:%Mz%a %Yc                   @  s  e Zd ZddgZddgZddgZh 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e
je
je
j d
Z	e	!d h ejj"e
j#Z"dS )zTSQL.Tokenizer)[]"')0xr   )0Xr   >   #r  @zCLUSTERED INDEXry   DATETIMEOFFSETDECLAREEXECzFOR SYSTEM_TIMEGOIMAGEMONEYzNONCLUSTERED INDEXNTEXTOPTIONOUTPUTPRINTPROCREAL
ROWVERSION)
SMALLDATETIME
SMALLMONEYSQL_VARIANTSYSTEM_USERTOP	TIMESTAMPTINYINTUNIQUEIDENTIFIERzUPDATE STATISTICSXMLz/*+N)$__name__
__module____qualname__IDENTIFIERSQUOTESHEX_STRINGSVAR_SINGLE_TOKENSr   	TokenizerKEYWORDSr   INDEXry   TIMESTAMPTZr  COMMANDTIMESTAMP_SNAPSHOTr  r  r  r  	RETURNING	PROCEDUREFLOATr  r  r  VARIANTCURRENT_USERr  UTINYINTUUIDr  r   COMMANDSENDr|   r|   r|   r}   r    sn    	

r  c                      sX  e Zd ZdZdZdZdZi ejj	e
jdd e
jdd iZ	ejje
jh Zejje
jh Zejje
jh Zejje
jh Zejje
jh Zi ejji ddd dd	d d
dd deejeddeejeddeejdddeejdedededejj de!ddd de"de#ej$de%ej&de%ej'ej(j e%ej)e*ej+j ej,j dd ejj ej-j ej-j ej.j ej-j e/e0dZh dZ1e23d e4 Z5h d!Z6ejje
j7hejj8 Z9i ejj:e
j;d"d iZ:i ejj<e
j=d#d iZ<i ejj>d$d%d iZ>i ejj?e
j=d&d iZ?do fd)d*Z@dpdq fd.d/ZAdrd0d1ZBdsd3d4ZCdtd6d7ZDdsd8d9ZEdu fd;d<ZFdvd>d?ZGdwdAdBZHdx fdDdEZI	FdydzdJdKZJ	d{d| fdNdOZK	Fdyd} fdRdSZLd~ fdUdVZM		Fdd fdZd[ZNd fd]d^ZOdr fd_d`ZPddbdcZQddedfZRddhdiZSddkdlZTdr fdmdnZU  ZVS )zTSQL.ParserFTc                 C     d|   fS )Noptions)_parse_optionsr   r|   r|   r}   <lambda>8      zTSQL.Parser.<lambda>c                 C  r  )Nfor)
_parse_forr  r|   r|   r}   r  9  r  	CHARINDEXc                 C  s"   t jt| dt| dt| ddS )Nr3   r   r   )rk   substrposition)r   StrPositionr   r   r|   r|   r}   r  E  s
    COUNTc                 C     t jt| d| dd  ddS )Nr   r3   Frk   r   big_intr   Countr   r   r|   r|   r}   r  J      	COUNT_BIGc                 C  r  )Nr   r3   Tr  r  r   r|   r|   r}   r  M  r  DATEADD)r   DATEDIFFDATENAME)rd   r   DATETIMEFROMPARTSEOMONTHr   GETDATEr   r&  c                 C  s   t | ddS )NT)ri   is_nullr   r   r|   r|   r}   r  Y  r  r$  r%  LENLEFTc                 C  s   t jt| dt jddS )Nr   r   rk   r   )r   Powr   ro   r   r   r|   r|   r}   r  c  s    )NEWIDRIGHTr  	REPLICATESCHEMA_NAMESQUARESYSDATETIME
SUSER_NAMESUSER_SNAMESYSDATETIMEOFFSETr  TIMEFROMPARTS	DATETRUNC>   rO   rR   rS   REMOTE)
ENCRYPTIONr>   SCHEMABINDINGNATIVE_COMPILATIONEXECUTE>   OUTr  	READ_ONLYc                 C     |   S r   )_parse_declarer  r|   r|   r}   r  |      c                 C  s"   | j tj||  p| jdddS )NT	any_tokenr  )r   r   ScopeResolution_parse_function
_parse_varr   rk   r|   r|   r}   r    s
    NEXTc                 C  r  r   )_parse_next_value_forr  r|   r|   r}   r    r  c                 C  s@   t |tjr|jtjjjkr| jtj||dS | jtj||dS )N)rk   tor  )	rm   r   rw   rk   rx   USERDEFINEDr   Castr  )r   rk   r  r|   r|   r}   r    s
   
rf   exp.AlterSetc                   s   |  t jS r   )_parse_wrappedsuper_parse_alter_table_setr  	__class__r|   r}   r       z"TSQL.Parser._parse_alter_table_settableboolt.Optional[exp.Expression]c                   s:   |  tjr| j}|  }|j|dd |S t j|dS )NT)prependr  )_matchr   rS   _prev_comments_parse_mergeadd_commentsr  _parse_wrapped_select)r   r  commentsmerger  r|   r}   r    s   z!TSQL.Parser._parse_wrapped_selectc                 C  s(   | j | jddr|  S |  p|  S )NFadvance)
_match_setTYPE_TOKENS_parse_typesr  r  r|   r|   r}   _parse_dcolon  s   zTSQL.Parser._parse_dcolon"t.Optional[t.List[exp.Expression]]c                   s(     tjsd S d fdd} |S )Nrf   r  c                    s4     t} | s	d S  tj  jtj|   dS Nr  )	_parse_var_from_optionsrX   r  r   EQr   r   QueryOption_parse_primary_or_var)optionr  r|   r}   _parse_option  s   
z1TSQL.Parser._parse_options.<locals>._parse_optionrf   r  )r  r   r  _parse_wrapped_csv)r   r  r|   r  r}   r    s   

zTSQL.Parser._parse_optionsexp.XMLKeyValueOptionc                 C  s8   |   }| jtjddr| | j}nd }tj||dS )NFr  r  )r  r  r   L_PARENr  _parse_stringr   XMLKeyValueOption)r   rk   r   r|   r|   r}   _parse_xml_key_value_option  s
   z'TSQL.Parser._parse_xml_key_value_optionc                   s,     tjtjs
d S d fdd} |S )Nrf   r  c                     s"    j tj jtddp  dS )NF)raise_unmatchedr   )r   r   r  r
  ra   r  r|   r  r|   r}   _parse_for_xml  s
   z.TSQL.Parser._parse_for.<locals>._parse_for_xmlr  )_match_pairr   rG   r  
_parse_csv)r   r  r|   r  r}   r    s   
zTSQL.Parser._parse_forr  c                   s   dd t   D S )aB  
            T-SQL supports the syntax alias = expression in the SELECT's projection list,
            so we transform all parsed Selects to convert their EQ projections into Aliases.

            See: https://learn.microsoft.com/en-us/sql/t-sql/queries/select-clause-transact-sql?view=sql-server-ver16#syntax
            c                 S  s@   g | ]}t |tjrt |jtjrtj|j|jjd dn|qS )Fcopy)rm   r   r  rk   r   alias_r   )r   
projectionr|   r|   r}   
<listcomp>  s    
z2TSQL.Parser._parse_projections.<locals>.<listcomp>)r  _parse_projectionsr  r  r|   r}   r     s   zTSQL.Parser._parse_projectionsexp.Commit | exp.Rollbackc                 C  s   | j jtjk}| d |  }|r| jtj|dS d}| 	tj
tjrC| d | tj | dr7d}n| tj d}|   | jtj||dS )	a  Applies to SQL Server and Azure SQL Database
            COMMIT [ { TRAN | TRANSACTION }
                [ transaction_name | @tran_name_variable ] ]
                [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]

            ROLLBACK { TRAN | TRANSACTION }
                [ transaction_name | @tran_name_variable
                | savepoint_name | @savepoint_variable ]
            TRANTRANSACTIONr   NDELAYED_DURABILITYOFFFT)rk   
durability)_prev
token_typer   ROLLBACK_match_texts_parse_id_varr   r   Rollbackr  WITHr  _match_text_seqr  r  ON_match_r_parenCommit)r   rollbackrk   r'  r|   r|   r}   _parse_commit_or_rollback  s   



z%TSQL.Parser._parse_commit_or_rollbackexp.Transaction | exp.Commandc                 C  sJ   |  dr| jtj|  d}| ddr|d|   |S | | j	S )zApplies to SQL Server and Azure SQL Database
            BEGIN { TRAN | TRANSACTION }
            [ { transaction_name | @tran_name_variable }
            [ WITH MARK [ 'description' ] ]
            ]
            r"  r   r.  MARKmark)
r+  r   r   Transactionr,  r/  r   r  _parse_as_commandr(  )r   transactionr|   r|   r}   _parse_transaction   s   
zTSQL.Parser._parse_transactionexp.ReturnsPropertyc                   s*   | j d| jd}t  }|d| |S )NFr  r   r  )r,  RETURNS_TABLE_TOKENSr  _parse_returnsr   )r   r  returnsr  r|   r}   r?    s   
zTSQL.Parser._parse_returnsNstrictsafere   c                 C  sN   |   }| tj |g| | j}tj|}|	d| |	d| |S )NrB  rA  )
r  r  r   COMMAr  _parse_assignmentr   Convertfrom_arg_listr   )r   rA  rB  rk   ri   convertr|   r|   r}   _parse_convert  s   zTSQL.Parser._parse_convertrk   computed_columnc                   sT   t  j||d}|sd S | tjr|d|   | | jr(|d| j	j
 |S )N)rk   rI  defaultoutput)r  _parse_column_defr  r   r  r   _parse_disjunctionr+  COLUMN_DEFINITION_MODESr(  text)r   rk   rI  r  r|   r}   rL  !  s   zTSQL.Parser._parse_column_defr   t.Optional[TokenType]c                   sl   t  j|d}|tjkst|tjs| jtjddr|S | jtj	dds+| 
| j}nd }| jtj||dS )N)r   Fr  r  )r  _parse_user_defined_functionr   FUNCTIONrm   r   UserDefinedFunctionr  ALIASr.  r  _parse_function_parameterr   )r   r   rk   r   r  r|   r}   rQ  -  s   

z(TSQL.Parser._parse_user_defined_functiont.Optional[exp.Into]c                   sZ   t   }t|tjo|tj}t|tjr+|j}|j	dr+t
tj|dd |S )N	temporaryT)r  _parse_intorm   r   Intor   Tablerk   ri   r   r{  rv   r   )r   intor  table_identifierr  r|   r}   rX  @  s   
zTSQL.Parser._parse_intor  r   #t.Optional[t.Collection[TokenType]]c                   sX   |  tj}|o|  tj}t j||d}|r*|r"|dd |S |r*|dd |S )Nr=  globalTrW  )r  r   rO   r  r,  r   )r   r  r   is_temporary	is_globalrk   r  r|   r}   r,  L  s   zTSQL.Parser._parse_id_varexp.Create | exp.Commandc                   s   t   }t|tjrDt|jtjr|jjn|j}t|tjrD|jrD|jj	drD|j	ds9|
dtjg d |jd dt  |S )NrW  
propertiesr   r   )r  _parse_createrm   r   Createrk   SchemarZ  ri   r   r   
Propertiesr  TemporaryProperty)r   creater  r  r|   r}   rd  ]  s   
 zTSQL.Parser._parse_createc                   sV   | j }| dr&| | j | dddr!| tjr!| jddS | | t	 
 S )N	OBJECT_IDISNOTNULLT)exists)_indexr/  r  r  r  r   DROP_parse_drop_retreatr  	_parse_if)r   indexr  r|   r}   rs  j  s   


zTSQL.Parser._parse_ifexp.UniqueColumnConstraintc                 C  sD   |  dr| j| jj  | }n	| | jdd}| jtj	|dS )N)	CLUSTEREDNONCLUSTEREDFr  r   )
r+  CONSTRAINT_PARSERSr(  rO  r   _parse_schemar,  r   r   UniqueColumnConstraintr  r|   r|   r}   _parse_uniqueu  s   
zTSQL.Parser._parse_uniquet.Optional[exp.Partition]c                   s@     ddds	d S  fdd} jtj |d}   |S )Nr.  (
PARTITIONSc                    s8      }  dr   nd }|r jtj| |dS | S )NTOr  )_parse_bitwiser/  r   r   PartitionRange)lowhighr  r|   r}   parse_range  s   z1TSQL.Parser._parse_partition.<locals>.parse_rangerc  )r/  r   r   	Partitionr  r1  )r   r  	partitionr|   r  r}   _parse_partition}  s   zTSQL.Parser._parse_partitionexp.Declare | exp.Commandc                 C  sJ   | j }| t| j| j}|r| jr| | | | jS | j	t
j|dS )Nrc  )ro  
_try_parser   r  _parse_declareitem_currrr  r9  r(  r   r   Declare)r   rt  r   r|   r|   r}   r    s   

zTSQL.Parser._parse_declaret.Optional[exp.DeclareItem]c                 C  sf   |   }|sd S d }| tj | tjr|  }n|  }| tjr)|  }| j	t
j|||dS )N)rk   r   rJ  )r,  r  r   rT  TABLEry  r  r  r  r   r   DeclareItem)r   r   value	data_typer|   r|   r}   r    s   
zTSQL.Parser._parse_declareitemc                   sX   t   }|d ur*|jd}t|tjr*t|jtjr*|j}|	dtj
|jd |S )Ncollaterk   r   )r  _parse_alter_table_alterri   r   rm   r   r   rk   r   r   Varrq   )r   r   	collation
identifierr  r|   r}   r    s   
z$TSQL.Parser._parse_alter_table_alter)rf   r  )F)r  r  rf   r  r  )rf   r  )rf   r  )rf   r  )rf   r!  )rf   r5  )rf   r<  r   )rA  r  rB  re   rf   r  )T)rk   r  rI  r  rf   r  )r   rP  rf   r  )rf   rV  )TN)r  r  r   r]  rf   r  )rf   ra  )rf   ru  )rf   r|  )rf   r  )rf   r  )Wr  r  r  !SET_REQUIRES_ASSIGNMENT_DELIMITERLOG_DEFAULTS_TO_LNSTRING_ALIASESNO_PAREN_IF_COMMANDSr   ParserQUERY_MODIFIER_PARSERSr   r  rG   ID_VAR_TOKENSBEGINALIAS_TOKENSTABLE_ALIAS_TOKENSCOMMENT_TABLE_ALIAS_TOKENSUPDATE_ALIAS_TOKENS	FUNCTIONSr   r   r   r   r   DateDiffr   r   r   r   r   CurrentTimestamprF  r   r"  r   JSONExtractScalarr
  LengthLeftUuidRightr  RepeatCurrentSchemaCurrentUserCurrentTimestampLTZr  r1  
JOIN_HINTSdictfromkeystuplePROCEDURE_OPTIONSrN  r  r  r>  STATEMENT_PARSERSr  RANGE_PARSERSDCOLONNO_PAREN_FUNCTION_PARSERSCOLUMN_OPERATORSr  r  r  r  r  r  r   r4  r;  r?  rH  rL  rQ  rX  r,  rd  rs  r{  r  r  r  r  __classcell__r|   r|   r  r}   r  0  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dZdZdZdZdZdZdZdZdZdZdZdZejejejejejejejej ej!ej"h
Z#ej$ej%ej&hZ'i e(j)j*ej+j,j-dej+j,j.dej+j,j/d	ej+j,j0d
ej+j,j1dej+j,j2dej+j,j3dej+j,j4dej+j,j5dej+j,j6dej+j,j7dej+j,j8dej+j,j9dej+j,j:diZ*e*;ej+j,j< e*;ej+j,j= i e(j)j>i ej?e@ejAeBdejCdd ejDeBdejEeFdejGeFdejHeIJeKgejLeBdejMeBdejNeBdejOePejQeBdejReSejTeUejVeBdejWeXejYeXi ejZdd ej[eBdej\e]ej^dd ej_e`ejaebejceBd ejdeBd!ejeIJeIjeeIjfeIjgeIjhgejieBd"ejjd#d ej eIJeKgejkd$d ejld%d ejmd&d ejneoejpebejqerejseFddd'ejteFdejud(d ejvd)d ejweBd*iZ>e>;ejx i e(j)jyejzej{j|j}iZydd/d0Z~d fd3d4Zdd6d7Zdd9d:Zdd<d=Zdd@dAZddCdDZddFdGZd fdIdJZddLdMZddOdPZddTdUZd fdVdWZe(dXdYdd[d\Zdd^d_Zd fdadbZddddeZddgdhZddjdkZddmdnZddpdqZddsdtZd fdvdwZddydzZdd|d}ZdddZdddZdddZdddZd fddZd fddZdddZdddZdddZddć fddZdddZ  ZS )r   TFFETCHN
REPEATABLEr   BITry   NUMERICr  INTEGERr  zVARCHAR(MAX)r  r  r  r  r  
STRING_AGGc                  G     dS )NIDENTITYr|   _r|   r|   r}   r        zTSQL.Generator.<lambda>CHARr  r  r  r  r   IIFc                 C  s   |  d|jS )Nr  )r   rk   r   er|   r|   r}   r        LOGc                 C     |  dtjd|jS )Nr   r   r   r   ro   rp   rk   r  r|   r|   r}   r        r  r  STDEVc                 C  s   t | |dddS )Nr  T)	func_namesupports_position)r   r  r|   r|   r}   r    s    c                 C  r  )Nr   r   r  r  r|   r|   r}   r    r  c              
   C  s(   |  dtjd|jdd |jS )Nr   SHA2_r   r   )r   r   ro   rp   ri   r   rk   r  r|   r|   r}   r    s     c                 C  r  )Nr   r|   r  r|   r|   r}   r  !  r  )rv   c                 C  s   |  d|j|jS )Nr  )r   r   rk   r  r|   r|   r}   r  '  s    c                  G  r  )NzNEWID()r|   r  r|   r|   r}   r  (  r  DATEFROMPARTSrhsr   
scope_namerf   c                 C  s   | d| S )Nz::r|   )r   r  r  r|   r|   r}   scope_resolution3  r  zTSQL.Generator.scope_resolutionr   
exp.Selectc                   s   |j d}|j d}t|tjr$|s$tjtjdd}|d| |rK|j ds:|j	t
t  dd t|tjrK|tjd|jd	 t |S )
Nlimitoffsetr   )r   r   Fr  FIRST)	directioncount)ri   r   rm   r   FetchOffsetro   r   r   order_byselectnullsubqueryLimitreplacer   r  
select_sql)r   r   r  r  r  r|   r}   r  6  s   zTSQL.Generator.select_sqlexp.Convertc                 C  s0   |j drdnd}| ||j|j|j dS )NrB  TRY_CONVERTCONVERTstyle)ri   r   r   rk   r   )r   r   rq   r|   r|   r}   convert_sqlN  s   zTSQL.Generator.convert_sqlexp.QueryOptionc                 C  sB   |  |d}|  |d}|r|tv rdnd}| d| | S |S )Nrk   r   z= r    )r   OPTIONS_THAT_REQUIRE_EQUAL)r   r   r  r  optional_equal_signr|   r|   r}   queryoption_sqlT  s   zTSQL.Generator.queryoption_sqlexp.Lateralc                 C  s2   |j d}|du rdS |du rdS | d dS )Ncross_applyTzCROSS APPLYFzOUTER APPLYz LATERAL clause is not supported.LATERAL)ri   r   r   )r   r   r  r|   r|   r}   
lateral_op\  s   
zTSQL.Generator.lateral_opr   exp.SplitPartc              	   C  s   |j }t|jd}|jd}|jd}tdd |||fD r0|r*|jdks0|r0|dkr7| d dS | d	|t	j
|d
 |  S )Nr  r  r  c                 s  r  r   r  r  r|   r|   r}   r   n  r  z/TSQL.Generator.splitpart_sql.<locals>.<genexpr>r   zSSPLIT_PART can be transpiled to PARSENAME only for '.' delimiter and literal valuesr   r  r3   )rk   r   rq   r  ri   r   r  r   r   r   ro   r   r   )r   r   rk   r  r  r  r|   r|   r}   splitpart_sqlg  s&   
zTSQL.Generator.splitpart_sqlr   c                 C  s|   |j d}|d ur|  | d |j dd u r%|dtjd |j dd u r7|dtjd td| |S )Nnanoz9Specifying nanoseconds is not supported in TIMEFROMPARTS.r   r   r   r  	ri   r   r   r   r   r   ro   r   r   )r   r   r  r|   r|   r}   timefromparts_sql|  s   
z TSQL.Generator.timefromparts_sqlr   c                 C  s~   |j d}|d ur|  | d |j d}|d ur&|  | d |j dd u r8|dtjd td| |S )Nr+  z0Time zone is not supported in DATETIMEFROMPARTS.r  z=Specifying nanoseconds is not supported in DATETIMEFROMPARTS.r   r   r  r  )r   r   r+  r  r|   r|   r}   timestampfromparts_sql  s   

z%TSQL.Generator.timestampfromparts_sqlexp.SetItemc                   sJ   |j }t|tjrt|jtjs| |j d| |j S t 	|S )Nr  )
rk   rm   r   r  left	Parameterr   rightr  setitem_sqlr   r   rk   r  r|   r}   r    s   zTSQL.Generator.setitem_sqlexp.Booleanc                 C  sB   t |jtv st|tjtjtjr|jrdS dS |jrdS dS )NrK  rJ  z(1 = 1)z(1 = 0))	typeparent	BIT_TYPESrm   find_ancestorr   ValuesSelectrk   r   r   r|   r|   r}   boolean_sql  s
   zTSQL.Generator.boolean_sqlexp.Isc                 C  s&   t |jtjr| |dS | |dS )N=rk  )rm   r   r   Booleanbinaryr  r|   r|   r}   is_sql  s   zTSQL.Generator.is_sql
exp.Create	locationst.DefaultDictc                 C  sn   |  |d}|jd}|d d dkr5tdd |r|jng D r5|dr0d|dd   nd| }|S )	Nrk   rb  r3   r  c                 s  r  r   rm   r   rh  )r   propr|   r|   r}   r     s
    

z0TSQL.Generator.createable_sql.<locals>.<genexpr>r|  z[#)r   ri   r   anyr   
startswith)r   r   r  r   rb  r|   r|   r}   createable_sql  s   &zTSQL.Generator.createable_sqlc                   sN  |j }|jdd }|tj}|r|j}n|j}|dkr6|jdd  |j	d}|r6|r6|d|  |tj
}|dkr|rt|tjrL| }|j	dpUt }tdd |jD }	td	tj|d
dd}
|
dtj||	d |r|
jddd | |
}nt |}|r| tj|rt|nd}| ||}| tj|}|dkrd| d| dS |dkr|sJ ttd|j |j!rtd|j!nd |j"rtd|j"nd }d| d| dS |dkr| tj|j#d}d| d| d| dS n|j	dr!|$d d!d"}| ||S )#Nrn  VIEWcatalogwithr  rb  c                 s  r  r   r  )r   pr|   r|   r}   r     r  z,TSQL.Generator.create_sql.<locals>.<genexpr>*tempTr  r[  )rk   rW  r   Fr  r   SCHEMAzMIF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = z) EXEC(r   
TABLE_NAMETABLE_SCHEMATABLE_CATALOGz=IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE r  rk   zEIF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = object_id(z) AND name = r  zCREATE OR REPLACE zCREATE OR ALTER r3   )%r   ri   r   r   r   LikePropertyrk   r   r   r   rZ  rm   UNWRAPPED_QUERIESr  rg  r  r   r  from_r  rY  r  r   r  
create_sqlro   rp   
table_nameprepend_ctesand_r   eqrq   dbr  rO  r  )r   r   r   rn  like_propertyctas_expressionwith_r  rb  is_tempselect_intor   r  sql_with_ctessql_literalwherert  r  r|   r}   r"    sX    
zTSQL.Generator.create_sqlunloggedr   exp.Intoc                 C  sT   |j dr|tj}|rt|jtjr|jdd | 	d d| 
|d S )NrW  TINTOr  rk   )ri   r   r   r   rZ  rm   rk   r   r   segr   r   r   r  r|   r|   r}   into_sql  s
   zTSQL.Generator.into_sql	exp.Countc                 C  "   |j drdnd}t|| |S )Nr  r  r  ri   r   r   r   r   r  r|   r|   r}   	count_sql     zTSQL.Generator.count_sql
exp.Offsetc                   s   t  | dS )Nz ROWS)r  
offset_sqlr  r  r|   r}   r=    s   zTSQL.Generator.offset_sqlexp.Versionc           	   	   C  s   |j dkrdn|j }d| }|j}|d}|dv r=|j}|dkr$dnd}| t|d	 d
| d
| t|d }n| |}|rId
| nd}| d
| | S )Nr  SYSTEM_TIMEzFOR r   )FROMBETWEENr@  r  ANDr   r  r3   r   )rq   r   rO  r   r   r   )	r   r   rq   rk   exprr   ri   sepexpr_sqlr|   r|   r}   version_sql  s   

.
zTSQL.Generator.version_sqlr<  c                 C  s4   |j d}|r| dnd}d| | |d S )Nr  r  r   zRETURNS rk   )ri   r   r   r4  r|   r|   r}   returnsproperty_sql  s   z"TSQL.Generator.returnsproperty_sqlexp.Returningc                 C  sF   |  |d}|r| d| nd}| d d| j|dd | S )Nr[  zINTO r   r  r  Tflat)r   r3  r   )r   r   r[  r|   r|   r}   returning_sql  s   "zTSQL.Generator.returning_sqlexp.Transactionc                 C  sJ   |  |d}|rd| nd}|  |d}|rd| nd}d| | S )Nrk   r  r   r7  z WITH MARK zBEGIN TRANSACTIONr   )r   r   rk   r7  r|   r|   r}   transaction_sql!  s
   zTSQL.Generator.transaction_sql
exp.Commitc                 C  sX   |  |d}|rd| nd}|jd}|d ur#d|rdnd dnd}d	| | S )
Nrk   r  r   r'  z WITH (DELAYED_DURABILITY = r0  r&  r   zCOMMIT TRANSACTION)r   ri   r   )r   r   rk   r'  r|   r|   r}   
commit_sql(  s   zTSQL.Generator.commit_sqlexp.Rollbackc                 C  s(   |  |d}|rd| nd}d| S )Nrk   r  r   zROLLBACK TRANSACTIONrM  r  r|   r|   r}   rollback_sql3  s   
zTSQL.Generator.rollback_sqlexp.Identifierc                   s@   t  |}|jdrd| }|S |jdrd| }|S )Nr^  z##rW  r  )r  identifier_sqlri   r   )r   r   r  r  r|   r}   rT  8  s   

zTSQL.Generator.identifier_sqlexp.Constraintc                 C  s,   |  |d}| j|ddd}d| d| S )Nrk   Tr  )rJ  rD  zCONSTRAINT )r   r   )r   r   rk   r   r|   r|   r}   constraint_sqlB  s   zTSQL.Generator.constraint_sql
exp.Lengthc                 C     |  |dS )Nr  _uncast_textr  r|   r|   r}   
length_sqlG     zTSQL.Generator.length_sql	exp.Rightc                 C  rX  )Nr  rY  r  r|   r|   r}   	right_sqlJ  r\  zTSQL.Generator.right_sqlexp.Leftc                 C  rX  )Nr  rY  r  r|   r|   r}   left_sqlM  r\  zTSQL.Generator.left_sqlr   rq   c                 C  s^   |j }t|tjr|tjjjr| |d}n| |}| |d}| 	|||r,|S d S )Nrk   r   )
rk   rm   r   r  is_typerw   rx   r  r   r   )r   r   rq   rk   this_sqlexpression_sqlr|   r|   r}   rZ  P  s   
zTSQL.Generator._uncast_textexp.Partitionc                 C  s   d| j |dd dS )NzWITH (PARTITIONS(TrI  z))rc  r  r|   r|   r}   partition_sqlY  s   zTSQL.Generator.partition_sql	exp.Alterc                   sL   t |jdpg d}t|tjr d| |j d|jj dS t	 
|S )Nactionsr   zEXEC sp_rename 'z', 'r  )r   ri   r   rm   r   AlterRenamer   rk   rq   r  	alter_sql)r   r   actionr  r|   r}   ri  \  s   zTSQL.Generator.alter_sqlexp.Dropc                   s(   |j d dkr|jdd  t |S )Nr   r  r  )ri   rk   r   r  drop_sqlr  r  r|   r}   rl  b  s   zTSQL.Generator.drop_sqlc                 C  s&   | j |dd}|rd| | S dS )Nr  )keyz OPTIONr   )r   wrap)r   r   r  r|   r|   r}   options_modifierg  s   zTSQL.Generator.options_modifier	exp.DPipec                 C  s   |  tdd | S )Nc                 S  s   t j| |dS r	  )r   Add)xr4  r|   r|   r}   r  m  r  z*TSQL.Generator.dpipe_sql.<locals>.<lambda>)r   r   flattenr  r|   r|   r}   	dpipe_sqlk  s   zTSQL.Generator.dpipe_sqlexp.IsAsciic                 C  s   d|  |j dS )NzP(PATINDEX(CONVERT(VARCHAR(MAX), 0x255b5e002d7f5d25) COLLATE Latin1_General_BIN, z) = 0))r   rk   r  r|   r|   r}   isascii_sqlp  s   zTSQL.Generator.isascii_sqlr  exp.ColumnDefrD  c                   sZ   t  ||}| |d}|rd| nd}| |d}|r#d| nd}| | | S )NrJ  z = r   rK  r  )r  columndef_sqlr   )r   r   rD  rk   rJ  rK  r  r|   r}   rx  s  s   zTSQL.Generator.columndef_sqlexp.Coalescec                 C  r7  )Nr  r&  COALESCEr8  r9  r|   r|   r}   coalesce_sql{  r;  zTSQL.Generator.coalesce_sql)r  r   r  r   rf   r   )r   r  rf   r   )r   r  rf   r   )r   r  rf   r   )r   r  rf   r   )r   r   r   r  rf   r   )r   r   rf   r   )r   r   rf   r   )r   r  rf   r   )r   r  rf   r   )r   r  rf   r   )r   r  r  r  rf   r   )r   r  rf   r   )r   r1  rf   r   )r   r6  rf   r   )r   r<  rf   r   )r   r>  rf   r   )r   r<  rf   r   )r   rH  rf   r   )r   rL  rf   r   )r   rO  rf   r   )r   rQ  rf   r   )r   rS  rf   r   )r   rU  rf   r   )r   rW  rf   r   )r   r]  rf   r   )r   r_  rf   r   )r   r   rq   r   rf   r   )r   rd  rf   r   )r   rf  rf   r   )r   rk  rf   r   )r   r   rf   r   )r   rp  rf   r   )r   ru  rf   r   )r  )r   rw  rD  r   rf   r   )r   ry  rf   r   )r  r  r  LIMIT_IS_TOPQUERY_HINTSRETURNING_ENDNVL2_SUPPORTED"ALTER_TABLE_INCLUDE_COLUMN_KEYWORDLIMIT_FETCHCOMPUTED_COLUMN_WITH_TYPECTE_RECURSIVE_KEYWORD_REQUIREDENSURE_BOOLSNULL_ORDERING_SUPPORTEDSUPPORTS_SINGLE_ARG_CONCATTABLESAMPLE_SEED_KEYWORDSUPPORTS_SELECT_INTO!JSON_PATH_BRACKETED_KEY_SUPPORTEDSUPPORTS_TO_NUMBERSET_OP_MODIFIERSCOPY_PARAMS_EQ_REQUIREDPARSE_JSON_NAME#EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSEALTER_SET_WRAPPEDALTER_SET_TYPEr   re  DeleteInsert	IntersectExceptMerger  r   UnionUpdateEXPRESSIONS_WITHOUT_NESTED_CTESJSONPathKeyJSONPathRootJSONPathSubscriptSUPPORTED_JSON_PATH_PARTSr   	GeneratorTYPE_MAPPINGrw   rx   BOOLEANry   DECIMALDOUBLEINTr  r  r  TIMESTAMPNTZr  r  r  r  r  r   NCHARNVARCHAR
TRANSFORMSAnyValuer   ArrayToStringr   AutoIncrementColumnConstraintChrr   r   r  r   r	   
preprocessr   CurrentDater  r  DateStrToDater   Extract#GeneratedAsIdentityColumnConstraintr   GroupConcatr   Ifr!  r)  r  r   LnMaxr   r   Minr   r   r   r  r  eliminate_distinct_oneliminate_semi_and_anti_joinseliminate_qualify.unnest_generate_date_array_using_recursive_cteStddevr  r   r   rh  r   r.  r   Trimr   	TsOrDsAdd
TsOrDsDiffr0  r  DateFromPartsReturnsPropertyPROPERTIES_LOCATIONVolatilePropertyrg  LocationUNSUPPORTEDr  r  r  r  r  r  r  r  r  r  r  r  r"  unsupported_argsr5  r:  r=  rF  rG  rK  rN  rP  rR  rT  rV  r[  r^  r`  rZ  re  ri  rl  ro  rt  rv  rx  r{  r  r|   r|   r  r}   r    sp   



















	










#
$'
(
)
,-./



7










=
	












	


r  N)r  r  r  SUPPORTS_SEMI_ANTI_JOINLOG_BASE_FIRSTTYPED_DIVISIONCONCAT_COALESCEr   CASE_INSENSITIVENORMALIZATION_STRATEGY(ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMNTIME_FORMATrt   CONVERT_FORMAT_MAPPINGr   r   r  r   r  r   r  r|   r|   r|   r}   rs     s   	
 !"#*	
 !"#*	
(   	rs   r   )rb   rc   rd   re   rf   rg   )ri   rj   rf   r   )ri   rj   rf   r   )ri   rj   rf   r   )r   r   r   r   rf   r   )r   r   r   r   rf   r   )rb   rc   r   r   rf   rg   )r   r   rf   r   )ri   rj   rf   r   )ri   rj   rf   r   )r  r  rf   r  )ri   rj   rf   r  )ri   rj   r  r
   rf   r  )r   r   r   r#  rf   r   )r   r   r   r*  )ri   rj   rf   r/  )O
__future__r   r   retypingr{  	functoolsr   r   sqlglotr   r   r   r   r	   sqlglot.dialects.dialectr
   r   r   r   r   r   r   r   r   r   r   r   r   sqlglot.helperr   sqlglot.parserr   sqlglot.timer   sqlglot.tokensr   TYPE_CHECKINGsqlglot._typingr   ru   r   compiler   r   r   r   r  NEQIsInr  Aliasr  r  r  r  rX   __annotations__ra   r  r   r   r   r   r   r   r   r   r   r   r  r
  r  r"  r)  r.  r1  rs   r|   r|   r|   r}   <module>   s    <

"	






!





	



