
    Hwg                         d Z ddlmZ  G d d      Z G d de      Z G d de      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z	 G d de      Z
 G d de      Zy)z~
Helpers to manipulate deferred DDL statements that might need to be adjusted or
discarded within when executing a migration.
    )deepcopyc                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)		Referencez0Base class that defines the reference interface.c                      y)zU
        Return whether or not this instance references the specified table.
        F selftables     X/var/www/horilla/myenv/lib/python3.12/site-packages/django/db/backends/ddl_references.pyreferences_tablezReference.references_table            c                      y)zV
        Return whether or not this instance references the specified column.
        Fr   r	   r
   columns      r   references_columnzReference.references_column   r   r   c                      y)zI
        Rename all references to the old_name to the new_table.
        Nr   r	   	old_table	new_tables      r   rename_table_referencesz!Reference.rename_table_references        	r   c                      y)zL
        Rename all references to the old_column to the new_column.
        Nr   )r	   r
   
old_column
new_columns       r   rename_column_referencesz"Reference.rename_column_references   r   r   c                 N    d| j                   j                  dt        |       dS )N< >)	__class____name__strr	   s    r   __repr__zReference.__repr__#   s     NN33SY??r   c                     t        d      )Nz>Subclasses must define how they should be converted to string.)NotImplementedErrorr$   s    r   __str__zReference.__str__&   s    !L
 	
r   N)
r"   
__module____qualname____doc__r   r   r   r   r%   r(   r   r   r   r   r      s$    :@
r   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)TablezHold a reference to a table.c                      || _         || _        y N)r
   
quote_name)r	   r
   r0   s      r   __init__zTable.__init__/   s    
$r   c                      | j                   |k(  S r/   r
   r   s     r   r   zTable.references_table3   s    zzU""r   c                 2    | j                   |k(  r|| _         y y r/   r3   r   s      r   r   zTable.rename_table_references6   s    ::""DJ #r   c                 8    | j                  | j                        S r/   )r0   r
   r$   s    r   r(   zTable.__str__:   s    tzz**r   N)r"   r)   r*   r+   r1   r   r   r(   r   r   r   r-   r-   ,   s    &%##+r   r-   c                   "    e Zd ZdZd Zd Zd Zy)TableColumnsz9Base class for references to multiple columns of a table.c                      || _         || _        y r/   r
   columns)r	   r
   r:   s      r   r1   zTableColumns.__init__A   s    
r   c                 @    | j                   |k(  xr || j                  v S r/   r9   r   s      r   r   zTableColumns.references_columnE   s    zzU"=v'==r   c                     | j                   |k(  r3t        | j                        D ]  \  }}||k(  s|| j                  |<    y y r/   )r
   	enumerater:   )r	   r
   r   r   indexr   s         r   r   z%TableColumns.rename_column_referencesH   sE    ::!*4<<!8 5vZ'*4DLL'5 r   N)r"   r)   r*   r+   r1   r   r   r   r   r   r7   r7   >   s    C>5r   r7   c                   *     e Zd ZdZd fd	Zd Z xZS )Columnsz(Hold a reference to one or many columns.c                 B    || _         || _        t        |   ||       y r/   )r0   col_suffixessuperr1   )r	   r
   r:   r0   rB   r!   s        r   r1   zColumns.__init__R   s!    $((r   c                 j      fddj                  fdt         j                        D              S )Nc                     j                  |       }	 j                  |   }|rdj                  ||      }|S # t        $ r Y |S w xY wNz{} {})r0   rB   format
IndexErrorr   idxcolsuffixr	   s       r   col_strz Columns.__str__.<locals>.col_strX   sY    //&)C**3/!..f5C J  Js   #9 	AA, c              3   6   K   | ]  \  }} ||        y wr/   r   .0rJ   r   rM   s      r   	<genexpr>z"Columns.__str__.<locals>.<genexpr>b   !      
%0S&GFC 
   joinr=   r:   r	   rM   s   `@r   r(   zColumns.__str__W   s1    	 yy 
4=dll4K
 
 	
r   )r   r"   r)   r*   r+   r1   r(   __classcell__r!   s   @r   r@   r@   O   s    2)

r   r@   c                   (     e Zd ZdZ fdZd Z xZS )	IndexNamez"Hold a reference to an index name.c                 B    || _         || _        t        |   ||       y r/   )rL   create_index_namerC   r1   )r	   r
   r:   rL   r^   r!   s        r   r1   zIndexName.__init__j   s!    !2(r   c                 d    | j                  | j                  | j                  | j                        S r/   )r^   r
   r:   rL   r$   s    r   r(   zIndexName.__str__o   s#    %%djj$,,LLr   rX   rZ   s   @r   r\   r\   g   s    ,)
Mr   r\   c                   &     e Zd Zd fd	Zd Z xZS )IndexColumnsc                 8    || _         t        | 	  ||||       y r/   )	opclassesrC   r1   )r	   r
   r:   r0   rB   rc   r!   s         r   r1   zIndexColumns.__init__t   s    "\Br   c                 j      fddj                  fdt         j                        D              S )Nc                     dj                  j                  |       j                  |         }	 j                  |   }|rdj                  ||      }|S # t        $ r Y |S w xY wrF   )rG   r0   rc   rB   rH   rI   s       r   rM   z%IndexColumns.__str__.<locals>.col_stry   so     ..!8$..:MNC**3/!..f5C J  Js   #A 	A#"A#rN   c              3   6   K   | ]  \  }} ||        y wr/   r   rP   s      r   rR   z'IndexColumns.__str__.<locals>.<genexpr>   rS   rT   rU   rW   s   `@r   r(   zIndexColumns.__str__x   s1    
	 yy 
4=dll4K
 
 	
r   )r   r   )r"   r)   r*   r1   r(   rY   rZ   s   @r   ra   ra   s   s    C
r   ra   c                   P     e Zd ZdZ fdZ fdZ fdZ fdZ fdZd Z	 xZ
S )ForeignKeyNamez'Hold a reference to a foreign key name.c                 d    t        ||      | _        || _        || _        t        |   ||       y r/   )r7   to_referencesuffix_templatecreate_fk_namerC   r1   )r	   
from_tablefrom_columnsto_table
to_columnsrk   rl   r!   s          r   r1   zForeignKeyName.__init__   s7     ):>.,	
r   c                 \    t         |   |      xs | j                  j                  |      S r/   )rC   r   rj   )r	   r
   r!   s     r   r   zForeignKeyName.references_table   s0    w'. 
$2C2C2T2T3
 	
r   c                 `    t         |   ||      xs | j                  j                  ||      S r/   )rC   r   rj   )r	   r
   r   r!   s      r   r   z ForeignKeyName.references_column   s7    w(6
 @00?	@r   c                 ^    t         |   ||       | j                  j                  ||       y r/   )rC   r   rj   r	   r   r   r!   s      r   r   z&ForeignKeyName.rename_table_references   s(    '	9=11)YGr   c                 b    t         |   |||       | j                  j                  |||       y r/   )rC   r   rj   )r	   r
   r   r   r!   s       r   r   z'ForeignKeyName.rename_column_references   s,    (
JG225*jQr   c                     | j                   | j                  j                  | j                  j                  d   dz  }| j	                  | j                  | j                  |      S )Nr   )ro   	to_column)rk   rj   r
   r:   rl   )r	   rL   s     r   r(   zForeignKeyName.__str__   sY    %%))//**2215)
 
 ""4::t||VDDr   )r"   r)   r*   r+   r1   r   r   r   r   r(   rY   rZ   s   @r   rh   rh      s(    1
"

@
HREr   rh   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)		Statementz
    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                      || _         || _        y r/   templateparts)r	   r|   r}   s      r   r1   zStatement.__init__   s     
r   c                 \    t        fd| j                  j                         D              S )Nc              3   \   K   | ]#  }t        |d       xr |j                         % yw)r   N)hasattrr   )rQ   partr
   s     r   rR   z-Statement.references_table.<locals>.<genexpr>   s4      
 D,-N$2G2G2NN
s   ),anyr}   valuesr   s    `r   r   zStatement.references_table   s*     


))+
 
 	
r   c                 `    t        fd| j                  j                         D              S )Nc              3   ^   K   | ]$  }t        |d       xr |j                         & yw)r   N)r   r   )rQ   r   r   r
   s     r   rR   z.Statement.references_column.<locals>.<genexpr>   s7      
 D-.X43I3I%QW3XX
s   *-r   r   s    ``r   r   zStatement.references_column   s*     


))+
 
 	
r   c                     | j                   j                         D ]!  }t        |d      s|j                  ||       # y )Nr   )r}   r   r   r   )r	   r   r   r   s       r   r   z!Statement.rename_table_references   s;    JJ%%' 	CDt67,,Y	B	Cr   c                     | j                   j                         D ]"  }t        |d      s|j                  |||       $ y )Nr   )r}   r   r   r   )r	   r
   r   r   r   s        r   r   z"Statement.rename_column_references   s=    JJ%%' 	MDt78--eZL	Mr   c                 4    | j                   | j                  z  S r/   r{   r$   s    r   r(   zStatement.__str__   s    }}tzz))r   N)
r"   r)   r*   r+   r1   r   r   r   r   r(   r   r   r   ry   ry      s'    

C
M
*r   ry   c                   4     e Zd Z fdZ fdZd Zd Z xZS )Expressionsc                     || _         || _        || _        | j                   j                  j	                  | j                  g      D cg c]  }|j
                  j                   }}t        | !  ||       y c c}w r/   )	compilerexpressionsquote_valuequery	_gen_colstargetr   rC   r1   )r	   r
   r   r   r   rK   r:   r!   s          r   r1   zExpressions.__init__   sw     && }}**44d6F6F5GH
 JJ
 
 	(	
s   	A9c                     | j                   |k7  ry | j                  j                  ||i      | _        t        |   ||       y r/   )r
   r   relabeled_clonerC   r   rt   s      r   r   z#Expressions.rename_table_references   s?    ::"++;;Y	<RS'	9=r   c                 r   | j                   |k7  ry t        | j                        }g | _        | j                  j
                  j                  |g      D ][  }|j                  j                  |k(  r||j                  _        | j                  j                  |j                  j                         ] || _        y r/   )
r
   r   r   r:   r   r   r   r   r   append)r	   r
   r   r   r   rK   s         r   r   z$Expressions.rename_column_references   s    ::t//0==&&00+? 	3Czz  J.$.

!LL

 1 12	3 'r   c                     | j                   j                  | j                        \  }}t        | j                  |      }|t        |      z  S r/   )r   compiler   mapr   tuple)r	   sqlparamss      r   r(   zExpressions.__str__   sA    mm++D,<,<=VT%%v.U6]""r   )r"   r)   r*   r1   r   r   r(   rY   rZ   s   @r   r   r      s    )>	'#r   r   N)r+   copyr   r   r-   r7   r@   r\   ra   rh   ry   r   r   r   r   <module>r      s    !
 !
H+I +$55 5"
l 
0	M 	M
7 
.+E\ +E\$*	 $*N#, #r   