3
S^o                 @   s4   d dl Z d dlmZ d dlmZ G dd deZdS )    N)BaseDatabaseSchemaEditor)NOT_PROVIDEDc                   sx   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ZdZdd Zdd Z f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)szCALTER TABLE %(table)s CHANGE %(old_column)s %(new_column)s %(type)sz)ALTER TABLE %(table)s DROP INDEX %(name)sznALTER TABLE %(table)s ADD CONSTRAINT %(name)s FOREIGN KEY (%(column)s) REFERENCES %(to_table)s (%(to_column)s)z/ALTER TABLE %(table)s DROP FOREIGN KEY %(name)sz DROP INDEX %(name)s ON %(table)sz MODIFY %(column)s %(type)s NULL;z$MODIFY %(column)s %(type)s NOT NULL;zGALTER TABLE %(table)s ADD CONSTRAINT %(name)s PRIMARY KEY (%(columns)s)z&ALTER TABLE %(table)s DROP PRIMARY KEYc             C   s   ddl m} |j|j|S )Nr   )MySQLConverter)Zmysql.connector.conversionr   quoteescape)selfvaluer    r
   O/tmp/pip-build-8app2_gc/mysql-connector-python/mysql/connector/django/schema.pyquote_value!   s    z DatabaseSchemaEditor.quote_valuec             C   s   |j | jdkS )z
        MySQL doesn't accept default values for longtext and longblob
        and implicitly treats these columns as nullable.
        longtextlongblob)r   r   )Zdb_type
connection)r   fieldr
   r
   r   skip_default&   s    z!DatabaseSchemaEditor.skip_defaultc                sb   t t| j|| | j|r^|jd tfkr^| j|}| jd| j|j	j
| j|jd |g d S )Nz%UPDATE %(table)s SET %(column)s = %%s)tablecolumn)superr   	add_fieldr   defaultr   effective_defaultexecuteZ
quote_name_metadb_tabler   )r   modelr   r   )	__class__r
   r   r   -   s    

zDatabaseSchemaEditor.add_fieldc                sd   | j jj| j j |jj}|dkrTx0|jjD ]$}|jr,|j r,|j	 dkr,d|_q,W t
t| j|S )NZInnoDBZ
ForeignKeyF)r   ZintrospectionZget_storage_enginecursorr   r   Zlocal_fieldsZdb_indexuniqueZget_internal_typer   r   _model_indexes_sql)r   r   Zstorager   )r   r
   r   r   9   s    
z'DatabaseSchemaEditor._model_indexes_sqlc                s.   |j r|d7 }n|d7 }tt| j||||S )Nz NULLz	 NOT NULL)nullr   r   _alter_column_type_sql)r   r   Z	old_fieldZ	new_fieldZnew_type)r   r
   r   r!   G   s
    

z+DatabaseSchemaEditor._alter_column_type_sql)__name__
__module____qualname__Zsql_rename_tableZsql_alter_column_nullZsql_alter_column_not_nullZsql_alter_column_typeZsql_rename_columnZsql_delete_uniqueZsql_create_fkZsql_delete_fkZsql_delete_indexZalter_string_set_nullZalter_string_drop_nullZsql_create_pkZsql_delete_pkr   r   r   r   r!   __classcell__r
   r
   )r   r   r      s$   r   )ZdjangoZdjango.db.backends.base.schemar   Zdjango.db.modelsr   r   r
   r
   r
   r   <module>   s   