U
    f                     @   sJ   d dl Z d dlmZ d dlmZ d dlmZ e dZG dd deZ	dS )    N)GeometryField)OperationalError)DatabaseSchemaEditorzdjango.contrib.gisc                       s~   e Zd ZdZdZ fddZ fddZ fddZd fd
d	Z fddZ	 fddZ
 fddZdd Zdd Z  ZS )MySQLGISSchemaEditorz7CREATE SPATIAL INDEX %(index)s ON %(table)s(%(column)s)z!DROP INDEX %(index)s ON %(table)sc                    s   t  j|| g | _d S N)super__init__geometry_sql)selfargskwargs	__class__ O/tmp/pip-unpacked-wheel-_jot26k8/django/contrib/gis/db/backends/mysql/schema.pyr      s    zMySQLGISSchemaEditor.__init__c                    s    t |tr| jsdS t |S )NT)
isinstancer   Z$_supports_limited_data_type_defaultsr   skip_default)r
   fieldr   r   r   r      s    z!MySQLGISSchemaEditor.skip_defaultc                    s,   t || jjjr t t|S t |S r   )r   
connectionopsZAdapterr   quote_valuestr)r
   valuer   r   r   r      s    z MySQLGISSchemaEditor.quote_valueFc                    sl   t  |||}t|trh|jrh|jsh| jjj}|j	j
}| j| j|| ||||||jd  |S )N)indextablecolumn)r   
column_sqlr   r   spatial_indexnullr   r   
quote_name_metadb_tabler	   appendsql_add_spatial_index_create_spatial_index_namer   )r
   modelr   include_defaultr   qnr!   r   r   r   r   !   s    
zMySQLGISSchemaEditor.column_sqlc                    s   t  | |   d S r   )r   create_modelcreate_spatial_indexes)r
   r%   r   r   r   r(   1   s    z!MySQLGISSchemaEditor.create_modelc                    s   t  || |   d S r   )r   	add_fieldr)   r
   r%   r   r   r   r   r*   5   s    zMySQLGISSchemaEditor.add_fieldc                    s   t |trn|jrn| jjj}| j|| ||||jj	d }z| 
| W n  tk
rl   td| Y nX t || d S )N)r   r   z`Couldn't remove spatial index: %s (may be expected if your storage engine doesn't support them).)r   r   r   r   r   r   sql_drop_spatial_indexr$   r    r!   executer   loggererrorr   remove_field)r
   r%   r   r'   sqlr   r   r   r0   9   s    


z!MySQLGISSchemaEditor.remove_fieldc                 C   s   d|j j|jf S )Nz%s_%s_id)r    r!   r   r+   r   r   r   r$   K   s    z/MySQLGISSchemaEditor._create_spatial_index_namec              	   C   sL   | j D ]:}z| | W q tk
r>   td| d Y qX qg | _ d S )NzCannot create SPATIAL INDEX z-. Only MyISAM, Aria, and InnoDB support them.)r	   r-   r   r.   r/   )r
   r1   r   r   r   r)   N   s    

z+MySQLGISSchemaEditor.create_spatial_indexes)F)__name__
__module____qualname__r#   r,   r   r   r   r   r(   r*   r0   r$   r)   __classcell__r   r   r   r   r   
   s   
r   )
loggingZdjango.contrib.gis.db.modelsr   Z	django.dbr   Zdjango.db.backends.mysql.schemar   	getLoggerr.   r   r   r   r   r   <module>   s
   
