
    ht                        d Z ddlZddlZddlmZ ddlmZmZmZ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 dd	lmZ dd
l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#m$Z$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/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF ddlGmHZH  eeI      ZJe G d d             ZK G d dej                        ZMeMZN G d deM      ZO G d deM      ZP G d deP      ZQ G d  d!eN      ZR G d" d#eN      ZS G d$ d%eO      ZT G d& d'eO      ZU G d( d)eN      ZV G d* d+      ZWy),zT
Module with constants and mappings to build MongoDB queries from
SQL constructors.
    N)	getLogger)OptionalDictListUnionSequenceSet)	dataclassfield)MongoClient)ReturnDocument)CommandCursor)Cursor)Database)OperationFailureCollectionInvalid)parse)tokens)
IdentifierParenthesisWhere	Statement   )SQLDecodeErrorMigrationError
print_warn   )SQLFunc)SQLTokenSQLStatementSQLIdentifierAliasableTokenSQLConstIdentifierSQLColumnDefSQLColumnConstraint)ColumnSelectConverterAggColumnSelectConverterFromConverterWhereConverterAggWhereConverterInnerJoinConverterOuterJoinConverterLimitConverterAggLimitConverterOrderConverterSetConverterAggOrderConverterDistinctConverterNestedInQueryConverterGroupbyConverterOffsetConverterAggOffsetConverterHavingConverter)basec                       e Zd ZU  ee      Zeeee	e
ef   f   ed<    ee      Zeee	e
ef   ef   ed<    ee      Zee   ed<   y)
TokenAlias)default_factoryalias2tokentoken2aliasaliased_namesN)__name__
__module____qualname__dataclass_fielddictr<   r   strUr"   r   r!   __annotations__r=   setr>   r	        Y/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/djongo/sql2mongo/query.pyr:   r:   %   s     0?t/T c1^$*+ , , - U
 0?t/T a%& '(+, - U .cBM3s8BrI   r:   c                   r    e Zd ZdedddedefdZd Zej                  d        Z
ej                  d	        Zy
)	BaseQuerydbconnection_propertiesbase.DjongoClient	statementparamsc                     || _         || _        || _        || _        t	               | _        d | _        d | _        d | _        | j                          y N)
rP   rM   rN   rQ   r:   token_aliasnested_query
left_table_cursorr   )selfrM   rN   rP   rQ   s        rJ   __init__zBaseQuery.__init__1   sJ    
 #%:"%<>B)-

rI   c              #      K   y wrS   rH   rX   s    rJ   __iter__zBaseQuery.__iter__@   s	     s   c                     t         rS   NotImplementedErrorr[   s    rJ   r   zBaseQuery.parseD       !!rI   c                     t         rS   r^   r[   s    rJ   executezBaseQuery.executeH   r`   rI   N)r?   r@   rA   r   r   r   rY   r\   abcabstractmethodr   rb   rH   rI   rJ   rL   rL   0   sd    (; & "	 	" " 	" "rI   rL   c                   B     e Zd Zej                   fd       Zd Z xZS )DDLQueryc                     t        |   |  y rS   superrY   rX   args	__class__s     rJ   rY   zDDLQuery.__init__R   s    $rI   c                      y rS   rH   r[   s    rJ   rb   zDDLQuery.executeV       rI   )r?   r@   rA   rc   rd   rY   rb   __classcell__rl   s   @rJ   rf   rf   P   s        rI   rf   c                   6    e Zd Zd Zej
                  d        Zy)DQLQueryc                      y rS   rH   r[   s    rJ   rb   zDQLQuery.execute\   rn   rI   c                     t         rS   r^   r[   s    rJ   countzDQLQuery.count_   r`   rI   N)r?   r@   rA   rb   rc   rd   ru   rH   rI   rJ   rr   rr   Z   s!     	" "rI   rr   c                   N     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Z xZS )
SelectQueryc                     d | _         d | _        g | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        t        | ,  |  y rS   )selected_columnswherejoinsorderoffsetlimitdistinctgroupbyhavingrW   ri   rY   rj   s     rJ   rY   zSelectQuery.__init__f   s^    AE/3
  	
 04
15/3
593715@D$rI   c                 x   t        | j                        }|D ]  }|j                  t        j                  d      rt        | |      | _        6|j                  t        j                  d      rt        | |       c|j                  t        j                  d      rt        | |      | _
        |j                  t        j                  d      rt        | |      | _        |j                  t        j                  d      rt        | |      | _        |j                  t        j                  d      r)t        | |      }| j                   j#                  |       B|j                  t        j                  d      r)t%        | |      }| j                   j#                  |       |j                  t        j                  d      rt'        | |      | _        |j                  t        j                  d	      rt+        | |      | _        t/        |t0              rt3        | |      | _        t7        d
|        y )NSELECTFROMLIMITORDEROFFSETz
INNER JOINzLEFT OUTER JOINGROUPHAVINGzUnknown keyword: )r    rP   matchr   DMLr&   ry   Keywordr(   r-   r~   r/   r|   r5   r}   r+   r{   appendr,   r4   r   r7   r   
isinstancer   r)   rz   r   )rX   rP   tok	converters       rJ   r   zSelectQuery.parsev   s    0	 "	@CyyX.(=dI(N%6>>62dI.6>>73+D)<
6>>73+D)<
6>>84-dI>6>><8.tY?	

!!),6>>+<=.tY?	

!!),6>>73/i@6>>84-dI>C'+D)<
 %'8%>??E"	@rI   c              #      K   | j                   | j                         | _         | j                   }|j                  sy |D ]  }| j                  |        y wrS   )rW   _get_cursoralive_align_results)rX   cursordocs      rJ   r\   zSelectQuery.__iter__   sV     <<++-DL|| 	+C%%c**	+s   AAc                     | j                   | j                         | _         t        t        | j                               S rS   )rW   r   lenlistr[   s    rJ   ru   zSelectQuery.count   s0    <<++-DL4%&&rI   c                     | j                   s$| j                  s| j                  s| j                  ryt	        d | j
                  j                  D              ryy)NTc              3   H   K   | ]  }t        |t        t        f        y wrS   )r   r   r#   ).0	sql_tokens     rJ   	<genexpr>z1SelectQuery._needs_aggregation.<locals>.<genexpr>   s'      B )g/A%BC Bs    "F)rU   r{   r   r   anyry   
sql_tokensr[   s    rJ   _needs_aggregationzSelectQuery._needs_aggregation   sM    ::==<< B $ 5 5 @ @B BrI   c                    g }| j                   D ]!  }|j                  |j                                # | j                  r)|j                  | j                  j                                | j                  r>t
        | j                  _        |j                  | j                  j                                | j                  r)|j                  | j                  j                                | j                  r)|j                  | j                  j                                | j                  r)|j                  | j                  j                                | j                  r>t        | j                  _        |j                  | j                  j                                | j                  r>t        | j                  _        |j                  | j                  j                                | j                  r>t         | j                  _        |j                  | j                  j                                | j#                         r>t$        | j&                  _        |j                  | j&                  j                                |S rS   )r{   extendto_mongorU   rz   r*   rl   r   r   r   r   r|   r1   r}   r6   r~   r.   _needs_column_selectionr'   ry   )rX   pipelinejoins      rJ   _make_pipelinezSelectQuery._make_pipeline   s   JJ 	-DOODMMO,	- OOD--6689::#4DJJ OODJJ//12<<OODLL1134;;OODKK0023==OODMM2245::#4DJJ OODJJ//12;;$6DKK!OODKK0023::#4DJJ OODJJ//12'').FD!!+OOD11::<=rI   c                 T    | j                   xs | j                   xr | j                  S rS   )r   r   ry   r[   s    rJ   r   z#SelectQuery._needs_column_selection   s#    ==0DLL1Kd6K6KKrI   c                 b   | j                         rR| j                         }| j                  | j                     j	                  |      }t
        j                  d|        |S i }| j                  r)|j                  | j                  j                                | j                  r)|j                  | j                  j                                | j                  r)|j                  | j                  j                                | j                  r)|j                  | j                  j                                | j                  r)|j                  | j                  j                                 | j                  | j                     j                  di |}t
        j                  d|        |S )NzAggregation query: zFind query: rH   )r   r   rM   rV   	aggregateloggerdebugrz   updater   ry   r~   r|   r}   find)rX   r   curkwargss       rJ   r   zSelectQuery._get_cursor   s9   ""$**,H''$//*44X>CLL.xj9:* 
' Fzzdjj1134$$d33<<>?zzdjj1134zzdjj1134{{dkk2245/$''$//*//9&9CLL<x01
rI   c                    g }| j                   r| j                   j                  }n| j                  j                  }|D ]  }t        |t              rf|j
                  | j                  k(  r 	 |j                  ||j                            L	 |j                  ||j
                     |j                            y|j                  ||j                             t        |      S # t        $ r? | j                  j                  rt        |j                        |j                  d        Y w xY w# t        $ r@ | j                  j                  rt        |j                        |j                  d        Y 7w xY wrS   )r   r   ry   r   r!   tablerV   r   columnKeyErrorrN   enforce_schemar   aliastuple)rX   r   retr   selecteds        rJ   r   zSelectQuery._align_results  s,   ==11J..99J" 	0H(M2>>T__4)

3x#78)

3x~~#6x#GH 

3x~~./#	0& Sz $ )55DD"0"AA

4() $ )55DD"0"AA

4()s&   +C"+D-"AD*)D*-AE65E6)r?   r@   rA   rY   r   r\   ru   r   r   r   r   r   ro   rp   s   @rJ   rw   rw   d   s4      %@N'	%NL6rI   rw   c                   0     e Zd Z fdZd Zd Zd Z xZS )UpdateQueryc                 d    d | _         d | _        d | _        d | _        d | _        t        |   |  y rS   )selected_tableset_columnsrz   resultr   ri   rY   rj   s     rJ   rY   zUpdateQuery.__init__#  s5    ?C37/3
$rI   c                 .    | j                   j                  S rS   )r   matched_countr[   s    rJ   ru   zUpdateQuery.count+      {{(((rI   c                 ~   t        | j                        }|D ]  }|j                  t        j                  d      r+t        | |      }|j                  d   j                  | _        N|j                  t        j                  d      rt        | |      x}| _        t        |t              rt        | |      x}| _        t          i | _        | j                  r3| j"                  j%                  | j                  j'                                | j"                  j%                  | j                  j'                                y )NUPDATEr   SET)r    rP   r   r   r   r&   r   r   rV   r   r0   r   r   r   r)   rz   r   r   r   r   )rX   rP   r   cs       rJ   r   zUpdateQuery.parse.  s     0	 	%CyyX.)$	:"#,,q/"7"76>>51'3D)'DDD$C'!/i!@@DJ %$	% ::KKtzz22454++4467rI   c                     | j                   } || j                     j                  di | j                  | _        t
        j                  d| j                  j                   d| j                  j                          y )Nzupdate_many: z, matched: rH   )	rM   rV   update_manyr   r   r   r   modified_countr   )rX   rM   s     rJ   rb   zUpdateQuery.executeF  s^    WW5b)55DD}T[[%?%?$@DKKLeLeKfghrI   )r?   r@   rA   rY   ru   r   rb   ro   rp   s   @rJ   r   r   !  s     )80irI   r   c                   T     e Zd Z	 	 d fdZdefdZdefdZdefdZd Zd Z	 xZ
S )	InsertQueryc                 H    || _         d | _        g | _        t        |   |  y rS   )_result_ref_cols_valuesri   rY   )rX   
result_refrk   rl   s      rJ   rY   zInsertQuery.__init__N  s(     &
$rI   rP   c                    |j                         }|j                         }|| j                  j                  vrJ| j                  j                  rt        d| d      | j                  j                  j                  |       || _        y )NzTable z does not exist in database)nextget_namerN   cached_collectionsr   r   addrV   )rX   rP   r   
collections       rJ   _tablezInsertQuery._tableV  sr    nn\\^
T77JJJ))88$vj\9T%UVV&&99==jI$rI   c                     |j                         }t        j                  |d   |       D cg c]  }|j                   c}| _        y c c}w )Nr   )r   r   
tokens2sqlr   r   )rX   rP   r   tokens       rJ   _columnszInsertQuery._columns`  s8    nn080C0CCFD0QRuellR
Rs   Ac                 t   |D ]  }t        |t              r{t        j                  ||       }g }|D ]B  }t        |t              r|j                  | j                  |          2|j                  |       D | j                  j                  |       |j                  t        j                  d      rt         y )NVALUES)r   r   r   	token2sqlintr   rQ   r   r   r   r   r   )rX   rP   r   placeholdervaluesindexs         rJ   _fill_valueszInsertQuery._fill_valuesd  s     	%C#{+&00d;( -E!%-dkk%&89e,	-
 ##F+YYv~~x8$$	%rI   c                 
   g }t        | j                        }| j                  d   j                  | j                  ddiddd|iit
        j                        }t        | j                        D ]y  \  }}i }|r*|d   d	   D ]  }t        |d   d
         |z
  |z   dz   ||<   ! t        | j                  |      D ]  \  }}	|r||d   d	   v r|	dk(  r|	||<    |j                  |       { | j                  | j                     j                  |d      }
|r!t        |d   d
         | j                  _        n|
j                  d   | j                  _        t         j#                  dj%                  |
j                               y )N
__schema__$existsT)nameautoz$incauto.seq)return_documentr   field_namesseqr   DEFAULTF)orderedzinserted ids {})r   r   rM   find_one_and_updaterV   r   AFTER	enumerater   zipr   r   insert_manyr   last_row_idinserted_idsr   r   format)rX   docsnumr   ivalinsr   _fieldvalueress              rJ   rb   zInsertQuery.executer  s   $,,ww|$88t j#&'*00 9 	
  - 
	FAsC L7 GD #DL$7 83 > BQ FCIG!$TZZ!5 $VtF|M'BB!Y.#F	$
 KK
	 ggdoo&2242G+.tF|E/B+CD(+.+;+;B+?D(&--c.>.>?@rI   c                     t        | j                        }|j                  d       | j                  |       | j	                  |       | j                  |       y )N   )r    rP   skipr   r   r   )rX   rP   s     rJ   r   zInsertQuery.parse  sB     0	qIi )$rI   )r   Query)r?   r@   rA   rY   r    r   r   r   rb   r   ro   rp   s   @rJ   r   r   L  sB     $ % %S, S%l % AD%rI   r   c                        e Zd Z fdZd ZdefdZd Zd ZdefdZ	d Z
defd	Zdefd
Zd Zd ZdefdZd Zd Zd Zd Z xZS )
AlterQueryc                     d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        t        |    |  y rS   )	
_iden_name	_old_name	_new_name_default
_type_code_cascade_nullri   rY   rj   s     rJ   rY   zAlterQuery.__init__  sH    
$rI   c                    t        | j                        }|j                  d       |D ]Q  }|j                  t        j
                  d      r| j                  |       6|j                  t        j
                  d      r| j                  |       h|j                  t        j
                  d      r| j                  | _	        |j                  t        j
                  j                  d      r| j                  |       |j                  t        j
                  j                  d      r| j                  |       |j                  t        j
                  d      r| j                  |       Ft        d|        y )	Nr   TABLEADDFLUSHDROPALTERRENAMEzUnknown token )r    rP   r  r   r   r   r   _add_flushrb   DDL_drop_alter_renamer   rX   rP   r   s      rJ   r   zAlterQuery.parse  s     0	q 	=Cyy1I&6>>51		)$6>>73#{{6>>--v6

9%6>>--w7I&6>>84Y'$~cU%;<<	=rI   rP   c                 j   d}d}|D ]  }|j                  t        j                  d      r| j                  | _        d}|j                  t        j                  d      rd}Yt        |t              sj|s|j                         | _        |j                         | _	         |s| j                  | _        y y )NFCOLUMNTTO)r   r   r   _rename_columnrb   r   r   get_real_namer	  r
  _rename_collection)rX   rP   r   tor   s        rJ   r  zAlterQuery._rename  s     
	9Cyy2#22yy.C,%(%6%6%8DN%(%6%6%8DN
	9 22DL rI   c                     | j                   | j                     j                  i d| j                  | j                  ii       y )Nz$rename)rM   rV   r   r	  r
  r[   s    rJ   r   zAlterQuery._rename_column  s:     ,,NNDNN	
rI   c                 h    | j                   | j                     j                  | j                         y rS   )rM   rV   renamer
  r[   s    rJ   r"  zAlterQuery._rename_collection  s!     ''7rI   c                 $   d | _         d}|D ]  }t        |t              r|j                  t        j
                  j                  k(  r<|j                  t        j                  d      r|t        |      dz   z  }n|j                  t        j                  j                  d      r|dz  }|j                  t        j                  d      r|dz  }|j                  t        j                  d	      r|d
z  }t        d|        t        |       y )Nc                       y rS   rH   rH   rI   rJ   <lambda>z#AlterQuery._alter.<locals>.<lambda>  s    rI    )NOT NULLNULLr   r  zDROP r   zDEFAULT r   zSET zUnknown token: )rb   r   r   ttyper   NamePlaceholderr   r   rD   r  r   r   )rX   rP   featurer   s       rJ   r  zAlterQuery._alter  s    # 	>C#z*fkk5556>> ,  3s8c>)6>>--v67"6>>95:%6>>516!$se%<==!	>$ 	7rI   c                 T    | j                   | j                     j                  i        y rS   )rM   rV   delete_manyr[   s    rJ   r  zAlterQuery._flush  s     ,,R0rI   c                 ~    |j                         }|st        t        j                  ||       j                  | _        y rS   )r   r   r   r   r   rV   r  s      rJ   r   zAlterQuery._table  s1    nn  ",,S$7==rI   c                    |D ]  }|j                  t        j                  d      rt        d       /t	        |t
              r|j                         | _        U|j                  t        j                  d      r| j                  | _	        |j                  t        j                  d      r|j                  t        j                  d      r| j                  | _	        t         y )NCASCADEzDROP CASCADEINDEX
CONSTRAINTr  )r   r   r   r   r   r   r!  r  _drop_indexrb   _drop_columnr   r  s      rJ   r  zAlterQuery._drop   s     	%Cyy3>*C,"%"3"3"56>>73#//6>><86>>84#00$$	%rI   c                 h    | j                   | j                     j                  | j                         y rS   )rM   rV   
drop_indexr  r[   s    rJ   r9  zAlterQuery._drop_index  s!     ++DOO<rI   c                     | j                   | j                     j                  i d| j                  dii       | j                   d   j	                  d| j                  idd| j                   dii       y )Nz$unsetr*  r   r   fields.)rM   rV   r   r  
update_oner[   s    rJ   r:  zAlterQuery._drop_column  sy     ,,OOR	
 	((T__%doo./	
rI   c                    |D ]  }|j                  t        j                  d      rt        d|        3|j                  t        j                  j
                  dd      rt        d       t        |      | _        {|j                  t        j                  d      rt        d       t        |      | _        t        |t              r|j                         | _        t        |t              rP|j                  j                  d      j                  d	      D cg c]  }|j                  d
      df c}| _        =|j                  t        j                  d      r;|j#                         }t%        j&                  |      }| j(                  |   | _        |j                  t        j                  d      r@| j,                  | j.                  k(  r| j                  dfg| _        | j0                  | _        |j                  t        j                  d      r| j2                  | _        +|j                  t        j                  d      r| j4                  | _        ^|j                  t        j                  d      r| j.                  | _        t        |t6              rt        d       t9        |j                  |       y c c}w )N)r8  KEY
REFERENCESr+  r,  zschema validation using z.*T)regexzcolumn type validationdoublez(),z "r   r   UNIQUEr7  FOREIGNr  zpartial indexes)err_keyerr_sub_sql)r   r   r   r   r/  BuiltinrD   r  r   r   r!  r  r   r   stripsplit	field_dirr   r   placeholder_indexrQ   r  rb   _add_column_unique_index_fkr   r   )rX   rP   r   r   r   s        rJ   r  zAlterQuery._add%  s    0	<Cyy *  5cU;<6;;..DA34"%c(6>>8434"%c(C,"%"3"3"5C- "%!6!<!<S!A" [[&*"
 6>>95nn&..s3 $A6>>84<<4#3#33'+&:%;DN#||6>>73#{{6>>95#xx6>>84#//C',- %SYY1:< <_0	<&"s   K
c                 R   | j                   | j                     j                  d| j                  ddii| j                  d igid| j                  | j                  ii       | j                   d   j                  d| j                  idd| j                   d| j                  iii       y )	Nz$orr   F$setr   r   r>  	type_code)rM   rV   r   r  r  r?  r  r[   s    rJ   rO  zAlterQuery._add_columnX  s     ,,__y%&89__d+ OOT]]	
 	((T__%doo./#T__2		
rI   c                     | j                   | j                     j                  | j                  | j                         y )N)r   rM   rV   create_indexrM  r  r[   s    rJ   rQ  zAlterQuery._indexq  s0     --NN 	. 	"rI   c                     | j                   | j                     j                  | j                  d| j                         y )NTuniquer   rW  r[   s    rJ   rP  zAlterQuery._uniquev  s3     --NN 	. 	"rI   c                      y rS   rH   r[   s    rJ   rR  zAlterQuery._fk|  s    rI   )r?   r@   rA   rY   r   r    r  r   r"  r  r  r   r  r9  r:  r  rO  rQ  rP  rR  ro   rp   s   @rJ   r  r    sw    
 =(3 3&
8 01> >%| % =
$1<l 1<f
2"
"rI   r  c                   *     e Zd Z fdZd Zd Z xZS )CreateQueryc                     t        |   |  y rS   rh   rj   s     rJ   rY   zCreateQuery.__init__  s    $rI   c                 Z   d| j                   j                  vr~| j                  j                  d       | j                   j                  j	                  d       | j                  d   j                  dd       | j                  d   j                  d       |j                         }t        j                  ||       j                  }	 | j                  j                  |       t        j                  dj                  |             |j                         }t        |t               st#        d|       |j                         rt#        d|       d|i}i }i }i }t%        j&                  |j(                        D ]<  }t        |t*              rt-        d        |j.                  }	|	d	k(  r2d
|j0                  i|d|	 <   t$        j2                  |j4                  v r	 |d   d   j7                  |	       d|d<   t$        j:                  |j4                  v r!| j                  |   j                  |	dd       t$        j<                  |j4                  v r | j                  |   j                  |	d       t$        j>                  |j4                  v st$        j@                  |j4                  v s2t-        d       ? |r||d<   |r||d<   |r"| j                  d   jC                  ||d       y y # t        $ r | j                   j                  r Y y w xY w# t8        $ r d|	gi|d<   Y 3w xY w)Nr   r   T)r[  r   zCreated table: {}z-Unexpected sql syntax for column definition: zcolumn CONSTRAINTS_idrU  r>  zauto.field_namesz$eachr   r   __primary_key__rZ  z&NULL, NOT NULL column validation checkrT  z$push)filterr   upsert)"rN   r   rM   create_collectionr   rX  r   r   r   r   r   r   r   r   r   r   r   r   r$   sql2col_defsr   r%   r   r   	data_typeautoincrementcol_constraintsr   r   
primarykeyr[  not_nullnullr?  )
rX   rP   r   r   _filter_setpushr   colr   s
             rJ   _create_tablezCreateQuery._create_table  s   t99LLLGG%%l3&&99==lKGGL!..vd.CGGL!..v6nn""3-33	GG%%e, 	(//67nn#{+  $<<E;"H I I >>  $<<E;"H I I E
 ,,SYY7 	IC#23/0E>  +wug&'  --1D1DD/09@@G
 ()D$**c.A.AAGGEN//dIZ/[&&#*=*==GGEN//d/C ))S-@-@@$))S-@-@@GH;	I> !F6N"F7OGGL!,, -  w ! 	))88		N $ #eW4/0s$   K/ L/ LLL*)L*c                 |   t        | j                        }|j                  d       |j                         }|j	                  t
        j                  d      r| j                  |       y |j	                  t
        j                  d      ry t        j                  dj                  | j                               t        )Nr   r  DATABASEzNot supported {})r    rP   r  r   r   r   r   rq  r   r   r   r   r  s      rJ   r   zCreateQuery.parse  s     0	qnn99V^^W-y)YYv~~z2LL+224>>BC  rI   )r?   r@   rA   rY   rq  r   ro   rp   s   @rJ   r^  r^    s     KZ
!rI   r^  c                   0     e Zd Z fdZd Zd Zd Z xZS )DeleteQueryc                 :    d | _         d | _        t        |   |  y rS   )r   kwri   rY   rj   s     rJ   rY   zDeleteQuery.__init__  s    $rI   c                 h   t        | j                        }di ix| _        }|j                  d       t	        j
                  |j                         |       }|j                  | _        |j                         }t        |t              r,t        | |      }|j                  |j                                y y )Nrc  r  )r    rP   rw  r  r   r   r   r   rV   r   r   r)   r   r   )rX   rP   rw  r   r   rz   s         rJ   r   zDeleteQuery.parse  s     0	 "~%"q&&y~~'7>	#//nnc5!"43EIIenn&' "rI   c                     | j                   } || j                     j                  di | j                  | _        t
        j                  dj                  | j                  j                               y )Nzdelete_many: {}rH   )	rM   rV   r3  rw  r   r   r   r   deleted_count)rX   db_cons     rJ   rb   zDeleteQuery.execute  sQ    9fT__-99DDGGD&--dkk.G.GHIrI   c                 .    | j                   j                  S rS   )r   rz  r[   s    rJ   ru   zDeleteQuery.count  r   rI   )r?   r@   rA   rY   r   rb   ru   ro   rp   s   @rJ   ru  ru    s     

(J
)rI   ru  c                       e Zd Zdededddedee   f
dZd Z	d	 Z
d
 ZeZd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZeeeeeeedZy)r  client_connectiondb_connectionrN   rO   sqlrQ   c                     || _         || _        || _        || _        d| _        t        j                  d| j                  |      | _        d | _	        d | _
        | j                         | _        y )Nr   z%s)_paramsrM   cli_conrN   _params_index_countresub_param_index_sqlr   _result_generatorr   _query)rX   r~  r  rN   r  rQ   s         rJ   rY   zQuery.__init__  s`     (%:"#% FF5$"3"3S9	!%jjlrI   c                 6    | j                   j                         S rS   )r  ru   r[   s    rJ   ru   zQuery.count  s    {{  ""rI   c                     | j                   r<| j                   j                  r%| j                   j                  j                          y y y rS   )r  rW   closer[   s    rJ   r  zQuery.close  s2    ;;4;;..KK%%' /;rI   c                     | j                   t        |       | _         t        | j                         }t        j	                  d|        |S )NzResult: )r  iterr   r   r   )rX   r   s     rJ   __next__zQuery.__next__  sB    !!)%)$ZD"d,,-xx()rI   c              #     K   | j                   y 	 t        | j                         E d {    y 7 # t        $ r  t        $ rK}dd l}t        d| j                   d| j                   d|j                   d|j                         }||d }~wt        $ r>}dd l}t        d| j                   d| j                   d|j                         }||d }~ww xY ww)Nr   zFAILED SQL: z	
Params: z
Pymongo error: z

Version: )r  r  r   r   djongor   r  r  details__version__	Exception)rX   er  exes       rJ   r\   zQuery.__iter__   s     ;;	DKK((( 	 	 tyyk *<<. )""#)) -"../1C 1 	 tyyk *<<. )"../1C
 1	s>   C1 /1 C1 CAB		C9CCCc                 b    | xj                   dz  c_         dj                  | j                         S )Nr   z%({})s)r  r   )rX   _s     rJ   r  zQuery._param_index=  s(      A% t7788rI   c                 l   t         j                  d| j                   d| j                          t	        | j                        }t        |      dkD  rt        | j                        |d   }|j                         }	 | j                  |   }	  || |      S # t        $ r  t        $ r8}dd l}t        | j                  | j                  |j                        }||d }~wt        $ r@}dd l}| j                  f|_        | j                  f|_        |j                  |_        |d }~wt         $ r8}dd l}t        | j                  | j                  |j                        }||d }~ww xY w# t"        $ r@ t         j                  dj%                  ||             t        | d| j                         w xY w)Nzsql_command: z	
params: r   r   )err_sqlrQ   versionz
 Not implemented {} {}z! command not implemented for SQL )r   r   r  r  sqlparser   r   get_typeFUNC_MAPr   r   r  r  r  rQ   r  r  r   r   )rX   rP   sm_typehandlerr  r  r  s          rJ   r   zQuery.parseA  s   DII; '||n&	
 TYY'	y>A ++aL	$$&$	!mmG,G!tY//! # !$ II<<"..
 q !  IIJ	<<="..	 !$ II<<"..
 q !7  	[LL3::7INO G9,Mdii[!YZZ	[s=   >E* B E')3CE'(;D##E'/3E""E'*A	F3c                     	 t        | j                  | j                  || j                        }|j	                          |S # t
        $ r0 t        j                  dj                  | j                                w xY w)Nz(Not implemented alter command for SQL {})
r  rM   rN   r  rb   r   r   warningr   r  rX   smquerys      rJ   r  zQuery._altert  se    	tww(B(BBUE
 MMOL  	NNELLTYYWX	s   ,A   9A9c                 ~    t        | j                  | j                  || j                        }|j	                          |S rS   )r^  rM   rN   r  rb   r  s      rJ   _createzQuery._create~  .    DGGT%?%?T\\RrI   c                    t        |      }|j                  d       |j                         }|j                  t        j
                  d      r<|j                         }|j                         }| j                  j                  |       y |j                  t        j
                  d      r<|j                         }|j                         }| j                  j                  |       y t        dj                  |            )Nr   rs  r  zstatement:{})r    r  r   r   r   r   r   r  drop_databaserM   drop_collectionr   r   )rX   r  rP   r   db_name
table_names         rJ   r  zQuery._drop  s     $	qnn99V^^Z0.."CllnGLL&&w/YYv~~w/.."CJGG##J/ !6!6r!:;;rI   c                 ~    t        | j                  | j                  || j                        }|j	                          |S rS   )r   rM   rN   r  rb   r  s      rJ   _updatezQuery._update  r  rI   c                 ~    t        | j                  | j                  || j                        }|j	                          |S rS   )ru  rM   rN   r  rb   r  s      rJ   _deletezQuery._delete  r  rI   c                     t        | | j                  | j                  || j                        }|j	                          |S rS   )r   rM   rN   r  rb   r  s      rJ   _insertzQuery._insert  s0    D$''4+E+Er4<<XrI   c                 Z    t        | j                  | j                  || j                        S rS   )rw   rM   rN   r  )rX   r  s     rJ   _selectzQuery._select  s!    477D$>$>DLLQQrI   )r   r   INSERTDELETECREATEr  r  N)r?   r@   rA   r   r   rD   r   r   rY   ru   r  r  r   r\   r  r   r  r  r  r  r  r  r  r  rH   rI   rJ   r  r    s    #$/# (# )<# 	#
 "(+#$#( D:91!f
<


R HrI   r  )X__doc__rc   r  loggingr   typingr   r   r   r   rE   r   r	   dataclassesr
   r   rB   pymongor   r   pymongo.command_cursorr   pymongo.cursorr   BasicCursorpymongo.databaser   pymongo.errorsr   r   r  r   r   sqlparse.sqlr   r   r   r   
exceptionsr   r   r   	functionsr   r   r   r    r!   r"   r#   r$   r%   
convertersr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r  r8   r?   r   r:   ABCrL   DMLQueryrf   rr   rw   r   r   r  r^  ru  r  rH   rI   rJ   <module>r     s4    	  B B ;  " 0 0 % > &  
 D C ` ` `) ) ) ) ) 	8	 C C C" ": y "y "z( zz(i( (iVN%( N%b` `F\!( \!~)( )8q qrI   