
     +hCt                        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jL                  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+          ZWdS ),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<   dS )
TokenAlias)default_factoryalias2tokentoken2aliasaliased_namesN)__name__
__module____qualname__dataclass_fielddictr<   r   strUr"   r   r!   __annotations__r=   setr>   r	        Z/var/www/html/e360mart/e360mart_env/lib/python3.11/site-packages/djongo/sql2mongo/query.pyr:   r:   %   s          0?t/T/T/T c1^$*+ , , - U U U
 0?t/T/T/T a%& '(+, - U U U .ocBBBM3s8BBBBBrI   r:   c                   l    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d
S )	BaseQuerydbconnection_propertiesbase.DjongoClient	statementparamsc                     || _         || _        || _        || _        t	                      | _        d | _        d | _        d | _        | 	                                 d S N)
rP   rM   rN   rQ   r:   token_aliasnested_query
left_table_cursorr   )selfrM   rN   rP   rQ   s        rJ   __init__zBaseQuery.__init__1   sT    
 #%:"%<<>B)-

rI   c              #   
   K   d S rS   rH   rX   s    rJ   __iter__zBaseQuery.__iter__@   s      rI   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   s        (; & "	      	" " " 	" " " " "rI   rL   c                   >     e Zd Zej         fd            Zd Z xZS )DDLQueryc                 4     t                      j        |  d S rS   superrY   rX   args	__class__s     rJ   rY   zDDLQuery.__init__R   s    $rI   c                     d S rS   rH   r[   s    rJ   rb   zDDLQuery.executeV       rI   )r?   r@   rA   rc   rd   rY   rb   __classcell__rl   s   @rJ   rf   rf   P   sU                       rI   rf   c                   4    e Zd Zd Zej        d             ZdS )DQLQueryc                     d S 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   sB           	" " " " "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                      j        |  d S rS   )selected_columnswherejoinsorderoffsetlimitdistinctgroupbyhavingrW   ri   rY   rj   s     rJ   rY   zSelectQuery.__init__f   sk    AE/3
  	
 04
15/3
593715@D$rI   c                    t          | j                  }|D ]O}|                    t          j        d          rt          | |          | _        9|                    t          j        d          rt          | |           j|                    t          j        d          rt          | |          | _
        |                    t          j        d          rt          | |          | _        |                    t          j        d          rt          | |          | _        |                    t          j        d          r,t          | |          }| j                            |           Y|                    t          j        d          r,t%          | |          }| j                            |           |                    t          j        d          rt'          | |          | _        |                    t          j        d	          rt+          | |          | _        t/          |t0                    rt3          | |          | _        ?t7          d
|           d S )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0	 "	@ "	@CyyX.. !@(=dI(N(N%%6>622 @dI....6>733 @+D)<<

6>733 @+D)<<

6>844 @-dI>>6><88 @.tY??	
!!),,,,6>+<== @.tY??	
!!),,,,6>733 
@/i@@6>844 @-dI>>C'' @+D)<<

 %%>%>%>???E"	@ "	@rI   c              #      K   | j         |                                 | _         | j         }|j        sd S |D ]}|                     |          V  d S rS   )rW   _get_cursoralive_align_results)rX   cursordocs      rJ   r\   zSelectQuery.__iter__   sh      <++--DL| 	F 	+ 	+C%%c******rI   c                     | j         |                                 | _         t          t          | j                             S rS   )rW   r   lenlistr[   s    rJ   ru   zSelectQuery.count   s5    <++--DL4%%&&&rI   c                     | j         s| j        s| j        s| j        rdS t	          d | j        j        D                       rdS dS )NTc              3   N   K   | ] }t          |t          t          f          V  !d S rS   )r   r   r#   ).0	sql_tokens     rJ   	<genexpr>z1SelectQuery._needs_aggregation.<locals>.<genexpr>   sN       B B )g/A%BCC B B B B B BrI   F)rU   r{   r   r   anyry   
sql_tokensr[   s    rJ   _needs_aggregationzSelectQuery._needs_aggregation   sy     	:	=	 <	 4 B B $ 5 @B B B B B 	4urI   c                    g }| j         D ])}|                    |                                           *| j        r,|                    | j                                                   | j        r=t
          | j        _        |                    | j                                                   | j        r,|                    | j                                                   | j	        r,|                    | j	                                                   | j
        r,|                    | j
                                                   | j        r=t          | j        _        |                    | j                                                   | j        r=t          | j        _        |                    | j                                                   | j        r=t           | j        _        |                    | j                                                   |                                 r=t$          | 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   J 	- 	-DOODMMOO,,,, 	:OOD-6688999: 	3#4DJ OODJ//11222< 	5OODL1133444; 	4OODK0022333= 	6OODM2244555: 	3#4DJ OODJ//11222; 	4$6DK!OODK0022333: 	3#4DJ OODJ//11222'')) 	>.FD!+OOD1::<<===rI   c                 .    | j         p| j         o| j        S rS   )r   r   ry   r[   s    rJ   r   z#SelectQuery._needs_column_selection   s    =0DL1Kd6KKrI   c                 T   |                                  rX|                                 }| j        | j                                     |          }t
                              d|            n;i }| j        r,|                    | j        	                                           | j
        r,|                    | j
        	                                           | j        r,|                    | j        	                                           | j        r,|                    | j        	                                           | j        r,|                    | j        	                                            | j        | j                 j        di |}t
                              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   s|   ""$$ 	2**,,H'$/*44X>>CLL9x99::::Fz 5dj1133444$ @d3<<>>???z 5dj1133444z 5dj1133444{ 6dk2244555/$'$/*/99&99CLL000111
rI   c                    g }| j         r| j         j        }n| j        j        }|D ]!}t          |t                    r|j        | j        k    rg	 |                    ||j                            J# t          $ r8 | j
        j        rt          |j                  |                    d            Y w xY w	 |                    ||j                 |j                            # t          $ r8 | j
        j        rt          |j                  |                    d            Y w xY w|                    ||j                            #t          |          S rS   )r   r   ry   r   r!   tablerV   r   columnKeyErrorrN   enforce_schemar   aliastuple)rX   r   retr   selecteds        rJ   r   zSelectQuery._align_results  so   = 	:1JJ.9J" 	0 	0H(M22 0>T_44)

3x#78888# ) ) )5D B"0"A"AA

4((((()
)

3x~#6x#GHHHH# ) ) )5D B"0"A"AA

4((((()
 

3x~.////Szzs$    A//?B10B15+C!!?D#"D#)r?   r@   rA   rY   r   r\   ru   r   r   r   r   r   ro   rp   s   @rJ   rw   rw   d   s                  %@ %@ %@N  ' ' '	 	 	% % %NL L L  6      rI   rw   c                   0     e Zd Z fdZd Zd Zd Z xZS )UpdateQueryc                 z    d | _         d | _        d | _        d | _        d | _         t                      j        |  d S rS   )selected_tableset_columnsrz   resultr   ri   rY   rj   s     rJ   rY   zUpdateQuery.__init__#  sB    ?C37/3
$rI   c                     | j         j        S rS   )r   matched_countr[   s    rJ   ru   zUpdateQuery.count+      {((rI   c                 ~   t          | j                  }|D ]}|                    t          j        d          r(t          | |          }|j        d         j        | _        J|                    t          j	        d          rt          | |          x}| _        t          |t                    rt          | |          x}| _        t           i | _        | j        r1| j                            | j                                                   | j                            | j                                                   d S )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0	 	% 	%CyyX.. %)$	::"#,q/"76>511 %'3D)'D'DDD$$C'' %!/i!@!@@DJJ %$: 	6Ktz22445554+446677777rI   c                     | j         } || j                 j        di | j        | _        t
                              d| j        j         d| j        j                    d S )Nzupdate_many: z, matched: rH   )	rM   rV   update_manyr   r   r   r   modified_countr   )rX   rM   s     rJ   rb   zUpdateQuery.executeF  s_    W5b)5DDDDgT[%?ggDKLegghhhhhrI   )r?   r@   rA   rY   ru   r   rb   ro   rp   s   @rJ   r   r   !  sl                 ) ) )8 8 80i i i i i i 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 )InsertQuery
result_refQueryc                 ^    || _         d | _        g | _         t                      j        |  d S rS   )_result_ref_cols_valuesri   rY   )rX   r   rk   rl   s      rJ   rY   zInsertQuery.__init__N  s5     &
$rI   rP   c                     |                                 }|                                }|| j        j        vr>| j        j        rt          d| d          | j        j                            |           || _        d S )NzTable z does not exist in database)nextget_namerN   cached_collectionsr   r   addrV   )rX   rP   r   
collections       rJ   _tablezInsertQuery._tableV  s}    nn\\^^
T7JJJ)8 W$%Uj%U%U%UVVV&9==jIII$rI   c                     |                                 }d t          j        |d         |           D             | _        d S )Nc                     g | ]	}|j         
S rH   )r   )r   tokens     rJ   
<listcomp>z(InsertQuery._columns.<locals>.<listcomp>b  s    RRRuelRRRrI   r   )r   r   
tokens2sqlr   rX   rP   r   s      rJ   _columnszInsertQuery._columns`  s;    nnRR0CCFD0Q0QRRR


rI   c                    |D ]}t          |t                    rt          j        ||           }g }|D ]M}t          |t                    r!|                    | j        |                    8|                    |           N| j                            |           |                    t          j
        d          st          d S )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d;;( - -E!%-- -dk%&89999e,,,,##F++++YYv~x88 %$$%	% 	%rI   c                    g }t          | j                  }| j        d                             | j        ddiddd|iit
          j                  }t          | j                  D ]\  }}i }|r+|d         d	         D ]}|d         d
         |z
  |z   dz   ||<   t          | j	        |          D ]#\  }}	|r||d         d	         v r|	dk    r|	||<   $|
                    |           | j        | j                                     |d          }
|r|d         d
         | j        _        n|
j        d         | j        _        t                              d                    |
j                             d S )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	enumerate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   $,w|$88t  j#&'*0 9 	
 	
  -- 
	 
	FAsC B L7 B BD $VU 3c 9A = ACII!$TZ!5!5 $ $ VtF|M'BBB!Y..#FKKgdo&2242GG 	@+/<+>D((+.+;B+?D(&--c.>??@@@@@rI   c                     t          | j                  }|                    d           |                     |           |                     |           |                     |           d S )N   )r    rP   skipr   r   r   )rX   rP   s     rJ   r   zInsertQuery.parse  sa     00	qIi   )$$$$$rI   )r   r   )r?   r@   rA   rY   r    r   r   r   rb   r   ro   rp   s   @rJ   r   r   L  s         $           % % % % %S, S S S S%l % % % % A  A  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                      j        |  d S rS   )	
_iden_name	_old_name	_new_name_default
_type_code_cascade_nullri   rY   rj   s     rJ   rY   zAlterQuery.__init__  sU    
$rI   c                    t          | j                  }|                    d           |D ]Z}|                    t          j        d          r|                     |           9|                    t          j        d          r|                     |           o|                    t          j        d          r| j        | _	        |                    t          j        j
        d          r|                     |           |                    t          j        j
        d          r|                     |           |                    t          j        d          r|                     |           Jt          d|           d S )	Nr   TABLEADDFLUSHDROPALTERRENAMEzUnknown token )r    rP   r  r   r   r   r   _add_flushrb   DDL_drop_alter_renamer   r   s      rJ   r   zAlterQuery.parse  s]    00	q 	= 	=Cyy11 =I&&&&6>511 =		)$$$$6>733 	=#{6>-v66 =

9%%%%6>-w77 =I&&&&6>844 =Y''''$%;c%;%;<<<	= 	=rI   rP   c                 n   d}d}|D ]}|                     t          j        d          r| j        | _        d}|                     t          j        d          rd}St          |t                    r5|s|                                | _        |                                | _	        |s| j
        | _        d S d S )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     
	9 
	9Cyy22 #2yy.. 9C,, 9 9%(%6%6%8%8DNN%(%6%6%8%8DN 	32DLLL	3 	3rI   c                 r    | j         | j                                     i d| j        | j        iid           d S )Nz$renameTmulti)rM   rV   r   r  r  r[   s    rJ   r"  zAlterQuery._rename_column  sP     ''NDN
  	( 	
 	
 	
 	
 	
rI   c                 Z    | j         | j                                     | j                   d S rS   )rM   rV   renamer  r[   s    rJ   r$  zAlterQuery._rename_collection  s'     ''77777rI   c                     d | _         d}|D ]}t          |t                    r|j        t          j        j        k    r3|                    t          j        d          r|t          |          dz   z  }i|                    t          j        j
        d          r|dz  }|                    t          j        d          r|dz  }|                    t          j        d	          r|d
z  }t          d|           t          |           d S )Nc                      d S rS   rH   rH   rI   rJ   <lambda>z#AlterQuery._alter.<locals>.<lambda>  s    t 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** >fk5556> ,   > 3s88c>)6>-v66 >7"6>955 >:%6>511 >6!$%<s%<%<===7rI   c                 P    | j         | j                                     i            d S rS   )rM   rV   delete_manyr[   s    rJ   r  zAlterQuery._flush  s%     ,,R00000rI   c                 ~    |                                 }|st          t          j        ||           j        | _        d S rS   )r   r   r   r   r   rV   r   s      rJ   r   zAlterQuery._table  s:    nn 	!  ",S$77=rI   c                    |D ]}|                     t          j        d          rt          d           2t	          |t
                    r|                                | _        a|                     t          j        d          r| j        | _	        |                     t          j        d          r|                     t          j        d          r| j
        | _	        t          d S )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3 %>****C,, 	%"%"3"3"5"56>733 %#/6><88 %6>844 %#0$$	% 	%rI   c                 Z    | j         | j                                     | j                   d S rS   )rM   rV   
drop_indexr  r[   s    rJ   r=  zAlterQuery._drop_index  s'     ++DO<<<<<rI   c                     | j         | j                                     i d| j        diid           | j         d                             d| j        idd| j         dii           d S )Nz$unsetr.  Tr'  r   r   fields.)rM   rV   r   r  r[   s    rJ   r>  zAlterQuery._drop_column  s     ''OR
  	( 	
 	
 	
 	$$T_%/do//	
 	
 	
 	
 	
rI   c                 v   |D ]}|                     t          j        d          rt          d|            6|                     t          j        j        dd          r$t          d           t          |          | _        |                     t          j        d          r$t          d           t          |          | _        t          |t                    r|
                                | _        t          |t                    r>d |j                            d	                              d
          D             | _        G|                     t          j        d          r<|                                }t%          j        |          }| j        |         | _        |                     t          j        d          r-| j        | j        k    r| j        dfg| _        | j        | _        |                     t          j        d          r| j        | _        |                     t          j        d          r| j        | _        L|                     t          j        d          r| j        | _        zt          |t6                    rt          d           t9          |j        |          d S )N)r<  KEY
REFERENCESr/  r0  zschema validation using z.*T)regexzcolumn type validationdoublec                 <    g | ]}|                     d           dfS )z "r   )strip)r   r   s     rJ   r   z#AlterQuery._add.<locals>.<listcomp>;  s9     " " " [[&&*" " "rI   z(),r   UNIQUEr   r;  FOREIGNr   zpartial indexes)err_keyerr_sub_sql)r   r   r   r   r3  BuiltinrD   r  r   r   r#  r  r   r  rI  split	field_dirr   r   placeholder_indexrQ   r  rb   _add_column_unique_index_fkr   r   )rX   rP   r   r   s       rJ   r  zAlterQuery._add'  s{    0	< 0	<Cyy *   /< ;c;;<<<<6;.DAA )<3444"%c((6>844 %<3444"%c((C,, !<"%"3"3"5"5C-- <" "!$!6!6!<!<S!A!A" " "
 6>955 <nn&&.s33 $A6>844 <<4#333'+&:%;DN#|6>733 <#{6>955 <#x6>844 <#/C'' <,---- %SY1:< < < <_0	< 0	<rI   c                    | j         | j                                     d| j        ddii| j        d igid| j        | j        iid           | j         d                             d| j        idd	| j         d
| j        iii           d S )Nz$orr   F$setTr'  r   r   rB  	type_code)rM   rV   r   r  r  r  r[   s    rJ   rS  zAlterQuery._add_columnZ  s     ''_y%&89_d+ OT]
  	( 	
 	
 	
 	$$T_%/do//#T_2		
 		
 		
 		
 		
rI   c                 h    | j         | j                                     | j        | j                   d S )N)r   rM   rV   create_indexrQ  r  r[   s    rJ   rU  zAlterQuery._indext  s<     --N 	. 	" 	" 	" 	" 	"rI   c                 j    | j         | j                                     | j        d| j                   d S )NTuniquer   r[  r[   s    rJ   rT  zAlterQuery._uniquey  s?     --N 	. 	" 	" 	" 	" 	"rI   c                     d S rS   rH   r[   s    rJ   rV  zAlterQuery._fk  s    rI   )r?   r@   rA   rY   r   r    r  r"  r$  r  r  r   r  r=  r>  r  rS  rU  rT  rV  ro   rp   s   @rJ   r	  r	    sV       
  
  
  
  
 = = =(3 3 3 3 3&	
 	
 	
8 8 8    01 1 1> > > > >%| % % % % = = =
 
 
&1<l 1< 1< 1< 1<f
 
 
4" " "
" " "      rI   r	  c                   *     e Zd Z fdZd Zd Z xZS )CreateQueryc                 4     t                      j        |  d S rS   rh   rj   s     rJ   rY   zCreateQuery.__init__  s    $rI   c                 (   d| j         j        vr{| j                            d           | j         j                            d           | j        d                             dd           | j        d                             d           |                                }t          j        ||           j	        }	 | j                            |           n# t          $ r | j         j        r Y d S w xY wt                              d                    |                     |                                }t          |t                     st#          d|           |                                rt#          d|           d|i}i }i }i }t%          j        |j                  D ]8}t          |t*                    rt-          d           (|j        }	|	d	k    r6d
|j        i|d|	 <   t$          j        |j        v r@	 |d         d                             |	           n# t8          $ r d|	gi|d<   Y nw xY wd|d<   t$          j        |j        v r#| j        |                             |	dd           t$          j        |j        v r"| j        |                             |	d           t$          j        |j        v st$          j         |j        v rt-          d           :|r||d<   |r||d<   |r%| j        d         !                    ||d           d S d S )Nr   r   T)r_  r   zCreated table: {}z-Unexpected sql syntax for column definition: zcolumn CONSTRAINTS_idrY  rB  zauto.field_namesz$eachr   r   __primary_key__r^  z&NULL, NOT NULL column validation checkrX  z$push)filterr   upsert)"rN   r   rM   create_collectionr   r\  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null
update_one)
rX   rP   r   r   _filter_setpushr   colr   s
             rJ   _create_tablezCreateQuery._create_table  s   t9LLLG%%l333&9==lKKKGL!..vd.CCCGL!..v666nn"3--3	G%%e,,,,  	 	 	)8 		 	(//66777nn#{++ 	I  "H<E"H "H I I I >> 	I  "H<E"H "H I I I E
 ,SY77 	I 	IC#233 I/0000E>>  +&u&&'  -1DDD/09@@GGGG#   #eW4/000 ()D$*c.AAAGEN//dIZ/[[[&#*===GEN//d/CCC )S-@@@$)S-@@@GHHH 	"!F6N 	#"F7O 	GL!,, -     	 	s$   9C C/.C/<!HH32H3c                    t          | j                  }|                    d           |                                }|                    t
          j        d          r|                     |           d S |                    t
          j        d          rd S t          	                    d
                    | j                             t          )Nr   r  DATABASEzNot supported {})r    rP   r  r   r   r   r   rv  r   r   r   r   r   s      rJ   r   zCreateQuery.parse  s     00	qnn99V^W-- 	!y)))))YYv~z22 	!DLL+224>BBCCC  rI   )r?   r@   rA   rY   rv  r   ro   rp   s   @rJ   rb  rb    sZ                 K K KZ
! 
! 
! 
! 
! 
! 
!rI   rb  c                   0     e Zd Z fdZd Zd Zd Z xZS )DeleteQueryc                 P    d | _         d | _         t                      j        |  d S rS   )r   kwri   rY   rj   s     rJ   rY   zDeleteQuery.__init__  s+    $rI   c                    t          | j                  }di ix| _        }|                    d           t	          j        |                                |           }|j        | _        |                                }t          |t                    r9t          | |          }|                    |                                           d S d S )Nrg  r  )r    rP   r|  r  r   r   r   r   rV   r   r   r)   r   r   )rX   rP   r|  r   r   rz   s         rJ   r   zDeleteQuery.parse  s     00	 "~%"q&y~~'7'7>>	#/nnc5!! 	("433EIIenn&&'''''	( 	(rI   c                     | j         } || j                 j        di | j        | _        t
                              d                    | j        j                             d S )Nzdelete_many: {}rH   )	rM   rV   r7  r|  r   r   r   r   deleted_count)rX   db_cons     rJ   rb   zDeleteQuery.execute  sX    9fT_-9DDDGDD&--dk.GHHIIIIIrI   c                     | j         j        S rS   )r   r  r[   s    rJ   ru   zDeleteQuery.count  r   rI   )r?   r@   rA   rY   r   rb   ru   ro   rp   s   @rJ   rz  rz    sh                 

( 
( 
(J J J
) ) ) ) ) ) )rI   rz  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dS )r   client_connectiondb_connectionrN   rO   sqlrQ   c                     || _         || _        || _        || _        d| _        t          j        d| j        |          | _        d | _	        d | _
        |                                 | _        d S )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__   sd     (%:"#% F5$"3S99	!%jjllrI   c                 4    | j                                         S rS   )r  ru   r[   s    rJ   ru   zQuery.count  s    {  """rI   c                 p    | j         r,| j         j        r"| j         j                                         d S d S d S rS   )r  rW   closer[   s    rJ   r  zQuery.close  sI    ; 	(4;. 	(K%%'''''	( 	( 	( 	(rI   c                     | j         t          |           | _         t          | j                   }t                              d|            |S )NzResult: )r  iterr   r   r   )rX   r   s     rJ   __next__zQuery.__next__  sI    !)%)$ZZD"d,--((()))rI   c              #   l  K   | j         d S 	 t          | j                   E d {V  d S # t          $ r  t          $ r;}dd l}t          d| j         d| j         d|j         d|j	                   }||d }~wt          $ r3}dd l}t          d| j         d| j         d|j	                   }||d }~ww xY 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__#  sC     ;F	DK((((((((((( 	 	 	 	 	 	MMM 1ty 1 1<1 1"#)1 1 #.1 1 C 1 	 	 	MMM 1ty 1 1<1 1".1 1 C
 1	s    ) B36A33B3 .B..B3c                 V    | xj         dz  c_         d                    | j                   S )Nr   z%({})s)r  r   )rX   _s     rJ   r  zQuery._param_index@  s+      A%  t7888rI   c                 H   t                               d| j         d| j                    t	          | j                  }t          |          dk    rt          | j                  |d         }|                                }	 | j        |         }	  || |          S # t          $ r  t          $ r-}dd l}t          | j        | j        |j                  }||d }~wt          $ r1}dd l}| j        f|_        | j        f|_        |j        |_        |d }~wt           $ r-}dd l}t          | j        | j        |j                  }||d }~ww xY w# t"          $ rH t                               d                    ||                     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.parseD  s   &DI & &|& &	
 	
 	
 TY''	y>>A +++aL	$$&&$	!mG,G!wtY///!   # ! ! !$ I<".  
 q !    IJ	<=".	 ! ! !$ I<".  
 q !7  	[ 	[ 	[LL3::7INNOOO G!Y!Ydi!Y!YZZZ	[s=   E B E1(CE&,DE(EEAF!c                     	 t          | j        | j        || j                  }|                                 |S # t
          $ r4 t                              d                    | 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._alterw  sx    	tw(BBUUE
 MMOOOL  	 	 	NNELLTYWWXXX	s	   !9 >A7c                 p    t          | j        | j        || j                  }|                                 |S rS   )rb  rM   rN   r  rb   r  s      rJ   _createzQuery._create  .    DGT%?T\RRrI   c                 F   t          |          }|                    d           |                                }|                    t          j        d          rD|                                }|                                }| j                            |           d S |                    t          j        d          rD|                                }|                                }| j	        
                    |           d S t          d                    |                    )Nr   rx  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0 		<..""CllnnGL&&w/////YYv~w// 	<..""CJG##J///// !6!6r!:!:;;;rI   c                 p    t          | j        | j        || j                  }|                                 |S rS   )r   rM   rN   r  rb   r  s      rJ   _updatezQuery._update  r  rI   c                 p    t          | j        | j        || j                  }|                                 |S rS   )rz  rM   rN   r  rb   r  s      rJ   _deletezQuery._delete  r  rI   c                 r    t          | | j        | j        || j                  }|                                 |S rS   )r   rM   rN   r  rb   r  s      rJ   _insertzQuery._insert  s0    D$'4+Er4<XXrI   c                 D    t          | j        | j        || j                  S rS   )rw   rM   rN   r  )rX   r  s     rJ   _selectzQuery._select  s    47D$>DLQ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     sF       #$/# (# )<# 	#
 "(+# # # #$# # #( ( (   D  :9 9 91! 1! 1!f    
< < <  
  
  
R R R  HHHrI   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	  rb  rz  r   rH   rI   rJ   <module>r     s    


 				       B B B B B B B B B B B B B B B B ; ; ; ; ; ; ; ;       " " " " " " 0 0 0 0 0 0 0 0 0 0 0 0 % % % % % % > > > > > > > > & & & & & &                 
 D C C C C C C C C C      ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )      	8		 C C C C C C C C" " " " " " " ":     y   " " " " "y " " "z z z z z( z z zz(i (i (i (i (i( (i (i (iVN% N% N% N% N%( N% N% N%bc c c c c c c cL\! \! \! \! \!( \! \! \!~) ) ) ) )( ) ) )8q q q q q q q q q qrI   