3
­©Þ[   ã               @   sv   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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-install-j7i95hgp/django/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.)ÚNotImplementedError)r   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 )N)r   )r   r   r   r   r   r   0   s    zTable.references_tablec             C   s   | j |kr|| _ d S )N)r   )r   r	   r
   r   r   r   r   3   s    
zTable.rename_table_referencesc             C   s   | j | jƒS )N)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 )N)r   Úcolumns)r   r   r   r   r   r   r   >   s    zTableColumns.__init__c             C   s   | j |ko|| jkS )N)r   r   )r   r   r   r   r   r   r   B   s    zTableColumns.references_columnc             C   s8   | j |kr4x(t| jƒD ]\}}||kr|| j|< qW d S )N)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f f‡ fdd„	Zdd„ Z‡  ZS )ÚColumnsz(Hold a reference to one or many columns.c                s   || _ || _tƒ j||ƒ d S )N)r   Úcol_suffixesÚsuperr   )r   r   r   r   r    )r   r   r   r   O   s    zColumns.__init__c                s*   ‡fdd„‰ dj ‡ fdd„tˆjƒD ƒƒS )Nc                s4   yˆ j | ƒˆ j|  S  tk
r.   ˆ j | ƒS X d S )N)r   r    Ú
IndexError)r   Úidx)r   r   r   Úcol_strU   s    z Columns.__str__.<locals>.col_strz, c             3   s   | ]\}}ˆ ||ƒV  qd S )Nr   )Ú.0r#   r   )r$   r   r   ú	<genexpr>[   s    z"Columns.__str__.<locals>.<genexpr>)Újoinr   r   )r   r   )r$   r   r   r   T   s    zColumns.__str__)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ƒ j||ƒ d S )N)ÚsuffixÚcreate_index_namer!   r   )r   r   r   r*   r+   )r   r   r   r   a   s    zIndexName.__init__c             C   s   | j | j| j| jƒS )N)r+   r   r   r*   )r   r   r   r   r   f   s    zIndexName.__str__)r   r   r   r   r   r   r(   r   r   )r   r   r)   ^   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ƒ j||ƒ d S )N)r   Úto_referenceÚsuffix_templateÚcreate_fk_namer!   r   )r   Z
from_tableZfrom_columnsÚto_tableZ
to_columnsr.   r/   )r   r   r   r   m   s    zForeignKeyName.__init__c                s   t ƒ j|ƒp| jj|ƒS )N)r!   r   r-   )r   r   )r   r   r   r   s   s    zForeignKeyName.references_tablec                s   t ƒ j||ƒp| jj||ƒS )N)r!   r   r-   )r   r   r   )r   r   r   r   v   s    z ForeignKeyName.references_columnc                s    t ƒ j||ƒ | jj||ƒ d S )N)r!   r   r-   )r   r	   r
   )r   r   r   r   |   s    z&ForeignKeyName.rename_table_referencesc                s$   t ƒ j|||ƒ | jj|||ƒ d S )N)r!   r   r-   )r   r   r   r   )r   r   r   r   €   s    z'ForeignKeyName.rename_column_referencesc             C   s.   | j | jj| jjd dœ }| j| j| j|ƒS )Né    )r0   Z	to_column)r.   r-   r   r   r/   )r   r*   r   r   r   r   „   s    zForeignKeyName.__str__)r   r   r   r   r   r   r   r   r   r   r(   r   r   )r   r   r,   j   s   r,   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 )N)ÚtemplateÚparts)r   r3   r4   r   r   r   r   ”   s    zStatement.__init__c                s   t ‡ fdd„| jjƒ D ƒƒS )Nc             3   s"   | ]}t |d ƒo|jˆ ƒV  qdS )r   N)Úhasattrr   )r%   Úpart)r   r   r   r&   š   s   z-Statement.references_table.<locals>.<genexpr>)Úanyr4   Úvalues)r   r   r   )r   r   r   ˜   s    
zStatement.references_tablec                s   t ‡ ‡fdd„| jjƒ D ƒƒS )Nc             3   s$   | ]}t |d ƒo|jˆˆ ƒV  qdS )r   N)r5   r   )r%   r6   )r   r   r   r   r&       s   z.Statement.references_column.<locals>.<genexpr>)r7   r4   r8   )r   r   r   r   )r   r   r   r   ž   s    zStatement.references_columnc             C   s.   x(| j jƒ D ]}t|dƒr|j||ƒ qW d S )Nr   )r4   r8   r5   r   )r   r	   r
   r6   r   r   r   r   ¤   s    
z!Statement.rename_table_referencesc             C   s0   x*| j jƒ D ]}t|dƒr|j|||ƒ qW d S )Nr   )r4   r8   r5   r   )r   r   r   r   r6   r   r   r   r   ©   s    
z"Statement.rename_column_referencesc             C   s   | j | j S )N)r3   r4   )r   r   r   r   r   ®   s    zStatement.__str__N)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   Œ   s   r2   N)r   r   r   r   r   r)   r,   r2   r   r   r   r   Ú<module>   s   ""