U
    8ÄT_	  ã                   @   s†   d 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dS )z~
Helpers to manipulate deferred DDL statements that might need to be adjusted or
discarded within when executing a migration.
c                   @   s@   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   s   dS )zU
        Return whether or not this instance references the specified table.
        F© ©ÚselfÚtabler   r   úE/tmp/pip-unpacked-wheel-dv63caxw/django/db/backends/ddl_references.pyÚreferences_table
   s    zReference.references_tablec                 C   s   dS )zV
        Return whether or not this instance references the specified column.
        Fr   ©r   r   Úcolumnr   r   r   Úreferences_column   s    zReference.references_columnc                 C   s   dS )zI
        Rename all references to the old_name to the new_table.
        Nr   ©r   Ú	old_tableÚ	new_tabler   r   r   Úrename_table_references   s    z!Reference.rename_table_referencesc                 C   s   dS )zL
        Rename all references to the old_column to the new_column.
        Nr   ©r   r   Ú
old_columnÚ
new_columnr   r   r   Úrename_column_references   s    z"Reference.rename_column_referencesc                 C   s   d| j jt| ƒf S )Nz<%s %r>)Ú	__class__Ú__name__Ústr©r   r   r   r   Ú__repr__"   s    zReference.__repr__c                 C   s   t dƒ‚d S )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   s   || _ || _d S ©N)r   Ú
quote_name)r   r   r   r   r   r   Ú__init__,   s    zTable.__init__c                 C   s
   | j |kS r   ©r   r   r   r   r   r   0   s    zTable.references_tablec                 C   s   | j |kr|| _ d S r   r!   r   r   r   r   r   3   s    
zTable.rename_table_referencesc                 C   s   |   | j¡S r   )r   r   r   r   r   r   r   7   s    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   s   || _ || _d S r   ©r   Úcolumns)r   r   r$   r   r   r   r    >   s    zTableColumns.__init__c                 C   s   | j |ko|| jkS r   r#   r   r   r   r   r
   B   s    zTableColumns.references_columnc                 C   s4   | j |kr0t| jƒD ]\}}||kr|| j|< qd S r   )r   Ú	enumerater$   )r   r   r   r   Úindexr	   r   r   r   r   E   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                    s   || _ || _tƒ  ||¡ d S r   )r   Úcol_suffixesÚsuperr    )r   r   r$   r   r(   ©r   r   r   r    O   s    zColumns.__init__c                    s*   ‡fdd„‰ d  ‡ fdd„tˆjƒD ƒ¡S )Nc                    sB   ˆ   | ¡}zˆ j| }|r&d ||¡}W n tk
r<   Y nX |S ©Nz{} {})r   r(   ÚformatÚ
IndexError©r	   ÚidxÚcolÚsuffixr   r   r   Úcol_strU   s    

z Columns.__str__.<locals>.col_strú, c                 3   s   | ]\}}ˆ ||ƒV  qd S r   r   ©Ú.0r/   r	   ©r2   r   r   Ú	<genexpr>_   s     z"Columns.__str__.<locals>.<genexpr>©Újoinr%   r$   r   r   ©r2   r   r   r   T   s    
zColumns.__str__)r   ©r   r   r   r   r    r   Ú__classcell__r   r   r*   r   r'   L   s   r'   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                    s   || _ || _tƒ  ||¡ d S r   )r1   Úcreate_index_namer)   r    )r   r   r$   r1   r>   r*   r   r   r    e   s    zIndexName.__init__c                 C   s   |   | j| j| j¡S r   )r>   r   r$   r1   r   r   r   r   r   j   s    zIndexName.__str__r;   r   r   r*   r   r=   b   s   r=   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚIndexColumnsr   c                    s   || _ tƒ  ||||¡ d S r   )Ú	opclassesr)   r    )r   r   r$   r   r(   r@   r*   r   r   r    o   s    zIndexColumns.__init__c                    s*   ‡fdd„‰ d  ‡ fdd„tˆjƒD ƒ¡S )Nc                    sP   d  ˆ  | ¡ˆ j| ¡}zˆ j| }|r4d  ||¡}W n tk
rJ   Y nX |S r+   )r,   r   r@   r(   r-   r.   r   r   r   r2   t   s    
z%IndexColumns.__str__.<locals>.col_strr3   c                 3   s   | ]\}}ˆ ||ƒV  qd S r   r   r4   r6   r   r   r7   €   s     z'IndexColumns.__str__.<locals>.<genexpr>r8   r   r   r:   r   r   s   s    zIndexColumns.__str__)r   r   )r   r   r   r    r   r<   r   r   r*   r   r?   n   s   r?   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_namer)   r    )r   Z
from_tableZfrom_columnsÚto_tableZ
to_columnsrC   rD   r*   r   r   r    †   s    zForeignKeyName.__init__c                    s   t ƒ  |¡p| j |¡S r   )r)   r   rB   r   r*   r   r   r   Œ   s    zForeignKeyName.references_tablec                    s   t ƒ  ||¡p| j ||¡S r   )r)   r
   rB   r   r*   r   r   r
   �   s    þz ForeignKeyName.references_columnc                    s    t ƒ  ||¡ | j ||¡ d S r   )r)   r   rB   r   r*   r   r   r   •   s    z&ForeignKeyName.rename_table_referencesc                    s$   t ƒ  |||¡ | j |||¡ d S r   )r)   r   rB   r   r*   r   r   r   ™   s    z'ForeignKeyName.rename_column_referencesc                 C   s.   | j | jj| jjd dœ }|  | j| j|¡S )Né    )rE   Z	to_column)rC   rB   r   r$   rD   )r   r1   r   r   r   r   �   s
    
þzForeignKeyName.__str__)r   r   r   r   r    r   r
   r   r   r   r<   r   r   r*   r   rA   ƒ   s   rA   c                   @   s@   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 )Ú	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   s   || _ || _d S r   ©ÚtemplateÚparts)r   rI   rJ   r   r   r   r    ­   s    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   ©r5   Úpartr!   r   r   r7   ²   s   ÿz-Statement.references_table.<locals>.<genexpr>©ÚanyrJ   Ú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)rK   r
   rL   ©r	   r   r   r   r7   ¸   s   ÿz.Statement.references_column.<locals>.<genexpr>rN   r   r   rQ   r   r
   ·   s    þzStatement.references_columnc                 C   s*   | j  ¡ D ]}t|dƒr
| ||¡ q
d S )Nr   )rJ   rP   rK   r   )r   r   r   rM   r   r   r   r   ½   s    
z!Statement.rename_table_referencesc                 C   s,   | j  ¡ D ]}t|dƒr
| |||¡ q
d S )Nr   )rJ   rP   rK   r   )r   r   r   r   rM   r   r   r   r   Â   s    
z"Statement.rename_column_referencesc                 C   s   | j | j S r   rH   r   r   r   r   r   Ç   s    zStatement.__str__N)
r   r   r   r   r    r   r
   r   r   r   r   r   r   r   rG   ¥   s   rG   N)	r   r   r   r"   r'   r=   r?   rA   rG   r   r   r   r   Ú<module>   s   ""