
    h!                         S r SSKJr   " S S5      r " S S\5      r " S S\5      r " S	 S
\5      r " S S\5      r " S S\5      r " S S\5      r	 " S S\5      r
 " S S\5      rg)z~
Helpers to manipulate deferred DDL statements that might need to be adjusted or
discarded within when executing a migration.
    )deepcopyc                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)	Reference	   z0Base class that defines the reference interface.c                     g)zE
Return whether or not this instance references the specified table.
F selftables     S/var/www/html/env/lib/python3.13/site-packages/django/db/backends/ddl_references.pyreferences_tableReference.references_table            c                     g)zF
Return whether or not this instance references the specified column.
Fr   r
   r   columns      r   references_columnReference.references_column   r   r   c                     g)zE
Return whether or not this instance references the specified index.
Fr   r
   r   indexs      r   references_indexReference.references_index   r   r   c                     g)z9
Rename all references to the old_name to the new_table.
Nr   r
   	old_table	new_tables      r   rename_table_references!Reference.rename_table_references        	r   c                     g)z<
Rename all references to the old_column to the new_column.
Nr   )r
   r   
old_column
new_columns       r   rename_column_references"Reference.rename_column_references$   r!   r   c                 R    SU R                   R                  < S[        U 5      < S3$ )N< >)	__class____name__strr
   s    r   __repr__Reference.__repr__*   s     NN33SY??r   c                     [        S5      e)Nz>Subclasses must define how they should be converted to string.)NotImplementedErrorr.   s    r   __str__Reference.__str__-   s    !L
 	
r   r   N)r,   
__module____qualname____firstlineno____doc__r   r   r   r   r%   r/   r3   __static_attributes__r   r   r   r   r   	   s)    :@
r   r   c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
Table3   zHold a reference to a table.c                     Xl         X l        g N)r   
quote_name)r
   r   r?   s      r   __init__Table.__init__6   s    
$r   c                      U R                   U:H  $ r>   r   r	   s     r   r   Table.references_table:   s    zzU""r   c                 N    U R                  U5      =(       a    [        U 5      U:H  $ r>   )r   r-   r   s      r   r   Table.references_index=   s!    $$U+BD	U0BBr   c                 2    U R                   U:X  a  X l         g g r>   rC   r   s      r   r   Table.rename_table_references@   s    ::""J #r   c                 8    U R                  U R                  5      $ r>   r?   r   r.   s    r   r3   Table.__str__D   s    tzz**r   rJ   N)r,   r5   r6   r7   r8   r@   r   r   r   r3   r9   r   r   r   r;   r;   3   s    &%#C#+r   r;   c                   *    \ rS rSrSrS rS rS rSrg)TableColumnsH   z9Base class for references to multiple columns of a table.c                     Xl         X l        g r>   r   columns)r
   r   rQ   s      r   r@   TableColumns.__init__K   s    
r   c                 J    U R                   U:H  =(       a    X R                  ;   $ r>   rP   r   s      r   r   TableColumns.references_columnO   s    zzU"=v'==r   c                     U R                   U:X  a4  [        U R                  5       H  u  pEXR:X  d  M  X0R                  U'   M     g g r>   )r   	enumeraterQ   )r
   r   r#   r$   r   r   s         r   r%   %TableColumns.rename_column_referencesR   s:    ::!*4<<!8'*4LL' "9 r   )rQ   r   N)	r,   r5   r6   r7   r8   r@   r   r%   r9   r   r   r   rM   rM   H   s    C>5r   rM   c                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )ColumnsY   z(Hold a reference to one or many columns.c                 <   > X0l         X@l        [        TU ]  X5        g r>   )r?   col_suffixessuperr@   )r
   r   rQ   r?   r\   r+   s        r   r@   Columns.__init__\   s    $((r   c                 n   ^ ^ U 4S jmSR                  U4S j[        T R                  5       5       5      $ )Nc                    > TR                  U 5      n TR                  U   nU(       a  SR                  X#5      nU$ ! [         a     U$ f = fNz{} {})r?   r\   format
IndexErrorr   idxcolsuffixr
   s       r   col_str Columns.__str__.<locals>.col_strb   sW    //&)C**3/!..5C J  Js   '= 
A
A, c              3   8   >#    U  H  u  pT" X!5      v   M     g 7fr>   r   .0re   r   rh   s      r   	<genexpr>"Columns.__str__.<locals>.<genexpr>l         
4K[SGF  4K   joinrV   rQ   r
   rh   s   `@r   r3   Columns.__str__a   s1    	 yy 
4=dll4K
 
 	
r   )r\   r?   )r   	r,   r5   r6   r7   r8   r@   r3   r9   __classcell__r+   s   @r   rY   rY   Y   s    2)

 
r   rY   c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )	IndexNameq   z"Hold a reference to an index name.c                 <   > X0l         X@l        [        TU ]  X5        g r>   )rg   create_index_namer]   r@   )r
   r   rQ   rg   r}   r+   s        r   r@   IndexName.__init__t   s    !2(r   c                 d    U R                  U R                  U R                  U R                  5      $ r>   )r}   r   rQ   rg   r.   s    r   r3   IndexName.__str__y   s#    %%djj$,,LLr   )r}   rg   rv   rx   s   @r   rz   rz   q   s    ,)
M Mr   rz   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )IndexColumns}   c                 2   > XPl         [        TU ]	  XX45        g r>   )	opclassesr]   r@   )r
   r   rQ   r?   r\   r   r+   s         r   r@   IndexColumns.__init__~   s    "Br   c                 n   ^ ^ U 4S jmSR                  U4S j[        T R                  5       5       5      $ )Nc                    > SR                  TR                  U 5      TR                  U   5      n TR                  U   nU(       a  SR                  X#5      nU$ ! [         a     U$ f = fra   )rb   r?   r   r\   rc   rd   s       r   rh   %IndexColumns.__str__.<locals>.col_str   sm     ..!8$..:MNC**3/!..5C J  Js   'A 
A('A(rj   c              3   8   >#    U  H  u  pT" X!5      v   M     g 7fr>   r   rl   s      r   rn   'IndexColumns.__str__.<locals>.<genexpr>   rp   rq   rr   rt   s   `@r   r3   IndexColumns.__str__   s1    
	 yy 
4=dll4K
 
 	
r   )r   )r   r   )r,   r5   r6   r7   r@   r3   r9   rw   rx   s   @r   r   r   }   s    C
 
r   r   c                   b   ^  \ rS rSrSrU 4S jrU 4S jrU 4S jrU 4S jrU 4S jr	S r
S	rU =r$ )
ForeignKeyName   z'Hold a reference to a foreign key name.c                 ^   > [        X45      U l        XPl        X`l        [        TU ]  UU5        g r>   )rM   to_referencesuffix_templatecreate_fk_namer]   r@   )r
   
from_tablefrom_columnsto_table
to_columnsr   r   r+   s          r   r@   ForeignKeyName.__init__   s1     )>.,	
r   c                 f   > [         TU ]  U5      =(       d    U R                  R                  U5      $ r>   )r]   r   r   )r
   r   r+   s     r   r   ForeignKeyName.references_table   s0    w'. 
$2C2C2T2T3
 	
r   c                 f   > [         TU ]  X5      =(       d    U R                  R                  X5      $ r>   )r]   r   r   )r
   r   r   r+   s      r   r    ForeignKeyName.references_column   s3    w(
 @00?	@r   c                 Z   > [         TU ]  X5        U R                  R                  X5        g r>   )r]   r   r   r
   r   r   r+   s      r   r   &ForeignKeyName.rename_table_references   s$    '	=11)Gr   c                 ^   > [         TU ]  XU5        U R                  R                  XU5        g r>   )r]   r%   r   )r
   r   r#   r$   r+   s       r   r%   'ForeignKeyName.rename_column_references   s(    (JG225jQr   c                     U R                   U R                  R                  U R                  R                  S   S.-  nU R	                  U R                  U R                  U5      $ )Nr   )r   	to_column)r   r   r   rQ   r   )r
   rg   s     r   r3   ForeignKeyName.__str__   sY    %%))//**2215)
 
 ""4::t||VDDr   )r   r   r   )r,   r5   r6   r7   r8   r@   r   r   r   r%   r3   r9   rw   rx   s   @r   r   r      s.    1
"

@
HRE Er   r   c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)	Statement   z
Statement template and formatting parameters container.

Allows keeping a reference to a statement without interpolating identifiers
that might have to be adjusted if they're referencing a table or column
that is removed
c                     Xl         X l        g r>   templateparts)r
   r   r   s      r   r@   Statement.__init__   s     
r   c                 ^   ^ [        U4S jU R                  R                  5        5       5      $ )Nc              3   l   >#    U  H)  n[        US 5      =(       a    UR                  T5      v   M+     g7f)r   N)hasattrr   )rm   partr   s     r   rn   -Statement.references_table.<locals>.<genexpr>   s3      
+ D,-N$2G2G2NN+s   14anyr   valuesr	   s    `r   r   Statement.references_table   s*     


))+
 
 	
r   c                 b   ^^ [        UU4S jU R                  R                  5        5       5      $ )Nc              3   n   >#    U  H*  n[        US 5      =(       a    UR                  TT5      v   M,     g7f)r   N)r   r   )rm   r   r   r   s     r   rn   .Statement.references_column.<locals>.<genexpr>   s6      
+ D-.X43I3I%QW3XX+   25r   r   s    ``r   r   Statement.references_column   *     


))+
 
 	
r   c                 b   ^^ [        UU4S jU R                  R                  5        5       5      $ )Nc              3   n   >#    U  H*  n[        US 5      =(       a    UR                  TT5      v   M,     g7f)r   N)r   r   )rm   r   r   r   s     r   rn   -Statement.references_index.<locals>.<genexpr>   s5      
+ D,-U$2G2Gu2UU+r   r   r   s    ``r   r   Statement.references_index   r   r   c                     U R                   R                  5        H'  n[        US5      (       d  M  UR                  X5        M)     g )Nr   )r   r   r   r   )r
   r   r   r   s       r   r   !Statement.rename_table_references   s5    JJ%%'Dt677,,YB (r   c                     U R                   R                  5        H(  n[        US5      (       d  M  UR                  XU5        M*     g )Nr%   )r   r   r   r%   )r
   r   r#   r$   r   s        r   r%   "Statement.rename_column_references   s7    JJ%%'Dt788--eL (r   c                 4    U R                   U R                  -  $ r>   r   r.   s    r   r3   Statement.__str__   s    }}tzz))r   )r   r   N)r,   r5   r6   r7   r8   r@   r   r   r   r   r%   r3   r9   r   r   r   r   r      s,    


C
M
*r   r   c                   @   ^  \ rS rSrU 4S jrU 4S jrS rS rSrU =r	$ )Expressions   c                    > X0l         X l        X@l        U R                   R                  R	                  U R                  /5       Vs/ s H  nUR
                  R                  PM     nn[        TU ]!  X5        g s  snf r>   )	compilerexpressionsquote_valuequery	_gen_colstargetr   r]   r@   )r
   r   r   r   r   rf   rQ   r+   s          r   r@   Expressions.__init__   sr     && }}**44d6F6F5GH
H JJH 	 
 	(	
s    A8c                    > U R                   U:w  a  g U R                  R                  X05      U l        [        TU ]  X5        g r>   )r   r   relabeled_cloner]   r   r   s      r   r   #Expressions.rename_table_references   s;    ::"++;;Y<RS'	=r   c                 v   U R                   U:w  a  g [        U R                  5      n/ U l        U R                  R
                  R                  U/5       H\  nUR                  R                  U:X  a  X5R                  l        U R                  R                  UR                  R                  5        M^     X@l        g r>   )
r   r   r   rQ   r   r   r   r   r   append)r
   r   r#   r$   r   rf   s         r   r%   $Expressions.rename_column_references   s    ::t//0==&&00+?Czz  J.$.

!LL

 1 12 @ 'r   c                     U R                   R                  U R                  5      u  p[        U R                  U5      nU[        U5      -  $ r>   )r   compiler   mapr   tuple)r
   sqlparamss      r   r3   Expressions.__str__  s?    mm++D,<,<=T%%v.U6]""r   )rQ   r   r   r   )
r,   r5   r6   r7   r@   r   r%   r3   r9   rw   rx   s   @r   r   r      s    )>	'# #r   r   N)r8   copyr   r   r;   rM   rY   rz   r   r   r   r   r   r   r   <module>r      s   
 '
 '
T+I +*55 5"
l 
0	M 	M
7 
.+E\ +E\**	 **Z#, #r   