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mZmZmZ d dlmZ d dlmZmZ d dlmZ ejrKd dlmZ dddZdddZG dd deZ dS )    )annotationsN)exp	generatorparsertokens
transforms)	DialectNormalizationStrategybuild_timetostr_or_tocharbuild_formatted_timeno_ilike_sqlrename_funcstrposition_sqlto_number_with_nls_paramtrim_sql)seq_get)OPTIONS_TYPEbuild_coalesce)	TokenType)EselfOracle.Generator
expressionexp.Trimreturnstrc                 C  s0   |j d}|r| dv r| |S t| |S )Nposition)LEADINGTRAILING)argsgetupperr   )r   r   r    r"   P/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/oracle.py	_trim_sql   s   

r$   r   t.Listexp.StrToTime | exp.Anonymousc                 C  s*   t | dkrtjd| dS ttjd| S )N   TO_TIMESTAMPthisexpressionsoracle)lenr   	Anonymousr   	StrToTimer   r"   r"   r#   _build_to_timestamp"   s   r1   c                   @  s   e Zd ZdZdZdZdZdZdZe	j
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'ZG d(d) d)ejZG d*d+ d+ejZG d,d- d-ejZd.S )/OracleTnulls_are_largeFAMz%pzA.M.PMzP.M.Dz%uDAYz%ADDz%dDDDz%jDYz%aHHz%IHH12HH24z%HIWz%VMIz%MMMz%mMONz%bMONTHz%Bz%Sz%Wz%yz%Yz%f)SSWWYYYYYYFF6c                   @  s~   e Zd Zh dZdd eeje ej	j
D ZdZi ej	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dS )zOracle.Tokenizer>   #$@c                 C  s"   g | ]}d D ]}|| |fqqS ))Uur"   ).0qprefixr"   r"   r#   
<listcomp>R   s    
zOracle.Tokenizer.<listcomp>F)z(+)BINARY_DOUBLEBINARY_FLOATBULK COLLECT INTOCOLUMNSMATCH_RECOGNIZEMINUS	NVARCHAR2zORDER SIBLINGS BYSAMPLESTARTTOPVARCHAR2N)__name__
__module____qualname__VAR_SINGLE_TOKENStcastListr   r   	TokenizerQUOTESUNICODE_STRINGSNESTED_COMMENTSKEYWORDSr   JOIN_MARKERDOUBLEFLOATBULK_COLLECT_INTOCOLUMNrU   EXCEPTNVARCHARORDER_SIBLINGS_BYTABLE_SAMPLEBEGINrZ   VARCHARr"   r"   r"   r#   rc   O   s.    rc   c                	   @  sx  e Zd ZU ejejhZdZi ej	j
ejjdd dd eeeejddd dZ
i ej	jdd d	d d
d dd dZi ej	jdd dd dd dZded< ed i ej	jdd dd dd dZi ej	jejdd ejdd iZejjjdd iZejejhZ ddiZ!ded< d7d!d"Z"d8d&d'Z#d7d(d)Z$d*d+ Z%d7d,d-Z&d9d/d0Z'd:d2d3Z(d4d5 Z)d6S );zOracle.ParserFc                 C  s   t | ddS )NT)is_nvl)r   r0   r"   r"   r#   <lambda>r       zOracle.Parser.<lambda>c                 C  s   t jt| dt jddS )Nr      r*   r   )r   Powr   Literalnumberr0   r"   r"   r#   rt   s   s    r,   c                 C  s(   t jt| dpt jdt| dddS )Nr'   r8   r   F)unitr*   unabbreviate)r   	DateTruncr   ry   stringr0   r"   r"   r#   rt   w   s
    )CONVERTNVLSQUARETO_CHARr(   TO_DATETRUNCc                 C     |   S N)_parse_next_value_forr   r"   r"   r#   rt          c                 C  s   | j tj|  dS Nr*   )r   r   Prior_parse_bitwiser   r"   r"   r#   rt          c                 C  s   | j tjddS )NT)sysdate)r   r   CurrentTimestampr   r"   r"   r#   rt          c                 C  r   r   )_parse_dbms_randomr   r"   r"   r#   rt      r   )NEXTPRIORSYSDATEDBMS_RANDOMc                   s    j tj  fdddS )Nc                            S r   )_parse_format_jsonr   r"   r   r"   r#   rt          z(Oracle.Parser.<lambda>.<locals>.<lambda>)r+   )_parse_json_arrayr   	JSONArray
_parse_csvr   r"   r   r#   rt      s    c                 C  s    | j tj| |  |  dS )N)r*   order)r   r   JSONArrayAggr   r   _parse_orderr   r"   r"   r#   rt      s
    c                 C  r   r   )_parse_json_existsr   r"   r"   r#   rt      r   )
JSON_ARRAYJSON_ARRAYAGGJSON_EXISTSzt.Dict[str, t.Callable]FUNCTION_PARSERSr   c                 C     |  do| jtjddS )N	TEMPORARYGLOBALr   _match_text_seqr   r   TemporaryPropertyr   r"   r"   r#   rt         
 c                 C  r   )Nr   PRIVATEr   r   r   r"   r"   r#   rt      r   c                 C  s   |  tjS r   )r   r   ForcePropertyr   r"   r"   r#   rt      ru   )r   r   FORCEc                 C  s   d|   fS )Nr   )r   r   r"   r"   r#   rt      ru   c                 C  s   d|   gfS )Noptions)_parse_query_restrictionsr   r"   r"   r#   rt      r   c                 C  s   | j tj|dS r   )r   r   DateStrToDate)r   r*   _r"   r"   r#   rt      s    WITH))READONLY)CHECKOPTIONr   QUERY_RESTRICTIONSr   t.Optional[exp.Expression]c                 C  sf   |  ddr)d\}}| jtjddr"| | j}t|dkr"|\}}tj||dS | 	| j
d  d S )	N.VALUE)NNF)advancerv   )lowerr!   r'   )r   _matchr   L_PAREN_parse_wrapped_csvr   r-   r   Rand_retreat_index)r   r   r!   lower_upperr"   r"   r#   r      s   z Oracle.Parser._parse_dbms_random	expr_type	t.Type[E]r   c                 K  s8   | j |f| ddd| do|  | dd|S )NNULLABSENT	RETURNINGSTRICT)null_handlingreturn_typestrict)r   _parse_on_handlingr   _parse_type)r   r   kwargsr"   r"   r#   r      s   zOracle.Parser._parse_json_arrayc                 C  sX   | j r| jr| jjtjkrd S | j j}| d |  }| jt	j
||d}| | |S )Nrv   r)   )_curr_next
token_typer   r   text_advance_parse_hint_argsr   r   r.   _match_r_paren)r   r*   r   r"   r"   r#   _parse_hint_function_call   s   

z'Oracle.Parser._parse_hint_function_callc                 C  s*   g }|   }|r|| |   }|s|S r   )
_parse_varappend)r   r   resultr"   r"   r#   r      s   
zOracle.Parser._parse_hint_argsc                 C  s:   | j | jdd}|sd S | jtj|| tjo|  dS )NF)raise_unmatchedrw   )	_parse_var_from_optionsr   r   r   QueryOptionr   r   
CONSTRAINT_parse_field)r   kindr"   r"   r#   r      s   z'Oracle.Parser._parse_query_restrictionsexp.JSONExistsc              	     sX       } tj  jtj| j	   
do&  fdd  dS )NPASSINGc                     r   r   )_parse_aliasr   r"   r   r"   r#   rt      r   z2Oracle.Parser._parse_json_exists.<locals>.<lambda>)r*   pathpassingon_condition)r   r   r   r   COMMAr   r   
JSONExistsdialectto_json_pathr   r   _parse_on_condition)r   r*   r"   r   r#   r      s   
z Oracle.Parser._parse_json_existst.Optional[exp.Into]c                 C  s|   |  tj}|s|  tjsd S | j}|  }t|dkr5| | |  tj | j	t
j| jdd|dS | j	t
j||dS )Nr'   T)schema)r*   bulk_collect)r   r+   )r   r   rk   INTOr   _parse_expressionsr-   r   TABLEr   r   Into_parse_table)r   r   indexr+   r"   r"   r#   _parse_into   s   
zOracle.Parser._parse_intoc                 C  r   r   )_parse_assignmentr   r"   r"   r#   _parse_connect_with_prior  s   z'Oracle.Parser._parse_connect_with_priorN)r   r   )r   r   r   r   )r   r   )r   r   )*r\   r]   r^   r   OVERKEEPWINDOW_BEFORE_PAREN_TOKENSVALUES_FOLLOWED_BY_PARENr   Parser	FUNCTIONSr   ConvertToCharsetfrom_arg_listr
   r1   r   	StrToDateNO_PAREN_FUNCTION_PARSERSr   __annotations__popPROPERTY_PARSERSQUERY_MODIFIER_PARSERSro   r   DataTypeTypeDATETYPE_LITERAL_PARSERSDISTINCTUNIQUEDISTINCT_TOKENSr   r   r   r   r   r   r   r   r   r"   r"   r"   r#   r   k   sp   
 

	




	



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i ejji ejjjdejjjdejjjdejjjdejjjdejjjd	ejjjd
ejjjdejjjdejjjdejjj dejjj!dejjj"dejjj#dejjj$dejjj%dZe&ejjj' i ejj(i ej)dd ej*dd ej+e,-e,j.gej/e0ej1e2dej3e2dej4e2dej5e2dej6e,-e,j7e,j8gej9dd ej:dd ej;dd ej<dd ej=e2dej>dd ej?dd ej@dd ejAd d ejBd!d ejCeDejEeFejGd"d ejHd#d iZ(i ejjIejJejKjLjMiZId?d(d)ZNd@ fd+d,ZOdAd.d/ZPdBd1d2ZQdCd4d5ZRdDd7d8ZSdEd:d;ZTdFd=d>ZU  ZVS )Gr   TFFETCHrX    SMALLINTINTNUMBERzDOUBLE PRECISIONr[   rW   NCHARCLOBTIME	TIMESTAMPBLOBc                 C  s   |  d|jtjdS )Nr   z
YYYY-MM-DD)funcr*   r   ry   r~   r   er"   r"   r#   rt   4  s    zOracle.Generator.<lambda>c                 C  s   |  d|j|jS )Nr   )r  r*   r{   r  r"   r"   r#   rt   7  s    MAXMINMODzDBMS_RANDOM.VALUEc                 C  s   t | |ddddS )NINSTRT)	func_namesupports_positionsupports_occurrence)r   r  r"   r"   r#   rt   D  s   
c                 C     |  d|j| |S )Nr(   r  r*   format_timer  r"   r"   r#   rt   I      c                 C  r"  )Nr   r#  r  r"   r"   r#   rt   J  r%  c                 C     | j |ddS Nr  )sep)subquery_sqlr  r"   r"   r#   rt   K  r   SUBSTRc                 C  r&  r'  )	table_sqlr  r"   r"   r#   rt   M  r   c                 C  
   |  |S r   )tablesample_sqlr  r"   r"   r#   rt   N     
 c                 C  s   |j pd dS )Nr   z
 TEMPORARY)name)r   r  r"   r"   r#   rt   O  r   c                 C  r"  )Nr   r#  r  r"   r"   r#   rt   P  r%  c                 C  r,  r   )function_fallback_sqlr  r"   r"   r#   rt   Q  r.  c                 C     d|  |j dS )NzASCII(UNISTR(z))sqlr*   r  r"   r"   r#   rt   T  r   c                 C  s   d|  |d dS )Nz'TO_DATE('1970-01-01', 'YYYY-MM-DD') + (r*   z	 / 86400)r3  r  r"   r"   r#   rt   U     r   exp.CurrentTimestampr   r   c                 C  s*   |j drdS |j}|r| d|S dS )Nr   r   CURRENT_TIMESTAMP)r   r    r*   r  )r   r   r*   r"   r"   r#   currenttimestamp_sql^  s   z%Oracle.Generator.currenttimestamp_sql
exp.Offsetc                   s   t  | dS )Nz ROWS)super
offset_sqlr   r   	__class__r"   r#   r;  e  s   zOracle.Generator.offset_sqlexp.Expressionc                 C  s   d|  | S )NzADD r4  r<  r"   r"   r#   add_column_sqlh  s   zOracle.Generator.add_column_sqlexp.QueryOptionc                 C  s6   |  |d}|  |d}|rd| nd}| | S )Nr*   r   z CONSTRAINT  r4  )r   r   optionvaluer"   r"   r#   queryoption_sqlk  s   z Oracle.Generator.queryoption_sqlexp.Coalescec                 C  s"   |j drdnd}t|| |S )Nrs   r   COALESCE)r   r    r   )r   r   r  r"   r"   r#   coalesce_sqlr  s   zOracle.Generator.coalesce_sqlexp.Intoc                 C  sP   |j dsdnd}|jr| | d| |d S | | d| | S )Nr   r   rS   r  r*   )r   r    r*   segr3  r+   )r   r   intor"   r"   r#   into_sqlv  s   zOracle.Generator.into_sqlexp.Hintc                 C  sz   g }|j D ])}t|tjr&| j|j ddi}|| |d d| d q|| | qd| j || jd  dS )	Nr(  r  r*   ()z /*+ )sqlsr(  z */)	r+   
isinstancer   r.   format_argsr   r3  QUERY_HINT_SEPstrip)r   r   r+   formatted_argsr"   r"   r#   hint_sql}  s   
 zOracle.Generator.hint_sqlexp.IsAsciic                 C  r1  )NzNVL(REGEXP_LIKE(z4, '^[' || CHR(1) || '-' || CHR(127) || ']*$'), TRUE)r2  r<  r"   r"   r#   isascii_sql  r5  zOracle.Generator.isascii_sql)r   r6  r   r   )r   r9  r   r   )r   r?  r   r   )r   rA  r   r   )r   rF  r   r   )r   rI  r   r   )r   rM  r   r   )r   rW  r   r   )Wr\   r]   r^   LOCKING_READS_SUPPORTED
JOIN_HINTSTABLE_HINTSDATA_TYPE_SPECIFIERS_ALLOWED"ALTER_TABLE_INCLUDE_COLUMN_KEYWORDLIMIT_FETCHTABLESAMPLE_KEYWORDSLAST_DAY_SUPPORTS_DATE_PARTSUPPORTS_SELECT_INTOTZ_TO_WITH_TIME_ZONESUPPORTS_WINDOW_EXCLUDErS  SUPPORTS_DECODE_CASEr   	GeneratorTYPE_MAPPINGr   r  r  TINYINTr  r  BIGINTDECIMALri   rr   rn   r  TEXTTIMETZTIMESTAMPNTZTIMESTAMPTZBINARY	VARBINARY
ROWVERSIONr  r  
TRANSFORMSr   r}   Groupr   
preprocessunalias_groupILiker   	LogicalOrr   
LogicalAndModr   Selecteliminate_distinct_oneliminate_qualifyStrPositionr/   r  Subquery	SubstringTableTableSampler   	TimeToStrToCharToNumberr   Trimr$   Unicode
UnixToTimePROPERTIES_LOCATIONVolatileProperty
PropertiesLocationUNSUPPORTEDr8  r;  r@  rE  rH  rL  rV  rX  __classcell__r"   r"   r=  r#   re    s    







	












	














'





re  N)r\   r]   r^   ALIAS_POST_TABLESAMPLErY  TABLESAMPLE_SIZE_IS_PERCENTNULL_ORDERINGON_CONDITION_EMPTY_BEFORE_ERROR(ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMNr	   	UPPERCASENORMALIZATION_STRATEGYTIME_MAPPINGr   rc   r   r   r   re  r"   r"   r"   r#   r2   )   sj    	
 $r2   )r   r   r   r   r   r   )r   r%   r   r&   )!
__future__r   typingr`   sqlglotr   r   r   r   r   sqlglot.dialects.dialectr   r	   r
   r   r   r   r   r   r   sqlglot.helperr   sqlglot.parserr   r   sqlglot.tokensr   TYPE_CHECKINGsqlglot._typingr   r$   r1   r2   r"   r"   r"   r#   <module>   s    ,

	