3
6bCt                 @   s.  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 dZKG dd dejLZMeMZNG dd deMZOG dd deMZPG dd dePZQG d d! d!eNZRG d"d# d#eNZSG d$d% d%eOZTG d&d' d'eOZUG d(d) d)eNZVG d*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               @   s`   e Zd ZU eedZeeee	e
ef f eedZeee	e
ef ef eedZee dS )
TokenAlias)default_factoryN)__name__
__module____qualname__dataclass_fielddictZalias2tokenr   strUr!   r   r    Ztoken2aliassetZaliased_namesr    rB   rB   U/var/www/html/sandeepIITI/myenv/lib/python3.6/site-packages/djongo/sql2mongo/query.pyr8   %   s   
  r8   c               @   sD   e Zd ZedeedddZdd Zej	dd Z
ej	d	d
 ZdS )	BaseQueryzbase.DjongoClient)dbconnection_properties	statementparamsc             C   s>   || _ || _|| _|| _t | _d | _d | _d | _| j	  d S )N)
rG   rE   rF   rH   r8   Ztoken_aliasnested_query
left_table_cursorr   )selfrE   rF   rG   rH   rB   rB   rC   __init__1   s    zBaseQuery.__init__c             c   s   d S )NrB   )rL   rB   rB   rC   __iter__@   s    zBaseQuery.__iter__c             C   s   t d S )N)NotImplementedError)rL   rB   rB   rC   r   D   s    zBaseQuery.parsec             C   s   t d S )N)rO   )rL   rB   rB   rC   executeH   s    zBaseQuery.executeN)r:   r;   r<   r   r   r   rM   rN   abcabstractmethodr   rP   rB   rB   rB   rC   rD   0   s   rD   c                   s*   e Zd Zej fddZdd Z  ZS )DDLQueryc                s   t  j|  d S )N)superrM   )rL   args)	__class__rB   rC   rM   R   s    zDDLQuery.__init__c             C   s   d S )NrB   )rL   rB   rB   rC   rP   V   s    zDDLQuery.execute)r:   r;   r<   rQ   rR   rM   rP   __classcell__rB   rB   )rV   rC   rS   P   s   rS   c               @   s"   e Zd Zdd Zejdd ZdS )DQLQueryc             C   s   d S )NrB   )rL   rB   rB   rC   rP   \   s    zDQLQuery.executec             C   s   t d S )N)rO   )rL   rB   rB   rC   count_   s    zDQLQuery.countN)r:   r;   r<   rP   rQ   rR   rY   rB   rB   rB   rC   rX   Z   s   rX   c                   s\   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Z  ZS )SelectQueryc                sL   d | _ d | _g | _d | _d | _d | _d | _d | _d | _d | _	t
 j|  d S )N)selected_columnswherejoinsorderoffsetlimitdistinctgroupbyhavingrK   rT   rM   )rL   rU   )rV   rB   rC   rM   f   s    zSelectQuery.__init__c             C   sZ  t | j}xH|D ]>}|jtjdr4t| || _q|jtjdrNt| | q|jtjdrjt	| || _
q|jtjdrt| || _q|jtjdrt| || _q|jtjdrt| |}| jj| q|jtjdrt| |}| jj| q|jtjdrt| || _q|jtjd	r*t| || _qt|trDt| || _qtd
| qW d S )NSELECTZFROMZLIMITZORDERZOFFSETz
INNER JOINzLEFT OUTER JOINZGROUPZHAVINGzUnknown keyword: )r   rG   matchr   DMLr%   r[   Keywordr'   r,   r`   r.   r^   r4   r_   r*   r]   appendr+   r3   rb   r6   rc   
isinstancer   r(   r\   r   )rL   rG   tok	converterrB   rB   rC   r   v   s2    


zSelectQuery.parsec             c   sB   | j d kr| j | _ | j }|js$d S x|D ]}| j|V  q*W d S )N)rK   _get_cursoralive_align_results)rL   cursordocrB   rB   rC   rN      s    


zSelectQuery.__iter__c             C   s"   | j d kr| j | _ tt| j S )N)rK   rl   lenlist)rL   rB   rB   rC   rY      s    

zSelectQuery.countc             C   s:   | j s| js| js| jrdS tdd | jjD r6dS dS )NTc             s   s   | ]}t |ttfV  qd S )N)ri   r   r"   ).0	sql_tokenrB   rB   rC   	<genexpr>   s   z1SelectQuery._needs_aggregation.<locals>.<genexpr>F)rI   r]   ra   rb   anyr[   
sql_tokens)rL   rB   rB   rC   _needs_aggregation   s    zSelectQuery._needs_aggregationc             C   s  g }x| j D ]}|j|j  qW | jr8|j| jj  | jrVt| j_|j| jj  | jrl|j| jj  | j	r|j| j	j  | j
r|j| j
j  | jrt| j_|j| jj  | jrt| j_|j| jj  | jrt| j_|j| jj  | j rt| j_|j| jj  |S )N)r]   extendto_mongorI   r\   r)   rV   rh   rb   rc   ra   r^   r0   r_   r5   r`   r-   _needs_column_selectionr&   r[   )rL   pipelinejoinrB   rB   rC   _make_pipeline   s6    
zSelectQuery._make_pipelinec             C   s   | j p
| j o| jS )N)ra   rb   r[   )rL   rB   rB   rC   r{      s    z#SelectQuery._needs_column_selectionc             C   s   | j  r4| j }| j| j j|}tjd|  ni }| jrN|j| jj	  | j
rd|j| j
j	  | jrz|j| jj	  | jr|j| jj	  | jr|j| jj	  | j| j jf |}tjd|  |S )NzAggregation query: zFind query: )rx   r~   rE   rJ   Z	aggregateloggerdebugr\   updaterz   r[   r`   r^   r_   find)rL   r|   curkwargsrB   rB   rC   rl      s$    zSelectQuery._get_cursorc             C   s   g }| j r| j j}n| jj}x|D ]}t|tr|j| jkry|j||j  W q t	k
r   | j
jrrt|j|jd  Y qX qy|j||j |j  W q t	k
r   | j
jrt|j|jd  Y qX q"|j||j  q"W t|S )N)ra   rw   r[   ri   r    tablerJ   rh   columnKeyErrorrF   enforce_schemar   aliastuple)rL   rp   retrw   selectedrB   rB   rC   rn     s*    




zSelectQuery._align_results)r:   r;   r<   rM   r   rN   rY   rx   r~   r{   rl   rn   rW   rB   rB   )rV   rC   rZ   d   s   '
'rZ   c                   s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	UpdateQueryc                s.   d | _ d | _d | _d | _d | _t j|  d S )N)Zselected_tableset_columnsr\   resultr   rT   rM   )rL   rU   )rV   rB   rC   rM   #  s    zUpdateQuery.__init__c             C   s   | j jS )N)r   matched_count)rL   rB   rB   rC   rY   +  s    zUpdateQuery.countc             C   s   t | j}xt|D ]l}|jtjdr<t| |}|jd j| _q|jtj	dr\t
| | }| _qt|trxt| | }| _qtqW i | _| jr| jj| jj  | jj| jj  d S )NUPDATEr   SET)r   rG   re   r   rf   r%   rw   r   rJ   rg   r/   r   ri   r   r(   r\   r   r   r   rz   )rL   rG   rj   crB   rB   rC   r   .  s    



zUpdateQuery.parsec             C   s>   | j }|| j jf | j| _tjd| jj d| jj  d S )Nzupdate_many: z, matched: )	rE   rJ   Zupdate_manyr   r   r   r   Zmodified_countr   )rL   rE   rB   rB   rC   rP   F  s    zUpdateQuery.execute)r:   r;   r<   rM   rY   r   rP   rW   rB   rB   )rV   rC   r   !  s   r   c                   s\   e Zd Zdd fddZedddZeddd	Zedd
dZdd Zdd Z	  Z
S )InsertQueryQuery)
result_refc                s"   || _ d | _g | _t j|  d S )N)_result_ref_cols_valuesrT   rM   )rL   r   rU   )rV   rB   rC   rM   N  s    zInsertQuery.__init__)rG   c             C   sL   |j  }|j }|| jjkrB| jjr4td| d| jjj| || _d S )NzTable z does not exist in database)nextget_namerF   cached_collectionsr   r   addrJ   )rL   rG   rj   Z
collectionrB   rB   rC   _tableV  s    zInsertQuery._tablec             C   s(   |j  }dd tj|d | D | _d S )Nc             S   s   g | ]
}|j qS rB   )r   )rs   tokenrB   rB   rC   
<listcomp>b  s    z(InsertQuery._columns.<locals>.<listcomp>r   )r   r   Z
tokens2sqlr   )rL   rG   rj   rB   rB   rC   _columns`  s    zInsertQuery._columnsc             C   s   xz|D ]r}t |trftj|| }g }x2|D ]*}t |trJ|j| j|  q*|j| q*W | jj| q|jt	j
dstqW d S )NZVALUES)ri   r   r   	token2sqlintrh   rH   r   re   r   rg   r   )rL   rG   rj   placeholdervaluesindexrB   rB   rC   _fill_valuesd  s    



zInsertQuery._fill_valuesc             C   s(  g }t | j}| jd j| jddiddd|iitjd}xt| jD ]\}}i }|rx0|d d	 D ] }|d d
 | | d ||< qdW x>t| j	|D ].\}}	|r||d d	 kr|	dkrq|	||< qW |j
| qFW | j| j j|dd}
|r|d d
 | j_n|
jd | j_tjdj|
j d S )N
__schema__z$existsT)nameautoz$inczauto.seq)Zreturn_documentr   field_namesseqr   DEFAULTF)Zorderedzinserted ids {})rq   r   rE   Zfind_one_and_updaterJ   r   ZAFTER	enumeratezipr   rh   Zinsert_manyr   last_row_idZinserted_idsr   r   format)rL   Zdocsnumr   ivalZinsr   Z_fieldvalueresrB   rB   rC   rP   r  s.    




 zInsertQuery.executec             C   s6   t | j}|jd | j| | j| | j| d S )N   )r   rG   skipr   r   r   )rL   rG   rB   rB   rC   r     s
    



zInsertQuery.parse)r:   r;   r<   rM   r   r   r   r   rP   r   rW   rB   rB   )rV   rC   r   L  s   
"r   c                   s   e Zd Z fddZdd ZedddZdd	 Zd
d ZedddZ	dd Z
edddZedddZdd Zdd ZedddZdd Zdd Zdd Zd d! Z  ZS )"
AlterQueryc                s@   d | _ d | _d | _d | _d | _d | _d | _d | _t j|  d S )N)	
_iden_name	_old_name	_new_name_default
_type_codeZ_cascade_nullrT   rM   )rL   rU   )rV   rB   rC   rM     s    zAlterQuery.__init__c             C   s   t | j}|jd x|D ]}|jtjdr8| j| q|jtjdrR| j| q|jtjdrj| j| _	q|jtjj
dr| j| q|jtjj
dr| j| q|jtjdr| j| qtd| qW d S )	Nr   TABLEZADDZFLUSHDROPALTERZRENAMEzUnknown token )r   rG   r   re   r   rg   r   _add_flushrP   DDL_drop_alter_renamer   )rL   rG   rj   rB   rB   rC   r     s     



zAlterQuery.parse)rG   c             C   sx   d}d}x^|D ]V}|j tjdr,| j| _d}|j tjdr@d}qt|tr|sZ|j | _q|j | _	qW |st| j
| _d S )NFCOLUMNTZTO)re   r   rg   _rename_columnrP   ri   r   get_real_namer   r   _rename_collection)rL   rG   r   Ztorj   rB   rB   rC   r     s    

zAlterQuery._renamec             C   s(   | j | j ji d| j| jiidd d S )Nz$renameT)multi)rE   rJ   r   r   r   )rL   rB   rB   rC   r     s
    zAlterQuery._rename_columnc             C   s   | j | j j| j d S )N)rE   rJ   renamer   )rL   rB   rB   rC   r     s    zAlterQuery._rename_collectionc             C   s   dd | _ d}x|D ]}t|tr$q|jtjjkr4q|jtjdrT|t	|d 7 }q|jtjj
drn|d	7 }q|jtjd
r|d7 }q|jtjdr|d7 }qtd| qW t| d S )Nc               S   s   d S )NrB   rB   rB   rB   rC   <lambda>  s    z#AlterQuery._alter.<locals>.<lambda> NOT NULLNULLr    r   zDROP r   zDEFAULT r   zSET zUnknown token: )r   r   r   )rP   ri   r   Zttyper   NameZPlaceholderre   rg   r?   r   r   r   )rL   rG   featurerj   rB   rB   rC   r     s$    





zAlterQuery._alterc             C   s   | j | j ji  d S )N)rE   rJ   delete_many)rL   rB   rB   rC   r     s    zAlterQuery._flushc             C   s$   |j  }|sttj|| j| _d S )N)r   r   r   r   r   rJ   )rL   rG   rj   rB   rB   rC   r     s    zAlterQuery._tablec             C   s   x~|D ]v}|j tjdr"td qt|tr8|j | _q|j tjdrP| j| _	q|j tjdr`q|j tjdrx| j
| _	qtqW d S )NZCASCADEzDROP CASCADEINDEX
CONSTRAINTr   )re   r   rg   r   ri   r   r   r   _drop_indexrP   _drop_columnr   )rL   rG   rj   rB   rB   rC   r     s    




zAlterQuery._dropc             C   s   | j | j j| j d S )N)rE   rJ   Z
drop_indexr   )rL   rB   rB   rC   r     s    zAlterQuery._drop_indexc             C   sN   | j | j ji d| jdiidd | j d jd| jidd| j dii d S )Nz$unsetr   T)r   r   r   zfields.)rE   rJ   r   r   )rL   rB   rB   rC   r     s    

zAlterQuery._drop_columnc             C   s  x|D ]}|j tjdr,td|  q|j tjjddd	rTtd
 t|| _q|j tjdrvtd
 t|| _qt|t	r|j
 | _qt|trdd |jjdjdD | _q|j tjdr|j }tj|}| j| | _q|j tjdr| j| jkr| jdfg| _| j| _q|j tjdr4| j| _q|j tjdrN| j| _q|j tjdrh| j| _qt|tr~td qt|j|dqW d S )Nr   KEY
REFERENCESNOT NULLr   zschema validation using z.*T)regexzcolumn type validationdoublec             S   s   g | ]}|j d dfqS )z "r   )strip)rs   r
   rB   rB   rC   r   <  s   z#AlterQuery._add.<locals>.<listcomp>z(),r   ZUNIQUEr   r   ZFOREIGNr   zpartial indexes)Zerr_keyZerr_sub_sql)r   r   r   r   r   )re   r   rg   r   r   ZBuiltinr?   r   ri   r   r   r   r   r   r   split	field_dirr   r   Zplaceholder_indexrH   r   rP   _add_column_unique_index_fkr   r   )rL   rG   rj   r   rB   rB   rC   r   '  sD     







zAlterQuery._addc             C   sn   | j | j jd| jddii| jd igid| j| jiidd | j d jd| jidd	| j d
| jiii d S )Nz$orz$existsFz$setT)r   r   r   zfields.	type_code)rE   rJ   r   r   r   r   )rL   rB   rB   rC   r   Z  s    

zAlterQuery._add_columnc             C   s   | j | j j| j| jd d S )N)r   )rE   rJ   create_indexr   r   )rL   rB   rB   rC   r   t  s    zAlterQuery._indexc             C   s    | j | j j| jd| jd d S )NT)uniquer   )rE   rJ   r   r   r   )rL   rB   rB   rC   r   y  s    zAlterQuery._uniquec             C   s   d S )NrB   )rL   rB   rB   rC   r     s    zAlterQuery._fk)r:   r;   r<   rM   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   rB   rB   )rV   rC   r     s    3r   c                   s,   e Zd Z fddZdd Zdd Z  ZS )CreateQueryc                s   t  j|  d S )N)rT   rM   )rL   rU   )rV   rB   rC   rM     s    zCreateQuery.__init__c       
      C   sB  d| j jkrJ| jjd | j jjd | jd jddd | jd jd |j }tj|| j	}y| jj| W n$ t
k
r   | j jr nd S Y nX tjdj| |j }t|tstd| |j rtd| d|i}i }i }i }xtj|jD ] }t|trtd n|j}	|	d	kr0q d
|ji|d|	 < tj|jkry|d d j|	 W n$ tk
r   d|	gi|d< Y nX d|d< tj|jkr| j| j|	ddd tj|jkr| j| j|	dd tj|jkstj |jkr td q W |r||d< |r"||d< |r>| jd j!||dd d S )Nr   r   T)r   r   zCreated table: {}z-Unexpected sql syntax for column definition: zcolumn CONSTRAINTS_idr   zfields.zauto.field_namesz$eachr   zauto.seqZ__primary_key__)r   r   z&NULL, NOT NULL column validation checkz$setz$push)filterr   Zupsert)"rF   r   rE   Zcreate_collectionr   r   r   r   r   r   r   r   r   r   r   ri   r   r   r#   Zsql2col_defsr   r$   r   r   Z	data_typeZautoincrementZcol_constraintsrh   r   Z
primarykeyr   Znot_nullnullZ
update_one)
rL   rG   rj   r   Z_filterZ_setpushr   colr
   rB   rB   rC   _create_table  sh    




zCreateQuery._create_tablec             C   s`   t | j}|jd |j }|jtjdr6| j| n&|jtjdrFntj	dj
| j td S )Nr   r   DATABASEzNot supported {})r   rG   r   r   re   r   rg   r   r   r   r   r   )rL   rG   rj   rB   rB   rC   r     s    

zCreateQuery.parse)r:   r;   r<   rM   r   r   rW   rB   rB   )rV   rC   r     s   Mr   c                   s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	DeleteQueryc                s   d | _ d | _t j|  d S )N)r   kwrT   rM   )rL   rU   )rV   rB   rC   rM     s    zDeleteQuery.__init__c             C   sh   t | j}di i | _}|jd tj|j | }|j| _|j }t	|t
rdt| |}|j|j  d S )Nr   r   )r   rG   r   r   r   r   r   r   rJ   ri   r   r(   r   rz   )rL   rG   r   rt   rj   r\   rB   rB   rC   r     s    



zDeleteQuery.parsec             C   s4   | j }|| j jf | j| _tjdj| jj d S )Nzdelete_many: {})	rE   rJ   r   r   r   r   r   r   deleted_count)rL   Zdb_conrB   rB   rC   rP     s    zDeleteQuery.executec             C   s   | j jS )N)r   r   )rL   rB   rB   rC   rY     s    zDeleteQuery.count)r:   r;   r<   rM   r   rP   rY   rW   rB   rB   )rV   rC   r     s   r   c               @   s   e Zd Zeedeee dddZdd Z	dd Z
d	d
 ZeZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZeeeeeeedZd S )!r   zbase.DjongoClient)client_connectiondb_connectionrF   sqlrH   c             C   sJ   || _ || _|| _|| _d| _tjd| j|| _d | _	d | _
| j | _d S )Nr   z%sr   )_paramsrE   cli_conrF   _params_index_countresub_param_index_sqlr   _result_generatorr   _query)rL   r   r   rF   r   rH   rB   rB   rC   rM      s    zQuery.__init__c             C   s
   | j j S )N)r  rY   )rL   rB   rB   rC   rY     s    zQuery.countc             C   s   | j r| j jr| j jj  d S )N)r  rK   close)rL   rB   rB   rC   r    s    zQuery.closec             C   s2   | j d krt| | _ t| j }tjd|  |S )NzResult: )r  iterr   r   r   )rL   r   rB   rB   rC   __next__  s
    


zQuery.__next__c             c   s   | j d krd S yt| j E d H  W n tk
r8    Y n tk
r } z<dd l}td| j d| j d|j d|j	 }||W Y d d }~X nP t
k
r } z4dd l}td| j d| j d|j	 }||W Y d d }~X nX d S )Nr   zFAILED SQL: z	
Params: z
Pymongo error: z

Version: )r  r  r   r   djongor   r   r   details__version__	Exception)rL   er  exerB   rB   rC   rN   #  s     
&zQuery.__iter__c             C   s   |  j d7  _ dj| j S )Nr   z%({})s)r   r   )rL   _rB   rB   rC   r   @  s    zQuery._param_indexc             C   s  t jd| j d| j  t| j}t|dkr:t| j|d }|j }y| j| }W n: t	k
r   t jdj
|| t| d| j Y nX y
|| |S  tk
r    Y n tk
r } z(dd l}t| j| j|jd}||W Y d d }~X n tk
r@ } z.dd l}| jf|_| jf|_|j|_|W Y d d }~X nF tk
r } z(dd l}t| j| j|jd}||W Y d d }~X nX d S )Nzsql_command: z	
params: r   r   z
 Not implemented {} {}z! command not implemented for SQL )err_sqlrH   version)r   r   r   r   sqlparserq   r   get_typeFUNC_MAPr   r   r   r   r  r  r  rH   r  r	  )rL   rG   Zsm_typehandlerr
  r  r  rB   rB   rC   r   D  sH    






zQuery.parsec             C   sR   yt | j| j|| j}W n( tk
r@   tjdj| j  Y nX |j	  |S d S )Nz(Not implemented alter command for SQL {})
r   rE   rF   r   r   r   warningr   r   rP   )rL   smqueryrB   rB   rC   r   w  s    zQuery._alterc             C   s    t | j| j|| j}|j  |S )N)r   rE   rF   r   rP   )rL   r  r  rB   rB   rC   _create  s    zQuery._createc             C   s   t |}|jd |j }|jtjdrF|j }|j }| jj| n:|jtjdrr|j }|j }| j	j
| ntdj|d S )Nr   r   r   zstatement:{})r   r   r   re   r   rg   r   r   Zdrop_databaserE   Zdrop_collectionr   r   )rL   r  rG   rj   Zdb_nameZ
table_namerB   rB   rC   r     s    
zQuery._dropc             C   s    t | j| j|| j}|j  |S )N)r   rE   rF   r   rP   )rL   r  r  rB   rB   rC   _update  s    zQuery._updatec             C   s    t | j| j|| j}|j  |S )N)r   rE   rF   r   rP   )rL   r  r  rB   rB   rC   _delete  s    zQuery._deletec             C   s"   t | | j| j|| j}|j  |S )N)r   rE   rF   r   rP   )rL   r  r  rB   rB   rC   _insert  s    zQuery._insertc             C   s   t | j| j|| jS )N)rZ   rE   rF   r   )rL   r  rB   rB   rC   _select  s    zQuery._select)rd   r   ZINSERTDELETEZCREATEr   r   N)r:   r;   r<   r   r   r?   r   r   rM   rY   r  r  r   rN   r   r   r   r  r   r  r  r  r  r  rB   rB   rB   rC   r     s4   3
r   )X__doc__rQ   r   loggingr   typingr   r   r   r   r@   r   r   Zdataclassesr	   r
   r=   Zpymongor   r   Zpymongo.command_cursorr   Zpymongo.cursorr   ZBasicCursorZpymongo.databaser   Zpymongo.errorsr   r   r  r   r   Zsqlparse.sqlr   r   r   r   
exceptionsr   r   r   Z	functionsr   rw   r   r   r    r!   r"   r#   r$   
convertersr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r  r7   r:   r   r8   ABCrD   ZDMLQueryrS   rX   rZ   r   r   r   r   r   r   rB   rB   rB   rC   <module>   sD    $P

 >+Q g_