
    gA              	         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     [/var/www/html/AdoubleTech/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$   r0   r1   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)r0   r   supports_default_metavaluer1   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   r0   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)r0   rL   )	cache_keyr0   column_keysfor_executemanyrL   r4   r5   )extracted_parameters)contextrJ   execution_options
isinstanceclauseelementr   compilecompiledrN   rO   r6   r7   strr)   construct_params)r   r   rQ   compare_dialectrM   rP   map_rV   _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)r9   received_parameters)rQ   r[   _all_paramsr:   listdictr*   	enumerater   r   _failure_message)r   r   rQ   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$   callablerS   ra   )r   rQ   r$   s      r   r`   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   rd   zCompiledSQL._failure_message   s7     &&sD1_%--c48	
r   r<   )
r   r   r   r%   r:   rJ   r[   r   r`   rd   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%   r6   rU   regex
orig_regexr$   r0   r1   )r   rz   r$   r0   r1   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 ~rp   rq   rr   zE, received %(received_statement)r with params %(received_parameters)r)r{   rs   rt   ru   s      r   rd   zRegexSQL._failure_message   s7     ''T2_%--c48	
r   c                J    t        | j                  j                  |            S r   )boolrz   match)r   r   r9   s      r   r:   zRegexSQL._compare_sql  s    DJJ$$%7899r   )Nr=   F)r   r   r   r%   rd   r:   r   r   r   rx   rx      s    FK1	
:r   rx   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   )rQ   r0   r   s     r   rJ   zDialectSQL._compile_dialect  s    ''///r   c                :    t        j                  dd|      }||k(  S r3   )r6   r7   )r   	real_stmtreceived_stmtr+   s       r   _compare_no_spacezDialectSQL._compare_no_space  s    vviY/$$r   c                    t         |   |      \  }}|j                  D ]   }| 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   r#   AssertionErrorrQ   compiled_parameters)r   r   r   received_paramsr   	__class__s        r   r[   zDialectSQL._received_statement  s    ).)D*
&
 *44 	I%%i&9&9=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 )Nr4   r5   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>.repl5  s    ,-d7m_==r   )
paramstyler6   r7   r#   rs   
startswith	itertoolscount)r   r0   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   rQ   r0   r8   s       r   r:   zDialectSQL._compare_sql?  s.    //$$,,
 "T))r   c                    d| j                  |j                  j                        j                  dd      dt	        |      j                  dd      dS ro   )r   rQ   r0   rs   rt   ru   s      r   rd   zDialectSQL._failure_messageE  sS     00$,,44'#t$% _%--c48
	
r   )
r   r   r   rJ   r   r[   r   r:   rd   __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__T  s    
 !r   c                .    | xj                   dz  c_         y )Nr   )r   r   s     r   r   z!CountStatements.process_statementX  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   S  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__d  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   )ra   r   r   r   r   discardr   r   rules      r   r   zAllOf.process_statementg  s    $ 	AD $D""#34

""4(zz'+D$&&$(!	A !%TZZ 0 3 @ @Dr   Nr,   r   r   r   r   r   c  s     Ar   r   c                  *     e Zd Zd Zd Z fdZ xZS )EachOfc                $    t        |      | _        y r   )ra   r   r   s     r   r%   zEachOf.__init__y  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   x  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   ra   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   )rQ   rT   r)   r(   )r   rQ   rT   multiparamsr$   s        r   r%   zSQLExecuteObserved.__init__  sK    *)DO
 	 %hDO  !DOr   c                ,    t        | j                        S r   )rW   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)   rQ   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   ra   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                    |||fd d  y r   r   )connrT   r   r$   rR   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   rQ   r   appendr(   r   )	r   cursorr#   r)   rQ   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   r6   r5   r   r   r   engine.defaultr   schemar   r
   r   r!   r.   rx   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$ $"	K"=	& &2 ( (r   