B
    ©0H[  ã               @   s,   d dl mZ d dlmZ G dd„ deƒZdS )é    )ÚBaseDatabaseSchemaEditor)ÚNOT_PROVIDEDc                   s˜   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdd„ Zdd„ Zdd„ Z‡ fdd„Z‡ fdd„Z‡ fdd„Zdd„ Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚDatabaseSchemaEditorz+RENAME TABLE %(old_table)s TO %(new_table)szMODIFY %(column)s %(type)s NULLz#MODIFY %(column)s %(type)s NOT NULLzMODIFY %(column)s %(type)sz,ALTER TABLE %(table)s DROP COLUMN %(column)szCALTER TABLE %(table)s CHANGE %(old_column)s %(new_column)s %(type)sz)ALTER TABLE %(table)s DROP INDEX %(name)sz/ALTER TABLE %(table)s DROP FOREIGN KEY %(name)sz DROP INDEX %(name)s ON %(table)szGALTER TABLE %(table)s ADD CONSTRAINT %(name)s PRIMARY KEY (%(columns)s)z&ALTER TABLE %(table)s DROP PRIMARY KEYc             C   s   dd l }| ||jj¡S )Nr   )ZMySQLdb.convertersÚescapeÚ
convertersZconversions)ÚselfÚvalueZMySQLdb© r	   úcC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\db\backends\mysql\schema.pyÚquote_value   s    z DatabaseSchemaEditor.quote_valuec             C   s$   |  | j¡}|d k	o"| ¡ | jjkS )N)Údb_typeÚ
connectionÚlowerZ_limited_data_types)r   Úfieldr   r	   r	   r
   Ú_is_limited_data_type    s    z*DatabaseSchemaEditor._is_limited_data_typec             C   s
   |   |¡S )N)r   )r   r   r	   r	   r
   Úskip_default$   s    z!DatabaseSchemaEditor.skip_defaultc                s^   t ƒ  ||¡ |  |¡rZ|jd tfkrZ|  |¡}|  d|  |jj	¡|  |j
¡dœ |g¡ d S )Nz%UPDATE %(table)s SET %(column)s = %%s)ÚtableÚcolumn)ÚsuperÚ	add_fieldr   Údefaultr   Úeffective_defaultÚexecuteZ
quote_nameÚ_metaÚdb_tabler   )r   Úmodelr   r   )Ú	__class__r	   r
   r   '   s    
zDatabaseSchemaEditor.add_fieldc                s\   t ƒ  ||¡}| jj | j ¡ |jj¡}|dkrJ|rJ| ¡ dkrJ|j	rJdS |  
|¡rXdS |S )NZInnoDBÚ
ForeignKeyF)r   Ú_field_should_be_indexedr   ZintrospectionZget_storage_engineÚcursorr   r   Úget_internal_typeZdb_constraintr   )r   r   r   Zcreate_indexZstorage)r   r	   r
   r   3   s    
z-DatabaseSchemaEditor._field_should_be_indexedc                s`   |j  |d ¡}| ¡ dkrL| j||jgdd�}|sL|  | j||gdd�¡ tƒ j||f|žŽ S )a—  
        MySQL can remove an implicit FK index on a field when that field is
        covered by another index like a unique_together. "covered" here means
        that the more complex index starts like the simpler one.
        http://bugs.mysql.com/bug.php?id=37910 / Django ticket #24757
        We check here before removing the [unique|index]_together if we have to
        recreate a FK index.
        r   r   T)ÚindexÚ )Úsuffix)	r   Ú	get_fieldr    Z_constraint_namesr   r   Z_create_index_sqlr   Ú_delete_composed_index)r   r   ÚfieldsÚargsZfirst_fieldZconstraint_names)r   r	   r
   r%   D   s    	z+DatabaseSchemaEditor._delete_composed_indexc             C   s   |j r|d7 }n|d7 }|S )zt
        Keep the null property of the old field. If it has changed, it will be
        handled separately.
        z NULLz	 NOT NULL)Únull)r   r   Únew_typer	   r	   r
   Ú_set_field_new_type_null_statusT   s    
z4DatabaseSchemaEditor._set_field_new_type_null_statusc                s   |   ||¡}tƒ  ||||¡S )N)r*   r   Ú_alter_column_type_sql)r   r   Ú	old_fieldÚ	new_fieldr)   )r   r	   r
   r+   _   s    z+DatabaseSchemaEditor._alter_column_type_sqlc                s   |   ||¡}tƒ  ||||¡S )N)r*   r   Ú_rename_field_sql)r   r   r,   r-   r)   )r   r	   r
   r.   c   s    z&DatabaseSchemaEditor._rename_field_sql)Ú__name__Ú
__module__Ú__qualname__Zsql_rename_tableZsql_alter_column_nullZsql_alter_column_not_nullZsql_alter_column_typeZsql_delete_columnZsql_rename_columnZsql_delete_uniqueZsql_delete_fkZsql_delete_indexZsql_create_pkZsql_delete_pkr   r   r   r   r   r%   r*   r+   r.   Ú__classcell__r	   r	   )r   r
   r      s(   r   N)Zdjango.db.backends.base.schemar   Zdjango.db.modelsr   r   r	   r	   r	   r
   Ú<module>   s   