
    h                   "   d dl m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% 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,m0Z0 dd,l1m2Z2 dd-l1m3Z3 dd.l1m4Z4 dd/l1m5Z5 dd0l1m6Z6 dd1l1m7Z7 dd2l8m9Z9 dd3l:m;Z; dd4l:m<Z< dd5l=m>Z> dd6l=m?Z? dd7l=m@Z@ dd8l=mAZA dd9l=mBZB dd:l=mCZC dd;l=mDZD dd<l=mEZE dd=lFmGZG errdd>lHmIZI dd?lHmJZJ dd@lmKZK ddAlLmMZM ddBlNmOZO ddClPmQZQ ddDlPmRZR ddElSmTZT ddFlUmVZV ddGl,mWZW ddHlXmYZY ddIl8mZZZ ddJl:m[Z[ ddKl=m\Z\ ddLl=m]Z] ddMl=m^Z^ ddNl=m_Z_ ddOl=m`Z` ddPlambZb  edQeR      Zcej                  Ze ej                         ZgeCj                  Zh G dS dT      Zi ej                  dUdVi      Zj G dW dXe4      Zk G dY dZek      Zl G d[ d\ek      Zm G d] d^      Zn G d_ d`en      Zo G da dben      Zpe&j(                  jh                  j                  dcdd       G de dfem             Zr G dg dhe;e6eEe-         Zse&j(                  jh                  j                  dcdi       G dj dkele>             Zte&j(                  jh                  j                  dcdl       G dm dnemeD             Zu	 	 d	 	 	 	 	 	 	 ddoZv	 	 	 	 ddpZw	 	 	 	 ddqZx	 d	 	 	 	 	 ddrZy G ds dt      Zz G du dvez      Z{ G dw dxez      Z| G dy dzez      Z} G d{ d|e}      Z~ G d} d~e}      Z G d de      Zy)    )annotationsN)Any)cast)Dict)Iterable)List)Optional)Set)Tuple)Type)TYPE_CHECKING)TypeVar)Union   )
attributes)
interfaces)loading)_is_aliased_class)ORMColumnDescription)ORMColumnsClauseRole)PathRegistry)_entity_corresponds_to)_ORMJoin)_TraceAdaptRole)AliasedClass)Bundle)
ORMAdapter)ORMStatementAdapter   )exc)future)inspect)sql)util)	coercions)
expression)roles)visitors)_TP)is_dml)is_insert_update)is_select_base)_select_iterables)CacheableOptions)CompileState)
Executable)
Generative)Options)
UpdateBase)GroupedElement)
TextClause)CompoundSelectState)LABEL_STYLE_DISAMBIGUATE_ONLY)LABEL_STYLE_NONE)LABEL_STYLE_TABLENAME_PLUS_COL)Select)SelectLabelStyle)SelectState)TypedReturnsRows)InternalTraversal)_InternalEntityType)OrmExecuteOptionsParameter)PostLoad)Mapper)Query)_BindArguments)Session)Result)_CoreSingleExecuteParams)_ColumnsClauseArgument)SQLCompiler)_DMLTableElement)ColumnElement)_JoinTargetElement)_LabelConventionCallable)_SetupJoinsElement)ExecutableReturnsRows)
SelectBase)
TypeEngine_T)boundc                  z    e Zd ZU dZded<   ded<   ded<    G d d	e      Z	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZy
)QueryContext)top_level_contextcompile_statequeryuser_passed_queryparamsload_optionsbind_argumentsexecution_optionssession	autoflushpopulate_existinginvoke_all_eagersversion_checkrefresh_statecreate_eager_joinspropagated_loader_optionsr   runidpartialspost_load_pathsidentity_token	yield_perloaders_require_bufferingloaders_require_uniquingintrf   zDict[PathRegistry, PostLoad]rh   ORMCompileStaterW   c                  <    e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZy)!QueryContext.default_load_optionsFTN)__name__
__module____qualname___only_return_tuples_populate_existing_version_check_invoke_all_eagers
_autoflush_identity_token
_yield_per_refresh_state_lazy_loaded_from_legacy_uniquing_sa_top_level_orm_context_is_user_refresh     ?D:\EasyAligner\venv\Lib\site-packages\sqlalchemy/orm/context.pydefault_load_optionsrp      sE    #"!

  $(! r   r   Nc	                    | _         |xs t         _        |xs t         _        | _        | _        | _        | _        d _        d _	        | _
        |j                   _        |j                  j                  }	|j                  }
t         fdt!        |	|
      D               _        t%        |j&                         _        |j(                   _        |j,                   _        |j0                   _        |j4                   _        |j8                   _        |j<                   _        |j@                   _!        y )NFc              3  `   K   | ]%  \  }}|j                   r|j                  |       ' y wN)propagate_to_loaders'_adapt_cached_option_to_uncached_option).0optuncached_optselfs      r   	<genexpr>z(QueryContext.__init__.<locals>.<genexpr>   s4      /
%J!\'' 77lK%Js   +.)"r[   _EMPTY_DICTr]   r\   rW   rX   rY   r^   rk   rl   rZ   r~   rV   select_statement_with_optionstuplezipre   dictr   rx   r_   ru   r`   rw   ra   rv   rb   r{   rc   rz   rj   ry   ri   )r   rW   	statementrY   rZ   r^   r[   r]   r\   cached_optionsuncached_optionss   `          r   __init__zQueryContext.__init__   s!   $ )!2!Ak,;*
 "3).&(-%!-!G!G&77EE,:: */ /
%(9I%J/
 *
& }778%00!-!@!@!-!@!@)88)88%00*::r   c                "    | j                   xs | S r   )rV   r   s    r   _get_top_level_contextz#QueryContext._get_top_level_context   s    %%--r   )NN)rW   r/   r   2Union[Select[Any], FromStatement[Any], UpdateBase]rY   r   rZ   rG   r^   rE   r[   zQUnion[Type[QueryContext.default_load_options], QueryContext.default_load_options]r]   z$Optional[OrmExecuteOptionsParameter]r\   zOptional[_BindArguments])returnrU   )	rq   rr   rs   	__slots____annotations__r2   r   r   r   r   r   r   rU   rU   f   s    I6 J11""!w !: CG37!@;#@; F@;
	@; )@; @;
@; @@;  1!@;D.r   rU    _result_disable_adapt_to_contextTc                  z     e Zd ZdZd Ze	 	 	 	 	 	 	 	 d fd       Zed        Ze	 	 dd       Zed        Z	 xZ
S )	AbstractORMCompileStateFc                  i | _         |i x| _        }|sJ y |j                  x| _        }|r7d|d<   |r/|j                  D ]   }|j                  s|j                  |        " y |j                  dd      ry |j                  d   }	 |d   }|j                  D ]-  }|j                  s|j                  s|j                  |        / 	 d|d<   y # t        $ r Y w xY w)NTtoplevel_ormFr   
selectable)
r   global_attributes_global_attributesr   _is_criteria_optionprocess_compile_stategetstack_is_compile_stateKeyError)	r   r   compilertoplevelprocess_criteria_for_toplevelgar   stack_0toplevel_stmts	            r   _init_global_attributesz/AbstractORMCompileState._init_global_attributes   s      +-,D"RO8*2*E*EED"R!%B~,$22C..11$7 3 VVNE*..#	4#L1M %22((S-D-D--d3 3 ">  		s   C 	CCc                &    t        |   ||fi |S )a  Create a context for a statement given a :class:`.Compiler`.

        This method is always invoked in the context of SQLCompiler.process().

        For a Select object, this would be invoked from
        SQLCompiler.visit_select(). For the special FromStatement object used
        by Query to indicate "Query.from_statement()", this is called by
        FromStatement._compiler_dispatch() that would be called by
        SQLCompiler.process().
        )supercreate_for_statement)clsr   r   kw	__class__s       r   r   z,AbstractORMCompileState.create_for_statement	  s    " w+IxF2FFr   c                    t               r   NotImplementedError)r   r^   r   rZ   r]   r\   is_pre_events          r   orm_pre_session_execz,AbstractORMCompileState.orm_pre_session_exec       "##r   c                ^    |j                  ||xs i |      }| j                  ||||||      S )N)r]   )executeorm_setup_cursor_result)r   r^   r   rZ   r]   r\   connresults           r   orm_execute_statementz-AbstractORMCompileState.orm_execute_statement(  sJ     v|7H  
 **
 	
r   c                    t               r   r   r   r^   r   rZ   r]   r\   r   s          r   r   z/AbstractORMCompileState.orm_setup_cursor_result>  r   r   )r   r0   r   rI   r   r   r   r/   )r   rF   )rq   rr   rs   is_dml_returningr   classmethodr   r   r   r   __classcell__r   s   @r   r   r      s    %"N GG G 	G
 
G G$ 	$ 	$ 
 

 
* 	$ 	$r   r   c                  0    e Zd ZdZed        Zed        Zy)AutoflushOnlyORMCompileStatez>ORM compile state that is a passthrough, except for autoflush.c                    t         j                  j                  ddh||j                        \  }}|s|j                  r|j	                          ||fS )N_sa_orm_load_optionsr_   )rU   r   from_execution_options_execution_optionsrx   )r   r^   r   rZ   r]   r\   r   r[   s           r   r   z1AutoflushOnlyORMCompileState.orm_pre_session_execN  sa     --DD" ((
	
  7 7 +++r   c                    |S r   r   r   s          r   r   z4AutoflushOnlyORMCompileState.orm_setup_cursor_resultk  s	     r   N)rq   rr   rs   __doc__r   r   r   r   r   r   r   r   K  s+    H, ,8 	 	r   r   c                     e Zd ZU  G d de      Zded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   eZded<   dZd Z	e
	 	 	 	 	 	 	 	 d,d        Ze
	 	 	 	 	 	 	 	 	 	 d-d!       Zd" Ze
	 	 	 	 	 	 d.d#       Ze
d$        Ze
d%        Ze
d&        Zed'        Zd( Zd) Ze
d*        Zy+)/rn   c                  Z   e Zd Zdej                  fdej                  fdej                  fdej
                  fdej                  fdej                  fdej                  fdej                  fd	ej                  fd
ej                  fdej                  fgZdZdZ	dZ
eZdZdZdZdZdZdZdZy)'ORMCompileState.default_compile_options_use_legacy_query_style_for_statement_bake_ok_current_path_enable_single_crit_enable_eagerloads_only_load_props_set_base_alias_for_refresh_state_render_for_subquery_is_starFTN)rq   rr   rs   r>   
dp_booleandp_has_cache_keydp_plain_obj_cache_key_traversalr   r   r   _path_registryr   r   r   r   r   r   r   r   r   r   r   default_compile_optionsr   y  s    &(9(D(DE0;;<*556/@@A"$5$@$@A!#4#?#?@!2!?!?@ 1 < <=!#4#?#?@#%6%A%AB*556 
& #(
 &"!"$r   r   zDict[Any, Any]r   r   r   r   r   List[_QueryEntity]	_entitiesz%Dict[_InternalEntityType, ORMAdapter]_polymorphic_adaptersz=Union[Type[default_compile_options], default_compile_options]compile_optionszOptional[_QueryEntity]_primary_entitybooluse_legacy_query_stylerM   _label_conventionzList[ColumnElement[Any]]primary_columnssecondary_columnszSet[ColumnElement[Any]]dedupe_columnszList[Tuple[Any, ...]]rd   r   current_pathFc                    t               r   r   )r   argr   s      r   r   zORMCompileState.__init__      !##r   c                X     | j                   t        d|      f|j                   |d|S )NUnion[Select, FromStatement])r   r   )_create_orm_contextr   r   )r   r   r   r   s       r   r   z$ORMCompileState.create_for_statement  s@     's&&/;
!'
 	
 	
r   c                   t               r   r   )r   r   r   r   r   s        r   r   z#ORMCompileState._create_orm_context  s     "##r   c                j    | j                   }||vr#|j                  |       |j                  |       y y r   )r   addappend)r   objcol_collectiondedupes       r   _append_dedupe_col_collectionz-ORMCompileState._append_dedupe_col_collection  s3    $$fJJsO!!#& r   c                <    |rdd}|S t        j                  |      S )Nc                "    |r|S t        | d      S )Nkey)getattr)colcol_names     r   namez7ORMCompileState._column_naming_convention.<locals>.name  s    #O"3..r   r   )r<   _column_naming_convention)r   label_stylelegacyr  s       r   r	  z)ORMCompileState._column_naming_convention  s$     / K88EEr   c                    t        |      S r   )_column_descriptionsr   r   s     r   get_column_descriptionsz'ORMCompileState.get_column_descriptions  s    #I..r   c                   t         j                  j                  dh d||j                        \  }}d|v r5|d   }|j                  j                  j                  |j                  |      }|st        }n|j                  t              }|j                  r|j                  d|j                  i      }t        |j                  dd       rHt        |j                  j                        dkD  r&|j                  dd      |j                  d d	d
      }||d<   	 |j                  d   }	|	r|	j                   |d<   	 |s|j$                  r|j%                          ||fS # t"        $ r J d       w xY w)Nr   >   r_   rj   ri   r`   sa_top_level_orm_contextr  rj   r   
   compiled_cacheTz#excess depth for ORM loader options)r  _cache_disable_reasonclauseplugin_subjectmapperz0statement had 'orm' plugin but no plugin_subject)rU   r   r   r   rX   
merge_withr]   _orm_load_exec_optionsunionrz   r  _compile_optionslenr   r   _propagate_attrsr  r   rx   )
r   r^   r   rZ   r]   r\   r   r[   ctxr  s
             r   r   z$ORMCompileState.orm_pre_session_exec  s    --DD" ((
	
( &)::#$>?C #		 < < G G%%'8! ! 6 1 7 78N O "" 1 7 7l556!
 I..FI..<<=B!%%&6=I "''*.2-  $-x 	A&778HIN +9+@+@x( 7 7 +++  	MLLL5	Ms   E E+c           
        |j                   }|j                  j                  }|j                  dt        j
                        }	|j                  j                  r|S t	        ||||||	||      }
t        j                  ||
      S )Nr   )
contextcompiledrW   r   rU   r   r   r   r   	instances)r   r^   r   rZ   r]   r\   r   execution_contextrW   r[   querycontexts              r   r   z'ORMCompileState.orm_setup_cursor_resultE  s     #NN)22@@ ),,"L$E$E
 ((11M#	
   66r   c                b    | j                   D cg c]  }t        |t              s| c}S c c}w )zreturn all _MapperEntity objects in the lead entities collection.

        Does **not** include entities that have been replaced by
        with_entities(), with_only_columns()

        )r   
isinstance_MapperEntity)r   ents     r   _lead_mapper_entitiesz%ORMCompileState._lead_mapper_entitiesj  s2      >>
)CZ]-KC>
 	
 
s   ,,c           
        |j                   sz|j                  j                  | j                  vrW|j                  j	                         D ]9  }| j                  |t        t        j                  ||j                  |             ; yyy)a5  given MapperEntity or ORMColumnEntity, setup polymorphic loading
        if called for by the Mapper.

        As of #8168 in 2.0.0rc1, polymorphic adapters, which greatly increase
        the complexity of the query creation process, are not used at all
        except in the quasi-legacy cases of with_polymorphic referring to an
        alias and/or subquery. This would apply to concrete polymorphic
        loading, and joined inheritance where a subquery is
        passed to with_polymorphic (which is completely unnecessary in modern
        use).

        )equivalentsr   N)
is_aliased_classr  persist_selectabler   iterate_to_root"_mapper_loads_polymorphically_withr   r   WITH_POLYMORPHIC_ADAPTER_equivalent_columns)r   ext_infor   mps       r    _create_with_polymorphic_adapterz0ORMCompileState._create_with_polymorphic_adapterv  s|     ))22--. oo55777'@@$&$:$:#-	 8. *r   c                    |j                   xs |gD ]?  }|| j                  |<   |j                         D ]  }|| j                  |j                  <    A y r   )_with_polymorphic_mappersr   r.  local_table)r   r  adapterm2ms        r   r/  z2ORMCompileState._mapper_loads_polymorphically_with  sS    22>vh>B-4D&&r*'')<C**1==9 * ?r   c                    t        d      )Nz0this method only works for ORMSelectCompileStater   )r   rX   r  s      r   _create_entities_collectionz+ORMCompileState._create_entities_collection  s    !>
 	
r   N)r   r0   r   rI   r   r   r   rn   )
r   r   r   r   r   Optional[SQLCompiler]r   r   r   rn   )r
  r;   r  r   r   rM   )rq   rr   rs   r.   r   r   r   r   _has_mapper_entitiesr   r   r   r   r  r	  r  r   r   propertyr)  r4  r/  r<  r   r   r   rn   rn   x  s   #"2 #J %%AAHH!!@@  ,+  //--//++  "0L,/ $ 

 
 	

 

 
 $/$ 	$
 ($ $ 
$ $' F*F48F	!F F / / W, W,r "7 "7H 	
 	
:D 
 
r   rn   c                  &    e Zd ZdZdZd Zd Zd Zy)_DMLReturningColFilterza base for an adapter used for the DML RETURNING cases

    Has a subset of the interface used by
    :class:`.ORMAdapter` and is used for :class:`._QueryEntity`
    instances to set up their columns as used in RETURNING for a
    DML statement.

    )r  columns__weakref__c                    | |j                   |j                   ur|| _        n|| _        t        j                  | j                        x| _        | _        y r   )r7  r  r$   WeakPopulateDictadapt_check_presentrB  )r   target_mapperimmediate_dml_mappers      r   r   z_DMLReturningColFilter.__init__  sU     ,))'334 /DK (DK&*&;&;$$'
 	
t|r   c                f    t        j                  |      D ]  }| j                  |      }||c S  y r   )sql_util_find_columnsrF  )r   r  	as_filterccc2s        r   __call__z_DMLReturningColFilter.__call__  s6    ((-B))"-B~
 .
 r   c                    t               r   r   )r   r  s     r   rF  z*_DMLReturningColFilter.adapt_check_present  r   r   N)rq   rr   rs   r   r   r   rO  rF  r   r   r   rA  rA    s     5I
$r   rA  c                      e Zd ZdZd Zy) _DMLBulkInsertReturningColFiltera[  an adapter used for the DML RETURNING case specifically
    for ORM bulk insert (or any hypothetical DML that is splitting out a class
    hierarchy among multiple DML statements....ORM bulk insert is the only
    example right now)

    its main job is to limit the columns in a RETURNING to only a specific
    mapped table in a hierarchy.

    c                    | j                   }|j                  j                  |d       }|y |j                  j                  j                  |      S r   )r  _columntopropertyr   r7  ccorresponding_columnr   r  r  props       r   rF  z4_DMLBulkInsertReturningColFilter.adapt_check_present  sH    ''++C6<!!##88==r   Nrq   rr   rs   r   rF  r   r   r   rR  rR    s    >r   rR  c                      e Zd ZdZd Zy)"_DMLUpdateDeleteReturningColFiltera_  an adapter used for the DML RETURNING case specifically
    for ORM enabled UPDATE/DELETE

    its main job is to limit the columns in a RETURNING to include
    only direct persisted columns from the immediate selectable, not
    expressions like column_property(), or to also allow columns from other
    mappers for the UPDATE..FROM use case.

    c                    | j                   }|j                  j                  |d       }|%|j                  j                  j                  |      S |S r   )r  rT  r   r-  rU  rV  rW  s       r   rF  z6_DMLUpdateDeleteReturningColFilter.adapt_check_present  sO    ''++C6 ,,..CCCHH 
r   NrY  r   r   r   r[  r[    s    
r   r[  ormorm_from_statementc                      e Zd ZU dZdZded<   ded<   dZded<   dZdZdZ	dZ
eZeZe	 	 	 	 	 	 	 	 	 	 dd	       Zd
 Zd Zd Zy)ORMFromStatementCompileStateNFFromStatementstatement_containerz)Union[SelectBase, TextClause, UpdateBase]requested_statementzOptional[_DMLTableElement]	dml_tablec                  |}t        |t              sJ |!|j                  rt        j                  d      | j                  |       }d |_        |j                  j                  |_	        |x|_
        |_        |j                  x|_        }|j                  r|j                  |_        d|_        g |_        i |_        |j                  |_        |j                  r_t        |t*        j,                        rE|j.                  s9|j                  s-|j0                  t2        u r|j5                  t6              |_        n||_        |j;                  |j.                  s|j                  s|j0                  nt2        |j                        |_        t>        jA                  ||jB                  |j$                  d       |j                  jD                  |_#        |jI                  ||dd       |jJ                  r/|jJ                  D ]   }|jL                  s|jO                  |       " |jP                  r|jP                  D ]  \  }}	 ||        g |_)        g |_*        tW               |_,        g |_-        g |_.        d |_/        t        |j8                  t*        j`                        roi |_1        |j$                  D ]  }
|
je                  |        dx|_3        |_4        d|_5        |jR                  D ]   }|jm                  |d|jn                         " |S tq        tr        jt                  |j8                  |jv                        |_<        |S )NzThe ORM FromStatement construct only supports being invoked as the topmost statement, as it is only intended to define how result rows should be returned.Tis_current_entitiesF)r   r   )within_columns_clauseadd_to_result_map)adapt_on_names)=r&  ra  r   sa_excCompileError__new__r   r  r   r   rb  r   elementrc  r*   tablerd  r   r   r   r   r&   rP   _is_textual_label_styler8   set_label_styler9   r   r	  r   _QueryEntityto_compile_state_raw_columnsr   r   r   r   r   r   _with_context_optionsr   r   setr   rd   _fallback_from_clausesorder_byr5   extra_criteria_entitiessetup_compile_state_ordered_columns_textual_ordered_columns_loose_column_name_matchingprocess_add_to_result_mapr   r   ADAPT_FROM_STATEMENT_adapt_on_names_from_obj_alias)r   r   r   r   r   rb  r   r   fnr  entityrU  s               r   r   z0ORMFromStatementCompileState._create_orm_context  s    (-}===HNN%%=  {{3#  00HH 	# <ON 4#8/B/J/JJ 9&__DN$(D!%'"2CC ''9j&;&;<))$$&&*::&66.DN 'DN!%!?!? !,,Y5E5E &&%''"
 	%%,,NN $	 	& 	
 0@@NN$$*/	 	% 	
 ,,*88((--d3 9 44.DDC4 E  "!#!e"$&(#dnnj&;&;< ,.D(..**40 ) H%(I 48H0))  *.&.&A&A !  *,  $7442BB$D  r   c                    |S r   r   )r   colscurrent_adapters      r   _adapt_col_listz,ORMFromStatementCompileState._adapt_col_list      r   c                     y r   r   r   s    r   _get_current_adapterz1ORMFromStatementCompileState._get_current_adapter  s    r   c                   | j                   j                  j                  dd      }| j                   j                  rt	        ||      }n;| j                   j
                  s| j                   j                  rt        ||      }nd}| j                  j                  r-t        | j                        dk7  rt        j                  d      | j                  D ]  }|j                  | |        y)zused by BulkORMInsert, Update, Delete to set up a handler
        for RETURNING to return ORM objects and expressions

        r  Nr   sCan't generate ORM query that includes multiple expressions at the same time as '*'; query for '*' alone if present)r   r  r   	is_insertrR  	is_update	is_deleter[  r   r   r  r   rk  rl  !setup_dml_returning_compile_state)r   
dml_mapperrG  r8  r  s        r   r  z>ORMFromStatementCompileState.setup_dml_returning_compile_state  s    
 77;;d
 >>##6zG ^^%%)A)A8zG G((c$...AQ.F%%J 
 nnF44T7C %r   )
r   r   r   r   r   r=  r   r   r   r`  )rq   rr   rs   r  r>  r   rd  _has_orm_entitiesmulti_row_eager_loaderseager_adding_joinscompound_eager_adapterr   rz  eager_joinsr   r   r  r  r  r   r   r   r`  r`    s    O &&BB,0I)0#!)KC/C 	C
 (C C 
&C CJDr   r`  c                  \    e Zd ZU dZdZej                  Zej                  Z	dZ
ded<   ded<   dej                  fdej                  fgej                   z   Zed	ej$                  fgz   Zd
Z	 d	 	 	 	 	 ddZd Zed        Zd Z fdZed        Zed        Zed        Zed        Z xZS )ra  a*  Core construct that represents a load of ORM objects from various
    :class:`.ReturnsRows` and other classes including:

    :class:`.Select`, :class:`.TextClause`, :class:`.TextualSelect`,
    :class:`.CompoundSelect`, :class`.Insert`, :class:`.Update`,
    and in theory, :class:`.Delete`.

    r^  N(Union[ExecutableReturnsRows, TextClause]rn  r   r  ru  r  Tc           	        t        j                  |      D cg c])  }t        j                  t        j
                  || d      + c}| _        || _        |j                  | _        |j                  | _	        |j                  | _
        |j                  | _        |j                  | _        t        |      r|j                  nd | _        || _        y c c}w )NT)apply_propagate_attrspost_inspect)r$   to_listr%   expectr'   ColumnsClauseRoleru  rn  r*   	is_selectr  r  r  r,   rq  r  )r   entitiesrn  r  r(  s        r   r   zFromStatement.__init__  s     ||H-
 . ''&*!	 .
 nn ** ** ** **$27$;G   	  /%
s   .Cc                     | j                   | |fi |}|j                   }|r||_         |j                  |j                  fi |S )zprovide a fixed _compiler_dispatch method.

        This is roughly similar to using the sqlalchemy.ext.compiler
        ``@compiles`` extension.

        )_compile_state_factoryr   rW   r  r   )r   r   r   rW   r   s        r   _compiler_dispatchz FromStatement._compiler_dispatch  sR     433D(IbI~~%%2H"x 7 7>2>>r   c                l    t        t        t        j                  |             j                  } ||       S )a@  Return a :term:`plugin-enabled` 'column descriptions' structure
        referring to the columns which are SELECTed by this statement.

        See the section :ref:`queryguide_inspection` for an overview
        of this feature.

        .. seealso::

            :ref:`queryguide_inspection` - ORM background

        )r   ORMSelectCompileStater<   get_plugin_classr  )r   meths     r   column_descriptionsz!FromStatement.column_descriptions  s3     !;#?#?#E

!
! 	 Dzr   c                    | S r   r   r   s    r   _ensure_disambiguated_namesz)FromStatement._ensure_disambiguated_names  r  r   c              +     K   t         j                  j                  d | j                  D              E d {    t	        |   di |E d {    y 7 7 w)Nc              3  4   K   | ]  }|j                     y wr   )_from_objectsr   rn  s     r   r   z-FromStatement.get_children.<locals>.<genexpr>  s      1
1BgG!!1B   r   )	itertoolschainfrom_iterableru  r   get_children)r   r   r   s     r   r  zFromStatement.get_children  sY     ??00 1
151B1B1
 
 	
 	
 7'-"---	
 	.s!   4AAAAAAc                .    | j                   j                  S r   )rn  _all_selected_columnsr   s    r   r  z#FromStatement._all_selected_columns  s    ||111r   c                \    t        | j                        r| j                  j                  S d S r   )r*   rn  _return_defaultsr   s    r   r  zFromStatement._return_defaults  s"    06t||0Dt||,,N$Nr   c                \    t        | j                        r| j                  j                  S d S r   )r*   rn  
_returningr   s    r   r  zFromStatement._returning  s"    *0*>t||&&HDHr   c                \    t        | j                        r| j                  j                  S d S r   )r+   rn  _inliner   s    r   r  zFromStatement._inline!  s"    '7'Et||##O4Or   )T)r  z%Iterable[_ColumnsClauseArgument[Any]]rn  r  r  r   ) rq   rr   rs   r   __visit_name__r`  r   r  r   r  _for_update_argr   r>   dp_clauseelement_listdp_clauseelementr0   _executable_traverse_internals_traverse_internalsr   r   is_from_statementr   r  r?  r  r  r  r  r  r  r  r   r   s   @r   ra  ra    s8    *N3KK9NNO55 
*@@A	%667 	112
 /	.??@2   !%	/7/ :/ 	/4?"  ". 2 2 O O I I P Pr   ra  compound_selectc                      e Zd Zy)CompoundSelectCompileStateN)rq   rr   rs   r   r   r   r  r  &  s     	r   r  selectc                  X   e Zd ZdZeZdZdZdZdZ	dZ
dZdZdZdZdZe	 	 	 	 	 	 	 	 	 	 d"d       Zd Zd Zed        Zed        Zed	        Zed
        Zed        Zd Zd Zd Zd Zd Zd#dZd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*e+d        Z,e+d        Z-d  Z.d! Z/y)$r  r   NFc                  | j                  |       }|}| j                  j                  |j                        |_        |j                  r9|j                         |_        t        j                         |j                  _        n||_        |j                  j                  |_
        |j                  j                  |_        g |_        d |_        i |_        |j                  |_        |s|xj                   dddz  c_        |j                  r@|j                  j"                  t$        u r$|j                  st&        |_        n't*        |_        n|j                  j"                  |_        |j,                  rA|j,                  D ci c]&  }|t.        j1                  ||j2                  g d      ( c}|_        |j7                  |j"                  |j                        |_        t.        j1                  ||j2                  |j                  d       |j                  j:                  |_        d|_        |jA                  |||d       |r|jB                  s|j,                  r|j,                  D ]]  }|jB                  D ]L  }|jD                  s|jG                  ||j4                  |   D 	cg c]  }	tI        |	tJ              r|	 c}	       N _ |j                  jB                  D ]   }|jD                  s|jM                  |       " |jN                  r|jN                  D ]  \  }
} |
|        g |_(        g |_)        tU               |_+        i |_,        i |_-        g |_.        g |_/        |ja                  d |jb                  D              |_2        |jg                          ti        jj                  ||jl                  |fi | |S c c}w c c}	w )NFT)r   r   rf  r   )r   r   c              3  4   K   | ]  }|j                     y wr   )r   )r   infos     r   r   z<ORMSelectCompileState._create_orm_context.<locals>.<genexpr>  s      2
(BDOO(Br  )7rm  r   
safe_merger  r   _cloner   r$   immutabledictr   for_statementr   r   r   r   r   r   rq  LABEL_STYLE_LEGACY_ORMr9   r
  r7   _memoized_select_entitiesrs  rt  ru  _memoized_entitiesr	  r   r   r   eager_order_byr   r   r   'process_compile_state_replaced_entitiesr&  r'  r   rv  r   r   rw  r   r  rz  rd   rx  _normalize_froms	_from_objfrom_clauses_setup_for_generater<   r   r   )r   r   r   r   r   r   r   memoized_entitiesr   r(  r  r  s               r   r   z)ORMSelectCompileState._create_orm_context@  s    {{3$ &)%@%@%K%K&&&
	" .. %5$;$;$=D!7;7I7I7KD!!4$4D! .>>MM --EE 	# #%'"/@@   &+(,%   ''%%226LL%%#A #@ #44AAD55 %>>
' ? & "<#@#@%22(-	 $A $  ?
'D#  "&!?!?""D$?$?"
 	%%))NN $	 	& 	
 -==KK $$*/	 	% 	
 **99 ";; ",::C,,CC  ,0+B+B$5,","C $.c=#A	 !$,"	 ; < ,,::((--d3 ; 11+AAC4 B  "!#!e')$"$&(# !11 2
(8(B(B2
 
 	  "T4>>8BrB}
'bs   +N>%Oc                   t        d       t        d| j                          | j                  D ]  }t        |t              rm|d   dk(  ret        dt        j                  |d                 t        d| j                  |           t        d| j                  |   j                          t        |t              s|d   dk(  st        d	t        j                  |d                 t        d| j                  |            y )
Nz5
---------------------------------------------------
zcurrent path: r   loaderz
Loader:           r   z    path_with_polymorphicz
With Polymorphic: )printr   r   r&  r   r   coerce__dict__)r   r  s     r   _dump_option_structz)ORMSelectCompileState._dump_option_struct  s    GHt00123??C#u%#a&H*<,\-@-@Q-H,IJKT__S1234T__S1::;<=C'CF6M,M,\-@-@Q-H,IJKT__S1234 #r   c                l	   | j                   }d | _        d| _        | j                  j                  r| j                          |j                  D ]8  }|j                  s| j                  |j                  | j                  |          : |j                  r&| j                  |j                  | j                         | j                         |j                  r6|j                  | _        r#t        fd| j                  D              | _        r*|j                  dvr| j                  |j                        n|j                  | _        |j"                  r#t        fd|j"                  D              | _        r=|j$                  dvr/| j                  t'        j(                  |j$                              n|j$                  xs d | _        | j,                  r9| j.                  d   j0                  }|j3                  | j,                        | _        |j4                  r"| j                  |j4                        | _        nd| _        |j8                  | _        |j<                  r5t        t'        j(                  d |j<                  D                    | _        nT|j@                  5t        t'        j(                  d |j@                  D                    | _!        n|jD                  sd| _        |jF                  | _#        | j                  jH                  r-tK        | j                        d	k7  rtM        jN                  d
      | j                  D ]  }|jQ                  |         | jR                  D ]  }|d   } || g|d	d     | j                  jT                  r| jW                          | jX                  s2| j                  jZ                  rJ d       tM        j\                  d      | j.                  st_        | j`                        | _        | j                   du rd | _        | jb                  r.| jd                  r"| jf                  r| ji                         | _        n| jk                         | _        | jl                  r6| jo                         }|#| j                  jq                  d|i      | _        y y y )Nr   c              3  0   K   | ]  } |d         ywTNr   r   critr  s     r   r   z<ORMSelectCompileState._setup_for_generate.<locals>.<genexpr>	  s       - 4 $D$/ 4s   NFc              3  8   K   | ]  }r	 |d       n|  ywr  r   r  s     r   r   z<ORMSelectCompileState._setup_for_generate.<locals>.<genexpr>  s'      *2D 0?d+DH2s   r   c              3  N   K   | ]  }|t        j                  |      nd   y wr   rJ  surface_selectablesr   ss     r   r   z<ORMSelectCompileState._setup_for_generate.<locals>.<genexpr>7  s,      &- 89}H003$N-   #%c              3  N   K   | ]  }|t        j                  |      nd   y wr   r  r  s     r   r   z<ORMSelectCompileState._setup_for_generate.<locals>.<genexpr>>  s,      &4 89}H003$N4r  r   r   r  Fz,no columns were included in _only_load_propsz4Query contains no columns with which to SELECT from.
deepentity)9r   r   _join_entitiesr   r   _set_select_from_aliasr  _setup_joins_joinr  r   r  _where_criteriar   _order_by_clausesr  ry  _having_criteria_group_by_clausesr$   flatten_iteratorgroup_byr  r  _target_adaptercopy_and_process_distinct_ondistinct_on	_distinctdistinct
_correlate	correlate_correlate_exceptcorrelate_except_auto_correlater  r   r  rk  rl  r{  rd   r   _adjust_for_extra_criteriar   r   InvalidRequestErrorlistrx  r  r  _should_nest_selectable_compound_eager_statement_simple_statementr  _mapper_zero	_annotate)	r   rX   r  r8  r  recstrategyezeror  s	           @r   r  z)ORMSelectCompileState._setup_for_generate  s1   %% //'')!&!@!@ --

%22++,=> "A JJu))4>>:335  #(#8#8D ', - $ 4 4- ($ 5#:#:-#O   !8!8/J(( 	 !!$) *!22* %D! 5#:#:-#O   %%e&=&=> ((0D 	 ''*::G")":":4;N;N"OD#33""O D  "D #%% &"--& DN $$0$)%% &"44& %D! &&$DN  %44((c$...AQ.F%%J  nnF&&t, % **C1vHT$CG$ + 33++-####44LLLu,,F     $T%@%@ AD==E! DM (('',,!;;=DN!335DN%%'E  "&!9!9!5)" ! r   c                    | j                  |       }g |_        d|_        i |_        |j	                  |j
                  |      |_        t        j                  ||j                  |j                  d       |S )a  Creates a partial ORMSelectCompileState that includes
        the full collection of _MapperEntity and other _QueryEntity objects.

        Supports a few remaining use cases that are pre-compilation
        but still need to gather some of the column  / adaption information.

        NTrf  )
rm  r   r   r   r	  rq  r   rs  rt  ru  )r   rX   r  r   s       r   r<  z1ORMSelectCompileState._create_entities_collection|  sv     {{3#%'"!%!?!?"
 	%%%$$dnn$ 	& 	
 r   c                2    |j                   }t        |d       S r   )r  _determine_last_joined_entity)r   r   setup_joinss      r   determine_last_joined_entityz2ORMSelectCompileState.determine_last_joined_entity  s    ,,,[$??r   c              #  J  K   |j                   D ]  }|j                  rhd|j                  v rZ|j                  d   }|j                  s!|j                  st        |g      E d {    Yt        |j                        E d {    wt        |g      E d {     y 7 :7 7 w)Nentity_namespace)ru  is_selectable_annotations	is_mapperr,  r-   _all_column_expressions)r   r   rn  enss       r   all_selected_columnsz*ORMSelectCompileState.all_selected_columns  s      --G%%&'*>*>>**+=>}}S-A-A0';;;01L1LMMM,gY777 . <M7s6   A B#"B#B# BB#B!B#B#!B#c                    | j                  t        j                  j                  d |j                  D                    S )Nc              3     K   | ]<  }d |j                   vr|j                  n|j                   d    j                         g > yw)parententityN)r  r  __clause_element__r  s     r   r   zAORMSelectCompileState.get_columns_clause_froms.<locals>.<genexpr>  sX      *  6G &W-A-AA ))  ,,*,,.  6s   AA)r  r  r  r  ru  r  s     r   get_columns_clause_fromsz.ORMSelectCompileState.get_columns_clause_froms  s<    ##OO)) *  )55* 
 	
r   c                   t        j                  t        j                  ||      }t	        |j
                  |      }|j                  j                  |j                  |j                  |j                  |j                         |S )N)r  )r   rv  r   r  )r%   r  r'   ReturnsRowsRolera  ru  r  updater   rv  r   r  )r   r   from_statementstmts       r   r&  z$ORMSelectCompileState.from_statement  sw    "))!!"+
 Y33^D#11"+"A"A(;;&77	 	 	
 r   c                    | j                   }| j                  j                  sJ t        |j                        dk(  sJ | j                  |j                  d         }|r| xj                  ddiz  c_        || _        yy) used only for legacy Query casesr   r   r   FN)r   r   r   r  r  _get_select_from_alias_from_objr  )r   rX   r8  s      r   r  z,ORMSelectCompileState._set_select_from_alias  s{     %%##33335??#q(((66uq7IJ  %:E$BB #*D  r   c                   |}d|j                   v r|j                   d   }t        |d      r-|j                  st        j                  d      |j
                  S t        |j                  t        j                  j                        rF| j                         }||j                  u sJ t        t        j                  |j                  |      S y)r)  r   r  zPA selectable (FromClause) instance is expected when the base alias is being set.r+  N)r  hasattrr,  rk  ArgumentError_adapterr&  r   r#   AliasedReturnsRows_all_equivsr   r   LEGACY_SELECT_FROM_ALIAS)r   from_objr  equivss       r   r*  z5ORMSelectCompileState._get_select_from_alias_from_obj  s     T...$$^4D4"((**A 
 }}$)J)JK%%'F4??***&88"  r   c                4    | j                   d   j                  S )z8return the Mapper associated with the first QueryEntity.r   )r   r  r   s    r   r  z"ORMSelectCompileState._mapper_zero  s    ~~a '''r   c                    | j                   D ]!  }d|j                  v s|j                  d   c S  | j                  D ]  }|j                  s|j                  c S  y)zReturn the 'entity' (mapper or AliasedClass) associated
        with the first QueryEntity, or alternatively the 'select from'
        entity if specified.r   N)r  r  r   entity_zero)r   r(  qents      r   _entity_zeroz"ORMSelectCompileState._entity_zero  s]    
 $$C!1!11''77 % NND''' # r   c                    | j                   | j                  gk7  rt        j                  d|z        | j                  j                  S )Nz4%s() can only be used against a single mapped class.)r   r   rk  r  r7  )r   methnames     r   _only_full_mapper_zeroz,ORMSelectCompileState._only_full_mapper_zero	  sK    >>d2233,,)+34  ##///r   c                    t        | j                        dkD  rt        j                  |xs d      | j	                         S )Nr   z8This operation requires a Query against a single mapper.)r  r   rk  r  r9  )r   	rationales     r   _only_entity_zeroz'ORMSelectCompileState._only_entity_zero  sD    t~~",, ++ 
   ""r   c                   i }| j                   j                         D ]L  }|D cg c]  }t        |t              r| c}D ]'  }|j	                  |j
                  j                         ) N | j                  D cg c]  }t        |t              s| c}D ]'  }|j	                  |j
                  j                         ) |S c c}w c c}w r   )r  valuesr&  r'  r%  r  r1  r   )r   r4  r  r(  s       r   r1  z!ORMSelectCompileState._all_equivs  s    !%!8!8!?!?!A -,Cc=1 ,
 cjj<<= "B  >>
)CZ]-KC>
C MM#**889
 
s   C:CCc           	     f   | j                   rj| j                   D cg c]4  }t        |t        j                  j                        r|j
                  n|6 }}t        j                  | j                  |      }ng }d } | j                  | j                  |D cg c]  }|| j                  vs| c}z   | j                  | j                  | j                  | j                  | j                   f| j                  | j                   j"                  | j                   j$                  | j&                  | j(                  d| j*                  }|j-                         }| j/                         }t1        t2        j4                  ||      | _        t9        j:                  |g| j<                  z    }| j                  |_        | j                  '| j                  j@                  | j                  |_        |}| jB                  jE                         D ]#  }	t        jF                  ||	|	jH                        }% |jJ                  jM                  ||       |r6 |j                   jL                  |g| j6                  jO                  |         |j                   jL                  |g| jP                    |S c c}w c c}w )N
for_updatehintsstatement_hintsr  r  r,  ))ry  r&  r#   elements_label_referencern  rJ   expand_column_list_from_order_byr   _select_statementr   r  r  r  r
  r  r   _hints_statement_hintsr  r  _select_argsaliasr1  r   r   COMPOUND_EAGER_STATEMENTr  r!   r  r   rq  ofr  rA  splice_joinsstop_onselect_fromnon_generativer  r  )
r   elemunwrapped_order_byorder_by_col_exprrU  innerr4  r   from_clause
eager_joins
             r   r
  z/ORMSelectCompileState._compound_eager_statement+  s   
 == !MM" *D "$(E(EF LL *  " !) I I$$&8! !#!% '&&  +L+Qq8K8K/Kq+LM  !!MM
 ++''.. 11BBnn!22
 
  !!#&944e'
# MMg...
	 "&!1!1	   ,$$''/(,(<(<I%**113J #//Z););K	 4 	,,YD-I--,,==& 	*	)))Jd6I6IJ["( Ms   9J)J.
*J.
c           	     4    | j                   | j                  | j                  z   t        | j                        t        | j
                  j                               z   | j                  | j                  | j                  | j                  f| j                  | j                  j                  | j                  j                  | j                  | j                   d| j"                  }| j$                  r' |j                  j&                  |g| j$                    |S )NrC  )rJ  r   r   r   r  r  rA  r  r  r
  ry  r  r   rK  rL  r  r  rM  r  rT  )r   r   s     r   r  z'ORMSelectCompileState._simple_statement  s    *D**  4#9#99$##$uT-=-=-D-D-F'GG  !!MM
 ++''.. 11BBnn!22
 
	 -I--iN$:M:MNr   c                z   t        j                  |||      }|r||_        |r||_        |r|xj                  t        |      z  c_        |r |j                  j                  |g|  n|r|j                  j                  |       |r|xj                  t        |      z  c_        ||_	        ||_
        ||_        ||_        ||_        ||_        |r||_        |r||_        ||_        |r||_        |	r|	|_        |
r |j(                  j                  |g|
  | |j*                  j                  |g|  |S )N)ru  r  rq  )r:   _create_raw_selectr  r  r  r   r   rT  r  _limit_clause_offset_clause_fetch_clause_fetch_clause_options_independent_ctes_independent_ctes_opts	_prefixes	_suffixesr  rK  rL  r  r  )r   raw_columnsr3  where_criteriahaving_criteriar
  ry  rD  rE  rF  r  r  limit_clauseoffset_clausefetch_clausefetch_clause_optionsr   r  prefixessuffixesr  independent_ctesindependent_ctes_optsr   s                           r   rJ  z'ORMSelectCompileState._select_statement  sK   2 --$$
	 (6I%)8I&''5?:'-I--iF+F--i8''5?:'".	#0	 ".	*>	'&6	#+@	("*I"*I$.	!$I)8I&.I..yE9E'5I&&55, r   c                h   d|j                   v r>|j                   d   }| j                  j                  |d       }|r|j                  |      S t	        |t
        j                        r|}nt        |d      r|j                  }ny | j                  j                  |d       }|r|j                  |      S y )Nr   ro  )	r  r   r   adapt_clauser&  r&   
FromClauser-  ro  )r   rn  searchrN  s       r   _adapt_polymorphic_elementz0ORMSelectCompileState._adapt_polymorphic_element  s    W111)).9F..2264@E))'22gz445FWg&]]F**..vt<%%g.. r   c                B    |r|D cg c]  } ||d       c}S |S c c}w )NTr   )r   r  r  os       r   r  z%ORMSelectCompileState._adapt_col_list  s+    6:;dOAt,d;;K <s   c                    g | j                   r'j                  d| j                   j                  f       | j                  rj                  d| j                  f       sy fd}|S )NTFc                <    fd}t        j                  | i |      S )Nc                |    d| j                   v xs d| j                   v }D ]  \  }}|s|s ||       }||c S  y )N
_orm_adaptr   )r  )rU  is_orm_adaptalways_adaptr8  eadapterss        r   replacezRORMSelectCompileState._get_current_adapter.<locals>._adapt_clause.<locals>.replace   sR     D$5$55 ;%):)::  .6)L'#|#DM=#$H	 .6r   )r(   replacement_traverse)r  rL  r  r  s      r   _adapt_clausezAORMSelectCompileState._get_current_adapter.<locals>._adapt_clause  s    	% 00WEEr   )r  r   r  r   ru  )r   r  r  s     @r   r  z*ORMSelectCompileState._get_current_adapter  sl     OO((00 %%OOUD$C$CDE	F" r   c           
        |D ]  \  }}}}|d   }|d   }t        |      }|t        |      }t        |t        j                        r|t	        j
                  d      |}d }nd|j                  v r|j                  d   }|-|j                  s!t        |d      st	        j                  d      d }	t        |t        j                        rt        |dd       }	||	r|	}n|j                  }	 |j                  }|j                  }|j                  }t        |t        j                         s|}|||j"                  f| j$                  v rG|b||ur^|j                  j'                  dd       |ur@t	        j
                  d	|j                  j'                  d|      d
|      |d }|}nd x}}| j)                  |||||||        y # t        $ r}
t	        j                  d|z        |
d }
~
ww xY w)NisouterfullzUNo 'on clause' argument may be passed when joining to a relationship path as a targetr   r  z9Expected mapped entity or selectable/table as join target_of_typez0Join target %s does not refer to a mapped entityzexplicit from clause z4 does not match left side of relationship attribute )r"   r&  r   PropComparatorrk  r  r  r  r-  r.  r  r?  r  AttributeError_parententityr   QueryableAttributer  _already_joined_edgesr   _join_left_to_right)r   argsentities_collectionrightonclausefrom_flagsr  r  of_typeerrleftrX  s                r   r  zORMSelectCompileState._join/  s>   -1)E8UEI&G=DENE#"8,%!:!:;' 44= 
 !5#5#55**>:**75(3K ..: 
 G(J$=$=> "(J== ' ( 1 1'$)LLE  --((!(J,I,IJ#H %*d.H.HH$T)!..22>4H#$ %88 !& 2 2 6 6~u M (	  " #"t $$#i .2V  . '"("6"6!027!8# $'''s   -G			G0G++G0c           	     N   ||J | j                  ||||      \  }}}	n| j                  ||      \  }}	||u rt        j                  d|d|d      | j	                  ||||      \  }
}}|
j
                  s| j                  |
      }nd}|J| j                  |   }| j                  d| t        ||||||      gz   | j                  |dz   d z   | _        y|	%t        ||	   t              sJ ||	   j                  }n|}| j                  t        ||
||||      gz   | _        y)zgiven raw "left", "right", "onclause" parameters consumed from
        a particular key within _join(), add a real ORMJoin object to
        our _from_obj list (or augment an existing one)

        NzCan't construct a join from z to z, they are the same entityr   )r  r  _extra_criteriar   )"_join_determine_implicit_left_side_join_place_explicit_left_siderk  r   _join_check_and_adapt_right_sider  _get_extra_criteriar  r   r&  r'  r   )r   r  r  r  r  rX  	outerjoinr  replace_from_obj_indexuse_entity_indexr_infoextra_criterialeft_clauses                r   r  z)ORMSelectCompileState._join_left_to_right  s     < <<
 77#T5(	&  334GN&  5=,,)-u6  #'"G"G%4#
x ##!55f=NN!- ++,BCK !!"9#9:#  )!(6	
 ##$:Q$>$@AB    + "'(89=   22BCNN" $ 1 1%$2	5 	!Dr   c                z   t        |      }dx}}| j                  rt        j                  | j                  |j                  |      }t        |      dk(  r|d   }| j                  |   }nMt        |      dkD  rt        j                  d      t        j                  d|d      |ri }	t        |      D ]W  \  }
}|j                  }|t        |      }||u r%t        |t              r|
|f|	|j                  <   Gd|f|	|j                  <   Y t        |	j                               }t        j                  ||j                  |      }t        |      dk(  r|	||d         \  }}nQt        |      dkD  rt        j                  d      t        j                  d|d      t        j                  d      |||fS )zWhen join conditions don't express the left side explicitly,
        determine if an existing FROM or entity in this query
        can serve as the left hand side.

        Nr   r   a  Can't determine which FROM clause to join from, there are multiple FROMS which can join to this entity. Please use the .select_from() method to establish an explicit left side, as well as providing an explicit ON clause if not present already to help resolve the ambiguity.zDon't know how to join to z. Please use the .select_from() method to establish an explicit left side, as well as providing an explicit ON clause if not present already to help resolve the ambiguity.zgNo entities to join from; please use select_from() to establish the left entity/selectable of this join)r"   r  rJ  find_left_clause_to_join_fromr   r  rk  r  	enumerateentity_zero_or_selectabler&  r'  r  keys)r   r  r  r  r  r  r  r  indexes	potentialentity_indexr(  r  ent_infoall_clausess                  r   r  z8ORMSelectCompileState._join_determine_implicit_left_side  s   & 488!1 <<!!6#4#4hG 7|q )0&(()?@W!005  00
 9>	@  ! I%./B%C!c66>"6?v%
 c=11=v0FIcnn-6:F^Ih112 &D  y~~/0K<<V..G 7|q )2;wqz3J)K& $W!005  00
 9>	@  ,,1  +-===r   c                   dx}}t        |      }| j                  rTt        j                  | j                  |j                        }t        |      dkD  rt        j                  d      |r|d   }|J|rHt        |d      r<t        |      D ].  \  }}t        |t              s|j                  |      s)|} ||fS  ||fS )zWhen join conditions express a left side explicitly, determine
        where in our existing list of FROM clauses we should join towards,
        or if we need to make a new join, and if so is it from one of our
        existing entities.

        Nr   zrCan't identify which entity in which to assign the left side of this join.   Please use a more specific ON clause.r   r  )r"   r  rJ  #find_left_clause_that_matches_givenr   r  rk  r  r-  r  r&  r'  corresponds_to)	r   r  r  r  r  l_infor  idxr(  s	            r   r  z4ORMSelectCompileState._join_place_explicit_left_side[  s    2 598!1BB!!6#4#4G 7|a00!  )0& #*#)%&9:S c=1c6H6H6N'*$%'777 ; &'777r   c           	        t        |      }t        |      }d}t        |dd      }|r|j                  s$t        |j                  t
        j                        re| j                  xs |j                  gD ]G  }	t        j                  |j                  |	      s$t        j                  |	|j                        sEd} n |r:|j                  |j                  u r"t        j                  d|j                  z        t        |dd      |j                  t        |dd      }}
}|r8|r6|j                  |j                        st        j                  d|d|      t        |d      r| xj                   |fz  c_        d}|j"                  r|r|j                  }|
j$                  r| j'                         }| ||d      }n|r|
j)                  |j                        s:t        j                  d	|
j*                  d
|j                  j*                  d      t        |
t
        j,                        r&t/        j0                  t2        j4                  |
      }
d}t7        ||
      }t9        j:                  d|z  dd       |xr | xr |}|s+|r)t7        |d      }d}t9        j<                  d|z  d       |rF|sJ t?        t@        jB                  t        |      |jD                        }| jG                  ||       n[|j"                  sO|sM|jH                  rA| jG                  |t?        t@        jJ                  ||j                  |jD                               t        |t
        jL                        r| j'                         }|r	 ||d      }|r#| xjN                  |||jP                  ffz  c_'        t        |      ||fS )ztransform the "right" side of the join as well as the onclause
        according to polymorphic mapping translations, aliasing on the query
        or on the join, special cases where the right and left side have
        overlapping tables.

        Fr  NTz*Can't join table/selectable '%s' to itselfr,  zJoin target z9 does not correspond to the right side of join condition zSelectable 'z' is not derived from ''zAn alias is being generated automatically against joined entity %s for raw clauseelement, which is deprecated and will be removed in a later release. Use the aliased() construct explicitly, see the linked example.z1.4xaj1)code)flatzAn alias is being generated automatically against joined entity %s due to overlapping tables.  This is a legacy pattern which may be deprecated in a later release.  Use the aliased(<entity>, flat=True) construct explicitly, see the linked example.xaj2r,  )r   r+  ))r"   r  with_polymorphicr&  r-  r&   Joinr  r   rJ  selectables_overlaprk  r  common_parentr  r-  r  is_clause_element_is_lateralr  is_derived_fromdescriptionrP   r%   r  r'   FromClauseRoler   r$   warn_deprecatedwarnr   r    DEPRECATED_JOIN_ADAPT_RIGHT_SIDEr1  r/  #_has_aliased_polymorphic_fromclause#WITH_POLYMORPHIC_ADAPTER_RIGHT_JOINClauseElementr  r  )r   r  r  r  rX  r  r  overlapright_mapperr3  right_selectableright_is_aliasedneed_adapterr  aliased_entityr8  s                   r   r  z6ORMSelectCompileState._join_check_and_adapt_right_side  s    vx6 )),99:??K --D&2C2C1DD//%%x22f// #G E v((F,=,==,,<##$  FHd+F.6 )9&  ..t{{;,,9>J  68$F9, ###{{++ #'";";"=". ,E48E (77 33 !44 -88(;;GG  .
0E0EF'0'7'7,,.>($ $(L %\3CD$$D
 ## 	 &J.>*>J7 !T2ELII@
 COO    < @@(<<G 33L'J(($@@ 33#GG +66 , @ @	 h
 8 89"779O*8T: &&D%+B*DD&u~uh..r   c                   | j                   j                  | j                   j                  | j                  | j                  | j                   j
                  | j                   j                  | j                  xs d | j                   j                  | j                   j                  | j                   j                  | j                   j                  dS )N)ri  rj  r   r  rm  rn  r  rk  rl  ro  rp  )r   r^  r_  r   r  rd  re  r  r`  ra  rb  rc  r   s    r   rM  z"ORMSelectCompileState._select_argsZ	  s     !11??!22AA++--77--77- 11??%%;; $ 5 5 G G%%<<
 	
r   c                    | j                   }|j                  d      d uxsO |j                  d      d uxs: |j                  dd      xs& |j                  dd      xs |j                  dd      S )Nri  rj  r   Fr  r   r  )rM  r   )r   kwargss     r   r	  z-ORMSelectCompileState._should_nest_selectablen	  sv    ""JJ~&d2 -zz/*$6-zz*e,- zz-,- zz*e,	
r   c                     dj                   f j                  v r.t         fd j                  dj                   f   D              S y)Nadditional_entity_criteriac              3     K   | ]@  }|j                   s|j                  u r$|j                        r|j                         B y wr   )include_aliasesr  _should_include_resolve_where_criteria)r   aer2  r   s     r   r   z<ORMSelectCompileState._get_extra_criteria.<locals>.<genexpr>~	  sL      B &&"))x*?&&t, **84s   AA	r   )r  r   r   )r   r2  s   ``r   r  z)ORMSelectCompileState._get_extra_criteriay	  sZ    (OO
 ##$  0018??C   r   c                   | j                   D ]  }|j                  j                  dd      }|s"|j                  j                  d|j                  f| j
                  v sS|| j                  vsb||j                  r|j                  ndf| j                  |<    t        | j                  j                               }|D ]  \  }}|| j                  v r|j                  j                  }| j                  j                  rg }n| j                  |      }|||fz  }| j                         }|D ]N  }|r|j!                  |      }|r!t#        j$                  |ddi      } ||d      }| xj&                  |fz  c_        P  y)a  Apply extra criteria filtering.

        For all distinct single-table-inheritance mappers represented in
        the columns clause of this query, as well as the "select from entity",
        add criterion to the WHERE
        clause of the given QueryContext such that only the appropriate
        subtypes are selected from the total results.

        Additionally, add WHERE criteria originating from LoaderCriteriaOptions
        associated with the global context.

        r   Nr  r{  TF)r  r  r   r  _single_table_criterionr   rz  r,  r/  rw  rA  r  r   r   r  r  traverserJ  _deep_annotater  )	r   
fromclauser2  rt  r8  single_critr  r  r  s	            r   r  z0ORMSelectCompileState._adjust_for_extra_criteria	  s|    ++J!..22>4HH OO;;G4hooF--. D$@$@@ )1)B)BH%%:,,X6 ," T1188:;!'Hg4..."//AAK##66-/*-1-E-Eh-O*&*{n<*"779O2"++D1D"#224,9MND*47D$$/$ 3 "(r   )
r   r   r   r   r   r=  r   r   r   r  r   )0rq   rr   rs   r  r   r  r  r>  r  r  r  r  r  r  r  r  r   r   r  r  r<  r  r  r"  r&  r  r*  r  r9  r<  r?  r1  r
  r  rJ  ru  r  r  r  r  r  r  r  r?  rM  r	  r  r  r   r   r   r  r  -  s   $O #!IO`/` 	`
 (` ` 
` `D
5KZ  2 @ @
 8 8 
 
   "+8(0#"Yv(KZ/$.`]~aFh>T@8D{/z 
 
& 
 
 70r   r  c                j   |t         j                  | |      }|}|j                  D cg c]  }||j                  f c}D cg c][  \  }}|j                  |j
                  t        |dd      |j                  |j                  |j                  st        |dd       nd d] }}}|S c c}w c c}}w )N)r  r,  Fr  )r  typealiasedexprr  )	r  r<  r   r7  _label_namer  r  r  r  )query_or_select_stmtrW   r  r  _entr(  insp_entds           r   r  r  	  s    
 -II  J 
 C 25
1>T4##$
	
MC OOHHx);UCHH ??. 22 (D1 	

  	" H	
	s   B*A B/c                    | }|j                   r|j                  }||S |j                  r7d|j                  d   j                  v r|j                  d   j                  d   S t	        |      S )Nr   r   )r  _last_joined_entityr  r  _entity_from_pre_ent_zero)query_or_augmented_selectr   r  s      r   _legacy_filter_by_entity_zeror  	  sl     %D"66*&&~~.DNN1,=,J,JJ~~a --n==$T**r   c                    | }|j                   sy |j                   d   }d|j                  v r|j                  d   S t        |t              r|j                  S d|j                  v r|j                  d   S |S )Nr   r   bundle)ru  r  r&  r   r  )r  r   r(  s      r   r  r  	  s}     %D


A
C)))//	C-	.zz	S%%	%))
r   c                l    | sy | d   \  }}}}t        |t        j                        r|j                  S |S )N)r&  r   r  r  )r  r7  targetr  r  r  s         r   r  r  
  sA     '22$VXue%% }}r   c                      e Zd ZU dZdZded<   dZdZdZded<   ded	<   d
ed<   ded<   ddZ		 	 	 	 	 	 ddZ
d Zed        Zy)rs  z:represent an entity column returned within a Query result.r   r   supports_single_entityFzOptional[str]r  z!Union[Type[Any], TypeEngine[Any]]r  z.Union[_InternalEntityType, ColumnElement[Any]]r  zOptional[_InternalEntityType]r7  c                    t               r   r   r   rW   s     r   r{  z _QueryEntity.setup_compile_state%
  r   r   c                    t               r   r   r   rW   r8  s      r   r  z._QueryEntity.setup_dml_returning_compile_state(
  s    
 "##r   c                    t               r   r   )r   r   r   s      r   row_processorz_QueryEntity.row_processor/
  r   r   c                   t        |      D ]4  \  }}|j                  r7|j                  r| j                  ||j                  ||       >|j                  }|j
                  r|j                  rAd|j                  v rt        ||||       t        j                  ||j                  |||       |j                  j                  dd      rt        ||||       |j                  r$t        j                  ||j                  |||       t        j                  ||g|||       |j                  s(t        |||       7 |S )Nr   r  F)r  _is_lambda_element_is_sequencert  	_resolvedr  r  r  r'  _ColumnEntity_for_columns_select_iterabler   _BundleEntity_is_clause_list	is_bundle)r   rW   r  r  rg  r  r  s          r   rt  z_QueryEntity.to_compile_state2
  sQ    %X.KC((&&((%((++	 #--F''''%)<)<<%)"//	 &22)"33// **..x?%)"//	  // &22)"33// &22)#H// !!mV5HIs /v #"r   N)rW   rn   r   NonerW   rn   r8  z Optional[_DMLReturningColFilter]r   r  )rq   rr   rs   r   r   r   _non_hashable_value_null_column_typeuse_id_for_hashr{  r  r  r   rt  r   r   r   rs  rs  
  sx    DI  O
++
88..$$&$ 2$ 
	$$ ># >#r   rs  c                      e Zd ZU dZdZded<   ded<   ded<   ded	<   d
ed<   ded<   d ZdZdZdZ	e
d        Ze
d        Zd Zd Zd Z	 	 	 	 	 	 ddZd Zy)r'  z mapper/class/AliasedClass entity)
r  r  r7  r,  path_extra_entitiesr  r6  r   _polymorphic_discriminatorr?   r  zMapper[Any]r  r7  r   r,  r   r  strr  c                   |j                  |        |r!|j                  | |_        d|_        d|_        |j                  d   }|j
                   |x}| _        |j                  }|| _        |j                  x| _	        }| j                  f| _
        |j                  r|j                  | _        n|j                  j                  | _        |j                  | _        |j                   | _        |j$                  | _        |j&                  | _        |j*                  | _        |j.                  r|j1                  || j$                         y y )NTr   )r   r   r>  r  r  _post_inspectr7  r  r  r  r  r,  r  r  class_rq   r   r  r   with_polymorphic_mappersr6  polymorphic_onr	   _should_select_with_poly_adapterr4  )r   rW   r  r  rg  r2  r  s          r   r   z_MapperEntity.__init__
  s    	""4(,,404-15M..2M+$$^4&,,4#	'.f $		|$$'}}D%}}55D ( 9 9++	"--)1)J)J&*2*A*A'22::$// 3r   Tc                .    | j                   j                  S r   )r  r  r   s    r   r  z_MapperEntity.type
  s    {{!!!r   c                    | j                   S r   )r7  r   s    r   r  z'_MapperEntity.entity_zero_or_selectable
  s    r   c                .    t        | j                  |      S r   )r   r7  r   r  s     r   r  z_MapperEntity.corresponds_to
  s    %d&6&6??r   c                *   d }| j                   s3|j                  r=|j                  j                  | j                  d       }n| j                  j
                  }|r-|j                  r|j                  |j                        }|S |}|S |j                  }|S r   )r,  r   r   r  r7  r/  r  wrap)r   rW   r8  rets       r   _get_entity_clausesz!_MapperEntity._get_entity_clauses
  s    $$22'==AAKK &&//G,,ll=#@#@A 
	  
  //C
r   c                   |j                   }| j                  |      }|j                  r|r|j                  |j                        }n|s|j                  }|j                  | u r#|j
                  j                  }|j                  }nd x}}t        j                  | | j                  ||| j                  |||| j                  	      }|| j                  | j                  fS )N)only_load_propsrc   polymorphic_discriminator)rW   r  r  r  r   r   r   rc   r   _instance_processorr  r  r	  r  r  )r   r   r   rW   r8  r  rc   	_instances           r   r  z_MapperEntity.row_processor
  s    --**=9//Gll=#G#GHG#::G((D0+;;LLO#11M.22Om//KKII+'&*&E&E

	 $**D,@,@@@r   c                    t        j                  || j                  | | j                  ||j                  | j
                  |j                  j                  | j                  	       y )Nr  r  r  )	r   _setup_entity_queryr  r  r   r6  r   r   r	  r  s      r   r  z/_MapperEntity.setup_dml_returning_compile_state
  sS    
 	##KKII))!;;)99JJ&*&E&E
	
r   c                   | j                  |      }| j                  j                  }|d| j                  f|j                  v r5| j                  }||j
                  r|j                  nd f|j                  |<   t        j                  || j                  | | j                  ||j                  | j                  |j                  j                  | j                  	       |j                   j#                  | j$                         y )Nr  r  )r  r  r  r   r7  r,  r/  rz  r   r   r  r   r6  r   r   r	  rx  r   r   )r   rW   r8  single_table_critr2  s        r   r{  z!_MapperEntity.setup_compile_state  s    **=9 KK??),dkk:../ ''H%-%>%>!!D?M11(;
 	##KKII))!;;)99JJ&*&E&E
	
 	,,33DOODr   Nr  )rq   rr   rs   r   r   r   r   r  r  r  r?  r  r  r  r  r  r  r{  r   r   r   r'  r'  t
  s    *I $$
#J "O" "    @*A:
&
 2
 
	
"Er   r'  c                      e Zd ZU dZdZded<   ded<   ded<   d	ed
<   ded<   ded<   	 	 ddZed        Zed        Z	d Z
ed        Zd Z	 	 	 	 	 	 ddZd Zy)r  r   )r  r  r  r  r   r  r   r   r   r  z	Type[Any]r  r
  r  r   r  r  Nc           	        d|_         |j                  d   }|r|j                  j                  |        n|j                  |        t	        |t
        j                  t        j                  f      r|j                         }n|}|x| _
        | _        t        |      | _        |j                  | _        g | _        |rm|j                  D ]^  }d|j                  v rt!        |||||        "t	        |t"              rt!        |||||        Ct$        j'                  ||g|d ||        ` | j                  j(                  | _        y )NTr  parent_bundle)r  r  r   r   r&  r   r  r   r  r!  r  r  r  r  r  exprsr  r   _ORMColumnEntityr  single_entityr  )r   rW   r  r  rg  setup_entitiesr&  r  s           r   r   z_BundleEntity.__init__3  s6    +/'  *##**40&&t,:00*2K2KL
 ,,.FF"((diL	!;;t000!%++&*  f-!%++&* %11%++&* 2 % %6 '+kk&?&?#r   c                8    | j                   }||j                  S y r   )r7  r  )r   r  s     r   r  z_BundleEntity.mappern  s       <<r   c                J    | j                   D ]  }|j                  }||c S  y r   )r   r7  r   r(  r  s      r   r7  z_BundleEntity.entity_zerov  s)    >>COOE  "
 r   c                     yr  r   r  s     r   r  z_BundleEntity.corresponds_to  s     r   c                J    | j                   D ]  }|j                  }||c S  y r   )r   r  r-  s      r   r  z'_BundleEntity.entity_zero_or_selectable  s+    >>C11E  "
 r   c                H    | j                   D ]  }|j                  |        y r   )r   r{  )r   rW   r(  s      r   r{  z!_BundleEntity.setup_compile_state  s    >>C##M2 "r   c                $    | j                  |      S r   r{  r  s      r   r  z/_BundleEntity.setup_dml_returning_compile_state      
 ''66r   c           	         t        | j                  D cg c]  }|j                  ||       c} \  }}}| j                  j	                  |j
                  ||      }|| j                  | j                  fS c c}w r   )r   r   r  r  create_row_processorrX   r  r  )r   r   r   r(  procslabelsextraprocs           r   r  z_BundleEntity.row_processor  ss    "<@NNKNSc0NK 
vu {{//ufMT%%t';';;; Ls   A5r  r  )rq   rr   rs   r  r   r   r   r?  r  r7  r  r  r{  r  r  r   r   r   r  r     s    OI "!N
O  
L 9@v    
  37&7 27 
	7<r   r  c                  Z    e Zd ZdZe	 dd       Zed        Zed        Zed        Z	d Z
y)	r  )_fetch_column_row_processorraw_column_indextranslate_raw_columnNc           
         |D ]u  }|j                   }d|v r|d   }	nt        j                  |d      }	|	r4d|j                   v rt        ||||	|||       Rt	        ||||	|||       et        ||||||       w y )Nr   ri   r%  )r  rJ  extract_first_column_annotation_IdentityTokenEntityr(  _RawColumnEntity)
r   rW   rB  r  r=  rg  r&  columnr   _entitys
             r   r  z_ColumnEntity._for_columns  s     F --K,%n5"BBN #v':'::(%+(+&3 %%+(+&3 !!'$'"/? r   c                .    | j                   j                  S r   )rC  r  r   s    r   r  z_ColumnEntity.type  s    {{r   c                D    | j                   j                  j                   S r   )rC  r  hashabler   s    r   r  z!_ColumnEntity._non_hashable_value  s    ;;##,,,,r   c                B    | j                   j                  j                  S r   )rC  r  _isnullr   s    r   r  z_ColumnEntity._null_column_type  s    {{'''r   c                   |j                   }| j                  H| j                  \  }}}| j                  r'||j                  j                  | j
                     fz  }|||fS | j                  | j                  }nM| j                  }|j                  r|j                  j                  |   }|j                  r|j                         }|j                  r|j                  j                  |   }|j                  |      }|| j                  | j                  f}|| _        | j                  r@| j                  |j                  j                  | j
                     fz   }|| j                  |fS |S r   )rW   r<  r>  rX   ru  r=  r;  rC  r  rB  r  _deannotater  _getterr  r  )	r   r   r   rW   getter
label_nameextra_entitiesrC  r  s	            r   r  z_ColumnEntity.row_processor  sg   -- *151D1D.FJ((MM..t/D/DE#  :~55 )''F [[F ,,&66>>vF""  ++-//"99AA&IF'd&&(<(<<!$$!11**4+@+@A5 N 4++^;;Jr   r   )rq   rr   rs   r   r   r  r?  r  r  r  r  r   r   r   r  r    sd    I  / /b     - - ( (0r   r  c                  F    e Zd ZdZdZdZdZ	 ddZd Z	 	 	 	 	 	 d	dZ	d Z
y)
rB  NF)r  rC  r  r  r  c                &   || _         || _        |d u| _        |j                  r|xj                  ddiz  c_        |r|j
                  rd | _        n*|r|j                  | _        n|j                  |      | _        |r|j                  j                  |        n|j                  |        || _        | j                  j                  r| j                  j                  d   nd | _        | j                   | j                  f| _        d x| _        | _        y )Nr   Tr   )r  r=  r>  r   r   _is_text_clauser  
_proxy_keyr   r   r   rC  r  r  r  r;  r<  )r   rW   rC  r  r=  rg  r&  s          r   r   z_RawColumnEntity.__init__(  s     	 0$4D$@!??))j$-??)"f&<&<#D#)#4#4 #0#B#B6#J ##**40&&t,,0KK,E,EDKK%%a(4 	& !%		4;;7377T0r   c                     yr  r   r  s     r   r  z_RawColumnEntity.corresponds_toL  s    r   c                $    | j                  |      S r   r2  r  s      r   r  z2_RawColumnEntity.setup_dml_returning_compile_stateO  r3  r   c                   |j                         }|r || j                  d      }|y | j                  }|j                  r|j                         }|j                  j                  |       |j                  j                  |       || _        y r  )	r  rC  r  rK  r   r   r   r   r;  )r   rW   r  rC  s       r   r{  z$_RawColumnEntity.setup_compile_stateV  s}    '<<>$T[[%8F~[[F '')F$$((0%%,,V4#r   r   r  )rq   rr   rs   r7  r  r  r   r   r  r  r{  r   r   r   rB  rB    sO    KF"I "8H7&7 27 
	7$r   rB  c                  B    e Zd ZdZdZdZ	 d	dZd Z	 	 	 	 	 	 d
dZd Z	y)r(  zColumn/expression based entity.F)r  r  rC  r  r  r7  r  Nc                   |j                   }|}	 |j                  dd       }
 |j                  d|	      }|
r#t        |j                  |
      | _        d| _        n|| _        |d u| _        || _        |r1|r|
r|
n|j                  | _        n |j                  ||
      | _        nd | _        |	j                   |	x| _        x| _        }|	j                  x| _        }|r|j                  j                  |        n|j                  |        d|_        || _        d x| _        | _        | j                  | j"                  f| _        |j*                  r|j-                  ||j.                         y y )N	proxy_keyproxy_ownerF)r  T)r  r   r  r  r  r>  r=  rS  r  r   r  r7  r  r  r   r   r  rC  r;  r<  r  r  r4  r   )r   rW   rC  r  r   r=  rg  r&  r   rD  orm_keyrZ  r  r  s                 r   r   z_ORMColumnEntity.__init__x  se    )) "+//+t4%koomW= 2 2G<DI(-D% DI(8(DD% 0.576;L;L #0#B#BW $C $   $DDKKK49E&~~-f##**40&&t,*.'377T0 $		4;;722::u'' 3r   c                    t        |      r|| j                  u S t        | j                         xr |j                  | j                        S r   )r   r7  r  r  s     r   r  z_ORMColumnEntity.corresponds_to  sO    V$T----(    9&&t'7'789r   c                    | j                   x| _        }|r	 ||d      }|7|j                  j                  |       |j                  j                  |       y y r  )rC  r;  r   r   r   r   )r   rW   r8  rC  s       r   r  z2_ORMColumnEntity.setup_dml_returning_compile_state  sW     '+kk1VVU+F((,,V4))008 r   c                   |j                         }|r5 || j                  d      }|,|j                  sJ | j                  | _        y | j                  }| j                  }| j
                  j                  }|d| j
                  f|j                  v r)||j                  r|j                  nd f|j                  |<   |j                  r|j                  s|j                         }t        | j                  j                        j!                  |j"                  j                        r%|j$                  j'                  |j"                         |j(                  j+                  |       |j,                  j'                  |       || _        y )NFr  )r  rC  r   r;  r7  r  r  r   r,  r/  rz  r  _expression_labelrK  rw  r  intersectionr   rx  r   r   r   r   )r   rW   r  rC  r  r"  s         r   r{  z$_ORMColumnEntity.setup_compile_state  sO   '<<>$T[[%8F~$5555%)[["[[F   KK??),dkk:../ "'"8"8d<M11%8
 v'?'? '')F t{{(()66**
 00778H8HI$$((0%%,,V4#r   r   r  )
rq   rr   rs   r   r  r   r   r  r  r{  r   r   r   r(  r(  i  sI    )"I$ AF99&9 29 
	9)$r   r(  c                      e Zd ZdZd Zd Zy)rA  Fc                     y r   r   r  s     r   r{  z(_IdentityTokenEntity.setup_compile_state  s    r   c                @    fd}|| j                   | j                  fS )Nc                0    j                   j                  S r   )r[   ry   )rowr   s    r   rM  z2_IdentityTokenEntity.row_processor.<locals>.getter  s    ''777r   )r  r  )r   r   r   rM  s    `  r   r  z"_IdentityTokenEntity.row_processor  s#    	8 t'')=)===r   N)rq   rr   rs   r>  r{  r  r   r   r   rA  rA    s     >r   rA  r  )r  z#Union[Query, Select, FromStatement]rW   zOptional[ORMSelectCompileState]r  r   r   zList[ORMColumnDescription])r  zUnion[Query[Any], Select[Any]]r   "Optional[_InternalEntityType[Any]]r   )r  zTuple[_SetupJoinsElement, ...]r7  rf  r   z=Optional[Union[_InternalEntityType[Any], _JoinTargetElement]])
__future__r   r  typingr   r   r   r   r   r	   r
   r   r   r   r   r    r   r   r   baser   r   r   path_registryr   r$   r   r   r   r   r   r   r   r    rk  r!   r"   r#   r%   r&   r'   rJ  r(   sql._typingr)   r*   r+   r,   sql.baser-   r.   r/   r0   r1   r2   sql.dmlr3   sql.elementsr4   r5   sql.selectabler6   r7   r8   r9   r:   r;   r<   r=   sql.visitorsr>   _typingr?   r@   rA   r  rB   rX   rC   r^   rD   rE   enginerF   engine.interfacesrG   rH   sql.compilerrI   rJ   rK   rL   rM   rN   rO   rP   sql.type_apirQ   rR   rootr   r  r   r  rU   r  r   r   rn   rA  rR  r[  
plugin_forr`  ra  r  r  r  r  r  r  rs  r'  r  r  rB  r(  rA  r   r   r   <module>ry     sS   #                  # , , ' (  !    %         "     * ( ( ' # ! !    ) % 0 : - ; # - ( - ,,3!' <4**,3936+)T"" d  " *@@ q. q.h ,++'. 
i$l i$X*#: *Zf
- f
R	$$ $$N>'= >&)? 0 !!%)=>wD? wD ?wDtuPNJ0@0E uPp !!%):;	 "5	 <	 !!%2R0O[ R0 3R0n, 6:=2   	<+=+'+='* 7;/3 C$\# \#~iEL iEX<L <DvL vrK$} K$\R$} R$j
>+ 
>r   