3
6b1                 @   s$  d dl Z d dlZd dlmZmZmZ d dlm	Z	m
Z
 d dlmZmZ d dl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 ed ZG dd dZG dd deZG dd deZG dd
 d
eZ G dd deZ!G dd deZ"G dd dZ#G dd dZ$G dd de$Z%e	e
dZ&dS )     N)UnionIteratorOptional)	ASCENDING
DESCENDING)tokensparse)Token
IdentifierFunction
ComparisonParenthesisIdentifierList	Statement   )query   )SQLDecodeErrorNotSupportedErrorSQLConstIdentifier$djongo.sql2mongo.functions.CountFunc%djongo.sql2mongo.functions.SimpleFuncSQLIdentifierSQLComparisonSQLPlaceholderc               @   sl   e Zd ZejeddddZdd Zeede	e
 ddd	Zeede
dd
dZeedddZdS )SQLTokenzquery_module.BaseQuery)tokenr   c             C   s   || _ || _d S )N)_tokenr   )selfr   r    r   Z/var/www/html/sandeepIITI/myenv/lib/python3.6/site-packages/djongo/sql2mongo/sql_tokens.py__init__   s    zSQLToken.__init__c             C   s   | j  S )N)r   )r   r   r   r    __repr__   s    zSQLToken.__repr__)r   r   returnc             c   s0  ddl m} t| trt| d trryt| d d j W n( tk
rb   t| d d |V  Y qX t	| |V  n*t| d t
r|j| |V  nt| |V  nt| t
r|j| |V  ntt| trt| |V  n\t| trxN| j D ]}tj||E d H  qW n*t| trt| |V  ntd| j d S )Nr   )SQLFuncr   zUnsupported: )Z	functionsr$   
isinstancer
   r   intvalue
ValueErrorr   r   r   	token2sqlr   r   r   get_identifiersr   
tokens2sqlr   r   )r   r   r$   tokr   r   r    r+      s*    


zSQLToken.tokens2sqlc             C   s   t tj| |S )N)nextr   r+   )r   r   r   r   r    r)   <   s    zSQLToken.token2sql)r#   c             C   s   t tjd| jtjdjdS )Nz%\(([0-9]+)\)s)flagsr   )r&   rematchr'   
IGNORECASEgroup)r   r   r   r    placeholder_indexB   s    zSQLToken.placeholder_indexN)__name__
__module____qualname__abcabstractmethodr	   r!   r"   staticmethodr   all_token_typesr+   r)   r&   r3   r   r   r   r    r      s   r   c                   sL   e Zd Zej fddZdd Zdd Zdd Ze	e
d	d
dZ  ZS )AliasableTokenc                sT   t  j|  | jj| _| jrP| | jj| j< | j| jj| < | j rP| jjj	| j d S )N)
superr!   r   token_aliasaliasalias2tokenZtoken2aliasis_explicit_aliasaliased_namesadd)r   args)	__class__r   r    r!   I   s    
zAliasableToken.__init__c             C   s$   | j  rt| jd jS t| jjS )Nr   )r@   hashr   r'   )r   r   r   r    __hash__T   s    zAliasableToken.__hash__c             C   s   t | t |kS )N)rE   )r   otherr   r   r    __eq__Y   s    zAliasableToken.__eq__c             C   s$   t | jjdko"| jd jtjdS )N   r   ZAS)lenr   r   r0   Keyword)r   r   r   r    r@   \   s    z AliasableToken.is_explicit_alias)r#   c             C   s   | j j s| j j S d S )N)r   get_orderingZ	get_alias)r   r   r   r    r>   _   s    
zAliasableToken.alias)r4   r5   r6   r7   r8   r!   rF   rH   r@   propertystrr>   __classcell__r   r   )rD   r    r;   G   s   r;   c                   sp   e Zd Z fddZedd ZeedddZeeddd	Zeedd
dZ	eedddZ
  ZS )r   c                s8   t  j|  d | _| jj r4| jj | _| jd | _d S )Nr   )r<   r!   _ordr   rL   )r   rC   )rD   r   r    r!   h   s
    
zSQLIdentifier.__init__c             C   s   | j d krtt| j  S )N)rP   r   ORDER_BY_MAP)r   r   r   r    orderp   s    
zSQLIdentifier.order)r#   c             C   s@   | j | jjjkr| j S | j| jjkr*| jS | j d| j S d S )N.)given_tabler   r=   rA   table
left_tablecolumn)r   r   r   r    fieldv   s
    zSQLIdentifier.fieldc             C   s2   | j }| jj}y
|| jS  tk
r,   |S X d S )N)rT   r=   r?   rU   KeyError)r   namer?   r   r   r    rU      s    
zSQLIdentifier.tablec             C   s,   | j j }|d kr| j j }|d kr(t|S )N)r   Zget_parent_nameget_real_namer   )r   rZ   r   r   r    rT      s    

zSQLIdentifier.given_tablec             C   s   | j j }|d krt|S )N)r   r[   r   )r   rZ   r   r   r    rW      s    
zSQLIdentifier.column)r4   r5   r6   r!   rM   rR   rN   rX   rU   rT   rW   rO   r   r   )rD   r    r   f   s   		c                   s<   e Zd Z fddZeedddZedddZ  Z	S )r   c                s   t  j|  d S )N)r<   r!   )r   rC   )rD   r   r    r!      s    zSQLConstIdentifier.__init__)r#   c             C   s   t | jd d jS )Nr   r   )r&   r   r'   )r   r   r   r    r'      s    zSQLConstIdentifier.valuec             C   s
   d| j iS )Nz$literal)r'   )r   r   r   r    to_mongo   s    zSQLConstIdentifier.to_mongo)
r4   r5   r6   r!   rM   r&   r'   dictr\   rO   r   r   )rD   r    r      s   c               @   sH   e Zd Zedd Zedd Zedd Zedd Zed	d
 ZdS )r   c             C   s   t | jj| j}|jS )N)r   r   leftr   rU   )r   lhsr   r   r    rV      s    zSQLComparison.left_tablec             C   s   t | jj| j}|jS )N)r   r   r^   r   rW   )r   r_   r   r   r    left_column   s    zSQLComparison.left_columnc             C   s   t | jj| j}|jS )N)r   r   rightr   rU   )r   rhsr   r   r    right_table   s    zSQLComparison.right_tablec             C   s   t | jj| j}|jS )N)r   r   ra   r   rW   )r   rb   r   r   r    right_column   s    zSQLComparison.right_columnc             C   s>   | j jjtjjks,| j jjtjdr(d S t| j	| j j}|S )NNULL)
r   ra   ttyper   NamePlaceholderr0   rK   r   r3   )r   indexr   r   r    rhs_indexes   s    zSQLComparison.rhs_indexesN)	r4   r5   r6   rM   rV   r`   rc   rd   rj   r   r   r   r    r      s
   c                   s:   e Zd Zdd Zedd fddZeddd	Z  ZS )
r   c             c   sL   | j dd d }t|tr<x*|j D ]}| j|V  q&W n| j|V  d S )Nr   r   )r   r%   r   r*   	get_value)r   r,   Zaidr   r   r    __iter__   s
    
zSQLPlaceholder.__iter__zquery_module.BaseQuery)r   r   c                s   t  j|| d S )N)r<   r!   )r   r   r   )rD   r   r    r!      s    zSQLPlaceholder.__init__)r,   c             C   sD   |j tjjkr| j|S |jtjdr*d S |jtjdr<dS td S )Nre   DEFAULT)rf   r   rg   rh   r3   r0   rK   r   )r   r,   r   r   r    rl      s    
zSQLPlaceholder.get_value)r4   r5   r6   rm   r	   r!   rl   rO   r   r   )rD   r    r      s   	c               @   s   e Zd ZeedddZeeef dddZdd Z	edd	d
Z
dd ZedddZee dddZdd ZeedddZeedddZdd ZdS )SQLStatement)r#   c             C   s   | j | j S )N)
_statement_tok_id)r   r   r   r    current_token   s    zSQLStatement.current_token)	statementc             C   s   || _ d| _| j | _d S )Nr   )rp   rq   
_generator	_gen_inst)r   rs   r   r   r    r!      s    zSQLStatement.__init__c             C   s   t | j|S )N)getattrrp   )r   itemr   r   r    __getattr__   s    zSQLStatement.__getattr__c             c   s   | j E d H  d S )N)ru   )r   r   r   r    rm      s    zSQLStatement.__iter__c             C   s
   t | jS )N)rN   rp   )r   r   r   r    r"      s    zSQLStatement.__repr__)rw   c             C   sT   |j pd| j }|jo | j|j }djdd | j|| D }t|d }t|S )Nr    c             s   s   | ]}t |V  qd S )N)rN   ).0r,   r   r   r    	<genexpr>   s    z+SQLStatement.__getitem__.<locals>.<genexpr>)startrq   stopjoinrp   sqlparsero   )r   rw   r|   r}   sqlr   r   r    __getitem__   s
    zSQLStatement.__getitem__c             C   s$   y
t | jS  tk
r   d S X d S )N)r-   ru   StopIteration)r   r   r   r    r-      s    
zSQLStatement.nextc             C   s   |  j |7  _ d S )N)rq   )r   numr   r   r    skip  s    zSQLStatement.skipc             C   s   | j j| jd S )Nr   )rp   Z
token_prevrq   )r   r   r   r    
prev_token  s    zSQLStatement.prev_tokenc             C   s   | j j| jd S )Nr   )rp   
token_nextrq   )r   r   r   r    
next_token
  s    zSQLStatement.next_tokenc             c   s:   | j | j }x(| jd k	r4|V  | j j| j\| _}qW d S )N)rp   rq   r   )r   r   r   r   r    rt     s    zSQLStatement._generatorN)r4   r5   r6   rM   r	   rr   Ur   r!   rx   rm   r"   slicer   Or-   r   r   r   rt   r   r   r   r    ro      s   ro   c               @   s   e Zd Ze Ze Ze Ze Ze ZeeeeedZ	dZ
deeedddZeedddZeed	d
dZeedddZeedddZdS )SQLColumnDef)ZUNIQUEZAUTOINCREMENTzPRIMARY KEYzNOT NULLre   N)rZ   	data_typecol_constraintsc             C   s   || _ || _|| _d S )N)rZ   r   r   )r   rZ   r   r   r   r   r    r!   %  s    zSQLColumnDef.__init__)othersc          !   c   s   x| ry| j dd\}} W n tk
r6   | }d } Y nX ytj| V  W q tk
r   | ry| j dd\}} W n tk
r   | }d } Y nX | d| }ytj| V  W q tk
r   td| Y qX ntd| Y qX qW d S )N r   zUnknown column constraint: )splitr(   r   _maprY   r   )r   rZ   Zpart2r   r   r    _get_constraints-  s*    

zSQLColumnDef._get_constraints)r   c             c   s  | dd
 } x
| r| d dkrjy| j dd\}} W n tk
rR   | }d } Y n
X | j } tj|V  q| jdrd g}d}xRt| D ]F\}}|dkr|d d kr|j  |j| n|dkr|j  |sP qW t	| |d  dkr| |d d  } nd } t
 V  qtd	|  qW d S )Nr   r   ",
CONSTRAINT()   zSyntax Error: rk   )r   r(   stripr   def_str2col_def
startswith	enumeratepopappendrJ   SQLColumnConstraintr   )r   def_strZindexesicr   r   r    sql2col_defsG  s6    


zSQLColumnDef.sql2col_defs)r   c             C   s   | j s"ddlm} t|jj | _ |dd  jdd\}}|j }|jdd\}}|| j krjtd| tt	j
|}t	|||dS )Nr   )DatabaseWrapperr   r   r   zData of type: )rZ   r   r   )supported_data_typesdjongo.baser   set
data_typesvaluesr   r   r   r   r   )clsr   r   rZ   rG   r   constraint_sqlr   r   r   r    r   i  s    
zSQLColumnDef.def_str2col_def)r   c             c   s   ddl m} t|jj }|jjdjd}x|D ]}|j }|jdd\}}|dkr`t V  q2|d dkrtt	d	|dd  jdd\}}|j }|jdd\}}	||krt
d
| ttj|	}
t|||
dV  q2W d S )Nr   )r   z()r   r   r   r   r   zColumn identifier not quotedzData of type: )rZ   r   r   )r   r   r   r   r   r'   r   r   r   r   r   r   r   )r   r   r   r   ZdefscolrZ   rG   r   r   r   r   r   r    statement2col_defs{  s&    

zSQLColumnDef.statement2col_defs)NNN)r4   r5   r6   objectZnot_nulluniqueZautoincrementZ
primarykeynullr   r   rN   r   r!   r9   r   r   classmethodr   r	   r   r   r   r   r    r     s,     !r   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r    r     s   r   )ASCZDESC)r   r   r   r   r   r   )'r7   r/   typingr   r   r   r   r   Zpymongor   r   r   r   r   Zsqlparse.sqlr	   r
   r   r   r   r   r   ry   r   Zquery_module
exceptionsr   r   r:   r   r;   r   r   r   r   ro   r   r   rQ   r   r   r   r    <module>   s2   $    55!4 