
    hP3                     v   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dlm	Z
mZmZ ddlmZ ddlmZmZmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZmZ  G d d      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de"      Z# G d de      Z$ G d de$      Z% G d de$      Z& G d  d!e      Z' G d" d#e'      Z( G d$ d%e      Z) G d& d'e      Z* G d( d)e)      Z+ G d* d+      Z, G d, d-ee,      Z- G d. d/e      Z. G d0 d1e      Z/ G d2 d3ee,      Z0 G d4 d5e      Z1 G d6 d7e1      Z2y)8    N)OrderedDict)tokensparse)Parenthesis)UnionListOptional   )query)SQLIdentifierSQLConstIdentifierSQLComparison)SQLFuncCountFuncAll)WhereOp   )SQLDecodeError)SQLTokenSQLStatementc                   L    e Zd Zej                  ded   defd       Zd Zd Z	y)	Converterr   zquery_module.SelectQueryzquery_module.BaseQuery	statementc                 N    || _         || _        d | _        | j                          y N)r   r   end_idr   )selfr   r   s      ^/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/djongo/sql2mongo/converters.py__init__zConverter.__init__   s"     
"

    c                     t         r   NotImplementedErrorr   s    r   r   zConverter.parse       !!r    c                     t         r   r"   r$   s    r   to_mongozConverter.to_mongo    r%   r    N)
__name__
__module____qualname__abcabstractmethodUr   r   r   r'    r    r   r   r      s@    	 . /	 $		 	""r    r   c                   *     e Zd Z fdZd Zd Z xZS )ColumnSelectConverterc                 P    d| _         d| _        g | _        t        |   ||       y )NFr   )
select_allnum_columns
sql_tokenssuperr   r   r   r   	__class__s      r   r   zColumnSelectConverter.__init__%   s/      	 		*r    c                 X   | j                   j                         }|j                  t        j                  d      r0t        | j                  | j                         | j                  _        y t        j                  || j                        D ]  }| j                  j                  |        y )NDISTINCT)r   nextmatchr   KeywordDistinctConverterr   distinctr   
tokens2sqlr4   append)r   tok	sql_tokens      r   r   zColumnSelectConverter.parse.   su    nn!!#99V^^Z0"3DJJ"ODJJ &00djjA 2	&&y12r    c                 Z    | j                   D cg c]  }|j                   }}d|iS c c}w )N
projection)r4   column)r   selecteddocs      r   r'   zColumnSelectConverter.to_mongo8   s.    /3?8x??c"" @s   (r(   r)   r*   r   r   r'   __classcell__r7   s   @r   r0   r0   $   s    +2#r    r0   c                       e Zd Zd Zd Zy)AggColumnSelectConverterc                 R   i }t        d | j                  D              r| j                         S t        | j                  d   t              r8| j                  d   j                         || j                  d   j                  <   n | j                  D ]  }d||j                  <    d|igS )Nc              3   <   K   | ]  }t        |t                y wr   )
isinstancer   ).0rA   s     r   	<genexpr>z4AggColumnSelectConverter.to_mongo.<locals>.<genexpr>B   s     CCz#w'Cs   r   T$project)anyr4   _using_group_byrO   r   r'   aliasfield)r   projectrF   s      r   r'   z!AggColumnSelectConverter.to_mongo?   s    C4??CC ''))*,>?040B0K0K0MGDOOA&,,- OO /*.'/ W%&&r    c                     dd i}ddi}| j                   D ]N  }t        |t              r-|j                         ||j                  <   d||j                  <   @d||j
                  <   P d|id|ig}|S )N_idFT$grouprR   )r4   rO   r   r'   rU   rV   )r   grouprW   rF   pipelines        r   rT   z(AggColumnSelectConverter._using_group_byO   s    4
 5
  	/H(G,(0(9(9(;hnn%*.'*.'	/ % G	
 r    N)r(   r)   r*   r'   rT   r.   r    r   rL   rL   =   s    ' r    rL   c                       e Zd Zd Zy)FromConverterc                     | j                   j                         }t        j                  || j                        }|j
                  | j                  _        y r   )r   r:   r   	token2sqlr   table
left_table)r   rA   sqls      r   r   zFromConverter.parsek   s:    nn!!#  djj1 #		

r    N)r(   r)   r*   r   r.   r    r   r^   r^   i   s    *r    r^   c                   6    e Zd ZU dZded<   dZded<   d Zd Zy)WhereConverterNr   	nested_opopc                     | j                   j                  }t        t        |      | j                  | j                  j
                        | _        y )Nr   r   params)r   current_tokenr   r   r   rj   rg   r   rA   s     r   r   zWhereConverter.parseu   s9    nn**"3'**::$$
r    c                 :    d| j                   j                         iS )Nfilterrg   r'   r$   s    r   r'   zWhereConverter.to_mongo}       $''**,--r    )r(   r)   r*   rf   __annotations__rg   r   r'   r.   r    r   re   re   q   s     IyB	
.r    re   c                       e Zd Zd Zy)AggWhereConverterc                 :    d| j                   j                         iS N$matchro   r$   s    r   r'   zAggWhereConverter.to_mongo   rp   r    Nr(   r)   r*   r'   r.   r    r   rs   rs      s    .r    rs   c                   H     e Zd Zej                   fd       Zd Zd Z xZS )JoinConverterc                 V    d | _         d | _        d | _        d | _        t	        |   |  y r   )rb   right_tableleft_columnright_columnr5   r   r   argsr7   s     r   r   zJoinConverter.__init__   s/    "&#'#'$($r    c                    | j                   j                         }t        j                  || j                        }|j
                  x}| _        | j                   j                         }|j                  t        j                  d      st        | j                   j                         }t        |t              r|d   }t        j                  || j                        }||j                  k(  r4|j                  | _        |j                  | _        |j                  | _        y |j                  | _        |j                  | _        |j                  | _        y )NONr
   )r   r:   r   r`   r   ra   r{   r;   r   r<   r   rO   r   rb   r|   r}   )r   rA   rc   r{   s       r   r   zJoinConverter.parse   s    nn!!#  djj1),2d&nn!!#yy.  nn!!#c;'a&C  djj1#//)!nnDO"D # 0 0D!ooDO"//D #Dr    c                     | j                   | j                  j                   k(  r| j                  }n| j                    d| j                   }d| j                  || j                  | j                  di}|S )N.$lookup)from
localFieldforeignFieldas)rb   r   r|   r{   r}   )r   local_fieldlookups      r   _lookupzJoinConverter._lookup   su    ??djj333**K!__-Qt/?/?.@AK (() $ 1 1&&	
 r    )	r(   r)   r*   r+   r,   r   r   r   rI   rJ   s   @r   ry   ry      s%       0.r    ry   c                   $     e Zd Z fdZd Z xZS )InnerJoinConverterc                     t        |   |  y r   r5   r   r~   s     r   r   zInnerJoinConverter.__init__       $r    c                     | j                   | j                  j                   k(  r| j                  }n| j                    d| j                   }| j                         }d|d ddii|dd| j                  z   ig}|S )Nr   rv   T)z$nez$exists$unwind$)rb   r   r|   r   r{   )r   match_fieldr   r\   s       r   r'   zInnerJoinConverter.to_mongo   s    ??djj333**K!__-Qt/?/?.@AK ##'" 3!1!11
 r    r(   r)   r*   r   r'   rI   rJ   s   @r   r   r      s     r    r   c                   *     e Zd Z fdZd Zd Z xZS )OuterJoinConverterc                     t        |   |  y r   r   r~   s     r   r   zOuterJoinConverter.__init__   r   r    c                     | j                   j                  j                  }i }|D ]2  }t        |t              r|j
                  |k(  s$d ||j                  <   4 |S r   )r   selected_columnsr4   rO   r   ra   rE   )r   ra   toksfieldsrA   s        r   _null_fieldszOuterJoinConverter._null_fields   sU    zz**55 	*Cc<0SYY%5G%)szz"	* r    c                     | j                         }| j                  | j                        }|dd| j                  z   ddid| j                  dd| j                  z   |giiig}|S )Nr   r   T)pathpreserveNullAndEmptyArrays
$addFieldsz$ifNull)r   r   r{   )r   r   null_fieldsr\   s       r   r'   zOuterJoinConverter.to_mongo   s    ''(8(89 $"2"2226 $$!C$*:*:$:K#H'
" r    )r(   r)   r*   r   r   r'   rI   rJ   s   @r   r   r      s     r    r   c                   *     e Zd Z fdZd Zd Z xZS )LimitConverterc                 ,    d | _         t        |   |  y r   )limitr5   r   r~   s     r   r   zLimitConverter.__init__   s    !
$r    c                 l    | j                   j                         }t        |j                        | _        y r   )r   r:   intvaluer   rl   s     r   r   zLimitConverter.parse  s#    nn!!#^
r    c                     d| j                   iS )Nr   r   r$   s    r   r'   zLimitConverter.to_mongo  s    $$r    rH   rJ   s   @r   r   r      s     $%r    r   c                       e Zd Zd Zy)AggLimitConverterc                     d| j                   iS )Nz$limitr   r$   s    r   r'   zAggLimitConverter.to_mongo  s    $**%%r    Nrw   r.   r    r   r   r   
      &r    r   c                   *     e Zd Z fdZd Zd Z xZS )OrderConverterc                 ,    g | _         t        |   |  y r   )columnsr5   r   r~   s     r   r   zOrderConverter.__init__  s    ,.$r    c                 *   | j                   j                         }|j                  t        j                  d      st
        | j                   j                         }| j                  j                  t        j                  || j                               y NBY)r   r:   r;   r   r<   r   r   extendr   r?   r   rl   s     r   r   zOrderConverter.parse  sa    nn!!#yy.  nn!!#H//TZZ@Ar    c                 r    | j                   D cg c]  }|j                  |j                  f }}d|iS c c}w )Nsort)r   rE   order)r   rA   r   s      r   r'   zOrderConverter.to_mongo  s6    37<<@CSYY'@@~ As   4rH   rJ   s   @r   r   r     s     Br    r   c                   *     e Zd Z fdZd Zd Z xZS )SetConverterc                 ,    g | _         t        |   |  y r   r4   r5   r   r~   s     r   r   zSetConverter.__init__$  s    /1$r    c                     | j                   j                         }| j                  j                  t	        j
                  || j                               y r   )r   r:   r4   r   r   r?   r   rl   s     r   r   zSetConverter.parse(  s7    nn!!#x223

CDr    c                     dd| j                   D ci c]>  }|j                  |j                  #| j                  j                  |j                     nd @ c}iiS c c}w )Nupdatez$set)r4   r|   rhs_indexesr   rj   )r   rc   s     r   r'   zSetConverter.to_mongo,  sh      $0  OO2 &*ZZ%6%6s%G8<=0
 	
0s   AArH   rJ   s   @r   r   r   "  s     E
r    r   c                       e Zd Zd Zy)AggOrderConverterc                 r    t               }| j                  D ]  }|j                  ||j                  <    d|iS )Nz$sort)r   r   r   rV   )r   r   rA   s      r   r'   zAggOrderConverter.to_mongo9  s9    }<< 	(C!iiDO	( r    Nrw   r.   r    r   r   r   7  s    r    r   c                   >    e Zd ZU eeeef      ed<   ed   ed<   d Zy)
_Tokens2Idr4   r   r   c                    i }| j                   D ]  }t        |t              r*|j                  r|j	                         ||j                  <   =|j
                  |j                  k(  rd|j                   ||j                  <   s	 d|j                   ||j                     |j
                  <    |S # t        $ r+ |j
                  d|j                   i||j                  <   Y w xY w)Nr   )	r4   rO   r   rU   r'   rE   rV   ra   KeyError)r   rY   idens      r   to_idz_Tokens2Id.to_idH  s    OO 
	FD$(TZZ"&--/DJJ

*$%djj\"2DJJF56tzzl3CC

ODKK0
	F( 
   F'+{{a

|4D&EC

OFs   )B001C$#C$N)	r(   r)   r*   r   r-   r   r   rq   r   r.   r    r   r   r   A  s5    	-
 !   & ' 'r    r   c                   $     e Zd Z fdZd Z xZS )r=   c                     t        |   |  y r   r   r~   s     r   r   zDistinctConverter.__init__b  r   r    c                 :    | j                         }dd|iidddiigS )NrZ   rY   z$replaceRootnewRootz$_id)r   )r   rY   s     r   r'   zDistinctConverter.to_mongoe  s?    jjl 3 v!
 	
r    r   rJ   s   @r   r=   r=   a  s     
r    r=   c                   *     e Zd Z fdZd Zd Z xZS )NestedInQueryConverterc                 :    || _         d | _        t        |   |  y r   )_token	_in_queryr5   r   )r   tokenr   r7   s      r   r   zNestedInQueryConverter.__init__x  s    8<$r    c           	          ddl m}  || j                   j                  | j                   j                  t	        | j
                  j                  dd       d   | j                   j                        | _        y )Nr
   )SelectQueryr   )	r   r   dbconnection_propertiessqlparser   r   rj   r   )r   r   s     r   r   zNestedInQueryConverter.parse}  sT    &$JJMMJJ,,T[[&&q,-a0JJ	
r    c           	          d| j                   j                  | j                   j                         ddidddddd| j                   j                  j                  d	   j
                  z   d
iiig}|S )Nr   
_nested_in)r   r\   r   r   z$mapz$_nested_inlookup_resultz$$lookup_result.r   )inputr   in)r   rb   _make_pipeliner   r4   rE   )r   r\   s     r   r'   zNestedInQueryConverter.to_mongo  s      NN55 $ = = ?&  %2"1"4t~~7V7V7a7abc7d7k7k"k!#

( r    rH   rJ   s   @r   r   r   v  s     

r    r   c                   X     e Zd ZU dZded<   dZded<   ded   def fdZd	 Z	d
 Z
 xZS )HavingConverterNr   rf   rg   r   r   r   c                 &    t         |   ||       y r   r   r6   s      r   r   zHavingConverter.__init__  s     		*r    c                     | j                   d d }t        || j                  | j                  j                        | _        | j                   j                  d       y )N   ri   r   )r   r   r   rj   rg   skiprl   s     r   r   zHavingConverter.parse  sI    nnRa **::$$

 	Ar    c                 :    d| j                   j                         iS ru   ro   r$   s    r   r'   zHavingConverter.to_mongo  rp   r    )r(   r)   r*   rf   rq   rg   r-   r   r   r   r'   rI   rJ   s   @r   r   r     sB    IyB	+ 3 4+ )+.r    r   c                   *     e Zd Z fdZd Zd Z xZS )GroupbyConverterc                 ,    g | _         t        |   |  y r   r   r~   s     r   r   zGroupbyConverter.__init__  s    *,$r    c                 *   | j                   j                         }|j                  t        j                  d      st
        | j                   j                         }| j                  j                  t        j                  || j                               y r   )r   r:   r;   r   r<   r   r4   r   r   r?   r   rl   s     r   r   zGroupbyConverter.parse  sa    nn!!#yy.  nn!!#x223

CDr    c                 B   | j                         }d|i}ddi}| j                  j                  j                  D ][  }t	        |t
              rd|j                   ||j                  <   0d||j                  <   |j                         ||j                  <   ] d|id|ig}|S )NrY   Fz$_id.TrZ   rR   )	r   r   r   r4   rO   r   rV   rU   r'   )r   rY   r[   rW   rF   r\   s         r   r'   zGroupbyConverter.to_mongo  s    jjl 3
 5
 

33>> 	<H(M2,1(..1A*B'*.'(0(9(9(;hnn%	< % G	
 r    rH   rJ   s   @r   r   r     s     Er    r   c                   *     e Zd Z fdZd Zd Z xZS )OffsetConverterc                 ,    d | _         t        |   |  y r   )offsetr5   r   r~   s     r   r   zOffsetConverter.__init__  s    $r    c                 l    | j                   j                         }t        |j                        | _        y r   )r   r:   r   r   r   rl   s     r   r   zOffsetConverter.parse  s#    nn!!##))nr    c                     d| j                   iS )Nr   r   r$   s    r   r'   zOffsetConverter.to_mongo  s    $$r    rH   rJ   s   @r   r   r     s     %%r    r   c                       e Zd Zd Zy)AggOffsetConverterc                     d| j                   iS )Nz$skipr   r$   s    r   r'   zAggOffsetConverter.to_mongo  s    %%r    Nrw   r.   r    r   r   r     r   r    r   )3r+   typingcollectionsr   r   r   r   sqlparse.sqlr   r   r-   r   r	   O r   query_moduler4   r   r   r   	functionsr   r   	operatorsr   
exceptionsr   r   r   r   r0   rL   r^   re   rs   ry   r   r   r   r   r   r   r   r   r=   r   r   r   r   r   r.   r    r   <module>r     s3   
  # . $ 2 2 # H H ,  ' ." "*#I #2)4 )X*I *.Y . . .0I 0f <" "J
%Y 
%& &Y $
9 
*  @
-z 
*&Y &R.i ..&y* &R
%i 
%& &r    