
    ,h                    `   S r SSKJ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KJ
r
  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSKJ!r!  SSK"J#r#  SSK"J$r$  SS KJ%r%  SS!KJ&r&  SS"K'J(r(  \(       a6  SS#K)J*r*  SS$K)J+r+  SS%KJ,r,  SS&KJ-r-  SS'KJ.r.  SS(KJ/r/  SS)KJ0r0  SS*KJ1r1  SS+KJ2r2  \&Rf                  " S,S-5      r4SRS0 jr5\S.\6\\\6S14      \
\6   4   r7\S2\6\6\
\6   4   r8\S/\6S1\
\6   4   r9\\7   r: " S3 S4\5      r;            SSS5 jr<\    ST                 SUS6 jj5       r=\          SVS7 j5       r=    SW                 SXS8 jjr=S9 r>        SYS: jr?S; r@S< rAS= rBS> rCS? rDS@ rESA rF            SZSB jrGSC rH\ S[         S\SD jj5       rI\          S]SE j5       rI  S^           S_SF jjrI\ S[         S\SG jj5       rJ\          S]SH j5       rJ  S^           S_SI jjrJ " SJ SK\R^                  \   5      rK            S`SL jrLSM rM              SaSN jrNSO rOSP rPSQ rQg)bziFunctions used by compiler.py to determine the parameters rendered
within INSERT and UPDATE statements.

    )annotationsN)Any)Callable)cast)Dict)Iterable)List)MutableMapping)
NamedTuple)Optional)overload)Sequence)Set)Tuple)TYPE_CHECKING)Union   )	coercions)dml)elements)roles)_DefaultDescriptionTuple)isinsert)ColumnClause)default_is_clause_element)default_is_sequence)Select)TableClause   )exc)util)Literal)_BindNameForColProtocol)SQLCompiler)_DMLColumnElement)DMLState)
ValuesBase)ColumnElement)KeyedColumnElement)_SQLExprDefault)ColumnREQUIREDa8  
Placeholder for the value within a :class:`.BindParameter`
which is required to be present when the statement is passed
to :meth:`_engine.Connection.execute`.

This symbol is typically used when a :func:`_expression.insert`
or :func:`_expression.update` statement is compiled without parameter
values present.

ColumnElement[Any]ColumnClause[Any]c                d    [        U [        5      (       d  [        R                  " SU < 35      eU $ )Nz5Can't create DML statement against column expression )
isinstancer   r    CompileError)cs    K/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/sql/crud.py_as_dml_columnr4   J   s3    a&&CA5I
 	
 H    r*   KeyedColumnElement[Any]c                  T    \ rS rSr% S\S'   S\S'   SrS\S'   SrS\S	'   S
rS\S'   Srg
)_CrudParamsj   _CrudParamSequencesingle_params$List[Sequence[_CrudParamElementStr]]all_multi_paramsFboolis_default_metavalue_onlyuse_insertmanyvaluesNzOptional[Sequence[Column[Any]]]use_sentinel_columns )	__name__
__module____qualname____firstlineno____annotations__r?   r@   rA   __static_attributes__rB   r5   r3   r8   r8   j   s0    %%::&+t+!&$&<@9@r5   r8   c                |
  ^ / U l         / U l        / U l        / U l        UR	                  SS5      nUb  UR                  SS5        SU;  d   S5       e[        XU5      u  mnnXpl        UR                  (       a'  UR                  (       a  [        R                  " S5      eUR                  (       a!  [        U UUSUTUSSUU5        [        / / 5      $ U R                  c  UR                   (       au  [        UR"                  R$                   Vs/ s HI  nUR&                  (       a  M  UU R(                  R+                  U5      [-        XSSS9UR.                  44PMK     sn/ 5      $ [1        U5      (       aY  UR2                  (       aH  UR4                  n	U	c   eU	S	   n
[7        U
R9                  5       5      nU
 Vs1 s H  nT" U5      iM     nnOUR:                  (       a6  UR<                  n
UR:                  nU
c   eU
 Vs1 s H  nT" U5      iM     nnORUR<                  (       a>  UR<                  n
[7        U
R9                  5       5      nU
 Vs1 s H  nT" U5      iM     nnOS=pU R                  c  0 nObU(       a4  Uc   eU R                   Vs0 s H  nX;  d  M
  T" U5      [>        _M     nnO'U R                   Vs0 s H  nT" U5      [>        _M     nn/ nUb  [A        U UUUTUU5        0 n[B        RD                  " U5      (       a$  URF                  (       a  [I        U UUUUUUUU5	        [1        U5      (       a>  URJ                  (       a-  UR2                  (       a   e[M        U UUUUTUUUUU5        S
nSnO[O        U UUUUTUUUUU5      u  nnU(       ap  U(       ai  [Q        U5      RS                  U4S jU 5       5      RU                  U5      nU(       a/  [        R                  " SSRW                  S U 5       5      -  5      eS
n[1        U5      (       aT  UR2                  (       aC  URJ                  (       a   e[Y        U UU[[        SU5      [[        ST5      U5      n[        UU5      $ U(       d  U R\                  (       a  U R^                  R`                  (       am  [c        UR"                  R$                  S	   5      U R(                  R+                  UR"                  R$                  S	   5      U R^                  Rd                  S4/nSn[        U/ UUUS9$ s  snf s  snf s  snf s  snf s  snf s  snf )a9  create a set of tuples representing column/string pairs for use
in an INSERT or UPDATE statement.

Also generates the Compiled object's postfetch, prefetch, and
returning column collections, used for default handling and ultimately
populating the CursorResult's prefetch_cols() and postfetch_cols()
collections.

visiting_cteNaccumulate_bind_namesz;Don't know how to handle insert within insert without a CTEzVCan't compile statement that includes returning() and return_defaults() simultaneouslyrB   T)requiredr   Fc              3  8   >#    U  H  u  pT" U5      v   M     g 7fNrB   ).0kv_column_as_keys      r3   	<genexpr>#_get_crud_params.<locals>.<genexpr>K  s     N8M.++8Ms   zUnconsumed column names: %s, c              3  (   #    U  H  o< v   M
     g 7frN   rB   )rO   r2   s     r3   rS   rT   Q  s     8%QQ[%s   Sequence[_CrudParamElementStr]Callable[..., str])r?   r@   rA   )3	postfetchinsert_prefetchupdate_prefetchimplicit_returninggetpop_key_getters_for_crud_column_get_bind_name_for_col
_returning_return_defaultsr    r1   isdelete_setup_delete_return_defaultsr8   column_keys_no_parameterstablecolumns_omit_from_statementspreparerformat_column_create_bind_paramkey_compile_state_isinsert_has_multi_parameters_multi_parameterslistitems_ordered_values_dict_parametersr,   !_get_stmt_parameter_tuples_paramsr   isupdateis_multitable_get_update_multitable_params_select_names_scan_insert_from_select_cols
_scan_colssetintersection
differencejoin_extend_values_for_multiparamsr   for_executemanydialectsupports_default_metavaluer4   default_metavalue_token)compilerstmtcompile_statetoplevelkwrJ   _getattr_col_key_col_bind_namer2   mpspdstmt_parameter_tuplesrm   spd_str_key
parametersvaluescheck_columnsr@   rA   checkr?   multi_extended_valuesrR   s                         @r3   _get_crud_paramsr   r   s   P H!H!H"$H66.$/L
 	&-r)EDE) 	%X]C	 '5#400/
 	

 %	
 2r"" #(D(D ++	 ,A..%%33A6&xD4HUUH	 ,	 
 	
( 	 ..//,,~~e $SYY[ 169:cs~c*c:		&	&,, - = =69:cs~c*c:		'	',, $SYY[ 169:cs~c*c:.22 #
	&&&  ++
+% *N3)+ 	 

 6>5I5I
5IcN3)5I 	 

 ')F()!	
 35M ||M""}'B'B%!
	
 }--$2D2D !6666%	
  %#5?6
22 +
O\N8MNNZ& 	
 ""-998%88: 
 !& 	 ..// %%%% >0 %~6
!
 6#899$$77 tzz11!45!!//

0B0B10EF  88	
 %)!
";11 Y	4 ;
 ; ;

s0   T &7T 9T% T*T/	T4T4 T9c                    g rN   rB   )r   colvalueprocessrL   nameforce_anonymousr   s           r3   rl   rl     s     r5   c                    g rN   rB   )r   r   r   r   s       r3   rl   rl          r5   c                    U(       a  S nOUc  UR                   n[        R                  " XRUR                  US9nSUl        U(       a  UR
                  " U 40 UD6$ U$ )N)type_rL   T)rm   r   BindParametertype_is_crud_compiler_dispatch)	r   r   r   r   rL   r   r   r   	bindparams	            r3   rl   rl     s^     	ww&&388hI I++H;;;r5   c                T   SU;   nU(       dT  UR                   (       aC  [        UR                  [        R                  5      (       a  X0R
                  SUR                  4'   UR                  R                  (       a  UR                  UR                  5      nUR                  " U 40 UD6$ )NrJ   r   )
uniquer0   rm   r   _truncated_labeltruncated_namesr   _isnull_with_binary_element_typer   )r   r   r   r   r   is_ctes         r3   _handle_values_anonymous_paramr     s    ( r!F LLuyy(";";<<=A  +uyy!9:zz //9##H333r5   c                  ^^ [         R                  " U5      (       a{  UR                  (       aj  [        UR                  5      m[        R
                  " [        R                  [        R                  5      m    SUU4S jjn    SU4S jjnSU4S jjnOJ[        R
                  " [        R                  [        R                  5      n[        R                  " S5      =pEX4U4$ )Nrm   c                   > T" U 5      n[        U S5      (       a(  U R                  T;   a  U R                  R                  U4$ U$ )Nrg   )hasattrrg   r   )rm   str_key_et
c_key_roles     r3   rR   4_key_getters_for_crud_column.<locals>._column_as_key  s>     !oGsG$$c)9		00r5   c                   > U R                   T;   a"  U R                   R                  U R                  4$ U R                  $ rN   )rg   r   rm   r   r   s    r3   r   6_key_getters_for_crud_column.<locals>._getattr_col_key  s1     yyC		00wwr5   c                   > U R                   T;   aS  [        (       a!  [        U R                   [        5      (       d   eU R                   R                  < SU R
                  < 3$ U R
                  $ )N_)rg   r   r0   r   r   rm   r   s    r3   r   4_key_getters_for_crud_column.<locals>._col_bind_name  sK    yyC =%cii===="%))..#''::wwr5   )rm   zUnion[ColumnClause[Any], str]returnUnion[str, Tuple[str, str]])r   r.   r   r   )r   r.   r   str)r   rv   _extra_fromsr|   	functoolspartialr   expect_as_keyr   DMLColumnRoleoperator
attrgetter)r   r   r   rR   r   r   r   r   s         @@r3   r_   r_     s     ||M""}'A'A -,,-&&##U%8%8

	.	(	 		"	(		 	 #**##U%8%8
 -5,?,?,FF^;;r5   c           	     Z   UR                    Vs/ s H!  oR                  R                  U" U5         PM#     nnU R                  S   S   UL d   eUR                  U R                  S   S'   / nUR
                  (       ap  [        U5      nUR                  R                   HK  nX;  d  M
  UR                  (       d  M  UR                  R                  (       a  M:  UR                  U5        MM     U He  nU" U5      nUU;   aG  UU;  aA  UR                  U5        UR                  UU R                  R                  U5      S S45        MX  [        XUX5        Mg     U(       a  UR                  U5        U R                  S   S   n[!        U["        5      (       d0  [$        R&                  " SSR)                  S U 5       5       S35      eUR+                  5       n[-        UR.                  5      U VVs/ s H
  u    nnnUPM     snn-   Ul        UU R                  S   S'   g g s  snf s  snnf )	N
selectableinsert_from_selectrB   z_Can't extend statement for INSERT..FROM SELECT to include additional default-holding column(s) rU   c              3  @   #    U  H  u  p  n[        U5      v   M     g 7frN   )repr)rO   r   rm   s      r3   rS   0_scan_insert_from_select_cols.<locals>.<genexpr>G  s     LOLAAqd3iiOs   z~.  Convert the selectable to a subquery() first, or pass include_defaults=False to Insert.from_select() to skip these columns.)ry   rg   r2   stackselect#include_insert_from_select_defaultsr|   rh   defaultis_sentinelappendr^   rj   rk   &_append_param_insert_select_hasdefaultextendr0   r   r    r1   r   	_generaterq   _raw_columns)r   r   r   r   r   rR   r   r   r   r   r   r   colsadd_select_colscol_setr   r2   col_keyins_from_selectr   exprs                        r3   rz   rz     s    <@;M;MN;M4JJLL-.;MDN>>"l+t333/3{{HNN2+,68O//d)::%%C "KKK///C  &  "1%j WM%ANN7#MM1h//==a@$KL2?  o&"..,-AB/622""8 IILOLL	  *335'+O,H,H'I&5M
&5]Q4DoM
 (
$ 4Cr/0% G OdM
s   (H"2H'c                  ^ [        XX)5      u  nnnnnnUR                  (       d  UR                  (       d   eUR                  (       a  UR                   Vs/ s H  nU" U5      PM     nn[	        U5      nU Vs/ s HO  n[        U[        5      (       d  M  UUR                  R                  ;   d  M6  UR                  R                  U   PMQ     snUR                  R                   Vs/ s H  nUR                  U;  d  M  UPM     sn-   nOUR                  R                  n[        U5      nU(       a>  UR                  (       d-  UR                  R                  nU R                  R                  nOS =nnUR                   (       a  [	        UR                   5      nO
[	        5       nU R"                  nU GH  nU" U5      nUU;   a   UU;  a  [%        U UUUUUUUUUUUUU
5        GO`U(       Ga6  UR&                  (       a,  U(       a%  U(       a  [)        XUX5        GO*[+        XUX5        GOUR,                  b-  UR,                  R.                  (       a  Ub  [1        XUXU
5        OUR2                  bL  U(       a  UU;   a  UR5                  U5        OUR&                  (       d  U R6                  R5                  U5        OU(       a  UU;   a  UR5                  U5        OiUR&                  (       a5  UUR                  R                  La  UR8                  (       d  [;        U5        O"UR                  (       a  [=        U UUUUUU
5        UU;   d  GM  UU;  d  GM  UR5                  U5        GM     U(       a6  UR?                  U5      mURA                  U4S jUR                    5       5        UU4$ s  snf s  snf s  snf )Nc              3  8   >#    U  H  nUT;   d  M  Uv   M     g 7frN   rB   )rO   r2   remaining_supplementals     r3   rS   _scan_cols.<locals>.<genexpr>  s#      +
1** A1s   
	)!_get_returning_modifiersrv   r   _parameter_orderingr|   r0   r   rg   r2   rm   rh   rn   ro   _autoincrement_columnr   #insert_null_pk_still_autoincrements_supplemental_returningr\   _append_param_parameterprimary_key!_append_param_insert_pk_returning$_append_param_insert_pk_no_returningr   r   _append_param_insert_hasdefaultserver_defaultr   rY   nullable"_warn_pk_with_no_anticipated_value_append_param_updater~   r   )r   r   r   r   r   rR   r   r   r   r   r   need_pksr\   implicit_return_defaultspostfetch_lastrowidr@   rA   rm   parameter_orderingordered_keysr2   r   r   autoincrement_colr   supplemental_returningcompiler_implicit_returningr   r   s                               @r3   r{   r{   T  sy   ( 	!I  !!]%;%;;;((+8+L+L
+LCN3+L 	 
 -. *
)#s# (+tzz||(; DJJLL)
 

B1\(AQB	C zz!!&}5H;; !JJ<<@@ 	, CGF?##!$T%A%A!B!$"*"="=
  #1%j WM%A $"(#!3(  }}
 &
 6 6 9 6 & yy,,(43 +CR !!- ,5M0M/66q9&&--a0)a3K.K+2215 TZZ===

215## !( ''44'..q1S V  "8!B!B'"
 	$** +
11+
 	
& !"677Q

 Cs$   N3;N8N84N8+N=N=c                8  ^ [        XX)5      t  pnU(       d  g UR                  (       a  U R                  R                  U5        UR                  (       aE  [        U R                  5      mU R                  R                  U4S jUR                   5       5        g g )Nc              3  6   >#    U  H  oT;  d  M
  Uv   M     g 7frN   rB   )rO   r2   ir_sets     r3   rS   0_setup_delete_return_defaults.<locals>.<genexpr>1  s      +
3!AA3s   		)r   _return_defaults_columnsr\   r   r   r|   )r   r   r   r   r   rR   r   r   r   r   r   r   r   r   s                @r3   rd   rd     s     ,D,(Qa $$$##**+CD##X001##** +
33+
 	
 $r5   c                   UR                  U5      nUR                  S5      S LnU R                  R                  X2R                  S9n[        5       n[        R                  " U5      (       a  U(       aF  UR                  (       a5  X;L a1  U	(       a  SU l	        O"U(       a  U R                  R                  U5        [        U UU4U[        L [        U5      (       a  UR                  (       d  U" U5      O
SU" U5      -  UUS.UD6nGOUR                   (       a  U(       ag  UR"                  cZ  UR                  (       aI  X;L aE  U(       a  U R                  R                  U5        O"U R$                  R                  (       a  SU l	        ['        U UU4[        U5      (       a  UR                  (       d  U" U5      O
SU" U5      -  US.UD6nGOU R(                  " UR+                  5       4SU0UD6nUR,                  (       aD  U(       a!  X8;   a  U R                  R                  U5        OU R.                  R                  U5        OUR                  (       aF  U(       a  U R                  R                  U5        OfU R$                  R                  (       a  SU l	        OCU(       a!  X8;   a  U R                  R                  U5        OU R.                  R                  U5        U
R                  UUUU45        g )NrJ   	use_tableTz%s_m0)rL   r   rK   r   )r   rK   rK   )r^   r]   rj   rk   include_table_with_column_exprsr|   r   _is_literalr   r   r\   r   rl   r,   rn   ro   _is_bind_parameterr   r   r   r   
self_grouprv   rY   )r   r   r   r2   r   r   r   r\   r   r   r   r   r   r   r   has_visiting_cte	col_valueaccumulated_bind_namess                     r3   r   r   6  s     NN7#Evvn-T9!!//	BB 0 I (+uU##/&
 #/3,#++2215"
 h& /}==$:: q! ~a00"8,
 
 
	!	!/#& "++2215!!55/3,.
 /}==$:: q! ~a00"8
 
   
"8
 
 !!'A,I++2215 ""))!,}}%//66q9%%9937H0)q/L++2215 ""))!,
MM1i(>?@r5   c           	     f   UR                   Gb  UR                   R                  (       a  U R                  R                  (       a  UR                   R                  (       a  U R                  R
                  (       dU  [        5       nUR                  UU R                  R                  U5      U R                  " UR                   4SU0UD6U45        U R                  R                  U5        gUR                   R                  (       a  [        5       nUR                  UU R                  R                  U5      U R                  " UR                   R                  R                  5       4SU0UD6U45        U R                  R                  U5        gUR                  UU R                  R                  U5      [        X40 UD6UR                   445        gX!R"                  R$                  L d  UR&                  b  U R                  R                  U5        gUR(                  (       d  [+        U5        gg)zCreate a primary key expression in the INSERT statement where
we want to populate result.inserted_primary_key and RETURNING
is available.

NrK   )r   is_sequencer   supports_sequencesoptionalsequences_optionalr|   r   rj   rk   r   r\   is_clause_elementargr   "_create_insert_prefetch_bind_paramrm   rg   r   r   r   r   )r   r   r2   r   r   r  s         r3   r   r     s    	yy99  22II&&''::365& ))77: ((II2H !
 /	 ''..q1YY((%(U"MM%%33A6$$		002.D 
 +	 ''..q1
 MM%%33A66xIbIUUH	 
jj..	.!2B2B2N##**1-ZZ 	+1- r5   c           	        UR                   bl  UR                   R                  (       a  U R                  R                  (       a6  UR                   R                  (       a  U R                  R
                  (       a  X!R                  R                  L a  U R                  R                  (       d  UR                   b6  UR                   R                  (       a  U R                  R                  (       d(  UR                   c_  U R                  R                  (       aD  UR                  UU R                  R                  U5      [        X40 UD6UR                  445        gUR                   cB  UR                  c5  UR                   (       d$  X!R                  R                  La  [#        U5        gU R                  R                  (       a  SU l        gg)aW  Create a primary key expression in the INSERT statement where
we want to populate result.inserted_primary_key and we cannot use
RETURNING.

Depending on the kind of default here we may create a bound parameter
in the INSERT statement and pre-execute a default generation function,
or we may use cursor.lastrowid if supported by the dialect.


NT)r   r  r   r  r  r  rg   r   r   "preexecute_autoincrement_sequencesr   rj   rk   r  rm   r   r   r   r   r   r2   r   r   s        r3   r   r     sE    	
		 		%%  33		**#++>> 	
ZZ---   44 II)		-- ((;; II% ((KK 	!!//228E"E		
 	
		$

ZZ555 	+1-				-	-
 (,$ 
.r5   c           	     x   UR                   R                  (       a  U R                  R                  (       a  UR                   R                  (       a  U R                  R
                  (       d  [        5       nUR                  UU R                  R                  U5      U R                  " UR                   4SU0UD6U45        U(       a!  X#;   a  U R                  R                  U5        g UR                  (       d  U R                  R                  U5        g g g g UR                   R                  (       a  [        5       nUR                  UU R                  R                  U5      U R                  " UR                   R                  R!                  5       4SU0UD6U45        U(       a!  X#;   a  U R                  R                  U5        g UR                  (       d  U R                  R                  U5        g g UR                  UU R                  R                  U5      [#        X40 UD6UR$                  445        g )NrK   )r   r  r   r  r  r  r|   r   rj   rk   r   r\   r   rY   r	  r
  r   r  rm   )r   r   r2   r   r   r   r  s          r3   r   r   5  s    	yy..		""(*:*:*M*M/2u"MM%%33A6$$		.D 
 +	 (A,I++2215]]""))!, ## +N /( 
	$	$!$!!//2  IIMM,,.*@ 
 '		
 $(E''..q1%%a(  	!!//228E"E		
r5   c           	        [        UR                  5      (       a  U R                  R                  (       a~  UR                  R                  (       a  U R                  R
                  (       dG  UR                  UU R                  R                  U5      UR                  R                  5       S45        g g g [        UR                  5      (       aQ  UR                  UU R                  R                  U5      UR                  R                  R                  5       S45        g UR                  UU R                  R                  U5      [        X4SS0UD6UR                  445        g )NrB   r   F)r   r   r   r  r  r  r   rj   rk   
next_valuer   r
  r   r  rm   r  s        r3   r   r   l  s#    199%%..		""(*:*:*M*MMM%%33A6II((*	 +N / 
#199	-	-!!//2		((*		
 	!!//22).24 		
r5   c           	        UR                   nUR                  Gb  UR                  R                  (       Gd  UR                  R                  (       a  UR	                  UU R
                  R                  UUS9U R                  " UR                  R                  R                  5       40 UD6S45        U(       a!  X4;   a  U R                  R	                  U5        g U R                  R	                  U5        g UR	                  UU R
                  R                  UUS9[        X40 UD6UR                  445        g UR                  bD  U(       a!  X4;   a  U R                  R	                  U5        g U R                  R	                  U5        g U(       aE  UR                  (       d  UR                   (       d"  X4;   a  U R                  R	                  U5        g g g g )Nr   rB   )r   onupdater  r	  r   rj   rk   r   r
  r   r\   rY   "_create_update_prefetch_bind_paramrm   server_onupdater   rb   )r   r   r   r2   r   r   r   include_tables           r3   r   r     s    "AAMzzajj&<&<&<::''MM%%33"/ 4  $$QZZ^^%>%>%@GBG
 (A,I++2215""))!,MM%%33"/ 4  7xIbIUUH
 
			&#(E''..q1%%a( **$2G2G)##**1- * 3H 	!r5   c                    g rN   rB   r   r2   r   r   s       r3   r  r    r   r5   c                    g rN   rB   r  s       r3   r  r         #&r5   c                Z    [        XS 4X#S.UD6nU R                  R                  U5        U$ N)r   r   )rl   rZ   r   r   r2   r   r   r   params         r3   r  r    >     T#*9;E ##A&Lr5   c                    g rN   rB   r  s       r3   r  r    r   r5   c                    g rN   rB   r  s       r3   r  r    r  r5   c                Z    [        XS 4X#S.UD6nU R                  R                  U5        U$ r  )rl   r[   r   r  s         r3   r  r    r  r5   c                      \ rS rSrSrS rS rS rS r\	R                  SS j5       r\	R                  SS j5       rS	rg
)_multiparam_columni  Tc                    X l         SUR                  US-   4-  U l        Xl        UR                  U l        UR                  U l        g )N%s_m%dr   )indexrm   originalr   r   )selfr(  r'  s      r3   __init___multiparam_column.__init__  s=    
x||UQY77 ''MM	r5   c                    [        5       erN   NotImplementedError)r)  otherr   s      r3   compare_multiparam_column.compare      !##r5   c                    [        5       erN   r-  )r)  r   s     r3   _copy_internals"_multiparam_column._copy_internals  r2  r5   c                    [        U[        5      =(       a9    UR                  U R                  :H  =(       a    UR                  U R                  :H  $ rN   )r0   r$  rm   r(  )r)  r/  s     r3   __eq___multiparam_column.__eq__  s<    u01 0		TXX%0$--/	
r5   c                B    [         R                  " U R                  5      $ z1used by default.py -> _process_execute_defaults())r   _from_column_defaultr   r)  s    r3   _default_description_tuple-_multiparam_column._default_description_tuple  s     (<<T\\JJr5   c                B    [         R                  " U R                  5      $ r:  )r   r;  r  r<  s    r3   _onupdate_description_tuple._multiparam_column._onupdate_description_tuple   s     (<<T]]KKr5   )r   r'  rm   r(  r   N)r   r   )rC   rD   rE   rF   _is_multiparam_columnr*  r0  r4  r7  r!   memoized_propertyr=  r@  rH   rB   r5   r3   r$  r$    sT     "$$
 
K K
 
L Lr5   r$  c                   UR                   (       d  [        R                  " SU-  5      e[        UR                   5      (       a5  U R                  " UR                   R
                  R                  5       40 UD6$ UR                   R                  (       a  U R                  " UR                   40 UD6$ [        X#5      n[        U[        R                  5      (       d   e[        X4SS0UD6$ )NzINSERT value for column %s is explicitly rendered as a boundparameter in the VALUES clause; a Python-side value or SQL expression is requiredr   T)r   r    r1   r   r   r
  r   r  r$  r0   r   Insertr  )r   r   r2   r'  r   r   s         r3    _process_multiparam_default_bindrF  '  s     99@BCD
 	

 
#199	-	-		 8 8 :AbAA	
		 		0R00 *$

++++1
#'
+-
 	
r5   c	                   U=(       d    S V	V
s0 s H+  u  p[         R                  " [        R                  U	5      U
_M-     nn	n
UR                  n[        5       nUR                   GH  nUR                   H  n	X;   d  M
  UR                  U5        XU" U	5      '   X   nU R                  XS9n[         R                  " U5      (       a+  [        U U	U4U[        L U" U	5      S.UD6nU	R                  4nOjUR                  (       a  U" U	5      n[        X	U4SU0UD6nU4nO>U R                   R#                  U	5        U R                  " UR%                  5       40 UD6nSnUR#                  U	UUU45        M     GM     U GHB  nUR                   GH-  n	X;   a  M  U	R&                  b  U	R&                  R(                  (       d  U	R&                  R*                  (       ar  UR#                  U	U R                  XS9U R                  " U	R&                  R,                  R%                  5       40 UD6S45        U R                   R#                  U	5        M  UR#                  U	U R                  XS9[/        X	4SU" U	5      0UD6U	R                  445        GM  U	R0                  c  GM  U R                   R#                  U	5        GM0     GME     g s  sn
n	f )NrB   r  )rL   r   r   )r   expectr   r   r   r|   r   r2   addr   r   rl   r,   rm   r   r   rY   r   r   r  r  r	  r
  r  r  )r   r   r   r   r   r   r   r   r   r2   r  normalized_paramsr  affected_tablestr   r  r  cbns                      r3   rx   rx   H  s    .333HA 	,,a0%73  
 "AAMeO''A%##A&56.q12),$,,Q,L	((//.  "'(!2+A. E >?UUH*--(+C: U148:E /2V*&&--a0$,,U-=-=-?F2FE-/*q)U4JKL7  (> A%'

0F0F:://MM$,,Q,L$,, !

 9 9 ;?A 	 &&--a0MM$,,Q,L> (2@2CGI UUH	 "".""))!,9  Os   2Kc           	     t   UnU/nUR                  S5      S LnUR                  n	U	c   e[        U	SS  5       H  u  p/ nUR                  5        VVs0 s H  u  pU" U5      U_M     nnnU H  u  nnnnUR                  U;   as  UR                  n[
        R                  " X   5      (       a&  [        U UX   4SUR                  U
S-   4-  US.UD6nO1U R                  " X   R                  5       40 UD6nO[        XXU5      nUR                  UUUU45        M     UR                  U5        M     U$ s  snnf )NrJ   r   r&  )r   r   )r]   rp   	enumeraterr   rm   r   r   rl   r   r   rF  r   )r   r   r   initial_valuesrR   r   values_0r   r  r   irow	extensionrm   rQ   r   col_exprr  accumulated_names	new_params                       r3   r   r     s^    HFvvn-T9		(	(B>>BqrF#02	47IIK@K&#~c"A%K@7?3C5"3ww#~gg((22 2 ! '#''1q5)99(8! !I !) 0 01D1D1F M" MI<CB	 c8Y8IJK) 8@, 	i 7 $: M5 As   D4c           	        U GH  u  pxU" U5      n	U	b  UR                  X5        M$  U R                  XqR                  S9n
[        R                  " U5      (       a1  U R                  " [
        R                  " S XR                  S940 UD6nOhUR                  (       a6  UR                  R                  (       a  UR                  UR                  5      nU R                  " UR                  5       40 UD6nUR                  XzUS45        GM     g )NrH  )r   rB   )
setdefaultr   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   rR   r   r   rP   rQ   colkeyrV  s              r3   ru   ru     s     &"!!&,  ''!N!N ( H $$Q''$$**4&&AEG ''AFFNN 33AFF;A$$Q\\^:r: MM12./= &r5   c                   U R                   nU=(       a    [        U5      =(       a    UR                  (       + =(       ag    U R                  (       + =(       d    UR                  =(       a    UR
                  =(       a)    UR                  (       + =(       a    UR                  (       + nU=(       a+    UR                  =(       a    UR                  R                  SLnU=(       a    UR                  =(       ap    UR                  R                  =(       aS    UR                  =(       a@    U(       + =(       d    UR                  =(       d    UR                  =(       d    UR
                  nU(       a  Sn[        U5      (       a  U=(       a    UR
                  nU=(       d    UR                  =(       d    UR                   n	U=(       a;    U R                  =(       a(    UR"                  =(       a    U	=(       d    UR$                  n
SnU
(       a3  U	(       a,  UR&                  (       a  U R)                  UR                  5      nOUR*                  (       aT  UR
                  =(       a<    UR                  R                  =(       a    UR                  =(       a    UR,                  nSn
SnOkUR.                  (       aT  UR
                  =(       a<    UR                  R                  =(       a    UR                  =(       a    UR0                  nSn
SnOSnSn
SnU(       aG  UR2                  (       d   [5        UR                  R6                  5      nO[5        UR2                  5      nOSnUU=(       d    UUUU
U4$ )zdetermines RETURNING strategy, if any, for the statement.

This is where it's determined what we need to fetch from the
INSERT or UPDATE statement after it's invoked.

NF)r   rn   _inliner   insert_executemany_returningrb   ra   ro   r   rg   r   insert_returning_primary_tabler\   _supports_implicit_returningfavor_returning_over_lastrowidr   r@   !use_insertmanyvalues_wo_returning_sort_by_parameter_order_get_sentinel_column_for_tablerv   update_returningrc   delete_returningr   r|   r2   )r   r   r   r   r   r   r   r\   should_implicit_return_defaultsexplicit_returningr@   rA   r   s                r3   r   r     s    G 	 		4#M2		4		4 ((( P44N9N9N		4 		4 333   	 	9''	9JJ,,D8  	 	
 $$	

 ((;;	
 66	
$ %$N(N(N %22%$$- 2 #}--84#8#8 	( , ,,++ 	  ((,, #Og&O&O 	  $ "--#+#J#J

$  
		!! ),,??)::) ((	 	(  %#			!! ),,??)::) ((	 	(  %#*/'$#&,, (+4::<<'8$'*4+H+H'I$#'  	==  r5   c                   SU R                   R                  < SU R                  < SU R                   R                  < S3n[        U R                   R                  5      S:  a  US-  n[
        R                  " U5        g )NzColumn '.z6' is marked as a member of the primary key for table 'z', but has no Python-side or server-side default generator indicated, nor does it indicate 'autoincrement=True' or 'nullable=True', and no explicit value is passed.  Primary key columns typically may not store NULL.r   a0   Note that as of SQLAlchemy 1.1, 'autoincrement=True' must be indicated explicitly for composite (e.g. multicolumn) primary keys if AUTO_INCREMENT/SERIAL/IDENTITY behavior is expected for one of the columns in the primary key. CREATE TABLE statements are impacted by this change as well on most backends.)rg   fullnamer   lenr   r!   warn)r2   msgs     r3   r   r   {  sb     77QVVQWW%5%5	7  177!#	
 	IIcNr5   )r2   r-   r   r.   )r   r$   r   r'   r   r&   r   r>   r   r   r   r8   ).FNF)r   r$   r   r-   r   r   r   Literal[True]rL   r>   r   Optional[str]r   r>   r   r   r   r   )
r   r$   r   r-   r   r   r   r   r   r   )TFNF)r   r$   r   r-   r   r   r   r>   rL   r>   r   rq  r   r>   r   r   r   z'Union[str, elements.BindParameter[Any]])r   r$   r   r'   r   r&   r   zTuple[Callable[[Union[str, ColumnClause[Any]]], Union[str, Tuple[str, str]]], Callable[[ColumnClause[Any]], Union[str, Tuple[str, str]]], _BindNameForColProtocol])r   r$   r   r'   r2   r.   r   zList[_CrudParamElementSQLExpr]r   Dict[str, Any]r   None).)
r   r$   r2   r-   r   rp  r   r   r   r   )
r   r$   r2   r-   r   zLiteral[False]r   r   r   zelements.BindParameter[Any])TN)r   r$   r2   r-   r   r>   r   rq  r   r   r   z'Union[elements.BindParameter[Any], str])r   r$   r   r'   r2   r6   r'  intr   rr  r   r   )r   r$   r   r'   r   r&   rQ  rW   rR   rX   r   rr  r   r<   )R__doc__
__future__r   r   r   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r    r   r   r   r   baser   r   rn   r   schemar   r   r   r   r   r    r!   util.typingr"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   symbolr,   r4   r   _CrudParamElement_CrudParamElementStr_CrudParamElementSQLExprr:   r8   r   rl   r   r_   rz   r{   rd   r   r   r   r   r   r   r  r  r$  rF  rx   r   ru   r   r   rB   r5   r3   <module>r     s   #         !              * 4 " - '  #   !1%&',';;	 c$$% SM  SM  !SM  +, A* AOO
O O 	O
 O Od 

 !!				 	 		
 	 	 	 	 		 
	 
	  	
 	 
 !	  	
     -2#4L3<3<!+3<<D3<3<lBCJA8H
<rAj:.zJ,Z4
n&
&

&
 &
 +	&

 	&
 
&
R+.\ 
 !  	
 	 
 
&&& & 	&
 !& 
& 	  	
  - 
 !  	
 	 
 
&&& & 	&
 !& 
& 	  	
  -!L//4 !LH



 
 	

 	
 	
BO-d++
+ + 3	+
 '+ 	+ *+\'0TFRr5   