
    ,hA              	         S SK Jr  S SKrS SKrS SKrS SKrSSKJr  SSKJ	r	  SSK
Jr  SSKJr   " S S	5      r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S5      r " S  S!\R4                  " S!/ S"Q5      5      r " S# S$5      r\R:                  S% 5       rg)&    )annotationsN   )event)url)DefaultDialect)BaseDDLElementc                  ,    \ rS rSrSrSrSrS rS rSr	g)
AssertRule   FNTc                    g N selfexecute_observeds     T/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/testing/assertsql.pyprocess_statementAssertRule.process_statement   s        c                     S5       e)Nz?All statements are complete, but pending assertion rules remainr   r   s    r   no_more_statementsAssertRule.no_more_statements   s    	
%	
ur   r   )
__name__
__module____qualname____firstlineno__is_consumederrormessageconsume_statementr   r   __static_attributes__r   r   r   r
   r
      s    KL
r   r
   c                      \ rS rSrSrg)SQLMatchRule&   r   Nr   r   r   r   r!   r   r   r   r#   r#   &   s    r   r#   c                  $    \ rS rSrSS jrS rSrg)	CursorSQL*   Nc                (    Xl         X l        X0l        g r   )	statementparamsr    )r   r*   r+   r    s       r   __init__CursorSQL.__init__+   s    "!2r   c                   UR                   S   nU R                  UR                  :w  d'  U R                  ba  U R                  UR                  :w  aG  SU l        SU R                  < SU R                  < SUR                  < SUR                  < 3U l        g UR                   R                  S5        SU l        UR                   (       d  SU l        g g )Nr   TzTesting for exact SQL z parameters z
 received  )
statementsr*   r+   
parametersr    r   popr   )r   r   stmts      r   r   CursorSQL.process_statement0   s    **1->>T^^+KK#t(F%)D" NNKKNNOO  ''++A.#D#..)-& /r   )r    r   r   r+   r*   )NTr   r   r   r   r,   r   r!   r   r   r   r'   r'   *   s    3
.r   r'   c                  D    \ rS rSr SS jrS rS rS rS rS r	S	 r
S
rg)CompiledSQLF   Nc                4    Xl         X l        X0l        X@l        g r   )r*   r+   dialectenable_returning)r   r*   r+   r:   r;   s        r   r,   CompiledSQL.__init__G   s     # 0r   c                N    [         R                  " SSU R                  5      nX#:H  $ N[\n\t] )resubr*   r   r   received_statementr3   s       r   _compare_sqlCompiledSQL._compare_sqlO   s!    vviT^^4!))r   c                j   U R                   S:X  ah  [        5       nSUl        U R                  (       aD  S=Ul        =Ul        Ul        SUl        SUl        SUl	        SUl
        UR                  (       d   eU$ [        R                  R                  U R                   5      R                  5       " 5       $ NdefaultT)r:   r   supports_default_metavaluer;   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   r:   s      r   _compile_dialectCompiledSQL._compile_dialectS   s    <<9$$&G 26G.$$ ( 7+C,/3,6:3592592 ;;;;N77>>$,,/;;=??r   c                b   UR                   nU R                  U5      nSnSnSUR                  ;   a  UR                  S   nOSn[        UR                  [
        5      (       a  UR                  R                  UUS9nOEUR                  R                  UUUR                  R                  UR                  R                  US9n[        R                  " SS[        U5      5      nUR                  n	U	(       d  UR                  US9/n
X4$ U	 Vs/ s H  nUR                  XS9PM     n
nX4$ s  snf )zpreconstruct the statement and params in terms
of a target dialect, which for CompiledSQL is just DefaultDialect.Nschema_translate_map)r:   rY   )	cache_keyr:   column_keysfor_executemanyrY   r?   r@   )extracted_parameters)contextrV   execution_options
isinstanceclauseelementr   compilecompiledr[   r\   rA   rB   strr1   construct_params)r   r   r^   compare_dialectrZ   r]   map_rc   _received_statementr1   _received_parametersms               r   rh   CompiledSQL._received_statementm   sg    #**//0@A 	 	 "W%>%>>,,-CDDD&44nEE'55=='%) > H
 (55==#'#,,88 ' 0 0 @ @%) > H !ffYCMB%00
)))= * $  #88 $	$ $A )) *  $	 ! $ #88$s   D,c                4   UR                   nU R                  U5      u  p4U R                  U5      nU R                  X5      nU(       a  Ub  [	        U5      n[	        U5      nU(       an  U(       ag  [        UR                  S5      5      n	[        [	        U5      5       H"  u  pU	 H  nX;  d  X   X   :w  d  M    M     X	   O   SnOU(       a	  U(       a  Mg  U(       d  U(       a  SnU(       a  SU l        S U l	        g U R                  X5      UUS.-  U l	        g )Nr   FT)rD   received_parameters)r^   rh   _all_paramsrE   listdictr2   	enumerater   r   _failure_message)r   r   r^   rh   ri   r+   
equivalent
all_paramsall_receivedparamidxreceived	param_keys                r   r   CompiledSQL.process_statement   s   "**484L4L5
1 !!'*&&'7M
!!&\
#$89 \ !23E)243E)F).I !* 9#+#6%:J#J % */ !- 1! *G$ &+
- !\\. !&J#D $D $ 5 5 ! ':';!Dr   c                    U R                   (       aR  [        U R                   5      (       a  U R                  U5      nOU R                   n[        U[        5      (       d  U/nU$ g r   )r+   callabler`   ro   )r   r^   r+   s      r   rn   CompiledSQL._all_params   sK    ;;$$W-fd++ Mr   c                ~    SU R                   R                  SS5      < S[        U5      R                  SS5      < S3$ 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   rr   CompiledSQL._failure_message   s7     &&sD1_%--c48	
r   )r:   r;   r   r   r+   r*   rH   )r   r   r   r   r,   rE   rV   rh   r   rn   rr   r!   r   r   r   r7   r7   F   s+    JN1*@439j1f
	
r   r7   c                  ,    \ rS rSr SS jrS rS rSrg)RegexSQL   Nc                    [         R                  U 5        [        R                  " U5      U l        Xl        X l        X0l        X@l        g r   )	r#   r,   rA   rb   regex
orig_regexr+   r:   r;   )r   r   r+   r:   r;   s        r   r,   RegexSQL.__init__   s7     	d#ZZ&
 0r   c                ~    SU R                   R                  SS5      < S[        U5      R                  SS5      < S3$ )Nz Testing for compiled statement ~r   r   r   zE, received %(received_statement)r with params %(received_parameters)r)r   r   r   r   s      r   rr   RegexSQL._failure_message   s7     ''T2_%--c48	
r   c                J    [        U R                  R                  U5      5      $ r   )boolr   match)r   r   rD   s      r   rE   RegexSQL._compare_sql  s    DJJ$$%7899r   )r:   r;   r   r+   r   )NrI   F)r   r   r   r   r,   rr   rE   r!   r   r   r   r   r      s    FK1	
:r   r   c                  F   ^  \ rS rSrS rS rU 4S jrS rS rS r	Sr
U =r$ )	
DialectSQLi  c                .    UR                   R                  $ r   )r^   r:   r   s     r   rV   DialectSQL._compile_dialect  s    ''///r   c                :    [         R                  " SSU5      nX#:H  $ r>   )rA   rB   )r   	real_stmtreceived_stmtr3   s       r   _compare_no_spaceDialectSQL._compare_no_space  s    vviY/$$r   c                   > [         TU ]  U5      u  p#UR                   H&  nU R                  UR                  U5      (       d  M&    O   [        SU-  5      eX!R                  R                  4$ )NzICan't locate compiled statement %r in list of statements actually invoked)superrh   r0   r   r*   AssertionErrorr^   compiled_parameters)r   r   r   received_paramsr   	__class__s        r   rh   DialectSQL._received_statement  sy    ).)D*
&
 *44I%%i&9&9=II 5 !.0=> 
 66JJJJr   c                  ^^ UR                   n[        R                  " SSU R                  5      nUR	                  SS5      nUS:X  a  [        R                  " SSU5      nOhS nUS:X  a  S	nOFUS
:X  a  SnO=UR                  S5      (       a'  [        R                  " S5      mUS:X  a  SOSmUU4S jn[        R                  " SXC5      nUR	                  SS5      nU$ )Nr?   r@   z::z!!pyformatz	:([\w_]+)z%(\1)sqmark?formatz%snumeric   numeric_dollar$:c                "   > T [        T5       3$ r   )next)rj   counternum_identifiers    r   repl4DialectSQL._dialect_adjusted_statement.<locals>.repl5  s    ,-d7m_==r   )
paramstylerA   rB   r*   r   
startswith	itertoolscount)r   r:   r   r3   r   r   r   s        @@r   _dialect_adjusted_statement&DialectSQL._dialect_adjusted_statement   s    ''
vviT^^4 ||D$'#66,	48D DW$x'&&y11#//!,(26F(FC> 66,3D ||D$'r   c                T    U R                  UR                  R                  5      nX#:H  $ r   )r   r^   r:   rC   s       r   rE   DialectSQL._compare_sql?  s,    //$$,,
 "))r   c                    SU R                  UR                  R                  5      R                  SS5      < S[	        U5      R                  SS5      < S3$ r   )r   r^   r:   r   r   r   s      r   rr   DialectSQL._failure_messageE  sS     00$,,44'#t$% _%--c48
	
r   r   )r   r   r   r   rV   r   rh   r   rE   rr   r!   __classcell__r   s   @r   r   r     s'    0%K">*
 
r   r   c                  &    \ rS rSrS rS rS rSrg)CountStatementsiS  c                    Xl         SU l        g Nr   r   _statement_count)r   r   s     r   r,   CountStatements.__init__T  s    
 !r   c                .    U =R                   S-  sl         g )Nr   )r   r   s     r   r   !CountStatements.process_statementX  s    "r   c                x    U R                   U R                  :w  a    SU R                   U R                  4-  5       eg )Nz,desired statement count %d does not match %dr   r   s    r   r   "CountStatements.no_more_statements[  sC    ::...H

%%L  5 /r   )r   r   N)r   r   r   r   r,   r   r   r!   r   r   r   r   r   S  s    "#r   r   c                       \ rS rSrS rS rSrg)AllOfic  c                $    [        U5      U l        g r   )setrulesr   r   s     r   r,   AllOf.__init__d  s    Z
r   c                z   [        U R                  5       H{  nS Ul        UR                  U5        UR                  (       a5  U R                  R                  U5        U R                  (       d  SU l          g UR                  (       a  Mt  S U l          g    [        U R                  5      S   R                  U l        g NTr   )ro   r   r   r   r   discardr   r   rules      r   r   AllOf.process_statementg  s    $D $D""#34

""4(zz'+D$&&&$(! % !%TZZ 0 3 @ @Dr   )r   r   r   Nr5   r   r   r   r   r   c  s     Ar   r   c                  4   ^  \ rS rSrS rS rU 4S jrSrU =r$ )EachOfix  c                $    [        U5      U l        g r   )ro   r   r   s     r   r,   EachOf.__init__y  s    %[
r   c                   U R                   (       d  SU l        SU l        U R                   (       a  U R                   S   nUR                  U5        UR                  (       a  U R                   R	                  S5        O"UR
                  (       a  UR
                  U l        UR                  (       a  OU R                   (       a  M  U R                   (       d  SU l        g g )NTFr   )r   r   r    r   r2   r   r   s      r   r   EachOf.process_statement|  s    zz#D%*D"jj::a=D""#34

q!""$($5$5!%% jjj zz#D r   c                   > U R                   (       a<  U R                   S   R                  (       d  U R                   S   R                  5         g U R                   (       a  [        TU ]	  5         g g r   )r   r   r   r   )r   r   s    r   r   EachOf.no_more_statements  sE    ::djjm77JJqM,,.ZZG&( r   )r    r   r   r   )	r   r   r   r   r,   r   r   r!   r   r   s   @r   r   r   x  s    !$$) )r   r   c                  (   ^  \ rS rSrU 4S jrSrU =r$ )Conditionali  c                J   > U(       a  [         TU ]  " U6   g [         TU ]  " U6   g r   )r   r,   )r   	conditionr   
else_rulesr   s       r   r,   Conditional.__init__  s     Ge$Gj)r   r   )r   r   r   r   r,   r!   r   r   s   @r   r   r     s    * *r   r   c                      \ rS rSrS rSrg)Ori  c                    U R                    H.  nUR                  U5        UR                  (       d  M'  SU l          g    [        U R                   5      S   R                  U l        g r   )r   r   r   ro   r   r   s      r   r   Or.process_statement  sT    JJD""#34#' 	  !%TZZ 0 3 @ @Dr   )r   r   N)r   r   r   r   r   r!   r   r   r   r   r     s    Ar   r   c                       \ rS rSrS rS rSrg)SQLExecuteObservedi  c                t    Xl         X l        U(       a  X0l        OU(       a	  U/U l        O/ U l        / U l        g r   )r^   ra   r1   r0   )r   r^   ra   multiparamsr+   s        r   r,   SQLExecuteObserved.__init__  s/    *)O%hDO DOr   c                ,    [        U R                  5      $ r   )rd   r0   r   s    r   __repr__SQLExecuteObserved.__repr__  s    4??##r   )ra   r^   r1   r0   N)r   r   r   r   r,   r   r!   r   r   r   r   r     s    
$r   r   c                      \ rS rSrSrg)SQLCursorExecuteObservedi  r   Nr%   r   r   r   r   r     s     	r   r   )r*   r1   r^   executemanyc                  &    \ rS rSrS rS rS rSrg)SQLAsserteri  c                    / U l         g r   )accumulatedr   s    r   r,   SQLAsserter.__init__  s
    r   c                *    U R                   U l        U ? g r   )r   _finalr   s    r   _closeSQLAsserter._close  s    &&r   c                p   [        U6 n[        U R                  5      nU(       a_  UR                  S5      nUR	                  U5        UR
                  (       a  O+UR                  (       a   UR                  5       eU(       a  M_  U(       a
   SU-  5       eUR
                  (       d  UR                  5         g g )Nr   z$Additional SQL statements remain:
%s)r   ro   r   r2   r   r   r   r   )r   r   r   observedr*   s        r   assert_SQLAsserter.assert_  s    u~$ QI""9-""/d///u h LAHLL5!!##% "r   )r   r   N)r   r   r   r   r,   r   r  r!   r   r   r   r   r     s    &r   r   c              #    ^^#    [        5       m/ m[        R                  " U S5      U4S j5       n[        R                  " U S5      UU4S j5       n Tv   [        R                  " U SU5        [        R                  " U SU5        TR	                  5         g ! [        R                  " U SU5        [        R                  " U SU5        TR	                  5         f = f7f)Nbefore_executec                   > XU4TS S & g r   r   )connra   r   r+   r_   origs        r   connection_execute)assert_engine.<locals>.connection_execute  s      f4Qr   after_cursor_executec                >  > U(       d  g TR                   (       a,  TR                   S   R                  UL a  TR                   S   nO2[        UTS   TS   TS   5      nTR                   R                  U5        UR                  R                  [        X#XE5      5        g )Nr   r   r   )r   r^   r   appendr0   r   )	r  cursorr*   r1   r^   r   obsasserterr  s	          r   cursor_execute%assert_engine.<locals>.cursor_execute  s        $$R(00G;&&r*C$Wd1gtAwQHC  '',$w	
r   )r   r   listens_forremover   )enginer  r  r  r  s      @@r   assert_enginer    s     }HD
v/05 15 v56
 7
*V3^DV-/AB 	V3^DV-/ABs    ACB ACACC)
__future__r   collections
contextlibr   rA   r@   r   r  r   engine.defaultr   schemar   r
   r#   r'   r7   r   r   r   r   r   r   r   r   
namedtupler   r   contextmanagerr  r   r   r   <module>r     s    #    	   + #
 
	: 	. .8d
, d
N:{ :4I
 I
Xj  AJ A*)Z ):*& *A A$ $"	"=	& &2 ( (r   