o
    8Di                     @  sj   d dl mZ d dlZd dl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 )    )annotationsN)expparsertokens)Dialect)seq_get)	TokenTypetableexp.Expressionreturnt.Optional[exp.Select]c                 C  s   | rt dj| ddS d S N*Fcopy)r   selectfrom_)r	    r   N/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/prql.py_select_all   s   r   c                   @  s4   e Zd ZdZG dd dejZG dd dejZdS )PRQLFc                   @  sL   e Zd ZdgZddgZi ejjej	ej
ej
ejejdZi ejjZdS )zPRQL.Tokenizer`'")=r   r   r   #N)__name__
__module____qualname__IDENTIFIERSQUOTESr   	TokenizerSINGLE_TOKENSr   ALIASQUOTE
IDENTIFIERCOMMENTKEYWORDSr   r   r   r   r!      s    	r!   c                
      s.  e Zd Zi ejjejej	iZi ejj
ejejiZ
dd dd dd dd dd dd dd d	d d
d d	Zi ejjejjdd dZd<ddZd<ddZd=ddZ		d>d?dd Zd@d!d"Z	dAdB fd$d%ZdCd'd(Zd<d)d*Zd<d+d,Z	-	-		-	-	-	-dDdEd6d7Z	-	-	-dFdGd:d;Z  ZS )HzPRQL.Parserc                 C  
   |  |S N_parse_selectionselfqueryr   r   r   <lambda>/      
 zPRQL.Parser.<lambda>c                 C  s   | j |ddS )NF)appendr*   r,   r   r   r   r/   0       c                 C  r(   r)   )_parse_taker,   r   r   r   r/   1   r0   c                 C  s   | |  S r)   )where_parse_disjunctionr,   r   r   r   r/   2   r2   c                 C     |j t|  dddS NF)distinctr   )unionr   _parse_tabler,   r   r   r   r/   3       c                 C  r6   r7   )except_r   r:   r,   r   r   r   r/   6   r;   c                 C  r6   r7   )	intersectr   r:   r,   r   r   r   r/   9   r;   c                 C  r(   r)   )_parse_order_byr,   r   r   r   r/   <   r0   c                 C  s   | j || jddS )NF)parse_methodr1   )r+   _parse_aggregater,   r   r   r   r/   =   s    )	DERIVESELECTTAKEFILTERAPPENDREMOVE	INTERSECTSORT	AGGREGATEc                 C  s   t dt jt| dddS )NCOALESCEr   this)r   funcSumr   )argsr   r   r   r/   E   s    )AVERAGESUMr   t.Optional[exp.Expression]c                 C  s   |  | j| j}t|tjtjfs|S t|jtjr1tj	|j
|jd}t|tjr+|S tj|dS t|j
tjrOtj	|j|j
d}t|tjrI|S tj|dS |S )N)rL   
expressionrK   )_parse_tokens_parse_comparisonEQUALITY
isinstancer   EQNEQrS   NullIsrL   Not)r-   eqis_expr   r   r   _parse_equalityH   s   zPRQL.Parser._parse_equalityc                 C  s    |   }|r
|}|S |  }|S r)   )_parse_expression_parse_query)r-   rS   r   r   r   _parse_statementV   s
   zPRQL.Parser._parse_statementt.Optional[exp.Query]c                 C  sX   |   }|sd S tdj|dd}| | jr*| j| jj  | |}| | js|S r   )	_parse_fromr   r   r   _match_textsTRANSFORM_PARSERS_prevtextupper)r-   r   r.   r   r   r   ra   [   s   zPRQL.Parser._parse_queryNTr.   	exp.Queryr?   t.Optional[t.Callable]r1   boolc                   s   |r|n| j }| tjr | |}| jtj|ds| d n
| }|r(|gng }dd |jD   fdd|D }|j||ddS )	N)rS   Expecting }c                 S  s&   i | ]}|j t|tjr|jn|qS r   )alias_or_namerW   r   AliasrL   .0r   r   r   r   
<dictcomp>x   s    z0PRQL.Parser._parse_selection.<locals>.<dictcomp>c                   s"   g | ]}|j  fd dddqS )c                   s,   t | tjr| j v r | j  S | S | S r)   )rW   r   Columnnamer   )sprojectionsr   r   r/      s   
z9PRQL.Parser._parse_selection.<locals>.<listcomp>.<lambda>Fr   )	transformrp   rv   r   r   
<listcomp>}   s    
z0PRQL.Parser._parse_selection.<locals>.<listcomp>F)r1   r   )	r`   _matchr   L_BRACE
_parse_csvR_BRACEraise_errorselectsr   )r-   r.   r?   r1   r   rS   r   rv   r   r+   h   s   



zPRQL.Parser._parse_selectionc                 C  s   |   }|r||S d S r)   )_parse_numberlimit)r-   r.   numr   r   r   r3      s   zPRQL.Parser._parse_taket.Optional[exp.Ordered]c                   sV   |  tj}|  tjp|od}t j|d }}|r)|r)|dd |dd |S )NF)r?   descTnulls_first)rz   r   PLUSDASHsuper_parse_orderedset)r-   r?   ascr   term	__class__r   r   r      s   zPRQL.Parser._parse_ordered
exp.Selectc                 C  sL   |  tj}| | j}|r|  tjs| d |j| jt	j
|dddS )Nrm   )expressionsFr   )rz   r   r{   r|   r   r}   r~   order_byrS   r   Order)r-   r.   l_bracer   r   r   r   r>      s
   
zPRQL.Parser._parse_order_byc                 C  s   d }| j r| j jtjkr| jdd}| tj | jo | jj }| j	
|}|r7|   |  }||g}n| d|  |rJ| jtj||dS |S )NT)	any_tokenz!Unsupported aggregation function rL   alias)_next
token_typer   r#   _parse_id_varrz   _currrh   ri   	FUNCTIONSget_advance_parse_columnr~   rS   r   ro   )r-   r   rt   func_builderrO   rM   r   r   r   r@      s   zPRQL.Parser._parse_aggregatec                 C  sH   | j r | j jtjkr | d}| tj | jtj| 	 |dS | 	 S )NTr   )
r   r   r   r#   r   rz   rS   r   ro   _parse_assignment)r-   r   r   r   r   r`      s
   
zPRQL.Parser._parse_expressionFschemajoinsalias_tokens#t.Optional[t.Collection[TokenType]]parse_bracketis_db_referenceparse_partitionconsume_pipec                 C  s   |   S r)   )_parse_table_parts)r-   r   r   r   r   r   r   r   r   r   r   r:      s   
zPRQL.Parser._parse_tableskip_from_tokent.Optional[exp.From]c                 C  s0   |s
|  tjs
d S | jtj| j| j|ddS )N)r   )commentsrL   )rz   r   FROMrS   r   From_prev_commentsr:   )r-   r   r   r   r   r   r   rd      s
   zPRQL.Parser._parse_from)r   rR   )r   rc   )NT)r.   rj   r?   rk   r1   rl   r   rj   )r.   rj   r   rc   r)   )r?   rk   r   r   )r.   r   r   rc   )FFNFFFF)r   rl   r   rl   r   r   r   rl   r   rl   r   rl   r   rl   r   rR   )FFF)r   rl   r   rl   r   rl   r   r   )r   r   r   r   ParserCONJUNCTIONr   DAMPr   AndDISJUNCTIONDPIPEOrrf   r   Avgfrom_arg_listr_   rb   ra   r+   r3   r   r>   r@   r`   r:   rd   __classcell__r   r   r   r   r   #   sf    



!


	r   N)r   r   r   DPIPE_IS_STRING_CONCATr   r!   r   r   r   r   r   r   r      s    r   )r	   r
   r   r   )
__future__r   typingtsqlglotr   r   r   sqlglot.dialects.dialectr   sqlglot.helperr   sqlglot.tokensr   r   r   r   r   r   r   <module>   s    
