o
    e                     @   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|i | g | _d S N)super__init__geometry_sql)selfargskwargs	__class__ ^/var/www/html/venv/lib/python3.10/site-packages/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   $_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opsAdapterr   quote_valuestr)r
   valuer   r   r   r      s   z MySQLGISSchemaEditor.quote_valueFc                    sl   t  |||}t|tr4|jr4|js4| 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r6|jr6| jjj}| j|| ||||jj	d }z| 
| W n ty5   td| Y nw 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   r2   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   sH   | j D ]}z| | W q ty   td| d Y qw g | _ d S )NzCannot create SPATIAL INDEX z-. Only MyISAM, Aria, and InnoDB support them.)r	   r/   r   r0   r1   )r
   r3   r   r   r   r+   N   s   


z+MySQLGISSchemaEditor.create_spatial_indexes)F)__name__
__module____qualname__r%   r.   r   r   r   r   r*   r,   r2   r&   r+   __classcell__r   r   r   r   r   
   s    
r   )
loggingdjango.contrib.gis.db.modelsr   	django.dbr   django.db.backends.mysql.schemar   	getLoggerr0   r   r   r   r   r   <module>   s    
