
    [h                   F   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jd        Ze ejf                    ZgeCjh        Zh G dS dT          Zi ejf        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        j4        q                    dcdd           G de dfem                      Zr G dg dhe;e6eEe-                   Zse&j        j4        q                    dcdi           G dj dkele>                      Zte&j        j4        q                    dcdl           G dm dnemeD                      Zu	 	 dddxZvdd|Zwdd}Zx	 dddZy G d d          Zz G d dez          Z{ G d dez          Z| G d dez          Z} G d de}          Z~ G d de}          Z G d de          ZdS )    )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                  d    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d
S )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dS )!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     e/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/orm/context.pydefault_load_optionsrp      sS        #"!

  $(! r   r   Nr/   	statement2Union[Select[Any], FromStatement[Any], UpdateBase]rY   rZ   rG   r^   rE   r[   QUnion[Type[QueryContext.default_load_options], QueryContext.default_load_options]r]   $Optional[OrmExecuteOptionsParameter]r\   Optional[_BindArguments]c	                $    | _         |pt           _        |pt           _        | _        | _        | _        | _        d _        d _	        | _
        |j         _        |j        j        }	|j        }
t           fdt!          |	|
          D                        _        t%          |j                   _        |j         _        |j         _        |j         _        |j         _        |j         _        |j         _        |j          _!        d S )NFc              3  X   K   | ]$\  }}|j         |                    |          V  %d S N)propagate_to_loaders'_adapt_cached_option_to_uncached_option).0optuncached_optselfs      r   	<genexpr>z(QueryContext.__init__.<locals>.<genexpr>   sT       /
 /
!\'/
77lKK/
 /
 /
 /
 /
 /
r   )"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   r   rY   rZ   r^   r[   r]   r\   cached_optionsuncached_optionss   `          r   __init__zQueryContext.__init__   s'   $ )!2!Ak,;*
 "3).&(-%!-!G&7E,: */ /
 /
 /
 /
%(9I%J%J/
 /
 /
 *
 *
& }788%0!-!@!-!@)8)8%0*:r   returnc                    | j         p| S r   )rV   r   s    r   _get_top_level_contextz#QueryContext._get_top_level_context   s    %--r   )NN)rW   r/   r   r   rY   r   rZ   rG   r^   rE   r[   r   r]   r   r\   r   )r   rU   )	rq   rr   rs   	__slots____annotations__r2   r   r   r   r   r   r   rU   rU   f   s         I6 JJJ1111""""! ! ! ! !w ! ! !: CG37!@; @; @; @; @;D. . . . . .r   rU    _result_disable_adapt_to_contextTc                  ~     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 d S |j        x| _        }|r/d|d<   |r&|j        D ]}|j        r|                    |            d S |                    dd          rd S |j        d         }	 |d         }|j        D ]%}|j        r|j        r|                    |            &n# t          $ r Y nw xY wd|d<   d S )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OOOF*2*EED"R 
	!%B~, 8$2 8 8C. 811$777FVVNE** 	F.#	4#L1M %2 4 4( 4S-D 4--d3334  	 	 	D	 ">s   >B4 4
C Cr   r0   r   rI   kwr   r   r/   c                :     t                      j        ||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   r   	__class__s       r   r   z,AbstractORMCompileState.create_for_statement	  s&    " ,uww+IxFF2F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   rF   c                j    |                     ||pi |          }|                     ||||||          S )N)r]   )executeorm_setup_cursor_result)r   r^   r   rZ   r]   r\   connresults           r   orm_execute_statementz-AbstractORMCompileState.orm_execute_statement(  sT     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                  >    e Zd ZdZed             Zed             ZdS )AutoflushOnlyORMCompileStatez>ORM compile state that is a passthrough, except for autoflush.c                    t           j                            ddh||j                  \  }}|s|j        r|                                 ||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  sm     -DD" (
 
	
  	! 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  sN        H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
d8d&            Ze
d9d*            Zd+ Ze
d:d/            Ze
d0             Ze
d1             Ze
d2             Zed3             Zd4 Zd5 Ze
d6             Zd7S );rn   c                      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dS )'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E0;<*56/@A"$5$@A!#4#?@!2!?@ 1 <=!#4#?@#%6%AB*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   r0   r   rI   r   r   r   c                L     | 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  sH     's&/;;
!'
 
 	
 
 	
r   r   r   Optional[SQLCompiler]c                   t                      r   r   )r   r   r   r   r   s        r   r   z#ORMCompileState._create_orm_context  s     "###r   c                t    | j         }||vr,|                    |           |                    |           d S d S r   )r   addappend)r   objcol_collectiondedupes       r   _append_dedupe_col_collectionz-ORMCompileState._append_dedupe_col_collection  sF    $fJJsOOO!!#&&&&& r   label_styler;   legacyc                :    |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   r  r  r  s       r   r  z)ORMCompileState._column_naming_convention  s9      
	F/ / / / K8E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                            dh d||j                  \  }}d|v r-|d         }|j        j                            |j        |          }|st          }n|                    t                    }|j	        r|                    d|j	        i          }t          |j        dd           rKt          |j        j                  dk    r.|                    dd          |                    d d	d
          }||d<   	 |j        d         }	|	r
|	j        |d<   n# t"          $ r J d            w xY w|s|j        r|                                 ||fS )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mapperFz0statement 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! ! ! 	P 6 1 7 78N O O " 	 1 7 7l56! !
 I.FF	I.<==BB!%%&6==I "''*.2-    $-x 	A&78HIN  A+9+@x(	  	M 	M 	MLLLLL	M  	! 7 	!   +++s   D& &D;c           
         |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     #N)2@ ),,"L$E
 
 (1 	M#	
 	
  666r   c                $    d | j         D             S )zreturn all _MapperEntity objects in the lead entities collection.

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

        c                <    g | ]}t          |t                    |S r   
isinstance_MapperEntityr   ents     r   
<listcomp>z9ORMCompileState._lead_mapper_entities.<locals>.<listcomp>r  s7     
 
 
Z]-K-K

 
 
r   )r   r   s    r   _lead_mapper_entitiesz%ORMCompileState._lead_mapper_entitiesj  s%    
 
>
 
 
 	
r   c           
         |j         se|j        j        | j        vrT|j                                        D ]<}|                     |t          t          j        ||j	        |                     9dS dS dS )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-. . o5577 	 	77'@$&$:#-	     	 	. .	 	r   c                    |j         p|gD ]2}|| j        |<   |                                D ]}|| j        |j        <   3d S r   )_with_polymorphic_mappersr   r6  local_table)r   r  adapterm2ms        r   r7  z2ORMCompileState._mapper_loads_polymorphically_with  sk    2>vh 	D 	DB-4D&r*'')) D D<C*1=99D	D 	D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   r   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   propertyr1  r<  r7  rD  r   r   r   rn   rn   x  sF        # # # # #"2 # # #J %%%%AAAAHHHH!!!!@@@@    ,+++    ////----////++++    "0L//// $ $ $ 
 
 
 [
 $ $ $ [$' ' ' F F F [F / / [/ W, W, [W,r "7 "7 ["7H 	
 	
 X	
  :D D D 
 
 [
 
 
r   rn   c                  (    e Zd ZdZdZd Zd Zd ZdS )_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| _        | _        d S r   )r?  r  r$   WeakPopulateDictadapt_check_presentrI  )r   target_mapperimmediate_dml_mappers      r   r   z_DMLReturningColFilter.__init__  sY     ,)'34 4 /DKK (DK&*&;$'
 '
 	
t|||r   c                j    t          j        |          D ]}|                     |          }||c S d S r   )sql_util_find_columnsrM  )r   r  	as_filterccc2s        r   __call__z_DMLReturningColFilter.__call__  sI    (-- 	 	B))"--B~


  4r   c                    t                      r   r   )r   r  s     r   rM  z*_DMLReturningColFilter.adapt_check_present  r   r   N)rq   rr   rs   r   r   r   rV  rM  r   r   r   rH  rH    sR          5I
 
 
  $ $ $ $ $r   rH  c                      e Zd ZdZd ZdS ) _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                            |d           }|d S |j        j                            |          S r   )r  _columntopropertyr   r?  ccorresponding_columnr   r  r  props       r   rM  z4_DMLBulkInsertReturningColFilter.adapt_check_present  sE    '++C66<4!#88===r   Nrq   rr   rs   r   rM  r   r   r   rY  rY    s-         > > > > >r   rY  c                      e Zd ZdZd ZdS )"_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                            |d           }||j        j                            |          S |S r   )r  r[  r   r5  r\  r]  r^  s       r   rM  z6_DMLUpdateDeleteReturningColFilter.adapt_check_present  sJ    '++C66 ,.CCCHHH 
r   Nr`  r   r   r   rb  rb    s-         
 
 
 
 
r   rb  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dS )ORMFromStatementCompileStateNFFromStatementstatement_containerz)Union[SelectBase, TextClause, UpdateBase]requested_statementzOptional[_DMLTableElement]	dml_tabler   r   r   r   r   r   r   r   r   c                  |}t          |t                    sJ ||j        rt          j        d          |                     |           }d |_        |j        j        |_	        |x|_
        |_        |j        x|_        }|j        r|j        |_        d|_        g |_        i |_        |j        |_        |j	        rVt          |t*          j                  r<|j        s5|j        s.|j        t2          u r |                    t6                    |_        n||_        |                    |j        s|j        s|j        nt2          |j	                  |_        t>                               ||j!        |j        d           |j        j"        |_#        |$                    ||dd           |j%        r&|j%        D ]}|j&        r|'                    |           |j(        r|j(        D ]\  }}	 ||           g |_)        g |_*        tW                      |_,        g |_-        g |_.        d |_/        t          |j        t*          j0                  rci |_1        |j        D ]}
|
2                    |           dx|_3        |_4        d|_5        |j)        D ]}|6                    |d|j7                    n+tq          tr          j:        |j        |j;                  |_<        |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,  rh  r   sa_excCompileError__new__r   r  r   r   ri  r   elementrj  r*   tablerk  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   ri  r   r   fnr
  entityr\  s               r   r   z0ORMFromStatementCompileState._create_orm_context  sj    (-}=====HN%=   {{3#  0H 	# <ON 4#8/B/JJ 9 	)&_DN$(D!%'"2C '	'9j&;<<	' )	' $		'
 &*:::&66. DNN 'DN!%!?!? !,&5>5E&	&&%'"
 "
 	%%,N $	 	& 	
 	
 	
 0@N$$*/	 	% 	
 	
 	
 , 	4*8 4 4( 4--d3334 	.D  C4!!#!ee"$&(#dnj&;<< %	 ,.D(. 1 1**40000 H%(I 48H0)    *.&.&A !      $742B$ $ $D  r   c                    |S r   r   r   colscurrent_adapters      r   _adapt_col_listz,ORMFromStatementCompileState._adapt_col_list      r   c                    d S r   r   r   s    r   _get_current_adapterz1ORMFromStatementCompileState._get_current_adapter  s    tr   c                   | j         j                            dd          }| j         j        rt	          ||          }n+| j         j        s| j         j        rt          ||          }nd}| j        j	        r,t          | j                  dk    rt          j        d          | j        D ]}|                    | |           dS )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_insertrY  	is_update	is_deleterb  r   r   r   r   rr  rs  !setup_dml_returning_compile_state)r   
dml_mapperrN  r@  r  s        r   r  z>ORMFromStatementCompileState.setup_dml_returning_compile_state  s    
 7;;d
 
 ># 		6z GG ^% 	)A 	8z GG G( 	c$..A.AQ.F.F%J  
 n 	D 	DF44T7CCCC	D 	Dr   )
r   r   r   r   r   r   r   r   r   rg  )rq   rr   rs   r  rE  r   rk  _has_orm_entitiesmulti_row_eager_loaderseager_adding_joinscompound_eager_adapterr   r  eager_joinsr   r   r  r  r  r   r   r   rg  rg    s         O &&&&BBBB,0I0000#!)KC C C [CJ    D D D D Dr   rg  c                  4    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 )rh  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`.

    re  N(Union[ExecutableReturnsRows, TextClause]ru  r   r  r|  r  Tentities%Iterable[_ColumnsClauseArgument[Any]]c                      fdt          j        |          D              _        | _        |j         _        |j         _        |j         _        |j         _        |j         _        t          |          r|j
        nd  _
        | _        d S )Nc                T    g | ]$}t          j        t          j        |d           %S )T)apply_propagate_attrspost_inspect)r%   expectr'   ColumnsClauseRole)r   r/  r   s     r   r0  z*FromStatement.__init__.<locals>.<listcomp>  sL     
 
 
  '&*!	  
 
 
r   )r$   to_listr|  ru  r*   	is_selectr  r  r  r,   rx  r  )r   r  ru  r  s   `   r   r   zFromStatement.__init__  s    
 
 
 
 |H--
 
 
 n * * * *$27$;$;EG   	  /r   c                h     | 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  sX     43D(IIbII~% 	3%2H"x 7>>2>>>r   c                p    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  s9     !;#?#E#E
 

! 	 tDzzr   c                    | S r   r   r   s    r   _ensure_disambiguated_namesz)FromStatement._ensure_disambiguated_names  r  r   c              +     K   t           j                            d | j        D                       E d {V   t	                      j        di |E d {V  d S )Nc              3  $   K   | ]}|j         V  d S r   )_from_objectsr   ru  s     r   r   z-FromStatement.get_children.<locals>.<genexpr>  s6       1
 1
&-G!1
 1
 1
 1
 1
 1
r   r   )	itertoolschainfrom_iterabler|  r   get_children)r   r   r   s     r   r  zFromStatement.get_children  s      ?00 1
 1
151B1
 1
 1
 
 
 	
 	
 	
 	
 	
 	
 	
 (577'--"-----------r   c                    | j         j        S r   )ru  _all_selected_columnsr   s    r   r  z#FromStatement._all_selected_columns  s    |11r   c                F    t          | j                  r| j        j        nd S r   )r*   ru  _return_defaultsr   s    r   r  zFromStatement._return_defaults  s!    06t|0D0DNt|,,$Nr   c                F    t          | j                  r| j        j        nd S r   )r*   ru  
_returningr   s    r   r  zFromStatement._returning  s!    *0*>*>Ht|&&DHr   c                F    t          | j                  r| j        j        nd S r   )r+   ru  _inliner   s    r   r  zFromStatement._inline!  s!    '7'E'EOt|##4Or   T)r  r  ru  r  r  r   ) rq   rr   rs   r   __visit_name__rg  r   r  r   r  _for_update_argr   r>   dp_clauseelement_listdp_clauseelementr0   _executable_traverse_internals_traverse_internalsr   r   is_from_statementr   r  rF  r  r  r  r  r  r  r  r   r   s   @r   rh  rh    s          *N3K9NO5555 
*@A	%67 	12
 /	.?@2   !%	/ / / / /4? ? ?"   X"  . . . . . 2 2 X2 O O XO I I XI P P XP P P P Pr   rh  compound_selectc                      e Zd ZdS )CompoundSelectCompileStateN)rq   rr   rs   r   r   r   r  r  &  s         	Dr   r  selectc                  v   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/dS )-r  r   NFr   r   r   r   r   r   r   r   r   c                 
 |                      |           
|}| j                            |j                  |_        |j        r7|                                
_        t          j                    
j        _        n|
_        |j        j	        
_
        |j        j        
_        g 
_        d 
_        i 
_        |j        
_        |s
xj        dddz  c_        
j        r4
j        j        t$          u r!
j
        st&          
_        nt*          
_        n
j        j        
_        |j        r
fd|j        D             
_        
                    |j        
j                  
_        t4                              
|j        
j        d           |j        j        
_        d
_        
                     |||d           |r|j!        s|j        rq|j        D ]>}|j!        D ]4}|j"        r+|#                    
d 
j        |         D                        5?
j        j!        D ]}|j"        r|$                    
           |j%        r|j%        D ]\  }}	 |
           g 
_&        g 
_'        tQ                      
_)        i 
_*        i 
_+        g 
_,        g 
_-        
.                    d	 |j/        D                       
_0        
1                                 te          j3        

j4        |fi | 
S )
NFT)r   r   c           	     X    i | ]&}|t                               |j        g d           'S )Frm  )rz  r{  r|  )r   memoized_entitiesr   s     r   
<dictcomp>z=ORMSelectCompileState._create_orm_context.<locals>.<dictcomp>  sR     
' 
' 
' & "<#@#@%2(-	 $A $ $
' 
' 
'r   rm  r   )r   r   c                <    g | ]}t          |t                    |S r   r+  r.  s     r   r0  z=ORMSelectCompileState._create_orm_context.<locals>.<listcomp>  s:       $' $.c=#A#A #  r   c              3  $   K   | ]}|j         V  d S r   )r   )r   infos     r   r   z<ORMSelectCompileState._create_orm_context.<locals>.<genexpr>  s5       2
 2
 $DO2
 2
 2
 2
 2
 2
r   )5rt  r   
safe_merger  r   _cloner   r$   immutabledictr   for_statementr   r   r   r   r   r   rx  LABEL_STYLE_LEGACY_ORMr9   r  r7   _memoized_select_entities_memoized_entitiesr  r   rz  r{  r|  r   r   eager_order_byr   r   r   'process_compile_state_replaced_entitiesr   r}  r   r   r~  r   r  r  rd   r  _normalize_froms	_from_objfrom_clauses_setup_for_generater<   r   r   )r   r   r   r   r   r   r  r   r  r
  r   s             @r   r   z)ORMSelectCompileState._create_orm_context@  s    {{3$ &)%@%K%K&&
 &
	" . 	5 %5$;$;$=$=D!7;7I7K7KD!44$4D! .>M -E 	# #%'"/@ 	   &+(,% %    '		B%26LLL% A#A  #@  #4AD5 	
' 
' 
' 
' %>
' 
' 
'D#  "&!?!?"D$?"
 "
 	%%)N $	 	& 	
 	
 	
 -=K $$*/	 	% 	
 	
 	
  	4*	49	4 "; !,:  C, 
CC  +/+B$5,"  	 	 	 ,: 4 4( 4--d333 1 	+A  C4!!#!ee')$"$&(# !11 2
 2
(8(B2
 2
 2
 
 
 	  """T4>8BBrBBBr   c                L   t          d           t          d| j                    | j        D ]}t          |t                    rv|d         dk    rjt          dt          j        |d                               t          d| j        |                     t          d| j        |         j                    t          |t                    rS|d         dk    rGt          d	t          j        |d                               t          d| j        |                     d S )
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  s4   GHHH2t022333? 	5 	5C#u%% 5#a&H*<*<J\-@Q-H-HJJKKK3T_S133444<T_S1:<<====C'' 5CF6M,M,MJ\-@Q-H-HJJKKK3T_S133444	5 	5r   c                *   | j         }d | _        d| _        | j        j        r|                                  |j        D ]/}|j        r&|                     |j        | j	        |                    0|j        r |                     |j        | j
                   |                                 |j        r3|j        | _        r%t          fd| j        D                       | _        r$|j        dvr|                     |j                  n|j        | _        |j        r%t          fd|j        D                       | _        r6|j        dvr-|                     t'          j        |j                            n|j        pd | _        | j        r1| j        d         j        }|                    | j                  | _        |j        r!|                     |j                  | _        nd| _        |j        | _        |j        r6t          t'          j        d |j        D                                 | _        nK|j         6t          t'          j        d |j         D                                 | _!        n|j"        sd| _        |j#        | _#        | j        j$        r,tK          | j
                  d	k    rtM          j'        d
          | j
        D ]}|(                    |            | j)        D ]}|d         } || g|d	d          R   | j        j*        r| +                                 | j,        s*| j        j-        r
J d            tM          j.        d          | j        st_          | j0                  | _        | j        du rd | _        | j1        r(| j2        r!| j3        r| 4                                | _        n| 5                                | _        | j6        r9| 7                                }|%| j        8                    d|i          | _        d S d S d S )Nr   c              3  0   K   | ]} |d           V  dS TNr   r   critr  s     r   r   z<ORMSelectCompileState._setup_for_generate.<locals>.<genexpr>	  sC       - - $OD$//- - - - - -r   NFc              3  8   K   | ]}r |d           n|V  dS r  r   r  s     r   r   z<ORMSelectCompileState._setup_for_generate.<locals>.<genexpr>  sM       * * 0?Hd+++D* * * * * *r   r   c              3  F   K   | ]}|t          j        |          nd V  d S r   rQ  surface_selectablesr   ss     r   r   z<ORMSelectCompileState._setup_for_generate.<locals>.<genexpr>7  J       & & 89}H0333$& & & & & &r   c              3  F   K   | ]}|t          j        |          nd V  d S r   r  r  s     r   r   z<ORMSelectCompileState._setup_for_generate.<locals>.<genexpr>>  r  r   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  r  _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   rr  rs  r  rd   r   _adjust_for_extra_criteriar   r   InvalidRequestErrorlistr  r  r  _should_nest_selectable_compound_eager_statement_simple_statementr  _mapper_zero	_annotate)	r   rX   r  r@  r  recstrategyezeror  s	           @r   r  z)ORMSelectCompileState._setup_for_generate  s   % / 	*'')))!&!@ 	 	 - 

%2+,=>  
  	;JJu)4>:::3355  	#(#8D  ', - - - - $ 4- - - ( ($ )#(#:-#O#O   !8/JJJ( 	 ! 	$) * * * *!2* * * % %D! 1 $)#:-#O#O   %e&=>>   (0D 	  	P'*:G")":":4;N"O"OD 	"#33"O   D  "D 	% #% & &"-& & &   DNN $0$)% & &"4& & &  % %D!! & 	%$DN  %4( 	c$..A.AQ.F.F%J   n 	- 	-F&&t,,,,* 	% 	%C1vHHT$CG$$$$$
 3 	.++---# 	#4 MLLLLL,F     	B $T%@ A AD=E!! DM (	6'	6 ,	6
 ";;==DNN!3355DN 	%%''E  "&!9!9!5)" "	 	  r   c                    |                      |           }g |_        d|_        i |_        |                    |j        |          |_        t                              ||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.

        NTrm  )
rt  r   r   r   r  rx  r   rz  r{  r|  )r   rX   r  r   s       r   rD  z1ORMSelectCompileState._create_entities_collection|  s     {{3#%'"!%!?!?"
 "
 	%%%$dn$ 	& 	
 	
 	
 r   c                0    |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              #    K   |j         D ]u}|j        rVd|j        v rM|j        d         }|j        s|j        st          |g          E d {V  Dt          |j                  E d {V  _t          |g          E d {V  vd S )Nentity_namespace)r|  is_selectable_annotations	is_mapperr4  r-   _all_column_expressions)r   r   ru  enss       r   all_selected_columnsz*ORMSelectCompileState.all_selected_columns  s       - 	8 	8G%
8&'*>>>*+=>} NS-A N0';;;;;;;;;;01LMMMMMMMMMM,gY7777777777	8 	8r   c                    |                      t          j                            d |j        D                                 S )Nc              3  v   K   | ]4}d |j         vr|j        n|j         d                                          gV  5dS )parententityN)r&  r  __clause_element__r  s     r   r   zAORMSelectCompileState.get_columns_clause_froms.<locals>.<genexpr>  so       * *  &W-AAA ))  ,*,,..	* * * * * *r   )r  r  r  r  r|  r  s     r   get_columns_clause_fromsz.ORMSelectCompileState.get_columns_clause_froms  sP    ##O)) * *  )5* * *  
 
 	
r   c                    t          j        t          j        ||          }t	          |j        |          }|j                            |j        |j	        |j
        |j                   |S )N)r  )r   r}  r   r!  )r%   r  r'   ReturnsRowsRolerh  r|  r  updater   r}  r   r!  )r   r   from_statementstmts       r   r3  z$ORMSelectCompileState.from_statement  sw    ")!"+
 
 
 Y3^DD#1"+"A(;&7	 	 	
 	
 	
 r   c                    | j         }| j        j        sJ t          |j                  dk    sJ |                     |j        d                   }|r| xj        ddiz  c_        || _        dS dS ) used only for legacy Query casesr   r   r   FN)r   r   r   r   r  _get_select_from_alias_from_objr  )r   rX   r@  s      r   r  z,ORMSelectCompileState._set_select_from_alias  s     %#33335?##q((((66uq7IJJ 	+  %:E$BB  #*D   	+ 	+r   c                b   |}d|j         v r|j         d         }t          |d          r"|j        st          j        d          |j        S t          |j        t          j        j	                  r@| 
                                }||j        u sJ t          t          j        |j        |          S dS )r6  r-  r  zPA selectable (FromClause) instance is expected when the base alias is being set.r3  N)r&  hasattrr4  rr  ArgumentError_adapterr,  r   r#   AliasedReturnsRows_all_equivsr   r   LEGACY_SELECT_FROM_ALIAS)r   from_objr  equivss       r   r7  z5ORMSelectCompileState._get_select_from_alias_from_obj  s     T...$^4D4"" 	( %*A  
 }$)JKK 		%%''F4?****&8"    4r   c                &    | 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 r|j        d         c S | j        D ]}|j        r	|j        c S dS )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  st    
 $ 	8 	8C!111'7777 2N 	( 	(D (''''( tr   c                j    | j         | j        gk    rt          j        d|z            | j        j        S )Nz4%s() can only be used against a single mapped class.)r   r   rr  r  rD  )r   methnames     r   _only_full_mapper_zeroz,ORMSelectCompileState._only_full_mapper_zero	  sE    >d2333,)+34   #//r   c                    t          | j                  dk    rt          j        |pd          |                                 S )Nr   z8This operation requires a Query against a single mapper.)r   r   rr  r  rF  )r   	rationales     r   _only_entity_zeroz'ORMSelectCompileState._only_entity_zero  sM    t~"", ++  
   """r   c                   i }| j                                         D ]0}d |D             D ]!}|                    |j        j                   "1d | j        D             D ]!}|                    |j        j                   "|S )Nc                <    g | ]}t          |t                    |S r   r+  r.  s     r   r0  z5ORMSelectCompileState._all_equivs.<locals>.<listcomp>  s8       c=11  r   c                <    g | ]}t          |t                    |S r   r+  r.  s     r   r0  z5ORMSelectCompileState._all_equivs.<locals>.<listcomp>%  s7     
 
 
Z]-K-K

 
 
r   )r  valuesr2  r  r9  r   )r   rA  r  r/  s       r   r>  z!ORMSelectCompileState._all_equivs  s    !%!8!?!?!A!A 	> 	> ,   > >
 cj<====>
 
>
 
 
 	: 	:C MM#*89999r   c           	          j         r,d  j         D             }t          j         j        |          }ng }d }  j         j         fd|D             z    j         j         j         j         j         f j	         j
        j         j
        j         j         j        d j        }|                                }                                 }t%          t&          j        ||           _        t-          j        |g j        z    } j        |_         j	         j	        j         j	        |_	        |} j                                        D ]}t          j        |||j                  }|j                             ||           |r+ |j         j         |g j        !                    |          R    |j         j         |g j"        R   |S )Nc                ^    g | ]*}t          |t          j        j                  r|j        n|+S r   )r,  r#   elements_label_referenceru  )r   elems     r   r0  zCORMSelectCompileState._compound_eager_statement.<locals>.<listcomp>7  sG     " " "  "$(EFFDLL	" " "r   c                &    g | ]}|j         v|S r   )r   )r   r\  r   s     r   r0  zCORMSelectCompileState._compound_eager_statement.<locals>.<listcomp>K  s&    LLLQq8K/K/Kq/K/K/Kr   
for_updatehintsstatement_hintsr  r  r9  )#r  rQ   expand_column_list_from_order_byr   _select_statementr  r  r  r  r  r   _hints_statement_hintsr  r  _select_argsaliasr>  r   r   COMPOUND_EAGER_STATEMENTr  r!   r  r   rx  ofr  rP  splice_joinsstop_onselect_fromnon_generativer	  r  )r   unwrapped_order_byorder_by_col_exprinnerrA  r   from_clause
eager_joins   `       r   r  z/ORMSelectCompileState._compound_eager_statement+  sN   
 = 	&" " !M" " " !) I$&8! ! !#!% '& LLLL+LLLM !M
 +'. 1Bn!2
 
 
 
  !!##&94e'
 '
 '
# Mg..
	 "&!1	  ,$'/(,(<I%*1133 	 	J #/Z); KK 	,,YDDD 	-I-,==&     	*	))Jd6IJJJJr   c           	     z    | j         | j        | j        z   t          | j                  t          | j                                                  z   | j        | j        | j	        | j
        f| j        | j        j        | j        j        | j        | j        d| j        }| j        r |j
        j        |g| j        R   |S )NrW  )r\  r   r   r   r  r  rP  r  r  r  r  r  r   r]  r^  r  r  r_  r  rf  )r   r   s     r   r  z'ORMSelectCompileState._simple_statement  s    *D* 4#99$#$$uT-=-D-D-F-F'G'GG !M
 +'. 1Bn!2
 
 
 
	  	O-I-iN$:MNNNNr   c                6   t          j        |||          }|r||_        |r||_        |r|xj        t          |          z  c_        |r |j        j        |g|R   n|r|j                            |           |r|xj        t          |          z  c_        ||_	        ||_
        ||_        ||_        ||_        ||_        |r||_        |r||_        ||_        |r||_        |	r|	|_        |
r |j        j        |g|
R   | |j        j        |g|R   |S )N)r|  r  rx  )r:   _create_raw_selectr  r  r  r   r  rf  r  _limit_clause_offset_clause_fetch_clause_fetch_clause_options_independent_ctes_independent_ctes_opts	_prefixes	_suffixesr  r]  r^  r  r  )r   raw_columnsr@  where_criteriahaving_criteriar  r  rX  rY  rZ  r  r  limit_clauseoffset_clausefetch_clausefetch_clause_optionsr  r  prefixessuffixesr  independent_ctesindependent_ctes_optsr   s                           r   r\  z'ORMSelectCompileState._select_statement  s   2 -$$
 
 
	  	7(6I% 	9)8I& 	;''5??:'' 	9-I-iF+FFFFF 	9--i888 	;''5??:''".	#0	 ".	*>	'&6	#+@	( 	+"*I 	+"*I$.	! 	%$I 	9)8I& 	F.I.yE9EEEE'5I&5,    r   c                h   d|j         v r?|j         d         }| j                            |d           }|r|                    |          S t	          |t
          j                  r|}nt          |d          r|j        }nd S | j                            |d           }|r|                    |          S d S )Nr-  rv  )	r&  r   r   adapt_clauser,  r&   
FromClauser:  rv  )r   ru  searchr`  s       r   _adapt_polymorphic_elementz0ORMSelectCompileState._adapt_polymorphic_element  s    W111).9F.2264@@E 3))'222gz455 	FFWg&& 	]FF4*..vt<< 	/%%g...	/ 	/r   c                (    rfd|D             S |S )Nc                (    g | ]} |d           S r  r   )r   or  s     r   r0  z9ORMSelectCompileState._adapt_col_list.<locals>.<listcomp>  s%    ;;;OOAt,,;;;r   r   r  s     `r   r  z%ORMSelectCompileState._adapt_col_list  s*     	;;;;d;;;;Kr   c                    g | j         r!                    d| j         j        f           | j        r                    d| j        f           sd S fd}|S )NTFc                :    fd}t          j        | i |          S )Nc                f    d| j         v pd| j         v }D ]\  }}|s|r ||           }||c S d S )N
_orm_adaptr-  )r&  )rU  is_orm_adaptalways_adaptr@  eadapterss        r   replacezRORMSelectCompileState._get_current_adapter.<locals>._adapt_clause.<locals>.replace   sn     D$55 ;%)::  .6 % %)L'# %| %#GDMM=#$HHH	% %r   )r(   replacement_traverse)r  rS  r  r  s      r   _adapt_clausezAORMSelectCompileState._get_current_adapter.<locals>._adapt_clause  s3    	% 	% 	% 	% 	% 0WEEEr   )r  r  r  r   r  )r   r  r  s     @r   r  z*ORMSelectCompileState._get_current_adapter  s     	 OO(0   % 	FOOUD$CDEEE 	4	F 	F 	F 	F 	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        }n*# t          $ r}
t	          j	        d|z            |
d }
~
ww xY w|j        }|j        }t          |t          j                  s|}|||j        f| j        v r[|T||urP|j                            dd           |ur3t	          j        d	|j                            d|          d
|          n|d }|}nd x}}|                     |||||||           d S )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   PropComparatorrr  r  r&  r%  r:  r;  r  rF  r  AttributeError_parententityr   QueryableAttributer
  _already_joined_edgesr   _join_left_to_right)r   argsentities_collectionrightonclausefrom_flagsr  r  of_typeerrleftr_  s                r   r  zORMSelectCompileState._join/  s   -1 \	 \	)E8UEI&G=DENNE#"8,,%!:;; 
;' 4=  
 !5#555*>:* 75(3K3K  .:  
 G(J$=>> 3# "(J=== ' ' ( 1'$)LEE- ' ' '"("6!027!8# # $'''  -(!(J,IJJ $#H %*d.HHH$T))!.22>4HH#$ $ %88 !& 2 6 6~u M M M M (	   " #"t $$#   i\	 \	s   /C77
DDDc           	     t   |!|J |                      ||||          \  }}}	n|                     ||          \  }}	||u rt          j        d|d|d          |                     ||||          \  }
}}|
j        s|                     |
          }nd}|M| j        |         }| j        d|         t          ||||||          gz   | j        |dz   d         z   | _        dS |	+t          ||	         t                    sJ ||	         j        }n|}| j        t          ||
||||          gz   | _        dS )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_siderr  r   _join_check_and_adapt_right_sider%  _get_extra_criteriar  r   r,  r-  r   )r   r  r  r  r  r_  	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N&  5==,,)-uuu6   #'"G"G%4#
 #
x # 	 !55f==NNN!- +,BCK !"9#9"9:#  )!(6  	
 #$:Q$>$@$@AB    + "'(89=     22BCN" $ 1%$2  	5 	!Dr   c                   t          |          }dx}}| j        rt          j        | j        |j        |          }t          |          dk    r|d         }| j        |         }n_t          |          dk    rt          j        d          t          j        d|d          |r	i }	t          |          D ]Q\  }
}|j	        }|t          |          }||u r#t          |t                    r|
|f|	|j        <   Ed|f|	|j        <   Rt          |	                                          }t          j        ||j        |          }t          |          dk    r|	||d                           \  }}nSt          |          dk    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  rQ  find_left_clause_to_join_fromr   r   rr  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  sA   & 488!1 O	 <!6#4h G 7||q  )0&()?@W!!05   00
 9>	@   ! 2	 I%./B%C%C D D!c6>"6??v%%
 c=11 D1=v0FIcn--6:F^Ih122y~~//00K<V. G 7||q  )2;wqz3J)K& $$W!!05   00
 9>	@   ,1   +-===r   c                   dx}}t          |          }| j        rPt          j        | j        |j                  }t          |          dk    rt          j        d          |r|d         }|U|rSt          |d          rCt          |          D ]3\  }}t          |t                    r|                    |          r|} n4||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  rQ  #find_left_clause_that_matches_givenr   r   rr  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 	4B!6#4 G 7||a0!    4)0& #*# +)) + &&9::  S c=11 c6H6H6N6N '*$E%'777r   c           	        t          |          }t          |          }d}t          |dd          }|rp|j        st          |j        t
          j                  rJ| j        p|j        gD ]:}	t          j
        |j        |	          rt          j
        |	|j                  rd} n;|r*|j        |j        u rt          j        d|j        z            t          |dd          |j        t          |dd          }}
}|r6|r4|                    |j                  st          j        d|d|          t          |d          r| xj        |fz  c_        d}|j        r|r|j        }|
j        r#|                                 }| ||d          }n|r|
                    |j                  s*t          j        d	|
j        d
|j        j        d          t          |
t
          j                  r!t/          j        t2          j        |
          }
d}t7          ||
          }t9          j        d|z  dd           |o| o|}|s.|r,t7          |d          }d}t9          j        d|z  d           |rI|sJ t?          t@          j!        t          |          |j"                  }| #                    ||           nK|j        sD|sB|j$        r;| #                    |t?          t@          j%        ||j        |j"                             t          |t
          j&                  r"|                                 }|r ||d          }|r| xj'        |||j(        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 itselfr4  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.xaj2r9  )r   r3  ))r"   r  with_polymorphicr,  r5  r&   Joinr  r   rQ  selectables_overlaprr  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_SIDEr9  r7  #_has_aliased_polymorphic_fromclause#WITH_POLYMORPHIC_ADAPTER_RIGHT_JOINClauseElementr  r
  )r   r  r  r  r_  r  r  overlapright_mapperr@  right_selectableright_is_aliasedneed_adapterr  aliased_entityr@  s                   r   r  z6ORMSelectCompileState._join_check_and_adapt_right_side  s    vx66  	)	,9:?KK	 !-D&2C1D  /%x  2f/ 
 #GE 	v(F,===,<#$   FHd++F.66 )9& 		 !..t{;;	
 ,,9>J   68$$ 	-F9, # 2	 +#{+ . #'";";"="=". ,OE488E # (77 3  	 !44 -888(;GGG   .
0EFF ('0'7,.>( ($ $(L %\3CDD$D
 ## 	 	 	 	 &J.>*>J7 	 	 !T222ELI@
 COO      &	   @(<  G 33L'JJJJ(	$	 @	 33#G +6 , @	     h
 899 	;"7799O ;*?8T::  	E&&D%+B*DD&&u~~uh..r   c                    | j         j        | j         j        | j        | j        | j         j        | j         j        | j        pd | j         j        | j         j	        | j         j
        | j         j        dS )N)rz  r{  r  r  r~  r  r  r|  r}  r  r  )r   ro  rp  r  r  ru  rv  r  rq  rr  rs  rt  r   s    r   r_  z"ORMSelectCompileState._select_argsZ	  sp     !1?!2A+-7-7- 1?%; $ 5 G%<
 
 	
r   c                    | j         }|                    d          d upX|                    d          d upA|                    dd          p+|                    dd          p|                    dd          S )Nrz  r{  r  Fr  r   r  )r_  r   )r   kwargss     r   r  z-ORMSelectCompileState._should_nest_selectablen	  s    "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 dS )Nadditional_entity_criteriac              3     K   | ]>}|j         s	|j        u |                              '|                              V  ?d S r   )include_aliasesr  _should_include_resolve_where_criteria)r   aer:  r   s     r   r   z<ORMSelectCompileState._get_extra_criteria.<locals>.<genexpr>~	  ss         &
 +-)x*?*?&&t,, +@	 **844 +@*?*?*? r   r   )r  r   r   )r   r:  s   ``r   r  z)ORMSelectCompileState._get_extra_criteriay	  s{    (O
 #$ $      018?C      2r   c                ~   | j         D ]^}|j                            dd          }|r?|j        j        d|j        f| j        v r#|| j        vr||j        r|j        ndf| j        |<   _t          | j        
                                          }|D ]\  }}|| j        v r|j        j        }| j        j        rg }n|                     |          }|||fz  }|                                 }|D ]O}|r|                    |          }|r#t#          j        |ddi          } ||d          }| xj        |fz  c_        PdS )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   r  r4  r<  r~  rP  r  r   r   r  r  traverserQ  _deep_annotater  )	r   
fromclauser:  r  r@  single_critr  r  r  s	            r   r  z0ORMSelectCompileState._adjust_for_extra_criteria	  s    + 	 	J!.22>4HHH  O;G4hoF-. . D$@@@ )1)BLH%%:,X6
 T188::;;!' 	0 	0Hg4..."/AK#6 P-/**-1-E-Eh-O-O*&*{n<*"7799O2 0 0 2"++D11D" 8#24,9MNND*?477D$$/$$$0	0 	0r   )
r   r   r   r   r   r   r   r   r   r  r   )0rq   rr   rs   r  r   r  r  rE  r  r  r  r  r  r  r  r  r   r   r  r  rD  r"  r*  r/  r3  r  r7  r  rF  rI  rL  r>  r  r  r\  r  r  r  r  r  r  r  r  rF  r_  r  r  r  r   r   r   r  r  -  s       $O #!IO` ` ` [`D
5 
5 
5K K KZ   [2 @ @ [@
 8 8 [8 
 
 [
    ["+ + +  8( ( (  0 0 0# # # #  "Y Y Yv  (K K KZ/ / /$  . . .`] ] ]~a a aFh> h> h>T@8 @8 @8D{/ {/ {/z 
 
 X
& 
 
 X
   70 70 70 70 70r   r  Fquery_or_select_stmt#Union[Query, Select, FromStatement]rW   Optional[ORMSelectCompileState]r  r   r   List[ORMColumnDescription]c                |    |t                               | |          }|}d d |j        D             D             }|S )N)r  c                    g | ]J\  }}|j         |j        t          |d d          |j        |j        |j        st          |dd          nddKS )r4  FNr  )r  typealiasedexprr  )_label_namer  r  r  rD  r  )r   r/  insp_ents      r   r0  z(_column_descriptions.<locals>.<listcomp>	  s     	 	 	 C OHx);UCCH ?. 2 / (D111 	
 	
	 	 	r   c                     g | ]}||j         fS r   rD  )r   _ents     r   r0  z(_column_descriptions.<locals>.<listcomp>	  s-     
 
 
)-T4#$
 
 
r   )r  rD  r   )r  rW   r  r"  ds        r   r  r  	  sq    
 -II  J 
 
 C	 	
 
14
 
 
	 	 	A" Hr   query_or_augmented_selectUnion[Query[Any], Select[Any]]"Optional[_InternalEntityType[Any]]c                    | }|j         r|j        }||S |j        r,d|j        d         j        v r|j        d         j        d         S t	          |          S )Nr-  r   )r   _last_joined_entityr  r&  _entity_from_pre_ent_zero)r  r   r  s      r   _legacy_filter_by_entity_zeror  	  sj     %D '"6*&&~ >.DN1,=,JJJ~a -n==$T***r   c                    | }|j         sd S |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)r|  r&  r,  r   r  )r  r   r/  s      r   r  r  	  s~     %D t

A
C)))//	C-	.	. z	S%	%	%))
r   r!  Tuple[_SetupJoinsElement, ...]rD  =Optional[Union[_InternalEntityType[Any], _JoinTargetElement]]c                j    | sd S | d         \  }}}}t          |t          j                  r|j        S |S )N)r,  r   r  r  )r!  rD  targetr  r  r  s         r   r   r   
  sM      t'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dS )rz  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]rD  rW   rn   r   Nonec                    t                      r   r   r   rW   s     r   r  z _QueryEntity.setup_compile_state%
  r   r   r@   Optional[_DMLReturningColFilter]c                    t                      r   r   r   rW   r@  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                Z   t          |          D ]\  }}|j        r,|j        r|                     ||j        ||           2|j        }|j        r|j        r@d|j        v rt          ||||           ct          
                    ||j        |||           |j                            dd          rt          ||||           |j        r$t          
                    ||j        |||           t          
                    ||g|||           |j        rt          |||           |S )Nr-  r  F)r  _is_lambda_element_is_sequencer{  	_resolvedr  r%  r&  r-  _ColumnEntity_for_columns_select_iterabler   _BundleEntity_is_clause_list	is_bundle)r   rW   r  r  rn  r  r  s          r   r{  z_QueryEntity.to_compile_state2
  s    %X.. 9	J 9	JKC( 
.& 	.((%(++	   #-F' ,J' )%)<<<%)"//	    &22)"3//    *..x?? %)"//	     /  &22)"3//    &22)#H//    ! JmV5HIII""r   N)rW   rn   r   r  rW   rn   r@  r  r   r  )rq   rr   rs   r   r   r   _non_hashable_value_null_column_typeuse_id_for_hashr  r  r  r   r{  r   r   r   rz  rz  
  s         DDI    O++++8888....$ $ $ $$ $ $ $$ $ $ ># ># [># ># >#r   rz  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dS )r-  z mapper/class/AliasedClass entity)
r  r  rD  r4  path_extra_entitiesr  r>  r   _polymorphic_discriminatorr?   r  zMapper[Any]r  rD  r   r4  r   r$  strr  c                   |                     |            |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|                    || j                   d S d S )NTr-  )r  r   rE  r  r&  _post_inspectrD  r  r  r  r%  r4  r  r  class_rq   r   r$  r   with_polymorphic_mappersr>  polymorphic_onr&   _should_select_with_poly_adapterr<  )r   rW   r  r  rn  r:  r  s          r   r   z_MapperEntity.__init__
  s$    	""4((( 	3,404-15M..2M+$^4&,,4#	'.f $	|$ 	6'}D%}5D ( 9+	"-)1)J&*2*A'2 	::$/    	 	r   Tc                    | j         j        S r   )r  r*  r   s    r   r  z_MapperEntity.type
  s    {!!r   c                    | j         S r   r  r   s    r   r  z'_MapperEntity.entity_zero_or_selectable
  s    r   c                ,    t          | j        |          S r   )r   rD  r   r  s     r   r  z_MapperEntity.corresponds_to
  s    %d&6???r   c                    d }| j         s(|j        r |j                            | j        d           }n| j        j        }|r%|j        r|                    |j                  }n
|}n|j        }|S r   )r4  r   r   r  rD  r<  r  wrap)r   rW   r@  rets       r   _get_entity_clausesz!_MapperEntity._get_entity_clauses
  s    $ 	02 '=AAK  &/G 	0, ll=#@AA/C
r   c                L   |j         }|                     |          }|j        r|r|                    |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   r5  r  r3  r   r   r   rc   r   _instance_processorr  r$  r&  r  r%  )r   r$  r   rW   r@  r7  rc   	_instances           r   r  z_MapperEntity.row_processor
  s    -**=99/ 	;G 	;ll=#GHHGG 	;#:G(D00+;LO#1MM.22Om/KI+'&*&E

 

 

	 $*D,@@@r   rW   rn   r@  r  r   r  c                    t          j        || j        | | j        ||j        | j        |j        j        | j        	  	         d S )Nr  r7  r8  )	r   _setup_entity_queryr  r$  r   r>  r   r   r&  r  s      r   r  z/_MapperEntity.setup_dml_returning_compile_state
  sV    
 	#KI)!;)9J&*&E
	
 
	
 
	
 
	
 
	
 
	
r   c                l   |                      |          }| j        j        }|d| j        f|j        v r!| j        }||j        r|j        nd f|j        |<   t          j	        || j        | | j
        ||j        | j        |j        j        | j        	  	         |j                            | j                   d S )Nr  r<  )r5  r  r  r   rD  r4  r<  r  r   r=  r$  r   r>  r   r   r&  r  r  r   )r   rW   r@  single_table_critr:  s        r   r  z!_MapperEntity.setup_compile_state  s    **=99 K?),dk:./ / 'H%-%>H!!D?M1(;
 	#KI)!;)9J&*&E
	
 
	
 
	
 
	
 	,33DODDDDDr   Nr  )rq   rr   rs   r   r   r   r   r  r   r"  rF  r  r  r  r5  r  r  r  r   r   r   r-  r-  t
  s        **I $$$$# # #J "O" " X"     X @ @ @  *A A A:
 
 
 
"E E E E 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dS ) r  r   )r  r  r  r  r   r  r   r   r   r  z	Type[Any]r  r'  r  r   r  r  TNc           	        d|_         |j        d         }|r|j                            |            n|                    |            t	          |t
          j        t          j        f          r|	                                }n|}|x| _
        | _        t          |          | _        |j        | _        g | _        |rs|j        D ]k}d|j        v rt!          |||||             t	          |t"                    rt!          |||||            Jt$                              ||g|d ||            l| j
        j        | _        d S )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  rn  setup_entitiesrC  r  s           r   r   z_BundleEntity.__init__3  s    +/' * 	-#**40000&&t,,,:0*2KL
 
 	 ,,..FFF"((diLL	!; 	  t000!%++&*      f-- !%++&*     %11%++&* 2     '+k&?###r   c                &    | j         }||j        S d S r   )rD  r  )r   r  s     r   r  z_BundleEntity.mappern  s     <4r   c                4    | j         D ]}|j        }||c S d S r   )r   rD  r   r/  r  s      r   rD  z_BundleEntity.entity_zerov  s5    > 	 	COE  ! 4r   c                    dS r  r   r1  s     r   r  z_BundleEntity.corresponds_to  s	     ur   c                4    | j         D ]}|j        }||c S d S r   )r   r  rJ  s      r   r  z'_BundleEntity.entity_zero_or_selectable  s6    > 	 	C1E  ! 4r   c                D    | j         D ]}|                    |           d S r   )r   r  )r   rW   r/  s      r   r  z!_BundleEntity.setup_compile_state  s4    > 	3 	3C##M2222	3 	3r   rW   rn   r@  r  r   r  c                ,    |                      |          S r   r  r  s      r   r  z/_BundleEntity.setup_dml_returning_compile_state      
 ''666r   c                    t          fd| j        D              \  }}}| j                            j        ||          }|| j        | j        fS )Nc                <    g | ]}|                               S r   )r  )r   r/  r$  r   s     r   r0  z/_BundleEntity.row_processor.<locals>.<listcomp>  s)    KKKSc00KKKr   )r   r   r  create_row_processorrX   r  r%  )r   r$  r   procslabelsextraprocs    ``    r   r  z_BundleEntity.row_processor  sa    "KKKKKDNKKK 
vu {//ufMMT%t';;;r   r  r  )rq   rr   rs   r%  r   r   r   rF  r  rD  r  r  r  r  r  r   r   r   r  r     s        OI "!!!NNNOOO    LLL 9@ 9@ 9@ 9@v   X   X  
   X3 3 37 7 7 7< < < < <r   r  c                  t    e Zd ZdZe	 dd            Zed             Zed             Zed             Z	d Z
dS )	r  )_fetch_column_row_processorraw_column_indextranslate_raw_columnNc           
         |D ]y}|j         }d|v r	|d         }	nt          j        |d          }	|	r7d|j         v rt          ||||	|||           Mt	          ||||	|||           dt          ||||||           zd S )Nr-  ri   rB  )r&  rQ  extract_first_column_annotation_IdentityTokenEntityrE  _RawColumnEntity)
r   rW   rI  r  r[  rn  rC  columnr   _entitys
             r   r  z_ColumnEntity._for_columns  s      &	 &	F -K,,%n5"BN   #v':::(%+(+&3     %%+(+&3     !!'$'"/    ?&	 &	r   c                    | j         j        S r   )ra  r  r   s    r   r  z_ColumnEntity.type  s    {r   c                &    | j         j        j         S r   )ra  r  hashabler   s    r   r   z!_ColumnEntity._non_hashable_value  s    ;#,,,r   c                $    | j         j        j        S r   )ra  r  _isnullr   s    r   r!  z_ColumnEntity._null_column_type  s    {''r   c                   |j         }| j        2| j        \  }}}| j        r||j        j        | j                 fz  }|||fS | j        | j        }n;| j        }|j        r|j        j	        |         }|j
        r|                                }|j        r|j        j	        |         }|                    |          }|| j        | j        f}|| _        | j        r*| j        |j        j        | j                 fz   }|| j        |fS |S r   )rW   rZ  r\  rX   r|  r[  rY  ra  r  rI  r&  _deannotater  _getterr  r%  )	r   r$  r   rW   getter
label_nameextra_entitiesra  r4  s	            r   r  z_ColumnEntity.row_processor  sB   - *151D.FJ( M.t/DE#  :~55 )'FF [F , G&6>vF" .  ++--/ 	J"9A&IF''d&(<<!$ 	!1*4+@A5 N 4+^;;Jr   r   )rq   rr   rs   r   r   r  rF  r  r   r!  r  r   r   r   r  r    s        I  / / / [/b     X  - - X- ( ( X(0 0 0 0 0r   r  c                  <    e Zd ZdZdZdZdZ	 ddZd ZddZ	d Z
dS )r`  NF)r  ra  r  r  r%  c                   || _         || _        |d u| _        |j        r|xj        ddiz  c_        |r|j        rd | _        n)|r|j        | _        n|                    |          | _        |r|j	        
                    |            n|
                    |            || _        | j        j        r| j        j        d         nd | _        | j         | j        f| _        d x| _        | _        d S )Nr   Tr   )r  r[  r\  r   r   _is_text_clauser  
_proxy_keyr   r   r  ra  r  r  r%  rY  rZ  )r   rW   ra  r  r[  rn  rC  s          r   r   z_RawColumnEntity.__init__(  s    	 0$4D$@!? 	@))j$-??))" 	Kf&< 	K#D K#)#4  #0#B#B6#J#J  	-#**40000&&t,,,,0K,EODK%a((4 	& !%	4;7377T000r   c                    dS r  r   r1  s     r   r  z_RawColumnEntity.corresponds_toL  s    ur   rW   rn   r@  r  r   r  c                ,    |                      |          S r   rO  r  s      r   r  z2_RawColumnEntity.setup_dml_returning_compile_stateO  rP  r   c                   |                                 }|r || j        d          }|d S n| j        }|j        r|                                }|j                            |           |j                            |           || _        d S r  )	r  ra  r&  ri  r   r   r   r  rY  )r   rW   r  ra  s       r   r  z$_RawColumnEntity.setup_compile_stateV  s    '<<>> 	!$_T[%88F~  [F 	* ''))F$((000%,,V444#r   r   r  )rq   rr   rs   rD  r  r  r   r   r  r  r  r   r   r   r`  r`    sw        KF"I "8 "8 "8 "8H  7 7 7 7$ $ $ $ $r   r`  c                  8    e Zd ZdZdZdZ	 ddZd ZddZd Z	dS )rE  zColumn/expression based entity.F)r  r  ra  r  r  rD  r%  Nc                   |j         }|}	 |j        dd           }
 |j        d|	          }|
r"t          |j        |
          | _        d| _        n|| _        |d u| _        || _        |r0|r|
r|
n|j        | _        n$|	                    ||
          | _        nd | _        |	j
         |	x| _        x| _        }|	j        x| _        }|r|j                            |            n|                    |            d|_        || _        d x| _        | _        | j        | j        f| _        |j        r|                    ||j                   d S d S )N	proxy_keyproxy_ownerF)r  T)r&  r   r  r  r  r\  r[  rq  r  r   r)  rD  r  r  r   r  r  ra  rY  rZ  r%  r-  r<  r   )r   rW   ra  r  r-  r[  rn  rC  r   rb  orm_keyrx  r  r  s                 r   r   z_ORMColumnEntity.__init__x  s    ) "+/+t44%komW== 
	E 2G<<DI(-D%% DI(8(DD% 0 	$ .5#L776;L  #0#B#BW $C $ $    $DDKKK49E&~-f 	-#**40000&&t,,,*.'377T0 $	4;72 	::u'    	 	r   c                    t          |          r	|| j        u S t          | j                   o|                    | j                  S r   )r   rD  r  r1  s     r   r  z_ORMColumnEntity.corresponds_to  sV    V$$ 	9T---(    9&&t'7889r   rW   rn   r@  r  r   r  c                    | j         x| _        }|r ||d          }|6|j                            |           |j                            |           d S d S r  )ra  rY  r   r   r   r  )r   rW   r@  ra  s       r   r  z2_ORMColumnEntity.setup_dml_returning_compile_state  sn     '+k1V 	,WVU++F(,,V444)0088888 r   c                x   |                                 }|r+ || j        d          }||j        sJ | j        | _        d S n| j        }| j        }| j        j        }|d| j        f|j        v r||j        r|j	        nd f|j
        |<   |j        r|j        s|                                }t          | j        j                                      |j        j                  r|j                            |j                   |j                            |           |j                            |           || _        d S )NFr  )r  ra  r   rY  rD  r  r  r   r4  r<  r  r&  _expression_labelri  r~  r  intersectionr   r  r  r   r   r   )r   rW   r  ra  r  r?  s         r   r  z$_ORMColumnEntity.setup_compile_state  sj   '<<>> 	!$_T[%88F~$5555%)[" 
 [F  K?),dk:./ / "'"8Bd<M1%8
  	*v'? 	* ''))F t{())66*
 
 	J 0778HIII$((000%,,V444#r   r   r  )
rq   rr   rs   r   r  r   r   r  r  r  r   r   r   rE  rE  i  sw        ))"I$ A A A AF9 9 99 9 9 9)$ )$ )$ )$ )$r   rE  c                      e Zd ZdZd Zd ZdS )r_  Fc                    d S r   r   r  s     r   r  z(_IdentityTokenEntity.setup_compile_state  s    r   c                ,    fd}|| j         | j        fS )Nc                    j         j        S r   )r[   ry   )rowr$  s    r   rk  z2_IdentityTokenEntity.row_processor.<locals>.getter  s    '77r   )r  r%  )r   r$  r   rk  s    `  r   r  z"_IdentityTokenEntity.row_processor  s1    	8 	8 	8 	8 	8 t')===r   N)rq   rr   rs   r\  r  r  r   r   r   r_  r_    s8           > > > > >r   r_  r  )r  r  rW   r  r  r   r   r  )r  r  r   r  r   )r!  r  rD  r  r   r  )
__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    rr  r!   r"   r#   r%   r&   r'   rQ  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   rH  rY  rb  
plugin_forrg  rh  r  r  r  r  r  r   rz  r-  r  r  r`  rE  r_  r   r   r   <module>r     sO
   # " " " " "                                                                                                     # # # # # # , , , , , , , , , , , , ' ' ' ' ' ' ( ( ( ( ( (       ! ! ! ! ! !                   % % % % % %                                                 " " " " " "                         * * * * * * ( ( ( ( ( ( ( ( ( ( ( ( ' ' ' ' ' ' # # # # # # ! ! ! ! ! ! ! ! ! ! ! !                   ) ) ) ) ) ) % % % % % % 0 0 0 0 0 0 : : : : : : - - - - - - ; ; ; ; ; ; # # # # # # - - - - - - ( ( ( ( ( ( - - - - - - , , , , , , *,,,,,,333333!!!!!!''''''      <<<<<<444444************,,,,,,333333999999333333666666++++++))))))WT" d "" *@ q. q. q. q. q. q. q. q.h ,+'.  
i$ i$ i$ i$ i$l i$ i$ i$X* * * * *#: * * *Zf
 f
 f
 f
 f
- f
 f
 f
R	$$ $$ $$ $$ $$ $$ $$ $$N> > > > >'= > > >&    )?   0 !!%)=>>wD wD wD wD wD? wD wD ?>wDtuP uP uP uP uPNJ0@0E uP uP uPp !!%):;;	 	 	 	 	 "5	 	 <;	 !!%22R0 R0 R0 R0 R0O[ R0 R0 32R0n, 6:    <+ + + +   * 7;    $\# \# \# \# \# \# \# \#~iE iE iE iE iEL iE iE iEX< < < < <L < < <Dv v v v vL v v vrK$ K$ K$ K$ K$} K$ K$ K$\R$ R$ R$ R$ R$} R$ R$ R$j
> 
> 
> 
> 
>+ 
> 
> 
> 
> 
>r   