
    D6i                     T    d dl Zd dlZ d dlmZ ddlmZ d Zd Zd Zd Z	d	 Z
	 dd
Zy)    N)ClauseAdapter   )chained_joinc                     g }| j                  d      D ]5  }t        ||      }|j                  |       |j                  j                  }7 |S )N.)splitgetattrappendmapperclass_)pathclsrelationships	path_namerels        j/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/sqlalchemy_utils/relationships/__init__.pypath_to_relationshipsr      sO    MZZ_  	c9%S!jj      c                 H    |D ]  }t        |      j                  |       }  | S N)r   traverse)exprselectables
selectables      r   
adapt_exprr      s+    ! 8
Z(11$78Kr   c           	      2   |j                   j                  t        j                  |j                   j                        }| j	                  |t        |j                   j                  t        j                  |      j                  |            j	                  |t        |j                   j                  t        j                  |      j                  |            S t        j                  j	                  |||      }|j                  }| j	                  ||      S r   )property	secondarysaaliasjoinr   secondaryjoininspectr   primaryjoinormonclause)r   
left_aliasright_aliasrelationshipsecondary_aliasr!   r&   s          r   inverse_joinr+      s    &&2((<#8#8#B#BC%%33

:&11
 $%%11

;'22
	
  vv{{;
LA=={H55r   c                     | j                   j                   t        | j                   j                  |      S t        j
                  j                  | j                  ||       j                  S r   )	r   r   r   r$   r   r%   r!   parentr&   )r)   r    s     r   relationship_to_correlationr.   /   sX    &&2!!--
 	

 vv{{<..|DMMMr   c                    t        j                  |      j                  }|g}t        | dd        D ]a  \  }}|j	                  t         j
                  j                  |j                  j                               t        |||   ||dz      | |         }c | d   j                  j                  t        j                  | d   j                  j                        }|j                  |t        | d   j                  j                  |t        j                  |d         j                              }|j	                  |       ||fS )Nr   )r   r#   r   	enumerater
   r%   aliasedr   r   r+   r   r   r    r!   r   r"   )r   
leaf_modelr   aliasesindexr)   r*   s          r   chained_inverse_joinr6   9   s   J'22JlG(qr):; 
|rvv~~l&9&9&@&@AB!	(:M%<P


 R!!++7((=#4#=#=#G#GH__b!**88

72;'22

 	'wr   c           
         t        t        t        ||                   }t        j                  |      }t        ||      \  }	}
|r. |j                  |D cg c]  }t        |gd |
D          c} }t        |d   |
d         }|t        ||      }|j                  |	j                        }|r|j                  ||n|       }|j                  |      S c c}w )Nc              3   Z   K   | ]#  }t        j                  |      j                   % y wr   )r   r#   r   ).0r    s     r   	<genexpr>z/select_correlated_expression.<locals>.<genexpr>\   s     R

5 1 < <Rs   )+r0   )listreversedr   r   selectr6   order_byr   r.   select_fromr   	correlatewhere)
root_modelr   r   r3   from_objr>   r@   r   query	join_exprr4   o	conditions                r   select_correlated_expressionrH   P   s     "7j"IJKMIIdOE-mZHIw " 1SR'RS
 ,M",=wr{KIy(3	i223EH,@jQ;;y!!s   C)NNT)
sqlalchemyr   sqlalchemy.ormsqlalchemy.sql.utilr   r   r   r   r+   r.   r6   rH    r   r   <module>rM      s7      - &60N0 QU"r   