
    h1                     \   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      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      Z$ G d de$      Z%e	e
dZ&y)    N)UnionIteratorOptional)	ASCENDING
DESCENDING)tokensparse)Token
IdentifierFunction
ComparisonParenthesisIdentifierList	Statement   )query   )SQLDecodeErrorNotSupportedError)SQLConstIdentifierz$djongo.sql2mongo.functions.CountFuncz%djongo.sql2mongo.functions.SimpleFuncSQLIdentifierSQLComparisonSQLPlaceholderc                       e Zd Zej                  deddfd       Zd Zededdde	e
   fd       Zededdde
fd       Zedefd	       Zy
)SQLTokentokenr   query_module.BaseQueryc                      || _         || _        y N)_tokenr   )selfr   r   s      ^/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/djongo/sql2mongo/sql_tokens.py__init__zSQLToken.__init__   s     
    c                     | j                    S r   )r    r!   s    r"   __repr__zSQLToken.__repr__   s    ++r$   returnc              #     K   ddl m} t        | t              rut        | d   t              r+	 t        | d   d   j                         t        | |       y t        | d   t              r|j                  | |       y t        | |       y t        | t              r|j                  | |       y t        | t              rt        | |       y t        | t              r4| j                         D ]   }t         j#                  ||      E d {    " y t        | t              rt%        | |       y t'        d| j                         # t        $ r t        | d   d   |       Y y w xY w7 aw)Nr   )SQLFuncr   zUnsupported: )	functionsr*   
isinstancer   r   intvaluer   
ValueErrorr   r   	token2sqlr   r   r   get_identifiersr   
tokens2sqlr   r   )r   r   r*   toks       r"   r2   zSQLToken.tokens2sql   s?     	'eZ(%(K0;a))* -UE::E!Hh/''u55#E511x(##E511z*u--~.,,. ;#..sE:::;{+ .. =!>??% " <'aU;;< ;s5   *E2E CE2E0>E2E-*E2,E--E2c                 @    t        t        j                  | |            S r   )nextr   r2   )r   r   s     r"   r0   zSQLToken.token2sql<   s     H''u566r$   c                     t        t        j                  d| j                  t        j                        j                  d            S )Nz%\(([0-9]+)\)s)flagsr   )r-   rematchr.   
IGNORECASEgroup)r   s    r"   placeholder_indexzSQLToken.placeholder_indexB   s/    288-u{{"--PVVWXYZZr$   N)__name__
__module____qualname__abcabstractmethodr
   r#   r'   staticmethodr   all_token_typesr2   r0   r-   r<    r$   r"   r   r      s    0   @% @2@ 1@ @: 7 717&7 7
 [C [ [r$   r   c                   d     e Zd Zej                   fd       Zd Zd Zd Ze	de
fd       Z xZS )AliasableTokenc                 z   t        |   |  | j                  j                  | _        | j                  r| | j                  j
                  | j                  <   | j                  | j                  j                  | <   | j                         r0| j                  j                  j                  | j                         y y y r   )
superr#   r   token_aliasaliasalias2tokentoken2aliasis_explicit_aliasaliased_namesaddr!   args	__class__s     r"   r#   zAliasableToken.__init__I   s    $6:jj6L6L::7;D((415D((.%%'  ..224::> ( r$   c                     | j                         r"t        | j                  d   j                        S t        | j                  j                        S Nr   )rM   hashr    r.   r&   s    r"   __hash__zAliasableToken.__hash__T   s<    !!#A,,--DKK%%&&r$   c                 0    t        |       t        |      k(  S r   )rU   )r!   others     r"   __eq__zAliasableToken.__eq__Y   s    DzT%[((r$   c                     t        | j                  j                        dk(  xr- | j                  d   j                  t        j                  d      S )N   r   AS)lenr    r   r9   Keywordr&   s    r"   rM   z AliasableToken.is_explicit_alias\   s;    4;;%%&!+ZA0D0DV^^UY0ZZr$   r(   c                 l    | j                   j                         s| j                   j                         S y r   )r    get_ordering	get_aliasr&   s    r"   rJ   zAliasableToken.alias_   s,     {{'');;((** *r$   )r=   r>   r?   r@   rA   r#   rV   rY   rM   propertystrrJ   __classcell__rR   s   @r"   rF   rF   G   sF    ? ?'
)[ +s + +r$   rF   c                        e Zd Z fdZed        Zedefd       Zedefd       Zedefd       Z	edefd       Z
 xZS )r   c                     t        |   |  d | _        | j                  j	                         r4| j                  j	                         | _        | j                  d   | _        y y rT   )rH   r#   _ordr    r`   rP   s     r"   r#   zSQLIdentifier.__init__h   sO    $	;;##%002DI++a.DK &r$   c                 L    | j                   t        t        | j                      S r   )rh   r   ORDER_BY_MAPr&   s    r"   orderzSQLIdentifier.orderp   s!    99  DII&&r$   r(   c                    | j                   | j                  j                  j                  v r| j                   S | j                  | j                  j
                  k(  r| j                  S | j                   d| j                   S )N.)given_tabler   rI   rN   table
left_tablecolumnr&   s    r"   fieldzSQLIdentifier.fieldv   se    tzz55CCC###::...;;jj\4;;-00r$   c                     | j                   }| j                  j                  }	 ||   j                  S # t        $ r |cY S w xY wr   )rn   rI   rK   ro   KeyError)r!   namerK   s      r"   ro   zSQLIdentifier.table   sH    &&22	t$*** 	K	s   3 A Ac                     | j                   j                         }|| j                   j                         }|t        |S r   )r    get_parent_nameget_real_namer   r!   ru   s     r"   rn   zSQLIdentifier.given_table   s;    {{**,<;;,,.D<  r$   c                 J    | j                   j                         }|t        |S r   )r    rx   r   ry   s     r"   rq   zSQLIdentifier.column   s$    {{((*<  r$   )r=   r>   r?   r#   rb   rk   rc   rr   ro   rn   rq   rd   re   s   @r"   r   r   f   s    ) ' '
 1s 1 1 s   S     r$   r   c                   @     e Zd Z fdZedefd       ZdefdZ xZ	S )r   c                     t        |   |  y r   rH   r#   rP   s     r"   r#   zSQLConstIdentifier.__init__   s    $r$   r(   c                 L    t        | j                  d   d   j                        S )Nr   r   )r-   r    r.   r&   s    r"   r.   zSQLConstIdentifier.value   s     4;;q>!$**++r$   c                     d| j                   iS )Nz$literal)r.   r&   s    r"   to_mongozSQLConstIdentifier.to_mongo   s    DJJ''r$   )
r=   r>   r?   r#   rb   r-   r.   dictr   rd   re   s   @r"   r   r      s/      ,s , ,($ (r$   r   c                   \    e Zd Zed        Zed        Zed        Zed        Zed        Zy)r   c                 n    t        | j                  j                  | j                        }|j                  S r   )r   r    leftr   ro   r!   lhss     r"   rp   zSQLComparison.left_table   s&    DKK,,djj9yyr$   c                 n    t        | j                  j                  | j                        }|j                  S r   )r   r    r   r   rq   r   s     r"   left_columnzSQLComparison.left_column   s&    DKK,,djj9zzr$   c                 n    t        | j                  j                  | j                        }|j                  S r   )r   r    rightr   ro   r!   rhss     r"   right_tablezSQLComparison.right_table   s&    DKK--tzz:yyr$   c                 n    t        | j                  j                  | j                        }|j                  S r   )r   r    r   r   rq   r   s     r"   right_columnzSQLComparison.right_column   s&    DKK--tzz:zzr$   c                 <   | j                   j                  j                  t        j                  j
                  k(  s;| j                   j                  j                  t        j                  d      ry t        | j                  | j                   j                        }|S )NNULL)
r    r   ttyper   NamePlaceholderr9   r^   r   r<   )r!   indexs     r"   rhs_indexeszSQLComparison.rhs_indexes   sj    {{  &&&++*A*AA{{  &&v~~v>  &&t{{'8'89r$   N)	r=   r>   r?   rb   rp   r   r   r   r   rD   r$   r"   r   r      sd             r$   r   c                   :     e Zd Zd Zdeddf fdZdefdZ xZS )r   c              #      K   | j                   dd d   }t        |t              r)|j                         D ]  }| j	                  |        y | j	                  |       y w)Nr   r   )r    r,   r   r1   	get_value)r!   r3   aids      r"   __iter__zSQLPlaceholder.__iter__   s]     kk!B"c>***, *nnS))* ..%%s   A A"r   r   r   c                 &    t         |   ||       y r   r}   )r!   r   r   rR   s      r"   r#   zSQLPlaceholder.__init__   s    &r$   r3   c                    |j                   t        j                  j                  k(  r| j	                  |      S |j                  t        j                  d      ry |j                  t        j                  d      ryt        )Nr   DEFAULT)r   r   r   r   r<   r9   r^   r   )r!   r3   s     r"   r   zSQLPlaceholder.get_value   sY    99///))#..YYv~~v.YYv~~y1  r$   )r=   r>   r?   r   r
   r#   r   rd   re   s   @r"   r   r      s(    &'e ',D '!U !r$   r   c                       e Zd Zedefd       Zdeeef   fdZd Z	defdZ
d Zdefd	Zdee   fd
Zd Zedefd       Zedefd       Zd Zy)SQLStatementr(   c                 4    | j                   | j                     S r   )
_statement_tok_idr&   s    r"   current_tokenzSQLStatement.current_token   s    t||,,r$   	statementc                 J    || _         d| _        | j                         | _        y rT   )r   r   
_generator	_gen_inst)r!   r   s     r"   r#   zSQLStatement.__init__   s    #*r$   c                 .    t        | j                  |      S r   )getattrr   )r!   items     r"   __getattr__zSQLStatement.__getattr__   s    t--r$   c              #   8   K   | j                   E d {    y 7 wr   )r   r&   s    r"   r   zSQLStatement.__iter__   s     >>!!s   c                 ,    t        | j                        S r   )rc   r   r&   s    r"   r'   zSQLStatement.__repr__   s    4??##r$   r   c                    |j                   xs d| j                  z   }|j                  xr | j                  |j                  z   }dj                  d | j                  || D              }t        |      d   }t        |      S )Nr    c              3   2   K   | ]  }t        |        y wr   )rc   ).0r3   s     r"   	<genexpr>z+SQLStatement.__getitem__.<locals>.<genexpr>   s     F3c#hFs   )startr   stopjoinr   sqlparser   )r!   r   r   r   sqls        r"   __getitem__zSQLStatement.__getitem__   sk    qDLL0yy5T\\DII5ggF$//%*EFFsmAC  r$   c                 L    	 t        | j                        S # t        $ r Y y w xY wr   )r5   r   StopIterationr&   s    r"   r5   zSQLStatement.next   s(    	'' 		s    	##c                 .    | xj                   |z  c_         y r   )r   )r!   nums     r"   skipzSQLStatement.skip  s    r$   c                 R    | j                   j                  | j                        d   S Nr   )r   
token_prevr   r&   s    r"   
prev_tokenzSQLStatement.prev_token       ))$,,7::r$   c                 R    | j                   j                  | j                        d   S r   )r   
token_nextr   r&   s    r"   
next_tokenzSQLStatement.next_token
  r   r$   c              #      K   | j                   | j                     }| j                  ?| | j                   j                  | j                        \  | _        }| j                  >y y wr   )r   r   r   )r!   r   s     r"   r   zSQLStatement._generator  sR     -ll&K"&//"<"<T\\"JDL% ll&s   A#A(&A(N)r=   r>   r?   rb   r
   r   Ur   r#   r   r   r'   slicer   Or5   r   r   r   r   rD   r$   r"   r   r      s    -u - -+!Iu$4"5 +
."% "$! !ah  ;E ; ; ;E ; ;Kr$   r   c                       e Zd Z e       Z e       Z e       Z e       Z e       ZeeeeedZ	dZ
	 	 	 ddededefdZedefd       Zed	efd
       Zedefd       Zedefd       Zy)SQLColumnDef)UNIQUEAUTOINCREMENTzPRIMARY KEYzNOT NULLr   Nru   	data_typecol_constraintsc                 .    || _         || _        || _        y r   ru   r   r   )r!   ru   r   r   s       r"   r#   zSQLColumnDef.__init__%  s     	".r$   othersc              #     K   | r0	 | j                  dd      \  }} 	 t        j                  |    | r/y y # t        $ r | }d } Y *w xY w# t        $ rv | rc	 | j                  dd      \  }} n# t        $ r | }d } Y nw xY w| d| }	 t        j                  |    n)# t        $ r t        d|       w xY wt        d|       Y w xY ww)N r   zUnknown column constraint: )splitr/   r   _maprt   r   )r   ru   part2s      r"   _get_constraintszSQLColumnDef._get_constraints-  s    %||C3fO"''--   
  O&(.S!(<v% & &!%& #V1UG,DS*//55# S,/J4&-QRRS )+Ftf)MNN	 6Os   C6 A	 CCACAC	CA+*C+A;8C:A;;
CBCB44CCCCr   c              #     K   | dd } | r| d   dk(  r>	 | j                  dd      \  }} | j                         } t        j	                  |       n| j                  d      rd g}d}t        |       D ]J  \  }}|dk(  r'|d   |j                          |j                  |       n|dk(  r|j                          |rJ n t        | |d        dkD  r	| |d	z   d  } nd } t                nt        d
|        | ry y # t        $ r | }d } Y w xY ww)Nr   r   r   ",
CONSTRAINT()   zSyntax Error: )r   stripr/   r   def_str2col_def
startswith	enumeratepopappendr]   SQLColumnConstraintr   )r   def_strindexesics        r"   sql2col_defszSQLColumnDef.sql2col_defsG  s#    !Bi1v}&#&99S!#4LGS
 ))+C"227;;-&%cN DAqCx"1:-#KKMq)c" s12w<!#acd)CC)++$~cU%;<<;  " !GCs4   DC: BD;<D8D:D
D	D

Dr   c                    | j                   s.ddlm} t        |j                  j                               | _         |dd  j                  dd      \  }}|j                         }|j                  dd      \  }}|| j                   vrt        d|       t        t        j                  |            }t        |||      S )Nr   DatabaseWrapperr   r   r   Data of type: r   )supported_data_typesdjongo.baser   set
data_typesvaluesr   r   r   r   r   )clsr   r   ru   rX   r   constraint_sqlr   s           r"   r   zSQLColumnDef.def_str2col_defi  s    ''3'*?+E+E+L+L+N'OC$abk''Q/e$)KKQ$7!	>C444#nYK$@AAl;;NKL&/,;= 	=r$   r   c              #   N  K   ddl m} t        |j                  j	                               }|j
                  j                  d      j                  d      }|D ]  }|j                         }|j                  dd      \  }}|dk(  rt                :|d   dk7  rt        d	      |dd  j                  dd      \  }}|j                         }|j                  dd      \  }}	||vrt        d
|       t        t        j                  |	            }
t        |||
        y w)Nr   r   z()r   r   r   r   r   zColumn identifier not quotedr   r   )r   r   r   r   r   r.   r   r   r   r   r   r   r   )r   r   r   r   defscolru   rX   r   r   r   s              r"   statement2col_defszSQLColumnDef.statement2col_defs{  s    /"?#=#=#D#D#FG{{  &,,S1 	DC))+C))C+KD%|#)++q6S=()GHH!!"gmmC3e,1KKQ,?)	>$88+nYK,HII"%l&C&CN&S"T"-63BD D!	Ds   D#D%)NNN)r=   r>   r?   objectnot_nulluniqueautoincrement
primarykeynullr   r   rc   r   r#   rB   r   r   classmethodr   r
   r   rD   r$   r"   r   r     s    xHXFHMJ8D&!D   ""&(,/// #&/ O O O2 =# = =B =c = =" Du D Dr$   r   c                       e Zd Zy)r   N)r=   r>   r?   rD   r$   r"   r   r     s    r$   r   )ASCDESC)'r@   r8   typingr   r   r   r   r   pymongor   r   r   r   r	   sqlparse.sqlr
   r   r   r   r   r   r   r   r   query_module
exceptionsr   r   rC   r   rF   r   r   r   r   r   r   r   rj   rD   r$   r"   <module>r     s    
 	 6 6 ) . h h h # : % &2[ 2[j+X +>2N 2j
( 
(H B!X !01K 1Kh~D ~DB	, 	
 r$   