o
    8Di                     @  s   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
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dZG dd deZdS )    )annotations)deepcopy)defaultdict)exp
transformsjsonpath)date_delta_sqlbuild_date_deltatimestamptrunc_sqlbuild_formatted_timegroupconcat_sql)Spark)	TokenType)TypeAnnotatorselfDatabricks.Generator
expression'exp.JSONExtract | exp.JSONExtractScalarreturnstrc                 C  s&   |  |d}|  |d}| d| S )Nthisr   :)sql)r   r   r   expr r   T/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/databricks.py_jsonextract_sql   s   r   c                   @  s   e Zd ZdZdZeeeej	Z	e
jjD ]!Ze	e  h e
jje
jje
jjje
jjje
jjjO  < qG dd dejZG dd dejZG dd dejZG dd	 d	ejZd
S )
DatabricksFc                   @  s   e Zd ZddgZdS )zDatabricks.JSONPathTokenizer`"N)__name__
__module____qualname__IDENTIFIERSr   r   r   r   JSONPathTokenizer)   s    r$   c                   @  s"   e Zd Zi ejjdejiZdS )zDatabricks.TokenizerVOIDN)r    r!   r"   r   	TokenizerKEYWORDSr   r%   r   r   r   r   r&   ,   s    
r&   c                   @  sl   e Zd ZdZdZdZi ejje	e
je	e
je	e
je	e
jee
jddZi ejjeje
jiZdS )zDatabricks.ParserT
databricks)DATEADDDATE_ADDDATEDIFF	DATE_DIFFTO_DATEN)r    r!   r"   LOG_DEFAULTS_TO_LNSTRICT_CASTCOLON_IS_VARIANT_EXTRACTr   Parser	FUNCTIONSr	   r   DateAddDateDiffr   TsOrDsToDateFACTORr   COLONJSONExtractr   r   r   r   r1   2   s$    
	
r1   c                      s   e Zd ZdZdZdZdZdZdZi e	j
jejedejedejdd ejd	d eje ejeejeejejejgejeejeejd
d ej dd iZe!ej" i e	j
j#ej$j%j&diZ#dd fddZ'd fddZ(d fddZ)  Z*S )r   
REPEATABLEFT
PARSE_JSONr)   r+   c                 C  s   |  d|j|j|jS )NTIMESTAMPADD)funcunitr   r   r   er   r   r   <lambda>Q   s    zDatabricks.Generator.<lambda>c              	   C  s(   |  d|jtj|jtjdd|jS )Nr;   )r   r   )r<   r=   r   Mulr   Literalnumberr   r>   r   r   r   r@   T   s    c                  G  s   dS )N r   )_r   r   r   r@   e   s    c                 C  s
   |  |S )N)function_fallback_sqlr>   r   r   r   r@   f   s   
 r%    r   exp.ColumnDefsepr   r   c                   sR   | tj}|j}|r"t|tjr"|jtjjv r"|dtj	d t
 ||S )Nkindbigint)findr   #GeneratedAsIdentityColumnConstraintrK   
isinstanceDataTyper   INTEGER_TYPESsetbuildsupercolumndef_sql)r   r   rJ   
constraintrK   	__class__r   r   rU   p   s   
z"Databricks.Generator.columndef_sql'exp.GeneratedAsIdentityColumnConstraintc                   s   | dd t |S )Nr   T)rR   rT   'generatedasidentitycolumnconstraint_sqlr   r   rW   r   r   rZ   }   s   z<Databricks.Generator.generatedasidentitycolumnconstraint_sqlexp.JSONPathc                   s   | dd  t |S )Nescape)rR   rT   jsonpath_sqlr[   rW   r   r   r^      s   z!Databricks.Generator.jsonpath_sql)rH   )r   rI   rJ   r   r   r   )r   rY   r   r   )r   r\   r   r   )+r    r!   r"   TABLESAMPLE_SEED_KEYWORDCOPY_PARAMS_ARE_WRAPPEDCOPY_PARAMS_EQ_REQUIREDJSON_PATH_SINGLE_QUOTE_ESCAPEQUOTE_JSON_PATHPARSE_JSON_NAMEr   	Generator
TRANSFORMSr   r3   r   r4   DatetimeAddDatetimeSubDatetimeTruncr
   GroupConcatr   Selectr   
preprocesseliminate_distinct_onunnest_to_explodeany_to_existsr8   r   JSONExtractScalarJSONPathRootToCharpopTryCastTYPE_MAPPINGrP   TypeNULLrU   rZ   r^   __classcell__r   r   rW   r   re   E   sH    






re   N)r    r!   r"   SAFE_DIVISIONCOPY_PARAMS_ARE_CSVr   rR   r   r   
COERCES_TOr   rP   
TEXT_TYPES	text_typeNUMERIC_TYPESTEMPORAL_TYPESrv   BINARYBOOLEANINTERVALr   r$   r   r&   r1   re   r   r   r   r   r      s(    

r   N)r   r   r   r   r   r   )
__future__r   copyr   collectionsr   sqlglotr   r   r   sqlglot.dialects.dialectr   r	   r
   r   r   sqlglot.dialects.sparkr   sqlglot.tokensr    sqlglot.optimizer.annotate_typesr   r   r   r   r   r   r   <module>   s    
