
    {<iB              	         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j4                  d!g d"            Z G d# d$      Zej:                  d%        Zy)&    )annotationsN   )event)url)DefaultDialect)BaseDDLElementc                  $    e Zd ZdZdZdZd Zd Zy)
AssertRuleFNTc                     y N selfexecute_observeds     a/home/www/utuvibe.miabetepe.com/venv/lib/python3.12/site-packages/sqlalchemy/testing/assertsql.pyprocess_statementzAssertRule.process_statement   s        c                    J d       )Nz?All statements are complete, but pending assertion rules remainr   r   s    r   no_more_statementszAssertRule.no_more_statements   s    	
%	
ur   )__name__
__module____qualname__is_consumederrormessageconsume_statementr   r   r   r   r   r
   r
      s    KL
r   r
   c                      e Zd Zy)SQLMatchRuleNr   r   r   r   r   r   r   r   &   s    r   r   c                      e Zd ZddZd Zy)	CursorSQLNc                .    || _         || _        || _        y r   )	statementparamsr   )r   r#   r$   r   s       r   __init__zCursorSQL.__init__+   s    "!2r   c                   |j                   d   }| j                  |j                  k7  s%| j                  \| j                  |j                  k7  rCd| _        d| j                  d| j                  d|j                  d|j                  | _        y |j                   j                  d       d| _        |j                   sd| _        y y )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^^+KK#t(F%)D" NNKKNNOO  ''++A.#D#..)-& /r   NTr   r   r   r%   r   r   r   r   r!   r!   *   s    3
.r   r!   c                  :    e Zd Z	 d	dZd Zd Zd Zd Zd Zd Z	y)
CompiledSQLNc                <    || _         || _        || _        || _        y r   )r#   r$   dialectenable_returning)r   r#   r$   r1   r2   s        r   r%   zCompiledSQL.__init__G   s!     # 0r   c                N    t        j                  dd| j                        }||k(  S N[\n\t] )resubr#   r   r   received_statementr+   s       r   _compare_sqlzCompiledSQL._compare_sqlO   s#    vviT^^4!T))r   c                R   | j                   dk(  r^t               }d|_        | j                  r?dx|_        x|_        |_        d|_        d|_        d|_	        d|_
        |j                  sJ |S t        j                  j                  | j                         j                                S NdefaultT)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77>>$,,/;;=??r   c                `   |j                   }| j                  |      }d}d}d|j                  v r|j                  d   }nd}t        |j                  t
              r|j                  j                  ||      }nH|j                  j                  |||j                  j                  |j                  j                  |      }t        j                  ddt        |            }|j                  }	|	s|j                  |      g}
||
fS |	D cg c]  }|j                  ||       }
}||
fS c c}w )zxreconstruct the statement and params in terms
        of a target dialect, which for CompiledSQL is just DefaultDialect.Nschema_translate_map)r1   rM   )	cache_keyr1   column_keysfor_executemanyrM   r5   r6   )extracted_parameters)contextrK   execution_options
isinstanceclauseelementr   compilecompiledrO   rP   r7   r8   strr)   construct_params)r   r   rR   compare_dialectrN   rQ   map_rW   _received_statementr)   _received_parametersms               r   r\   zCompiledSQL._received_statementm   si    #**//0@A 	 	 "W%>%>>,,-CDDD&44nE'55=='%) > H
 (55==#'#,,88 ' 0 0 @ @%) > H !ffYCMB%00
)))= * $  #$888 $	$  )),@ * $  $ #$888$s   D+c                   |j                   }| j                  |      \  }}| j                  |      }| j                  ||      }|r||zt	        |      }t	        |      }|r\|rZt        |j                  d            }	t        t	        |            D ]!  \  }
}|	D ]  }||vs||   |	|   k7  s  ||
=  n d}n|r|rZ|s|rd}|rd| _        d | _	        y | j                  ||      ||dz  | _	        y )Nr   FT)r:   received_parameters)rR   r\   _all_paramsr;   listdictr*   	enumerater   r   _failure_message)r   r   rR   r\   r]   r$   
equivalent
all_paramsall_receivedparamidxreceived	param_keys                r   r   zCompiledSQL.process_statement   s4   "**484L4L5
11 !!'*&&'79LM
!!&\
#$89 \ !23E)243E)F X). "I !* 9#+I#6%	:J#J %" !-S 1!$ &+
- !\. !&J#D $D $ 5 5 &! ':';!Dr   c                    | j                   rHt        | j                         r| j                  |      }n| j                   }t        |t              s|g}|S y r   )r$   callablerT   rb   )r   rR   r$   s      r   ra   zCompiledSQL._all_params   sE    ;;$W-fd+ Mr   c                z    d| j                   j                  dd      dt        |      j                  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   re   zCompiledSQL._failure_message   s7     &&sD1_%--c48	
r   r=   )
r   r   r   r%   r;   rK   r\   r   ra   re   r   r   r   r/   r/   F   s+    JN1*@439j1f
	
r   r/   c                  "    e Zd Z	 ddZd Zd Zy)RegexSQLNc                    t         j                  |        t        j                  |      | _        || _        || _        || _        || _        y r   )	r   r%   r7   rV   regex
orig_regexr$   r1   r2   )r   r{   r$   r1   r2   s        r   r%   zRegexSQL.__init__   s?     	d#ZZ&
 0r   c                z    d| j                   j                  dd      dt        |      j                  dd      dS )Nz Testing for compiled statement ~rq   rr   rs   zE, received %(received_statement)r with params %(received_parameters)r)r|   rt   ru   rv   s      r   re   zRegexSQL._failure_message   s7     ''T2_%--c48	
r   c                J    t        | j                  j                  |            S r   )boolr{   match)r   r   r:   s      r   r;   zRegexSQL._compare_sql  s    DJJ$$%7899r   )Nr>   F)r   r   r   r%   re   r;   r   r   r   ry   ry      s    FK1	
:r   ry   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   )rR   r1   r   s     r   rK   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    vviY/$$r   c                    t         |   |      \  }}|j                  D ]*  }| j                  |j                  j
                  |      s* n t        d|z        ||j                  j                  fS )NzICan't locate compiled statement %r in list of statements actually invoked)superr\   r(   r   rR   r#   AssertionErrorcompiled_parameters)r   r   r   received_paramsr   	__class__s        r   r\   zDialectSQL._received_statement  s    ).)D*
&
 *44 		I%%!!++] 			 !.0=> 
 .66JJJJr   c                   |j                   }t        j                  dd| j                        }|j	                  dd      }|dk(  rt        j                  dd|      }n^d }|dk(  rd	}n=|d
k(  rd}n5|j                  d      r$t        j                  d      |dk(  rdndfd}t        j                  d||      }|j	                  dd      }|S )Nr5   r6   z::z!!pyformatz	:([\w_]+)z%(\1)sqmark?formatz%snumeric   numeric_dollar$:c                "     t               S r   )next)r^   counternum_identifiers    r   replz4DialectSQL._dialect_adjusted_statement.<locals>.repl7  s    ,-d7m_==r   )
paramstyler7   r8   r#   rt   
startswith	itertoolscount)r   r1   r   r+   r   r   r   s        @@r   _dialect_adjusted_statementz&DialectSQL._dialect_adjusted_statement"  s    ''
vviT^^4 ||D$'#66,	48D DW$x'&&y1#//!,(26F(FC> 66,d3D ||D$'r   c                V    | j                  |j                  j                        }||k(  S r   )r   rR   r1   r9   s       r   r;   zDialectSQL._compare_sqlA  s.    //$$,,
 "T))r   c                    d| j                  |j                  j                        j                  dd      dt	        |      j                  dd      dS rp   )r   rR   r1   rt   ru   rv   s      r   re   zDialectSQL._failure_messageG  sS     00$,,44'#t$% _%--c48
	
r   )
r   r   r   rK   r   r\   r   r;   re   __classcell__r   s   @r   r   r     s"    0%K&>*
r   r   c                      e Zd Zd Zd Zd Zy)CountStatementsc                     || _         d| _        y Nr   r   _statement_count)r   r   s     r   r%   zCountStatements.__init__V  s    
 !r   c                .    | xj                   dz  c_         y )Nr   )r   r   s     r   r   z!CountStatements.process_statementZ  s    "r   c                v    | j                   | j                  k7  r J d| j                   | j                  fz         y )Nz,desired statement count %d does not match %dr   r   s    r   r   z"CountStatements.no_more_statements]  sC    ::...H

%%L  5 /r   N)r   r   r   r%   r   r   r   r   r   r   r   U  s    "#r   r   c                      e Zd Zd Zd Zy)AllOfc                $    t        |      | _        y r   )setrulesr   r   s     r   r%   zAllOf.__init__f  s    Z
r   c                X   t        | j                        D ]k  }d |_        |j                  |       |j                  r0| j                  j                  |       | j                  sd| _         y |j                  rdd | _         y  t        | j                        d   j                  | _        y NTr   )rb   r   r   r   r   discardr   r   rules      r   r   zAllOf.process_statementi  s    $ 	AD $D""#34

""4(zz'+D$&&$(!	A !%TZZ 0 3 @ @Dr   Nr-   r   r   r   r   r   e  s     Ar   r   c                  *     e Zd Zd Zd Z fdZ xZS )EachOfc                $    t        |      | _        y r   )rb   r   r   s     r   r%   zEachOf.__init__{  s    %[
r   c                v   | j                   sd| _        d| _        | j                   r| j                   d   }|j                  |       |j                  r| j                   j	                  d       n|j
                  r|j
                  | _        |j                  rn| j                   r| j                   sd| _        y y )NTFr   )r   r   r   r   r*   r   r   s      r   r   zEachOf.process_statement~  s    zz#D%*D"jj::a=D""#34

q!""$($5$5!%% jj zz#D r   c                    | j                   r7| j                   d   j                  s| j                   d   j                          y | j                   rt        | 	          y y r   )r   r   r   r   )r   r   s    r   r   zEachOf.no_more_statements  sE    ::djjm77JJqM,,.ZZG&( r   )r   r   r   r%   r   r   r   r   s   @r   r   r   z  s    !$$) )r   r   c                       e Zd Z fdZ xZS )Conditionalc                <    |rt        |   |  y t        |   |  y r   )r   r%   )r   	conditionr   
else_rulesr   s       r   r%   zConditional.__init__  s     Ge$Gj)r   )r   r   r   r%   r   r   s   @r   r   r     s    * *r   r   c                      e Zd Zd Zy)Orc                    | j                   D ](  }|j                  |       |j                  s!d| _         y  t        | j                         d   j                  | _        y r   )r   r   r   rb   r   r   s      r   r   zOr.process_statement  sX    JJ 	AD""#34#' 		A !%TZZ 0 3 @ @Dr   N)r   r   r   r   r   r   r   r   r     s    Ar   r   c                      e Zd Zd Zd Zy)SQLExecuteObservedc                    || _         || _        |r|| _        g | _        y |r|g| _        g | _        y g | _        g | _        y r   )rR   rU   r)   r(   )r   rR   rU   multiparamsr$   s        r   r%   zSQLExecuteObserved.__init__  sK    *)DO
 	 %hDO  !DOr   c                ,    t        | j                        S r   )rX   r(   r   s    r   __repr__zSQLExecuteObserved.__repr__  s    4??##r   N)r   r   r   r%   r   r   r   r   r   r     s    
$r   r   c                      e Zd Zy)SQLCursorExecuteObservedNr   r   r   r   r   r     s     	r   r   )r#   r)   rR   executemanyc                      e Zd Zd Zd Zd Zy)SQLAsserterc                    g | _         y r   )accumulatedr   s    r   r%   zSQLAsserter.__init__  s
    r   c                *    | j                   | _        | ` y r   )r   _finalr   s    r   _closezSQLAsserter._close  s    &&r   c                2   t        | }t        | j                        }|rO|j                  d      }|j	                  |       |j
                  rn |j                  rJ |j                         |rO|r
J d|z         |j
                  s|j                          y y )Nr   z$Additional SQL statements remain:
%s)r   rb   r   r*   r   r   r   r   )r   r   r   observedr#   s        r   assert_zSQLAsserter.assert_  s    u~$ QI""9-""/d///u  LAHLL5!!##% "r   N)r   r   r   r%   r   r   r   r   r   r   r     s    &r   r   c              #    K   t               g t        j                  | d      fd       }t        j                  | d      fd       }	  t        j                  | d|       t        j                  | d|       j	                          y # t        j                  | d|       t        j                  | d|       j	                          w xY ww)Nbefore_executec                $    d| _         |||fd d  y r,   )_WORKAROUND_ISSUE_13018)connrU   r   r$   rS   origs        r   connection_executez)assert_engine.<locals>.connection_execute  s     (,$  f4Qr   after_cursor_executec                ,   |sy j                   r+j                   d   j                  |u rj                   d   }n2t        |d   d   d         }j                   j                  |       |j                  j                  t        ||||             y )Nr   r   r   )r   rR   r   appendr(   r   )	r   cursorr#   r)   rR   r   obsasserterr   s	          r   cursor_executez%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 ?CA CC)
__future__r   collections
contextlibr   r7   r6   r   r   r   engine.defaultr   schemar   r
   r   r!   r/   ry   r   r   r   r   r   r   r   
namedtupler   r   contextmanagerr   r   r   r   <module>r      s    #    	   + #
 
	: 	. .8d
, d
N:{ :4K
 K
\j  AJ A*)Z ):*& *A A$ $"	K"=	& &2 * *r   