3
ช๔มg๓  ใ               @   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               @   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   ๚_/var/www/tester-filtro-web/env/lib/python3.6/site-packages/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   1   s    zTable.references_tablec             C   s   | j |kr|| _ d S )N)r   )r   r   r   r   r   r   r   4   s    
zTable.rename_table_referencesc             C   s   | j | jS )N)r   r   )r   r   r   r   r   8   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
   C   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   F   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   P   s    zColumns.__init__c                s*   fdd dj  fddtjD S )Nc                sB    j | }y j| }|r&dj||}W n tk
r<   Y nX |S )Nz{} {})r   r"   ฺformatฺ
IndexError)r	   ฺidxฺcolฺsuffix)r   r   r   ฺcol_strV   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   U   s    
zColumns.__str__)r   r   r   r   r   r   ฺ__classcell__r   r   )r   r   r!   M   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)r(   ฺcreate_index_namer#   r   )r   r   r   r(   r/   )r   r   r   r   f   s    zIndexName.__init__c             C   s   | j | j| j| jS )N)r/   r   r   r(   )r   r   r   r   r   k   s    zIndexName.__str__)r   r   r   r   r   r   r-   r   r   )r   r   r.   c   s   r.   c                   s*   e Zd Zf f f fdd	Zdd Z  ZS )ฺIndexColumnsc                s   || _ t j|||| d S )N)ฺ	opclassesr#   r   )r   r   r   r   r"   r1   )r   r   r   r   p   s    zIndexColumns.__init__c                s*   fdd dj  fddtjD S )Nc                sP   dj  j|  j| }y j| }|r4dj ||}W n tk
rJ   Y nX |S )Nz{} {})r$   r   r1   r"   r%   )r	   r&   r'   r(   )r   r   r   r)   u   s    
z%IndexColumns.__str__.<locals>.col_strz, c             3   s   | ]\}} ||V  qd S )Nr   )r*   r&   r	   )r)   r   r   r+      s    z'IndexColumns.__str__.<locals>.<genexpr>)r,   r   r   )r   r   )r)   r   r   r   t   s    zIndexColumns.__str__)r   r   r   r   r   r-   r   r   )r   r   r0   o   s   r0   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_columnsr4   r5   )r   r   r   r      s    zForeignKeyName.__init__c                s   t  j|p| jj|S )N)r#   r   r3   )r   r   )r   r   r   r      s    zForeignKeyName.references_tablec                s   t  j||p| jj||S )N)r#   r
   r3   )r   r   r	   )r   r   r   r
      s    z ForeignKeyName.references_columnc                s    t  j|| | jj|| d S )N)r#   r   r3   )r   r   r   )r   r   r   r      s    z&ForeignKeyName.rename_table_referencesc                s$   t  j||| | jj||| d S )N)r#   r   r3   )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 )Nr   )r6   Z	to_column)r4   r3   r   r   r5   )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   r2      s   r2   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   r8   r9   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>)ฺanyr9   ฺ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)r:   r
   )r*   r;   )r	   r   r   r   r+   บ   s   z.Statement.references_column.<locals>.<genexpr>)r<   r9   r=   )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   )r9   r=   r:   r   )r   r   r   r;   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   )r9   r=   r:   r   )r   r   r   r   r;   r   r   r   r   ร   s    
z"Statement.rename_column_referencesc             C   s   | j | j S )N)r8   r9   )r   r   r   r   r   ศ   s    zStatement.__str__N)
r   r   r   r   r   r   r
   r   r   r   r   r   r   r   r7   ฆ   s   r7   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| jgD }t j|| d S )Nc             S   s   g | ]}|j jqS r   )ฺtargetr	   )r*   r'   r   r   r   ๚
<listcomp>ั   s    z(Expressions.__init__.<locals>.<listcomp>)ฺcompilerฺexpressionsฺquote_valueฺqueryฺ	_gen_colsr#   r   )r   r   rB   rA   rC   r   )r   r   r   r   อ   s
    zExpressions.__init__c                s2   | j |krd S | jj||i| _t j|| d S )N)r   rB   Zrelabeled_cloner#   r   )r   r   r   )r   r   r   r   ิ   s    
z#Expressions.rename_table_referencesc             C   sf   | j |krd S t| j}g | _x<| jjj|gD ](}|jj|krH||j_| jj	|jj q0W || _d S )N)
r   r   rB   r   rA   rD   rE   r?   r	   ฺappend)r   r   r   r   rB   r'   r   r   r   r   ฺ   s    

z$Expressions.rename_column_referencesc             C   s*   | j j| j\}}t| j|}|t| S )N)rA   ฺcompilerB   ฺmaprC   ฺtuple)r   Zsqlฺparamsr   r   r   r   ๅ   s    zExpressions.__str__)r   r   r   r   r   r   r   r-   r   r   )r   r   r>   ฬ   s   r>   N)r   ฺcopyr   r   r   r   r!   r.   r0   r2   r7   r>   r   r   r   r   ฺ<module>   s   ""&