o
    8Di0                     @  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mZmZmZ d dlmZ d dlmZ ddd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any_value_to_max_sqlarrow_json_extract_sqlconcat_to_dpipe_sqlcount_if_to_sumno_ilike_sqlno_pivot_sqlno_tablesample_sqlno_trycast_sqlrename_funcstrposition_sql)unsupported_args)	TokenTypeargst.Listreturnexp.Anonymous | exp.TimeToStrc                 C  sR   t | dkr| t  t | dkr"tjtj| d d| d dS tjd| dS )N      thisr   )r   formatSTRFTIMEr   expressions)lenappendr   CurrentTimestamp	TimeToStrTsOrDsToTimestamp	Anonymousr    r)   P/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/sqlite.py_build_strftime   s
   r+   
expressionexp.Expressionc                 C  s   | j }t| tjr{t|tjr{i }d}|jD ]}t|tjr$|||j< qt|tjr,|}q|rRt	|jdkrR||jd j }|
dtjt d |j| | S | D ]$}d}|jD ]}t|jtjrh n
t|jtjrq|}q]|rz|j| qV| S )zHMove primary key to a column and enforce auto_increment on primary keys.Nr   r   constraintskind)r   
isinstancer   CreateSchemar!   	ColumnDefname
PrimaryKeyr"   r#   ColumnConstraintPrimaryKeyColumnConstraintremovevaluesr.   r0   AutoIncrementColumnConstraint)r,   schemadefsprimary_keyecolumnauto_increment
constraintr)   r)   r*   _transform_create    s:   

rC   c                 C  st   t | tjs| S | tj}|r8ttj|j	  | tj
}|r,ttj|j	  | dtjt d | S )Nr.   r/   )r1   r   r4   find#GeneratedAsIdentityColumnConstrainttcastr7   parentpopNotNullColumnConstraintr#   r;   )r,   	generatednot_nullr)   r)   r*   _generated_to_auto_incrementB   s   rM   c                   @  sT   e Zd ZejZdZdZ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 )
SQLiteFTc                   @  sH   e Zd Zg dZg dZdZejj	 Ze
d h ejjejZdS )zSQLite.Tokenizer)")[]`))zx'')zX'rS   )0x )0XrU   Fz/*+N)__name__
__module____qualname__IDENTIFIERSHEX_STRINGSNESTED_COMMENTSr   	TokenizerKEYWORDScopyrI   COMMANDSr   REPLACEr)   r)   r)   r*   r]   ]   s    
r]   c                      sP   e Zd ZdZdZdZi ejje	j
jedd dd dZd fd	d
Z  ZS )zSQLite.ParserTFc                 C     t jd| dS )NDATETIMEr    r   r'   r(   r)   r)   r*   <lambda>q       zSQLite.Parser.<lambda>c                 C  rb   )NTIMEr    rd   r(   r)   r)   r*   re   r   rf   )	EDITDIST3r   rc   rg   r   exp.UniqueColumnConstraintc                   s(   | j j | jv r| tjS t  S N)	_currtextupperCONSTRAINT_PARSERSr,   r   UniqueColumnConstraintsuper_parse_unique)self	__class__r)   r*   rq   u   s   
zSQLite.Parser._parse_unique)r   ri   )rW   rX   rY   STRING_ALIASESALTER_RENAME_REQUIRES_COLUMNJOINS_HAVE_EQUAL_PRECEDENCEr   Parser	FUNCTIONSr   Levenshteinfrom_arg_listr+   rq   __classcell__r)   r)   rs   r*   rx   h   s    rx   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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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iZe'ejjj( e)j*diZ+i ejj,i ej-e.ej/e0d	ej1e2ej3e4ej5e67e8gej9d
d ej:dd ej;dd ej<e67e=gej>dd ej?e0dej@eAejBeCejDeEdddde0dejFe0dejGe0dejHeIejJe0dejKe67e6jLe6jMe6jNgejOdd ejPeQejRdd ejSdd ejTeUejVdd iZ,dd ejjWD ZWejXjYjZeWej[< ejXjYj\eWej]< dZ^dJd#d$Z_dKd&d'Z`dLdM fd,d-ZadNd/d0ZbdOd2d3ZcdPd5d6ZddQd8d9ZedRd;d<ZfdSd>d?ZgeEd@dTdBdCZhdUdEdFZidVdHdIZj  ZkS )WzSQLite.GeneratorFT,INTEGERREALTEXTBLOBAUTOINCREMENTCHARc                  G     dS )NCURRENT_DATEr)   _r)   r)   r*   re          zSQLite.Generator.<lambda>c                  G  r   )NCURRENT_TIMEr)   r   r)   r)   r*   re      r   c                  G  r   )NCURRENT_TIMESTAMPr)   r   r)   r)   r*   re      r   c                 C     |  |dS Nr   sqlrr   r?   r)   r)   r*   re          IIFins_costdel_costsub_costmax_distrh   MAXMINRANDOMc                 C  s   t | |ddS )NINSTR)	func_name)r   r   r)   r)   r*   re      rf   c                 C  r   r   r   r   r)   r)   r*   re      r   c                 C  s   |  d|jd|jS )Nr   r   )funcr   getr   r   r)   r)   r*   re      s    c                 C  r   r   r   r   r)   r)   r*   re      r   c                 C  s   i | ]}|t jjjqS r)   )r   
PropertiesLocationUNSUPPORTED).0propr)   r)   r*   
<dictcomp>   s    
zSQLite.Generator.<dictcomp>LIMITr,   exp.JSONExtractr   strc                 C  s   |j r| |S t| |S rj   )r!   function_fallback_sqlr   rr   r,   r)   r)   r*   jsonextract_sql   s   

z SQLite.Generator.jsonextract_sqlexp.DateAddc                 C  s\   |j }|jr	|jn| |}|jd}|r d| d|j dnd| d}| d|j|S )NunitrS    DATE)r,   	is_stringr5   r   r   r   r   r   )rr   r,   modifierr   r)   r)   r*   dateadd_sql   s
   $zSQLite.Generator.dateadd_sqlNexp.Castsafe_prefixt.Optional[str]c                   s$   | dr| d|jS t |S )Ndater   )is_typer   r   rp   cast_sql)rr   r,   r   rs   r)   r*   r      s   
zSQLite.Generator.cast_sqlexp.GenerateSeriesc                 C  sr   |j }|o
|jd}t|tjr2|jr2|jd }|dd  | t	t
d|| }|S | |}|S )Naliasr   columnsvalue)rH   r   r   r1   r   
TableAliasr   setr   selectalias_from_subqueryr   )rr   r,   rH   r   column_aliasr   r)   r)   r*   generateseries_sql   s   

z#SQLite.Generator.generateseries_sqlexp.DateDiffc                 C  s   |j d}|r|j nd}d| |d d| |d d}|dkr*| d	}nO|d
kr4| d}nE|dkr>| d}n;|dkrH| d}n1|dkrR| d}n'|dkr\| d}n|dkrf| d}n|dkrp| d}n	| d| d d| dS )Nr   DAYz(JULIANDAY(r   z) - JULIANDAY(r,   z))MONTHz / 30.0YEARz / 365.0HOURz * 24.0MINUTEz	 * 1440.0SECONDz
 * 86400.0MILLISECONDz * 86400000.0MICROSECONDz * 86400000000.0
NANOSECONDz * 8640000000000.0zDATEDIFF unsupported for 'z'.zCAST(z AS INTEGER))r   r   r5   rm   r   unsupported)rr   r,   r   r   r)   r)   r*   datediff_sql   s*   "zSQLite.Generator.datediff_sqlexp.GroupConcatc                 C  sz   |j }|tj}|r|jd }d}nd}t|j tjr+| d |j j r+|s+|j j }|j	d}d| | 
|| dS )Nr   z	DISTINCT rU   z-SQLite GROUP_CONCAT doesn't support ORDER BY.	separatorzGROUP_CONCAT())r   rD   r   Distinctr!   r1   Orderr   r   r   format_args)rr   r,   r   distinctdistinct_sqlr   r)   r)   r*   groupconcat_sql  s   

z SQLite.Generator.groupconcat_sql	exp.Leastc                 C  s(   t |jdkrtd| |S | |dS )Nr   r   r   )r"   r!   r   r   r   r)   r)   r*   	least_sql*  s   zSQLite.Generator.least_sqlexp.Transactionc                 C  s$   |j }|r
d| nd}d| dS )Nr   rU   BEGINz TRANSACTIONr   )rr   r,   r   r)   r)   r*   transaction_sql0  s   z SQLite.Generator.transaction_sqlexp.IsAsciic                 C  s   d|  |j dS )Nz(NOT z( GLOB CAST(x'2a5b5e012d7f5d2a' AS TEXT))r   r   r   r)   r)   r*   isascii_sql5  s   zSQLite.Generator.isascii_sqlr   exp.CurrentSchemac                 C  r   )Nz'main'r)   r   r)   r)   r*   currentschema_sql8  s   z"SQLite.Generator.currentschema_sqlexp.IgnoreNullsc                 C  s   |  d | |jS )Nz%SQLite does not support IGNORE NULLS.)r   r   r   r   r)   r)   r*   ignorenulls_sql<  s   
z SQLite.Generator.ignorenulls_sqlexp.RespectNullsc                 C  s   |  |jS rj   r   r   r)   r)   r*   respectnulls_sql@  s   z!SQLite.Generator.respectnulls_sql)r,   r   r   r   )r,   r   r   r   rj   )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   )r,   r   r   r   )r,   r   r   r   )lrW   rX   rY   
JOIN_HINTSTABLE_HINTSQUERY_HINTSNVL2_SUPPORTED!JSON_PATH_BRACKETED_KEY_SUPPORTEDSUPPORTS_CREATE_TABLE_LIKESUPPORTS_TABLE_ALIAS_COLUMNSSUPPORTS_TO_NUMBERSUPPORTS_WINDOW_EXCLUDE#EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSESUPPORTS_MEDIANJSON_KEY_VALUE_PAIR_SEPr   JSONPathKeyJSONPathRootJSONPathSubscriptSUPPORTED_JSON_PATH_PARTSr   	GeneratorTYPE_MAPPINGDataTypeTypeBOOLEANTINYINTSMALLINTINTBIGINTFLOATDOUBLEDECIMALr   NCHARVARCHARNVARCHARBINARY	VARBINARYrI   r   r   AUTO_INCREMENTTOKEN_MAPPING
TRANSFORMSAnyValuer
   Chrr   Concatr   CountIfr   r2   r   
preprocessrC   CurrentDateCurrentTimer$   r4   rM   DateStrToDateIfILiker   JSONExtractScalarr   rz   r   	LogicalOr
LogicalAndPivotr   RandSelecteliminate_distinct_oneliminate_qualifyeliminate_semi_and_anti_joinsStrPositionTableSampler   TimeStrToTimer%   TryCastr   r&   PROPERTIES_LOCATIONr   r   POST_SCHEMALikePropertyPOST_CREATETemporaryPropertyLIMIT_FETCHr   r   r   r   r   r   r   r   r   r   r   r   r|   r)   r)   rs   r*   r   }   s    

















	









'








r   N)rW   rX   rY   r	   CASE_INSENSITIVENORMALIZATION_STRATEGYSUPPORTS_SEMI_ANTI_JOINTYPED_DIVISIONSAFE_DIVISIONr   r]   r   rx   r   r   r)   r)   r)   r*   rN   V   s    rN   )r   r   r   r   )r,   r-   r   r-   )
__future__r   typingrF   sqlglotr   r   r   r   r   sqlglot.dialects.dialectr   r	   r
   r   r   r   r   r   r   r   r   r   sqlglot.generatorr   sqlglot.tokensr   r+   rC   rM   rN   r)   r)   r)   r*   <module>   s    8


"