o
    ÕèFhÂ  ã                   @   s¢   d Z ddlmZ G dd„ dƒZG dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ	G dd„ deƒZ
G dd„ deƒZdS )z~
Helpers to manipulate deferred DDL statements that might need to be adjusted or
discarded within when executing a migration.
é    )Údeepcopyc                   @   ó@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )Ú	Referencez0Base class that defines the reference interface.c                 C   ó   dS )zU
        Return whether or not this instance references the specified table.
        F© ©ÚselfÚtabler   r   úZ/var/www/html/loop/nvenv/lib/python3.10/site-packages/django/db/backends/ddl_references.pyÚreferences_table   ó   zReference.references_tablec                 C   r   )zV
        Return whether or not this instance references the specified column.
        Fr   ©r   r	   Úcolumnr   r   r
   Úreferences_column   r   zReference.references_columnc                 C   r   )zI
        Rename all references to the old_name to the new_table.
        Nr   ©r   Ú	old_tableÚ	new_tabler   r   r
   Úrename_table_references   r   z!Reference.rename_table_referencesc                 C   r   )zL
        Rename all references to the old_column to the new_column.
        Nr   ©r   r	   Ú
old_columnÚ
new_columnr   r   r
   Úrename_column_references   r   z"Reference.rename_column_referencesc                 C   s   d| j jt| ƒf S )Nz<%s %r>)Ú	__class__Ú__name__Ústr©r   r   r   r
   Ú__repr__$   ó   zReference.__repr__c                 C   s   t dƒ‚)Nz>Subclasses must define how they should be converted to string.)ÚNotImplementedErrorr   r   r   r
   Ú__str__'   s   ÿzReference.__str__N)
r   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r   r
   r   	   s    r   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTablezHold a reference to a table.c                 C   ó   || _ || _d S ©N)r	   Ú
quote_name)r   r	   r&   r   r   r
   Ú__init__0   ó   
zTable.__init__c                 C   s
   | j |kS r%   ©r	   r   r   r   r
   r   4   s   
zTable.references_tablec                 C   s   | j |kr
|| _ d S d S r%   r)   r   r   r   r
   r   7   s   

ÿzTable.rename_table_referencesc                 C   s   |   | j¡S r%   )r&   r	   r   r   r   r
   r   ;   ó   zTable.__str__N)r   r    r!   r"   r'   r   r   r   r   r   r   r
   r#   -   s    r#   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTableColumnsz9Base class for references to multiple columns of a table.c                 C   r$   r%   ©r	   Úcolumns)r   r	   r-   r   r   r
   r'   B   r(   zTableColumns.__init__c                 C   s   | j |ko	|| jv S r%   r,   r   r   r   r
   r   F   r   zTableColumns.references_columnc                 C   s8   | j |krt| jƒD ]\}}||kr|| j|< q
d S d S r%   )r	   Ú	enumerater-   )r   r	   r   r   Úindexr   r   r   r
   r   I   s   

€ýz%TableColumns.rename_column_referencesN)r   r    r!   r"   r'   r   r   r   r   r   r
   r+   ?   s
    r+   c                       s*   e Zd ZdZd‡ fdd„	Zdd„ Z‡  ZS )ÚColumnsz(Hold a reference to one or many columns.r   c                    ó   || _ || _tƒ  ||¡ d S r%   )r&   Úcol_suffixesÚsuperr'   )r   r	   r-   r&   r2   ©r   r   r
   r'   S   ó   zColumns.__init__c                    ó*   ‡fdd„‰ d  ‡ fdd„tˆjƒD ƒ¡S )Nc                    sF   ˆ   | ¡}zˆ j| }|rd ||¡}W |S W |S  ty"   Y |S w ©Nz{} {})r&   r2   ÚformatÚ
IndexError©r   ÚidxÚcolÚsuffixr   r   r
   Úcol_strY   s   

üþþz Columns.__str__.<locals>.col_strú, c                 3   ó   � | ]
\}}ˆ ||ƒV  qd S r%   r   ©Ú.0r;   r   ©r>   r   r
   Ú	<genexpr>c   ó   € 
ÿz"Columns.__str__.<locals>.<genexpr>©Újoinr.   r-   r   r   ©r>   r   r
   r   X   s   
ÿzColumns.__str__)r   ©r   r    r!   r"   r'   r   Ú__classcell__r   r   r4   r
   r0   P   s    r0   c                       s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )Ú	IndexNamez"Hold a reference to an index name.c                    r1   r%   )r=   Úcreate_index_namer3   r'   )r   r	   r-   r=   rL   r4   r   r
   r'   k   r5   zIndexName.__init__c                 C   s   |   | j| j| j¡S r%   )rL   r	   r-   r=   r   r   r   r
   r   p   r   zIndexName.__str__rI   r   r   r4   r
   rK   h   s    rK   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚIndexColumnsr   c                    s   || _ tƒ  ||||¡ d S r%   )Ú	opclassesr3   r'   )r   r	   r-   r&   r2   rN   r4   r   r
   r'   u   s   zIndexColumns.__init__c                    r6   )Nc                    sT   d  ˆ  | ¡ˆ j| ¡}zˆ j| }|rd  ||¡}W |S W |S  ty)   Y |S w r7   )r8   r&   rN   r2   r9   r:   r   r   r
   r>   z   s   
üþþz%IndexColumns.__str__.<locals>.col_strr?   c                 3   r@   r%   r   rA   rC   r   r
   rD   †   rE   z'IndexColumns.__str__.<locals>.<genexpr>rF   r   r   rH   r
   r   y   s   ÿzIndexColumns.__str__)r   r   )r   r    r!   r'   r   rJ   r   r   r4   r
   rM   t   s    rM   c                       sX   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd	„Z‡ fd
d„Zdd„ Z	‡  Z
S )ÚForeignKeyNamez'Hold a reference to a foreign key name.c                    s*   t ||ƒ| _|| _|| _tƒ  ||¡ d S r%   )r+   Úto_referenceÚsuffix_templateÚcreate_fk_namer3   r'   )r   Ú
from_tableÚfrom_columnsÚto_tableÚ
to_columnsrQ   rR   r4   r   r
   r'   Ž   s   	þzForeignKeyName.__init__c                    s   t ƒ  |¡p| j |¡S r%   )r3   r   rP   r   r4   r   r
   r   Ÿ   s   ÿzForeignKeyName.references_tablec                    s   t ƒ  ||¡p| j ||¡S r%   )r3   r   rP   r   r4   r   r
   r   ¤   s
   ÿþz ForeignKeyName.references_columnc                    s    t ƒ  ||¡ | j ||¡ d S r%   )r3   r   rP   r   r4   r   r
   r   ©   s   z&ForeignKeyName.rename_table_referencesc                    s$   t ƒ  |||¡ | j |||¡ d S r%   )r3   r   rP   r   r4   r   r
   r   ­   s   z'ForeignKeyName.rename_column_referencesc                 C   s.   | j | jj| jjd dœ }|  | j| j|¡S )Nr   )rU   Ú	to_column)rQ   rP   r	   r-   rR   )r   r=   r   r   r
   r   ±   s
   
þzForeignKeyName.__str__)r   r    r!   r"   r'   r   r   r   r   r   rJ   r   r   r4   r
   rO   ‹   s    rO   c                   @   r   )Ú	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                 K   r$   r%   ©ÚtemplateÚparts)r   rZ   r[   r   r   r
   r'   Â   r(   zStatement.__init__c                    s   t ‡ fdd„| j ¡ D ƒƒS )Nc                 3   s$   � | ]}t |d ƒo| ˆ ¡V  qdS )r   N)Úhasattrr   ©rB   Úpartr)   r   r
   rD   Ç   s
   € ÿ
ÿz-Statement.references_table.<locals>.<genexpr>©Úanyr[   Úvaluesr   r   r)   r
   r   Æ   s   þzStatement.references_tablec                    s   t ‡ ‡fdd„| j ¡ D ƒƒS )Nc                 3   s&   � | ]}t |d ƒo| ˆˆ ¡V  qdS )r   N)r\   r   r]   ©r   r	   r   r
   rD   Í   s
   € ÿ
ÿz.Statement.references_column.<locals>.<genexpr>r_   r   r   rb   r
   r   Ì   s   þzStatement.references_columnc                 C   s*   | j  ¡ D ]}t|dƒr| ||¡ qd S )Nr   )r[   ra   r\   r   )r   r   r   r^   r   r   r
   r   Ò   s
   
€þz!Statement.rename_table_referencesc                 C   s,   | j  ¡ D ]}t|dƒr| |||¡ qd S )Nr   )r[   ra   r\   r   )r   r	   r   r   r^   r   r   r
   r   ×   s
   
€þz"Statement.rename_column_referencesc                 C   s   | j | j S r%   rY   r   r   r   r
   r   Ü   r*   zStatement.__str__N)
r   r    r!   r"   r'   r   r   r   r   r   r   r   r   r
   rX   ¹   s    rX   c                       s8   e Zd Z‡ fdd„Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )	ÚExpressionsc                    s@   || _ || _|| _dd„ | j j | jg¡D ƒ}tƒ  ||¡ d S )Nc                 S   s   g | ]}|j j‘qS r   )Útargetr   )rB   r<   r   r   r
   Ú
<listcomp>å   s    ÿÿz(Expressions.__init__.<locals>.<listcomp>)ÚcompilerÚexpressionsÚquote_valueÚqueryÚ	_gen_colsr3   r'   )r   r	   rg   rf   rh   r-   r4   r   r
   r'   á   s   þzExpressions.__init__c                    s2   | j |krd S | j ||i¡| _tƒ  ||¡ d S r%   )r	   rg   Úrelabeled_cloner3   r   r   r4   r   r
   r   ë   s   
z#Expressions.rename_table_referencesc                 C   sb   | j |krd S t| jƒ}g | _| jj |g¡D ]}|jj|kr#||j_| j 	|jj¡ q|| _d S r%   )
r	   r   rg   r-   rf   ri   rj   rd   r   Úappend)r   r	   r   r   rg   r<   r   r   r
   r   ñ   s   


z$Expressions.rename_column_referencesc                 C   s*   | j  | j¡\}}t| j|ƒ}|t|ƒ S r%   )rf   Úcompilerg   Úmaprh   Útuple)r   ÚsqlÚparamsr   r   r
   r   ü   s   zExpressions.__str__)r   r    r!   r'   r   r   r   rJ   r   r   r4   r
   rc   à   s
    
rc   N)r"   Úcopyr   r   r#   r+   r0   rK   rM   rO   rX   rc   r   r   r   r
   Ú<module>   s    $.'