
    [hA              	      &   d dl mZ d dlZd dlZd dlZd dlZddlmZ ddlm	Z	 ddl
mZ ddlmZ  G d d	          Z G d
 de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d          Z G d  d! ej        d!g d"                    Z G d# d$          Zej        d%             ZdS )&    )annotationsN   )event)url)DefaultDialect)BaseDDLElementc                  &    e Zd ZdZdZdZd Zd ZdS )
AssertRuleFNTc                    d S N selfexecute_observeds     k/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/testing/assertsql.pyprocess_statementzAssertRule.process_statement   s        c                    J d            )NFz?All statements are complete, but pending assertion rules remainr   r   s    r   no_more_statementszAssertRule.no_more_statements   s    	
%	
 	
 	
r   )__name__
__module____qualname__is_consumederrormessageconsume_statementr   r   r   r   r   r
   r
      sB        KL  
 
 
 
 
r   r
   c                      e Zd ZdS )SQLMatchRuleNr   r   r   r   r   r   r   r   &   s        Dr   r   c                      e Zd ZddZd ZdS )	CursorSQLNTc                0    || _         || _        || _        d S r   )	statementparamsr   )r   r#   r$   r   s       r   __init__zCursorSQL.__init__+   s    "!2r   c                0   |j         d         }| j        |j        k    s| j        @| j        |j        k    r0d| _        d| j        d| j        d|j        d|j        | _        d S |j                             d           d| _        |j         s	d| _        d S d S )Nr   TzTesting for exact SQL z parameters z
 received  )
statementsr#   r$   
parametersr   r   popr   )r   r   stmts      r   r   zCursorSQL.process_statement0   s    *1->T^++K#t(F(F%)D"" NNNKKKNNNOO  '++A...#D#. .)-&&&. .r   )NTr   r   r   r%   r   r   r   r   r!   r!   *   s7        3 3 3 3
. . . . .r   r!   c                  <    e Zd Z	 ddZd Zd Zd Zd Zd	 Zd
 Z	dS )CompiledSQLNdefaultTc                >    || _         || _        || _        || _        d S r   )r#   r$   dialectenable_returning)r   r#   r$   r1   r2   s        r   r%   zCompiledSQL.__init__G   s'     # 0r   c                D    t          j        dd| j                  }||k    S N[\n\t] )resubr#   r   r   received_statementr+   s       r   _compare_sqlzCompiledSQL._compare_sqlO   s"    viT^44!T))r   c                B   | j         dk    rXt                      }d|_        | j        r:dx|_        x|_        |_        d|_        d|_        d|_	        d|_
        |j        sJ |S t          j                            | j                                                               S Nr/   T)r1   r   supports_default_metavaluer2   insert_returningupdate_returningdelete_returninguse_insertmanyvaluessupports_multivalues_insertupdate_returning_multifromdelete_returning_multifrominsert_executemany_returningr   URLcreateget_dialect)r   r   r1   s      r   _compile_dialectzCompiledSQL._compile_dialectS   s    <9$$$&&G 26G.$ < ( 7+C,/3,6:3592592 ;;;;N7>>$,//;;==???r   c                  	
 |j         }|                     |          }d}d
d|j        v r|j        d         }nd}t          |j        t
                    r|j                            ||          	n3|j                            |||j        j        |j        j	        |          	t          j        ddt          	                    }|j        }|s	                    
          g}n	
fd|D             }||fS )	zxreconstruct the statement and params in terms
        of a target dialect, which for CompiledSQL is just DefaultDialect.Nschema_translate_map)r1   rL   )	cache_keyr1   column_keysfor_executemanyrL   r5   r6   extracted_parametersc                >    g | ]}                     |           S )rP   )construct_params).0mcompiledrQ   s     r   
<listcomp>z3CompiledSQL._received_statement.<locals>.<listcomp>   sF     $ $ $  )),@ *  $ $ $r   )contextrJ   execution_options
isinstanceclauseelementr   compilerV   rN   rO   r7   r8   strr)   rS   )r   r   rX   compare_dialectrM   map__received_statementr)   _received_parametersrV   rQ   s            @@r   r`   zCompiledSQL._received_statementm   s[    #*//0@AA 	 	 "W%>>>,-CDDDD&4nEE 	'5=='%) >  HH
 (5==#'#,8 ' 0 @%) >  H !fYCMMBB%0
 	)))= *  $  $ $ $ $ $ $	$ $ $  #$888r   c                2   |j         }|                     |          \  }}|                     |          }|                     ||          }|r|t	          |          }t	          |          }|ro|rmt          |                    d                    }	t          t	          |                    D ]'\  }
}|	D ]}||vs||         |	|         k    r n||
=  n(d}n|r|m|s|rd}|rd| _        d | _	        d S | 
                    ||          ||dz  | _	        d S )Nr   FT)r:   received_parameters)rX   r`   _all_paramsr;   listdictr*   	enumerater   r   _failure_message)r   r   rX   r`   ra   r$   
equivalent
all_paramsall_receivedparamidxreceived	param_keys                r   r   zCompiledSQL.process_statement   s   "*484L4L5
 5
11 !!'**&&'79LMM
 	'!!&\\
#$899  \  !2!233E)243E3E)F)F  X). " "I !* 9 9#+I#6%	:J#J#J % $K !-S 1!E !& &+
- ! \ .  ' '!&J 		#D $D $ 5 5 &! ! ':'; !Dr   c                    | j         rKt          | j                   r|                      |          }n| j         }t          |t                    s|g}|S d S r   )r$   callablerZ   re   )r   rX   r$   s      r   rd   zCompiledSQL._all_params   s[    ; 		$$ %W--fd++ " M4r   c                    d| j                             dd          dt          |                              dd          dS NzTesting for compiled statement
%%% partial params zE, received
%(received_statement)r with params %(received_parameters)r)r#   replacereprr   r   expected_paramss      r   rh   zCompiledSQL._failure_message   sL      &&sD1111_%%--c48888	
r   r=   )
r   r   r   r%   r;   rJ   r`   r   rd   rh   r   r   r   r.   r.   F   s        JN1 1 1 1* * *@ @ @439 39 39j1 1 1f
 
 
	
 	
 	
 	
 	
r   r.   c                  $    e Zd Z	 ddZd Zd ZdS )RegexSQLNr/   Fc                    t                               |            t          j        |          | _        || _        || _        || _        || _        d S r   )	r   r%   r7   r\   regex
orig_regexr$   r1   r2   )r   r~   r$   r1   r2   s        r   r%   zRegexSQL.__init__   sL     	d###Z&&
 0r   c                    d| j                             dd          dt          |                              dd          dS )Nz Testing for compiled statement ~rt   ru   rv   zE, received %(received_statement)r with params %(received_parameters)r)r   rw   rx   ry   s      r   rh   zRegexSQL._failure_message   sL      ''T2222_%%--c48888	
r   c                P    t          | j                            |                    S r   )boolr~   match)r   r   r:   s      r   r;   zRegexSQL._compare_sql  s!    DJ$$%788999r   )Nr/   F)r   r   r   r%   rh   r;   r   r   r   r|   r|      sI        FK1 1 1 1	
 	
 	
: : : : :r   r|   c                  <     e Zd Zd Zd Z fdZd Zd Zd Z xZ	S )
DialectSQLc                    |j         j        S r   )rX   r1   r   s     r   rJ   zDialectSQL._compile_dialect  s    '//r   c                :    t          j        dd|          }||k    S r4   )r7   r8   )r   	real_stmtreceived_stmtr+   s       r   _compare_no_spacezDialectSQL._compare_no_space  s     viY//$$r   c                    t                                          |          \  }}|j        D ]}|                     |j        |          r n t          d|z            ||j        j        fS )NzICan't locate compiled statement %r in list of statements actually invoked)superr`   r(   r   r#   AssertionErrorrX   compiled_parameters)r   r   r   received_paramsr   	__class__s        r   r`   zDialectSQL._received_statement  s    ).)D)D*
 *
&
 *4 	 	I%%i&9=II  !.0=>  
 .6JJJr   c                   |j         }t          j        dd| j                  }|                    dd          }|dk    rt          j        dd|          }ncd }|dk    rd	}nB|d
k    rd}n9|                    d          r$t          j        d          |dk    rdndfd}t          j        d||          }|                    dd          }|S )Nr5   r6   z::z!!pyformatz	:([\w_]+)z%(\1)sqmark?formatz%snumeric   numeric_dollar$:c                *     t                     S r   )next)rU   counternum_identifiers    r   replz4DialectSQL._dialect_adjusted_statement.<locals>.repl5  s    ,=d7mm===r   )
paramstyler7   r8   r#   rw   
startswith	itertoolscount)r   r1   r   r+   r   r   r   s        @@r   _dialect_adjusted_statementz&DialectSQL._dialect_adjusted_statement   s   '
viT^44 ||D$''##6,	488DD DW$$x''&&y11 >#/!,,(26F(F(FC> > > > > > 6,d33D ||D$''r   c                L    |                      |j        j                  }||k    S r   )r   rX   r1   r9   s       r   r;   zDialectSQL._compare_sql?  s-    //$,
 
 "T))r   c                    d|                      |j        j                                      dd          dt	          |                              dd          dS rs   )r   rX   r1   rw   rx   ry   s      r   rh   zDialectSQL._failure_messageE  sh      00$,4 '#t$$% % _%%--c48888
	
r   )
r   r   r   rJ   r   r`   r   r;   rh   __classcell__r   s   @r   r   r     s        0 0 0% % %K K K K K"  >* * *
 
 
 
 
 
 
r   r   c                       e Zd Zd Zd Zd ZdS )CountStatementsc                "    || _         d| _        d S Nr   r   _statement_count)r   r   s     r   r%   zCountStatements.__init__T  s    
 !r   c                &    | xj         dz  c_         d S )Nr   )r   r   s     r   r   z!CountStatements.process_statementX  s    "r   c                X    | j         | j        k    rJ d| j         | j        fz              d S )NFz,desired statement count %d does not match %dr   r   s    r   r   z"CountStatements.no_more_statements[  sG    :...H
%L     /.r   N)r   r   r   r%   r   r   r   r   r   r   r   S  sA        " " "# # #    r   r   c                      e Zd Zd Zd ZdS )AllOfc                .    t          |          | _        d S r   )setrulesr   r   s     r   r%   zAllOf.__init__d  s    ZZ


r   c                :   t          | j                  D ]a}d |_        |                    |           |j        r+| j                            |           | j        sd| _         d S |j        s
d | _         d S bt          | j                  d         j        | _        d S NTr   )re   r   r   r   r   discardr   r   rules      r   r   zAllOf.process_statementg  s    $$ 	A 	AD $D""#3444 
""4(((z ,'+D$& $(!
 !%TZ 0 0 3 @Dr   Nr,   r   r   r   r   r   c  s7             A A A A Ar   r   c                  *     e Zd Zd Zd Z fdZ xZS )EachOfc                .    t          |          | _        d S r   )re   r   r   s     r   r%   zEachOf.__init__y  s    %[[


r   c                *   | j         sd| _        d| _        | j         rf| j         d         }|                    |           |j        r| j                             d           n|j        r|j        | _        |j        rn| j         f| j         s	d| _        d S d S )NTFr   )r   r   r   r   r*   r   r   s      r   r   zEachOf.process_statement|  s    z 	+#D%*D"j 	:a=D""#3444 6
q!!!!" 6$($5!%  j 	 z 	$#D	$ 	$r   c                    | j         r3| j         d         j        s!| j         d                                          d S | j         r"t                                                       d S d S r   )r   r   r   r   )r   r   s    r   r   zEachOf.no_more_statements  sk    : 	)djm7 	)JqM,,.....Z 	)GG&&(((((	) 	)r   )r   r   r   r%   r   r   r   r   s   @r   r   r   x  sV        ! ! !$ $ $$) ) ) ) ) ) ) ) )r   r   c                       e Zd Z fdZ xZS )Conditionalc                h    |r t                      j        |  d S  t                      j        |  d S r   )r   r%   )r   	conditionr   
else_rulesr   s       r   r%   zConditional.__init__  s?     	*EGGe$$$$EGGj))))r   )r   r   r   r%   r   r   s   @r   r   r     s8        * * * * * * * * *r   r   c                      e Zd Zd ZdS )Orc                    | j         D ](}|                    |           |j        r
d| _         d S )t          | j                   d         j        | _        d S r   )r   r   r   re   r   r   s      r   r   zOr.process_statement  sk    J 	A 	AD""#3444 #'  !%TZ 0 0 3 @Dr   N)r   r   r   r   r   r   r   r   r     s(        A A A A Ar   r   c                      e Zd Zd Zd ZdS )SQLExecuteObservedc                h    || _         || _        |r|| _        n|r	|g| _        ng | _        g | _        d S r   )rX   r[   r)   r(   )r   rX   r[   multiparamsr$   s        r   r%   zSQLExecuteObserved.__init__  sG    * 	!)DOO 	!%hDOO DOr   c                *    t          | j                  S r   )r]   r(   r   s    r   __repr__zSQLExecuteObserved.__repr__  s    4?###r   N)r   r   r   r%   r   r   r   r   r   r     s2        
 
 
$ $ $ $ $r   r   c                      e Zd ZdS )SQLCursorExecuteObservedNr   r   r   r   r   r     s         	Dr   r   )r#   r)   rX   executemanyc                       e Zd Zd Zd Zd ZdS )SQLAsserterc                    g | _         d S r   )accumulatedr   s    r   r%   zSQLAsserter.__init__  s    r   c                "    | j         | _        | ` d S r   )r   _finalr   s    r   _closezSQLAsserter._close  s    &r   c                0   t          | }t          | j                  }|rJ|                    d          }|                    |           |j        rn|j        rJ |j                    |J|rJ d|z              |j        s|                                 d S d S )Nr   Fz$Additional SQL statements remain:
%s)r   re   r   r*   r   r   r   r   )r   r   r   observedr#   s        r   assert_zSQLAsserter.assert_  s    u~$$ 	0 QI""9--- 0" 0/d////  	0  	&LAHLLLL! 	&##%%%%%	& 	&r   N)r   r   r   r%   r   r   r   r   r   r   r     sA            & & & & &r   r   c              #    K   t                      g t          j        | d          fd            }t          j        | d          fd            }	 V  t          j        | d|           t          j        | d|                                            d S # t          j        | d|           t          j        | d|                                            w xY w)Nbefore_executec                    |||fd d <   d S r   r   )connr[   r   r$   rY   origs        r   connection_executez)assert_engine.<locals>.connection_execute  s      f4QQQr   after_cursor_executec                2   |sd S j         r"j         d         j        |u rj         d         }n>t          |d         d         d                   }j                             |           |j                            t          ||||                     d S )Nr   r   r   )r   rX   r   appendr(   r   )	r   cursorr#   r)   rX   r   obsasserterr   s	          r   cursor_executez%assert_engine.<locals>.cursor_execute  s      	F  	-$R(0G;;&r*CC$Wd1gtAwQHHC '',,,$:w 	
 	
 	
 	
 	
r   )r   r   listens_forremover   )enginer   r   r   r   s      @@r   assert_enginer     s     }}HD
v/005 5 5 5 105 v566
 
 
 
 
 76
*V3^DDDV-/ABBB 	V3^DDDV-/ABBBs   B AC)
__future__r   collections
contextlibr   r7   r6   r   r   r   engine.defaultr   schemar   r
   r   r!   r.   r|   r   r   r   r   r   r   r   
namedtupler   r   contextmanagerr   r   r   r   <module>r      s;   # " " " " "             				             + + + + + + # # # # # #
 
 
 
 
 
 
 
	 	 	 	 	: 	 	 	. . . . . . . .8d
 d
 d
 d
 d
, d
 d
 d
N: : : : :{ : : :4I
 I
 I
 I
 I
 I
 I
 I
X    j    A A A A AJ A A A*) ) ) ) )Z ) ) ):* * * * *& * * *A A A A A A A A$ $ $ $ $ $ $ $"	 	 	 	 	K"=== 	 	 	& & & & & & & &2 ( ( ( ( (r   