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mZmZmZmZmZ d dlmZ d dlmZ dddZG dd deZdS )    )annotationsN)exp	generatorparsertokens
transforms)Dialectmax_or_greatestmin_or_leastrename_funcstrposition_sqlto_number_with_nls_param)seq_get)	TokenTypekindt.Literal['+', '-']return@t.Callable[[Teradata.Generator, exp.DateAdd | exp.DateSub], str]c                   s   d	 fdd}|S )
NselfTeradata.Generator
expressionexp.DateAdd | exp.DateSubr   strc              
     s   |  |d}|jd}| |j}t|tjs| d t|tj	r2ddd}tj
|j }nddd}|dd | d	|   d	|  tj||d
 S )NthisunitzCannot add non literal-+)r   r   	is_stringT r   r   )sqlargsget_simplify_unless_literalr   
isinstancer   LiteralunsupportedNegstringr   to_pysetInterval)r   r   r   r   value
kind_to_opr    R/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/teradata.pyfunc   s   


(z_date_add_sql.<locals>.func)r   r   r   r   r   r   r/   )r   r1   r/   r.   r0   _date_add_sql   s   r2   c                   @  s   e Zd ZdZdZi dddddddd	d
ddddddddddd	ddddddddddddddd d!d"d#d#d#d$d#d$d%	ZG d&d' d'ejZG d(d) d)ej	Z	G d*d+ d+e
jZd,S )-TeradataFTYYz%yY4z%YYYYYM4z%BM3z%bMz%-MMIz%MMMz%mMMMMMMMDz%-dDDz%dD3z%jDDDHz%-HHHz%HHH24z%-Sz%Sz%fz%az%A)	SSSSSSSSSEEEE3E4EEEEEEEc                   @  s   e Zd Zg 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dZed i ejjZed dS )zTeradata.Tokenizer))zX'')zx'rN   )0x **z^=BYTEINTCOLLECTDELEQGEGTHELPINSLELTMINUSMODNEzNOT=SAMPLE)SELST_GEOMETRYTOPUPDz/*+%N)__name__
__module____qualname__HEX_STRINGSr   	TokenizerKEYWORDSr   DSTARNEQSMALLINTCOMMANDDELETErU   GTErW   INSERTLTEr[   EXCEPTr]   TABLE_SAMPLESELECTGEOMETRYrb   UPDATEpopSINGLE_TOKENSr/   r/   r/   r0   ri   J   s^    	

ri   c                      s   e Zd ZdZdZh dZh ejjZe	e
j i ejje
jdd e
jdd iZi ejjejjd dd d	d d
Zi ejjejjdd dZe
jejiZd&ddZd'ddZdd Zd( fddZ				d)d* fd!d"Zd+ fd$d%Z  ZS ),zTeradata.ParserTF>    GRAPHIC_TO_LATINLATIN_TO_GRAPHICLATIN_TO_UNICODEUNICODE_TO_LATINLOCALE_TO_UNICODEUNICODE_TO_LOCALEGRAPHIC_TO_UNICODEKANJISJIS_TO_LATINLATIN_TO_KANJISJISUNICODE_TO_GRAPHICGRAPHIC_TO_KANJISJISKANJISJIS_TO_GRAPHICKANJISJIS_TO_UNICODEUNICODE_TO_KANJISJISKANJI1_SBC_TO_UNICODEUNICODE_TO_KANJI1_SBCUNICODE_TO_UNICODE_NFCUNICODE_TO_UNICODE_NFDUNICODE_TO_UNICODE_NFKCUNICODE_TO_UNICODE_NFKDKANJI1_KanjiEUC_TO_UNICODEUNICODE_TO_KANJI1_KanjiEUCGRAPHIC_TO_UNICODE_PadSpaceKANJI1_KANJISJIS_TO_UNICODEUNICODE_TO_KANJI1_KANJISJISUNICODE_TO_UNICODE_FoldSpaceUNICODE_TO_UNICODE_FullwidthUNICODE_TO_UNICODE_HalfwidthKANJI1_KanjiEBCDIC_TO_UNICODEUNICODE_TO_GRAPHIC_PadGraphicUNICODE_TO_GRAPHIC_VarGraphicUNICODE_TO_KANJI1_KanjiEBCDICc                 C  s   | j tj| jdddS )NF)schema)r   )r   r   Use_parse_tabler   r/   r/   r0   <lambda>   s    zTeradata.Parser.<lambda>c                 C     |   S N)_parse_creater   r/   r/   r0   r          TRY_CASTc                 C  r   r   )_parse_rangenr   r/   r/   r0   r      r   c                 C  r   r   )_parse_translater   r/   r/   r0   r      r   )TRYCASTRANGE_N	TRANSLATEc                 C  s   t jt| dt| ddS )Nr      )lowerupper)r   Randr   )r!   r/   r/   r0   r      s    )CARDINALITYRANDOMr   exp.TranslateCharactersc                 C  sD   |   }| tj | | j | jtj|| j	j
 | dddS )NWITHERROR)r   r   
with_error)_parse_assignment_matchr   USING_match_textsCHARSET_TRANSLATORSr   r   TranslateCharacters_prevtextr   _match_text_seqr   r   r/   r/   r0   r      s   

z Teradata.Parser._parse_translate
exp.Updatec                 C  sH   | j tjfi | j| jd| jdd| tjo| 	| j
|  dS )N)alias_tokensT)joins)r   fromexpressionswhere)r   r   Updater   UPDATE_ALIAS_TOKENS_parse_fromr   r   SET
_parse_csv_parse_equality_parse_wherer   r/   r/   r0   _parse_update   s   

zTeradata.Parser._parse_updatec                 C  sF   |   }| tj | | j}| do|  }| jtj	|||dS )NEACH)r   r   each)
_parse_id_varr   r   BETWEENr   r   r   r   r   RangeN)r   r   r   r   r/   r/   r0   r      s
   zTeradata.Parser._parse_rangenexp.IndexParametersc                   s6   t   }|jdr|dd  | | jd  |S )Non   )super_parse_index_paramsr!   r"   r*   _retreat_indexr   	__class__r/   r0   r      s
   
z#Teradata.Parser._parse_index_paramsN	functions#t.Optional[t.Dict[str, t.Callable]]	anonymousbooloptional_parens	any_tokent.Optional[exp.Expression]c                   sX   | j r"| j jtjkr"| jd t| jk r"| j| jd  jtjkr"d S t j	||||dS )Nr   )r   r   r   r   )
_next
token_typer   L_PARENr   len_tokensFORMATr   _parse_function)r   r   r   r   r   r   r/   r0   r      s   zTeradata.Parser._parse_functionr   c                   sB   t  |}| tjtjr|  }|   | jt	j
||d}|S )N)r   format)r   _parse_column_ops_match_pairr   r   r   _parse_string_match_r_parenr   r   FormatPhrase)r   r   
fmt_stringr   r/   r0   r      s   z!Teradata.Parser._parse_column_ops)r   r   )r   r   )r   r   )NFTF)
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   )re   rf   rg   TABLESAMPLE_CSVVALUES_FOLLOWED_BY_PARENr   r   ParserFUNC_TOKENSremover   REPLACESTATEMENT_PARSERSDATABASEFUNCTION_PARSERS	FUNCTIONSr   	ArraySizefrom_arg_listrk   PowEXPONENTr   r   r   r   r   r   __classcell__r/   r/   r   r0   r   n   sJ    #




	
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i ejjejjjdejjjdejjjdiZi ejjejejjjejejjjejejjjiZi ejjeje dej!e d	ej"e#ej$e%ej&d
d ej'dd ej(e)*e)j+e)j,gej-dd ej.dd ej/dd ej0e1ej2dd ej3e4dej5e4dej6dd iZdAddZ7dBdC fddZ8dDd!d"Z9	dBdEd%d&Z:dFd(d)Z;dGd+d,Z<dHd.d/Z=dI fd1d2Z>dJd4d5Z?dK fd9d:Z@dL fd<d=ZAdM fd?d@ZB  ZCS )Nr   TFr_   r   ra   zDOUBLE PRECISION	TIMESTAMPMAX_BYMIN_BYc                 C     |  |dS )NrQ   binaryr   er/   r/   r0   r   #  s    zTeradata.Generator.<lambda>c                 C  s   |  d|jd|jdS )Nr   r   r   )r1   r!   r"   r  r/   r/   r0   r   $  s    c                 C  s   t | |ddddS )NINSTRT)	func_namesupports_positionsupports_occurrence)r   r  r/   r/   r0   r   (  s   
c                 C  s    d|  |d d| | dS )NzCAST(r   z AS DATE FORMAT ))r    format_timer  r/   r/   r0   r   -  s    c                 C  s
   |  |S r   )function_fallback_sqlr  r/   r/   r0   r   /  s   
 c                 C     d|  |d S )Nz	DATABASE r   r    r  r/   r/   r0   r   1  s    r   r   c                 C  s   |  tjd|jdS )NQUARTER)r   r   )r    r   Extractr   r  r/   r/   r0   r   4  s    r   exp.CurrentTimestampr   r   c                 C  s&   |j rdnd\}}| jd|j ||dS )N)(r	  )rP   rP   CURRENT_TIMESTAMP)prefixsuffix)r   r1   )r   r   r  r  r/   r/   r0   currenttimestamp_sql7  s   z'Teradata.Generator.currenttimestamp_sqlNexp.Castsafe_prefixt.Optional[str]c                   s8   |j jtjjjkr|jdr|j   t	 j
||dS )Nr   r  )tor   r   DataTypeTypeUNKNOWNr!   r"   rx   r   cast_sql)r   r   r  r   r/   r0   r  ;  s   
zTeradata.Generator.cast_sqlexp.TryCastc                 C  s   | j |ddS )NTRYr  )r  r   r   r/   r/   r0   trycast_sqlB  s   zTeradata.Generator.trycast_sqlexp.TableSampletablesample_keywordc                 C  s   |  |d d| | S )Nr   z SAMPLE r    r   )r   r   r$  r/   r/   r0   tablesample_sqlE  s   z"Teradata.Generator.tablesample_sqlexp.PartitionedByPropertyc                 C  r  )NzPARTITION BY r   r  r!  r/   r/   r0   partitionedbyproperty_sqlL  s   z,Teradata.Generator.partitionedbyproperty_sqlr   c                 C  sV   |  |d}|  |d}| j|dd}|  |d}d| | d| | }| ||S )Nr   r   T)flatr   zUPDATE z SET )r    r   prepend_ctes)r   r   r   from_sqlset_sql	where_sqlr    r/   r/   r0   
update_sqlQ  s   zTeradata.Generator.update_sqlexp.Modc                 C  r   )Nr]   r  r!  r/   r/   r0   mod_sqlY  s   zTeradata.Generator.mod_sqlexp.DataTypec                   s*   t  |}|jd}|rd| S |S )Nr  z
SYSUDTLIB.)r   datatype_sqlr!   r"   )r   r   type_sql
prefix_sqlr   r/   r0   r2  \  s   zTeradata.Generator.datatype_sql
exp.RangeNc                 C  sJ   |  |d}| |}|  |d}|rd| nd}d| d| | dS )Nr   r   z EACH rP   zRANGE_N(z	 BETWEEN r	  r%  )r   r   r   expressions_sqleach_sqlr/   r/   r0   
rangen_sqla  s
   
zTeradata.Generator.rangen_sql
exp.Create	locationst.DefaultDictc                   s   |  |d }|dkr>|tjjjr>|  |jd}| jtj|tjjj dddd}| 	|j}| | | 
  | S t ||S )Nr   TABLEr   )r   F,)wrappedr  )r    r   r"   r   
PropertiesLocation	POST_NAMEr   
propertiesschema_columns_sqlsepr   createable_sql)r   r   r:  r   	this_namethis_propertiesthis_schemar   r/   r0   rE  i  s   z!Teradata.Generator.createable_sqlexp.Extractc                   sT   |  |d}| dkrt |S td|jtjd}|  t	|tj
jjS )Nr   r  to_charQ)r    r   r   extract_sqlr   r1   r   r%   r(   castr  r  INT)r   r   r   rJ  r   r/   r0   rL  w  s
   zTeradata.Generator.extract_sqlexp.Intervalc              
     sh   d}| d}|drd}n|drd}|r.d| dt tj|jtd	d
 dS t |S )Nr   r   WEEK   r  Z   r  z * DAYr   r	  )r   
startswithr   interval_sqlr   r+   r   var)r   r   
multiplierr   r   r/   r0   rU    s   


,zTeradata.Generator.interval_sql)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   r   )r   r1  r   r   )r   r5  r   r   )r   r9  r:  r;  r   r   )r   rI  r   r   )r   rO  r   r   )Dre   rf   rg   LIMIT_IS_TOP
JOIN_HINTSTABLE_HINTSQUERY_HINTSTABLESAMPLE_KEYWORDSLAST_DAY_SUPPORTS_DATE_PARTCAN_IMPLEMENT_ARRAY_ANYTZ_TO_WITH_TIME_ZONEARRAY_SIZE_NAMEr   	GeneratorTYPE_MAPPINGr   r  r  rv   DOUBLETIMESTAMPTZPROPERTIES_LOCATIONOnCommitPropertyr?  r@  
POST_INDEXPartitionedByPropertyPOST_EXPRESSIONStabilityPropertyPOST_CREATE
TRANSFORMSArgMaxr   ArgMinMaxr	   Minr
   r   r   Selectr   
preprocesseliminate_distinct_oneliminate_semi_and_anti_joinsStrPosition	StrToDateToCharToNumberr   r   DateAddr2   DateSubQuarterr  r  r"  r&  r(  r.  r0  r2  r8  rE  rL  rU  r   r/   r/   r   r0   ra    st    




















ra  N)re   rf   rg   SUPPORTS_SEMI_ANTI_JOINTYPED_DIVISIONTIME_MAPPINGr   ri   r   r   r   ra  r/   r/   r/   r0   r3   )   sh    	
$ r3   )r   r   r   r   )
__future__r   typingtsqlglotr   r   r   r   r   sqlglot.dialects.dialectr   r	   r
   r   r   r   sqlglot.helperr   sqlglot.tokensr   r2   r3   r/   r/   r/   r0   <module>   s     
