
    [h                    H   d Z ddlm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	 ddlm
Z
 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddl"m#Z# ddl"m$Z$ dd lm%Z% dd!lm&Z& dd"l'm(Z( er6dd#l)m*Z* dd$l)m+Z+ dd%lm,Z, dd&lm-Z- dd'lm.Z. dd(lm/Z/ dd)lm0Z0 dd*lm1Z1 dd+lm2Z2  e&j3        d,d-          Z4dzd2Z5ed/e6eee6d3f                  e
e6         f         Z7ed4e6e6e
e6         f         Z8ed1e6d3e
e6         f         Z9ee7         Z: G d5 d6e          Z;d{dAZ<e	 	 	 	 d|d}dM            Z=ed~dN            Z=	 	 	 	 dddQZ=dR Z>ddTZ?dU Z@dV ZAdW ZBdX ZCdY ZDdZ ZEd[ ZFdd`ZGda ZHe	 dddb            ZIedde            ZI	 	 dddgZIe	 dddh            ZJeddi            ZJ	 	 dddjZJ G dk dlej/        e                   ZKddoZLdp ZMddvZNdw ZOdx ZPdy ZQdS )ziFunctions 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.

cColumnElement[Any]returnColumnClause[Any]c                ^    t          | t                    st          j        d|           | S )Nz5Can't create DML statement against column expression )
isinstancer   r    CompileError)r-   s    b/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/sql/crud.py_as_dml_columnr5   J   s;    a&& 
IAII
 
 	
 H    r*   KeyedColumnElement[Any]c                  N    e Zd ZU ded<   ded<   dZded<   dZded<   d	Zd
ed<   d	S )_CrudParams_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____annotations__r?   r@   rA    r6   r4   r9   r9   j   s`         %%%%::::&+++++!&&&&&<@@@@@@@r6   r9   compilerr$   stmtr'   compile_stater&   toplevelr>   kwr   c                    g  _         g  _        g  _        g  _        |                    dd          }||                    dd           d|vs
J d            t           ||          \  }}| _        |j        r|j	        rt          j        d          |j        r)t           ||d||dd||           t          g g           S  j        -|j        r&t           fd|j        j        D             g           S t'          |          rJ|j        rC|j        }|J |d         }	t-          |	                                          }
fd	|	D             nl|j        r!|j        }	|j        }
|	J fd
|	D             nD|j        r7|j        }	t-          |	                                          }
fd|	D             ndx}
x}	 j        i }n.|
rJ fd j        D             }nfd j        D             }g }|
t5           |||
||           i }t7          j        |          r|j        rt=           |||
|||||	  	         t'          |          r.|j        r'|j        rJ tA           |||||||||           d}d}ntC           |||||||||          \  }}|ry|
rwtE          |          #                    fd|
D                       $                    |          }|r4t          j        dd%                    d |D                       z            d}t'          |          rP|j        rI|j        rJ tM           ||tO          d|          tO          d          |          }t          ||          S |sk j(        rd j)        j*        rXtW          |j        j        d                    j,        -                    |j        j        d                    j)        j.        dfg}d}t          |g |||          S )aQ  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() simultaneouslyrF   c           
         g | ]>}|j         	|j                            |          t          |d d          |j        ff?S )NT)required)_omit_from_statementspreparerformat_column_create_bind_paramkey).0r-   rG   s     r4   
<listcomp>z$_get_crud_params.<locals>.<listcomp>   sh     	 	 	 .	%33A66&xD4HHHUH		 	 	r6   r   c                &    h | ]} |          S rF   rF   rV   rU   _column_as_keys     r4   	<setcomp>z#_get_crud_params.<locals>.<setcomp>   #    :::s~~c**:::r6   c                &    h | ]} |          S rF   rF   rY   s     r4   r[   z#_get_crud_params.<locals>.<setcomp>   r\   r6   c                &    h | ]} |          S rF   rF   rY   s     r4   r[   z#_get_crud_params.<locals>.<setcomp>   r\   r6   c                :    i | ]}|v |          t           S rF   r,   )rV   rU   rZ   spd_str_keys     r4   
<dictcomp>z$_get_crud_params.<locals>.<dictcomp>   s:     
 
 
+%% N3%%%r6   c                2    i | ]} |          t           S rF   r`   rY   s     r4   rb   z$_get_crud_params.<locals>.<dictcomp>  s2     
 
 
.1NN3
 
 
r6   Fc              3  4   K   | ]\  }} |          V  d S NrF   )rV   kvrZ   s      r4   	<genexpr>z#_get_crud_params.<locals>.<genexpr>K  s1      NN1..++NNNNNNr6   zUnconsumed column names: %s, c              3     K   | ]}|V  d S re   rF   )rV   r-   s     r4   rh   z#_get_crud_params.<locals>.<genexpr>Q  s$      88QQQ888888r6   Sequence[_CrudParamElementStr]Callable[..., str]T)r?   r@   rA   )/	postfetchinsert_prefetchupdate_prefetchimplicit_returninggetpop_key_getters_for_crud_column_get_bind_name_for_col
_returning_return_defaultsr    r3   isdelete_setup_delete_return_defaultsr9   column_keys_no_parameterstablecolumns_compile_state_isinsert_has_multi_parameters_multi_parameterslistitems_ordered_values_dict_parameters!_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_metavaluer5   rR   rS   default_metavalue_token)rG   rH   rI   rJ   rK   rM   _getattr_col_key_col_bind_namempspdstmt_parameter_tuples
parametersvaluescheck_columnsr@   rA   checkr?   multi_extended_valuesrZ   ra   s   `                  @@r4   _get_crud_paramsr   r   s   P H!H!H"$H66.$//L
 	&---r)))D 	*)) 	%Xt]CC	 '5H# 
40 
/
 
 	

  #%	
 	
 	
 2r""" #(D#	 	 	 	 +	 	 	 
 
 	
( 	 ..9/9 ,~~~e $SYY[[ 1 1::::c:::		& 
9, - =::::c:::		' 9, $SYY[[ 1 1::::c:::4888k #

	 

&&&
 
 
 
 
+
 
 



 
 
 
5=5I
 
 


 ')F()!	
 	
 	
 35M |M"" 
}'B 
%!
	
 
	
 
	
 }-- !
$2D !
 !6666%	
 	
 	
  %#5?6
 6
22  
+ 

OO\NNNN8MNNNNNZ&& 	
  	"-9988%88888:  
 !& 	 ..#)/#)
 %%%% >0  %~66
!
 
!
 6#8999)$) 7) tz1!455!//
0B10EFF 8	
 %)!
";11   r6   .FcolvalueprocessLiteral[True]rP   nameOptional[str]force_anonymousstrc                    d S re   rF   )rG   r   r   r   rP   r   r   rK   s           r4   rT   rT     s	     #r6   c                    d S re   rF   )rG   r   r   rK   s       r4   rT   rT     	     #r6   T'Union[str, elements.BindParameter[Any]]c                    |rd }n	||j         }t          j        |||j        |          }d|_        |r |j        | fi |S |S )N)type_rP   T)rU   r   BindParametertype_is_crud_compiler_dispatch)	rG   r   r   r   rP   r   r   rK   	bindparams	            r4   rT   rT     st      	w&e38h  I I +y+H;;;;;r6   c                    d|v }|s7|j         r0t          |j        t          j                  r|| j        d|j        f<   |j        j        r|                    |j                  } |j	        | fi |S )NrM   r   )
uniquer2   rU   r   _truncated_labeltruncated_namesr   _isnull_with_binary_element_typer   )rG   r   r   r   rK   is_ctes         r4   _handle_values_anonymous_paramr     s    ( r!F BLB uy(";<<B
 >B +uy!9:z : //99#5#H33333r6   Tuple[Callable[[Union[str, ColumnClause[Any]]], Union[str, Tuple[str, str]]], Callable[[ColumnClause[Any]], Union[str, Tuple[str, str]]], _BindNameForColProtocol]c                f   t          j        |          rX|j        rQt          |j                  t	          j        t          j        t          j	                  dfd}dfd}dfd
}n?t	          j        t          j        t          j	                  }t          j        d          x}}|||fS )NrU   Union[ColumnClause[Any], str]r/   Union[str, Tuple[str, str]]c                l     |           }t          | d          r| j        v r| j        j        |fS |S )Nr{   )hasattrr{   r   )rU   str_key_et
c_key_roles     r4   rZ   z4_key_getters_for_crud_column.<locals>._column_as_key  sD     !jooGsG$$ c)9)9	00r6   r   r0   c                J    | j         v r| j         j        | j        fS | j        S re   )r{   r   rU   r   r   s    r4   r   z6_key_getters_for_crud_column.<locals>._getattr_col_key  s*     yC	00wr6   r   c                    | j         v r9t          rt          | j         t                    sJ | j         j        d| j        S | j        S )N_)r{   r   r2   r   r   rU   r   s    r4   r   z4_key_getters_for_crud_column.<locals>._col_bind_name  sN    yC  >%ci====="%)...#''::wr6   )rU   r   r/   r   )r   r0   r/   r   )r   r0   r/   r   )r   r   _extra_fromsr   	functoolspartialr   expect_as_keyr   DMLColumnRoleoperator
attrgetter)rG   rH   rI   rZ   r   r   r   r   s         @@r4   rs   rs     s     |M"" *G}'A *G -,--&#U%8
 

	 	 	 	 	 	 		 	 	 	 	 		 	 	 	 	 	 	 #*#U%8
 
 -5,?,F,FF>+^;;r6   c                   fdj         D             }| j        d         d         u sJ j        | j        d         d<   g }j        rJt	          |          }j        j        D ].}||vr(|j        r!|j        j        s|	                    |           /|D ]o} ||          }||v rK||vrG|
                    |           |	                    || j                            |          d df           \t          | |||
           p|r|                    |           | j        d         d         }t          |t                     s5t#          j        dd                    d |D                        d	          |                                }t+          |j                  d
 |D             z   |_        || j        d         d<   d S d S )Nc                F    g | ]}j         j         |                   S rF   )r{   r-   )rV   r   rZ   rH   s     r4   rW   z1_scan_insert_from_select_cols.<locals>.<listcomp>  s,    NNN4DJL--.NNNr6   
selectableinsert_from_selectrF   z_Can't extend statement for INSERT..FROM SELECT to include additional default-holding column(s) ri   c              3  >   K   | ]\  }}}}t          |          V  d S re   )repr)rV   r   rU   s      r4   rh   z0_scan_insert_from_select_cols.<locals>.<genexpr>G  s0      LLLAsAqd3iiLLLLLLr6   z~.  Convert the selectable to a subquery() first, or pass include_defaults=False to Insert.from_select() to skip these columns.c                    g | ]	\  }}}}|
S rF   rF   )rV   r   exprs      r4   rW   z1_scan_insert_from_select_cols.<locals>.<listcomp>N  s3     M
 M
 M
"Q4DM
 M
 M
r6   )r   stackselect#include_insert_from_select_defaultsr   r{   r|   defaultis_sentinelappendrr   rR   rS   &_append_param_insert_select_hasdefaultextendr2   r   r    r3   r   	_generater   _raw_columns)rG   rH   rI   r   r   rZ   r   r   r   rJ   rK   colsadd_select_colscol_setr   r-   col_keyins_from_selects    `   `            r4   r   r     sS    ONNNN4;MNNND>"l+t3333/3{HN2+,68O/ !d)):% 	! 	!C 7""K #/ # C     ""1%%j  WM%A%ANN7###MM1h/==a@@$KLLLL2$?B     Co&&&".,-AB/622 		" IILLOLLLLL     *3355'+O,H'I'I M
 M
&5M
 M
 M
 (
$ 4Cr/000%C Cr6   c                   t          | ||	          \  }}}}}}|j        s	|j        sJ |j        rJfd|j        D             }t	          |          fd|D             fdj        j        D             z   }nj        j        }t          |          }|r |j	        sj        j
        }| j        j        }nd x}}j        rt	          j                  }nt	                      }| j        }|D ]Y} ||          }||v r"||vrt          | ||||||||||||
           n|r|j        r,|r*|rt#          | |||
           nt%          | |||
           n|j        #|j        j        r|t+          | ||||
           n|j        >|r||v r|                    |           n|j        s| j                            |           nd|r||v r|                    |           nH|j        r$|j        j
        ur|j        st5          |           n|j        rt7          | |||||
           ||v r||vr|                    |           [|r;|                    |          |                    fdj        D                        ||fS )Nc                &    g | ]} |          S rF   rF   rY   s     r4   rW   z_scan_cols.<locals>.<listcomp>m  s0     
 
 
$'NN3
 
 
r6   c                z    g | ]7}t          |t                    r |j        j        v %j        j        |         8S rF   )r2   r   r{   r-   )rV   rU   rH   s     r4   rW   z_scan_cols.<locals>.<listcomp>q  sO     
 
 
#s##
 ),tz|(;(; JL(;(;(;r6   c                &    g | ]}|j         v|S rF   )rU   )rV   r-   ordered_keyss     r4   rW   z_scan_cols.<locals>.<listcomp>u  s%    BBB1\(A(AQ(A(A(Ar6   c              3  $   K   | ]
}|v |V  d S re   rF   )rV   r-   remaining_supplementals     r4   rh   z_scan_cols.<locals>.<genexpr>  s;       +
 +
*** ****+
 +
r6   )_get_returning_modifiersr   r   _parameter_orderingr   r{   r-   r|   r}   r~   _autoincrement_columnr   #insert_null_pk_still_autoincrements_supplemental_returningrp   _append_param_parameterprimary_key!_append_param_insert_pk_returning$_append_param_insert_pk_no_returningr   r   _append_param_insert_hasdefaultserver_defaultr   rm   nullable"_warn_pk_with_no_anticipated_value_append_param_updater   r   )rG   rH   rI   r   r   rZ   r   r   r   rJ   rK   need_pksrp   implicit_return_defaultspostfetch_lastrowidr@   rA   parameter_orderingr   r   autoincrement_colr   supplemental_returningcompiler_implicit_returningr-   r   r   r   s    `   `                    @@r4   r   r   T  s)   ( 	!4II  !;]%;;;;( "
 
 
 
+8+L
 
 
 -..
 
 
 
)
 
 
 CBBB
BBB	C z!&}55H 	G; 	G !J<@ 	,+ CGF?# '!$T%A!B!B!$"*"=
  i2 i2 #"1%%j  WM%A%A $"(#!3   (  C	 } 36 36
 & 
 6 $62    9 $62    & y, (43 $+CVR   !- , 15M0M0M/66q9999 1&--a000) 6a3K.K.K+2215555 6TZ===
 > 31555# 	 !(   '''444'..q111 
 "8!B!B'"
 "
 	$** +
 +
 +
 +
1+
 +
 +
 	
 	
 	
& !"677r6   c                   t          | |||	          ^}}}}|sd S |j        r| j                            |           |j        rAt          | j                  | j                            fd|j        D                        d S d S )Nc              3  $   K   | ]
}|v|V  d S re   rF   )rV   r-   ir_sets     r4   rh   z0_setup_delete_return_defaults.<locals>.<genexpr>1  s0       +
 +
qA+
 +
r6   )r   _return_defaults_columnsrp   r   r   r   )rG   rH   rI   r   r   rZ   r   r   r   rJ   rK   r   r   r  s                @r4   rx   rx     s     ,D$x, ,(Q#a $ $ E#**+CDDD# 
X011#** +
 +
 +
 +
3+
 +
 +
 	
 	
 	
 	
 	

 
r6   c                   |                     |          }|                    d          d u}| j                            ||j                  }t                      }t          j        |          r}|r1|j        r*||u r&|	rd| _	        n|r| j
                            |           t          | ||f|t          u t          |          r|j        s ||          nd ||          z  ||d|}nc|j        r|rB|j        ;|j        r4||u r0|r| j
                            |           n| j        j	        rd| _	        t'          | ||ft          |          r|j        s ||          nd ||          z  |d|}n | j        |                                fd|i|}|j        r<|r||v r| j
                            |           n| j                            |           ns|j        r1|r| j
                            |           nO| j        j	        rd| _	        n;|r||v r| j
                            |           n| j                            |           |
                    ||||f           d S )NrM   	use_tableTz%s_m0)rP   r   rN   r   )r   rN   rN   )rr   rq   rR   rS   include_table_with_column_exprsr   r   _is_literalr   r   rp   r   rT   r,   r}   r~   _is_bind_parameterr   r   r   r   
self_groupr   rm   )rG   rH   rI   r-   r   r   r   rp   r   r   r   r   r   rK   r   has_visiting_cte	col_valueaccumulated_bind_namess                     r4   r   r   6  s^     NN7##Evvn--T9!//	]B 0  I (+uuU## W-/	6	6 &&&
 # 6/3,,# 6+221555"
 h& /}==1$:1q!!! ~~a000"8,
 
 
 
 
	! :-/	4# $&&& " 4+2215555!5 4/3,.
 /}==1$:1q!!! ~~a000"8
 
 
 
 ! 
 
"8
 
 
 ! 	-' -A1I,I,I+2215555 "))!,,,,} -% 8/66q9999%9 837H0) 
-q4L/L/L+2215555 "))!,,,
MM1i(>?@@@@@r6   c           	        |j         t|j         j        r| j        j        rj|j         j        r| j        j        sRt                      }|                    || j        	                    |           | j
        |j         fd|i||f           | j                            |           dS |j         j        rt                      }|                    || j        	                    |           | j
        |j         j                                        fd|i||f           | j                            |           dS |                    || j        	                    |          t          | |fi ||j        ff           dS ||j        j        u s|j        | j                            |           dS |j        st+          |           dS dS )zCreate a primary key expression in the INSERT statement where
    we want to populate result.inserted_primary_key and RETURNING
    is available.

    NrN   )r   is_sequencer   supports_sequencesoptionalsequences_optionalr   r   rR   rS   r   rp   is_clause_elementargr  "_create_insert_prefetch_bind_paramrU   r{   r   r   r   r   )rG   rH   r-   r   rK   r  s         r4   r   r     s6    	y9  -	2 I&': 4755& )77::((I 2H ! 
 /	   '..q11111Y( 	%(UU"MM%33A66$H$	0022 .D  
 +	   '..q11111
 MM%33A666xIIbIIUH	     
dj.	.	.!2B2N#**1-----Z . 	+1-----. .r6   c           	     (   |j         0|j         j        rp| j        j        r|j         j        rX| j        j        rL||j        j        u r| j        j        sw|j         |j         j        r| j        j        s|j         Q| j        j	        rE|
                    || j                            |          t          | |fi ||j        ff           dS |j         -|j        &|j        s||j        j        urt#          |           dS | j        j        r	d| _        dS dS )ao  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  r{   r   r   "preexecute_autoincrement_sequencesr   rR   rS   r  rU   r   r   r   rG   rH   r-   r   rK   s        r4   r   r     sn    	
	 	%	 	  3 	 	* 	 $+> 	 	
TZ---  4 	. I)	- * (; * I% (K & 	!//2228QEE"EE		
 	
 	
 	
 	
 	
	$
 %TZ555 	+1-----			- ,
 (,$$$, ,r6   c           	        |j         j        r| j        j        r|j         j        r| j        j        st                      }|                    || j        	                    |           | j
        |j         fd|i||f           |r ||v r| j                            |           d S |j        s | j                            |           d S d S d S d S |j         j        rt                      }|                    || j        	                    |           | j
        |j         j                                        fd|i||f           |r ||v r| j                            |           d S |j        s| j                            |           d S d S |                    || j        	                    |          t#          | |fi ||j        ff           d S )NrN   )r   r  r   r  r  r  r   r   rR   rS   r   rp   r   rm   r  r  r  r  rU   )rG   rH   r-   r   r   rK   r  s          r4   r   r   5  si    	y 1
. 	-	"	-*2*:*M	- 03uu"MM%33A66$H$	 .D  
 +	   ( -A1I,I,I+22155555] -"))!,,,,,'	- 	- 	- 	-$- -	
	$ 
!$!//22  IM,,.. *@  
 '		
 	
 	
 $ 	)-E(E(E'..q11111 	)%%a(((((	) 	) 	!//2228QEE"EE		
 	
 	
 	
 	
r6   r   List[_CrudParamElementSQLExpr]Dict[str, Any]Nonec           	     b   t          |j                  rr| j        j        rb|j        j        r| j        j        sL|                    || j                            |          |j        	                                df           d S d S d S t          |j                  rO|                    || j                            |          |j        j                                        df           d S |                    || j                            |          t          | |fddi||j        ff           d S )NrF   r   F)r   r   r   r  r  r  r   rR   rS   
next_valuer   r  r  r  rU   r  s        r4   r   r   l  sy    19%% 
. 
		"
	*2*:*M
	 MM%33A66I((**	    
	 
	 
	 
	 
#19	-	- 
!//22	((**		
 	
 	
 	
 	
 	!//222a ).24  		
 		
 		
 		
 		
r6   c           	        |j         }|j        |j        j        s|j        j        r|                    || j                            ||           | j        |j        j        	                                fi |df           |r ||v r| j
                            |           d S | j                            |           d S |                    || j                            ||          t          | |fi ||j        ff           d S |j        >|r ||v r| j
                            |           d S | j                            |           d S |r.|j        s|j        s$||v r| j
                            |           d S d S d S d S )Nr  rF   )r	  onupdater  r  r   rR   rS   r   r  r  rp   rm   "_create_update_prefetch_bind_paramrU   server_onupdater  rv   )rG   rI   rH   r-   r   r   rK   include_tables           r4   r   r     s
    "AMzaj&<:' 	MM%33"/ 4   %H$QZ^%>%>%@%@GGBGG
 
 
 ( -A1I,I,I+22155555"))!,,,,,MM%33"/ 4   7xIIbIIUH
 
 
 
 
 
		&# 	)-E(E(E'..q11111%%a((((( .*.262G. )))#**1-----. . *). .r6   c                    d S re   rF   rG   r-   r   rK   s       r4   r  r    r   r6   Literal[False]elements.BindParameter[Any]c                    d S re   rF   r'  s       r4   r  r    	     #&#r6   'Union[elements.BindParameter[Any], str]c                ^    t          | |d f||d|}| j                            |           |S N)r   r   )rT   rn   r   rG   r-   r   r   rK   params         r4   r  r    O     !T#* 9; E ##A&&&Lr6   c                    d S re   rF   r'  s       r4   r#  r#    r   r6   c                    d S re   rF   r'  s       r4   r#  r#    r+  r6   c                ^    t          | |d f||d|}| j                            |           |S r.  )rT   ro   r   r/  s         r4   r#  r#    r1  r6   c                  n    e Zd ZdZd Zd Zd Zd Zej	        dd            Z
ej	        dd	            Zd
S )_multiparam_columnTc                z    || _         d|j        |dz   fz  | _        || _        |j        | _        |j        | _        d S )N%s_m%dr   )indexrU   originalr   r   )selfr:  r9  s      r4   __init__z_multiparam_column.__init__  s>    
x|UQY77 'M			r6   c                    t                      re   NotImplementedError)r;  otherrK   s      r4   comparez_multiparam_column.compare      !###r6   c                    t                      re   r>  )r;  rK   s     r4   _copy_internalsz"_multiparam_column._copy_internals  rB  r6   c                l    t          |t                    o|j        | j        k    o|j        | j        k    S re   )r2   r6  rU   r:  )r;  r@  s     r4   __eq__z_multiparam_column.__eq__  s7    u011 0	TX%0$-/	
r6   r/   r   c                4    t          j        | j                  S z1used by default.py -> _process_execute_defaults())r   _from_column_defaultr   r;  s    r4   _default_description_tuplez-_multiparam_column._default_description_tuple  s     (<T\JJJr6   c                4    t          j        | j                  S rH  )r   rI  r"  rJ  s    r4   _onupdate_description_tuplez._multiparam_column._onupdate_description_tuple   s     (<T]KKKr6   N)r/   r   )rB   rC   rD   _is_multiparam_columnr<  rA  rD  rF  r!   memoized_propertyrK  rM  rF   r6   r4   r6  r6    s         " " "$ $ $$ $ $
 
 
 
K K K K
 
L L L L L Lr6   r6  r9  intc                p   |j         st          j        d|z            t          |j                   r* | j        |j         j                                        fi |S |j         j        r | j        |j         fi |S t          ||          }t          |t          j                  sJ t          | |fddi|S )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    r3   r   r   r  r  r  r6  r2   r   Insertr  )rG   rH   r-   r9  rK   r   s         r4    _process_multiparam_default_bindrS  '  s     9 
@BCD
 
 	

 
#19	-	- 
x	 8 8 : :AAbAAA	
	 
  x	00R000 E**$
+++++1c
 
#'
+-
 
 	
r6   c	                   d |pdD             }	|j         }
t                      }|j        D ]}|j        D ]}||	v r|                    |           || ||          <   |	|         }|                     ||
          }t          j        |          r+t          | ||f|t          u  ||          d|}|j
        f}nc|j        r  ||          }t          | ||fd|i|}|f}n<| j                            |            | j        |                                fi |}d}|                    ||||f           |D ]}|j        D ]}||	v r|j        |j        j        s|j        j        rq|                    ||                     ||
           | j        |j        j                                        fi |df           | j                            |           |                    ||                     ||
          t)          | |fd ||          i||j
        ff           |j        | j                            |           d S )Nc                T    i | ]%\  }}t          j        t          j        |          |&S rF   )r   expectr   r   )rV   r-   r0  s      r4   rb   z1_get_update_multitable_params.<locals>.<dictcomp>S  s>       Au 	,a00%  r6   rF   r%  )rP   r   r   )r	  r   r   r-   addr   r   r
  rT   r,   rU   r  r   rm   r   r  r"  r  r  r  r#  r$  )rG   rH   rI   r   r   r   r   r   rK   normalized_paramsr%  affected_tablestr-   r   r  r  cbns                     r4   r   r   H  sQ    -3  
 "AMeeO' M M 	M 	MA%%%##A&&&56..q112)!,$,,Qm,LL	(// 0.  "'(!2+^A..   E >?UH**- 	0(.++C: !U 148: E /2V**&--a000,H,U-=-=-?-?FF2FFE-/*q)U4JKLLL7	M<  - - 	- 	-A%%%'
0F':/ MM$,,Qm,LL,H, !
 9 9 ; ; ?A  	 	 	 &--a0000MM$,,Qm,LL> (! 2@.2C2CGI  UH	 	 	 	 "."))!,,,9	-- -r6   initial_valuesrk   rZ   rl   r<   c           	     X   |}|g}|                     d          d u}|j        }	|	J t          |	dd                    D ]\  }
}g }fd|                                D             }|D ]\  }}}}|j        |v rn|j        }t          j        ||                   r&t          | |||         fd|j        |
dz   fz  |d|}n: | j        ||         	                                fi |}nt          | |||
|          }|                    ||||f           |                    |           |S )NrM   r   c                .    i | ]\  }} |          |S rF   rF   )rV   rU   rg   rZ   s      r4   rb   z2_extend_values_for_multiparams.<locals>.<dictcomp>  s)    @@@&#q~~c""A@@@r6   r8  )r   r   )rq   r   	enumerater   rU   r   r
  rT   r   r  rS  r   )rG   rH   rI   r]  rZ   rK   values_0r   r  r   irow	extensionr   col_exprr0  accumulated_namesrU   	new_params       `              r4   r   r     s    HFvvn--T9		(B>>>BqrrF## ! !302	@@@@CIIKK@@@7? 	L 	L3C5"3w#~~g(S22 
N 2 C! '#'1q5)99(8! ! ! !II !1 0S1D1D1F1F M M" M MII<dCB 	 c8Y8IJKKKKi    Mr6   c                   |D ]\  }} ||          }	|	|                     |	|           )|                     ||j                  }
t          j        |          r) | j        t          j        d ||j                  fi |}nM|j        r&|j        j	        r|
                    |j                  } | j        |                                fi |}|                    ||
|df           d S )NrW  )r   rF   )
setdefaultr   r	  r   r
  r   r   r   r  r   r   r  r   )rG   rI   r   r   rZ   r   rK   rf   rg   colkeyre  s              r4   r   r     s3    & 0 01""!!&!,,,,  ''!N (  H $Q'' ;$H$*4!&AAA EG  ' <AFN < 33AF;;A$H$Q\\^^::r:: MM1h2.////=0 0r6   c                F   | j         }|o<t          |          o-|j         o%| j         p|j        o|j        o|j         o|j         }|o|j        o|j	        j
        du}|o1|j        o*|j        j        o|j        o| p|j        p|j        p|j        }|rd}t          |          rZ|o|j        }|p|j        p|j        }	|o| j        o|j        o|	p|j        }
d}|
r#|	r!|j        r|                     |j	                  }n`|j        r&|j        o|j        j        o|j        o|j        }d}
d}n3|j        r&|j        o|j        j        o|j        o|j        }d}
d}nd}d}
d}|r6|j        st5          |j	        j                  }nt5          |j                  }nd}||p||||
|fS )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   r}   _inliner   insert_executemany_returningrv   ru   r~   r   r{   r   insert_returning_primary_tablerp   _supports_implicit_returningfavor_returning_over_lastrowidr   r@   !use_insertmanyvalues_wo_returning_sort_by_parameter_order_get_sentinel_column_for_tabler   update_returningrw   delete_returningr  r   r-   )rG   rH   rI   rJ   r   r   r   rp   should_implicit_return_defaultsexplicit_returningr@   rA   r   s                r4   r   r     s    G 	 		4#M22		4		4 (( P4N9N		4 		4 33   	 	9'	9J,D8  	 	
 $	

 (;	
 6	
$ %$N(N %2%$- 2  $#}-- 1$84#8 	( , ,,+ 	  (, #Og&O 	  $ 	"	 -	
 $,#J#J
$ $  
	 $! ),?):) (	 	(  %#		 $! ),?):) (	 	(  %#*/'$#& (, 		J (+4:<'8'8$$'*4+H'I'I$$#'  	==  r6   c                    d| j         j        d| j        d| j         j        d}t          | j         j                  dk    r|dz  }t          j        |           d S )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.)r{   fullnamer   lenr   r!   warn)r-   msgs     r4   r   r   {  so      7QVVVQW%5%5%5	7  17!##	
 	IcNNNNNr6   )r-   r.   r/   r0   )rG   r$   rH   r'   rI   r&   rJ   r>   rK   r   r/   r9   ).FNF)rG   r$   r   r.   r   r   r   r   rP   r>   r   r   r   r>   rK   r   r/   r   )
rG   r$   r   r.   r   r   rK   r   r/   r   )TFNF)rG   r$   r   r.   r   r   r   r>   rP   r>   r   r   r   r>   rK   r   r/   r   )rG   r$   rH   r'   rI   r&   r/   r   )rG   r$   rH   r'   r-   r0   r   r  rK   r  r/   r  ).)
rG   r$   r-   r.   r   r   rK   r   r/   r   )
rG   r$   r-   r.   r   r(  rK   r   r/   r)  )TN)rG   r$   r-   r.   r   r>   r   r   rK   r   r/   r,  )rG   r$   rH   r'   r-   r7   r9  rP  rK   r  r/   r   )rG   r$   rH   r'   rI   r&   r]  rk   rZ   rl   rK   r  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   r}   r   schemar   r   r   r   r   r    r!   util.typingr"   rG   r#   r$   r%   r&   r'   r(   r)   r*   r+   symbolr,   r5   r   _CrudParamElement_CrudParamElementStr_CrudParamElementSQLExprr:   r9   r   rT   r   rs   r   r   rx   r   r   r   r   r   r   r  r#  r6  rS  r   r   r   r   r   rF   r6   r4   <module>r     s    # " " " " "                                          ! ! ! ! ! !                                                                               * * * * * * 4 4 4 4 4 4 " " " " " " - - - - - - ' ' ' ' ' '       # # # # # #             ! ! ! ! ! ! 	111111%%%%%%&&&&&&'''''',,,,,,''''''4;	     c$$% SM  SM  !SM  +, A A A A A* A A AO O O Od 

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