o
    ó<âgë  ã                   @   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                       sz   e 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)c                    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*   0   s   z!MySQLGISSchemaEditor.create_modelc                    s   t ƒ  ||¡ |  ¡  d S r   )r   Ú	add_fieldr+   ©r
   r'   r   r   r   r   r,   4   s   zMySQLGISSchemaEditor.add_fieldc                    sn   t |tƒr.|jr.|js.|  ||¡}|  ||¡}z|  |¡ W n ty-   t 	d|¡ Y nw t
ƒ  ||¡ d S )Nz`Couldn't remove spatial index: %s (may be expected if your storage engine doesn't support them).)r   r   r   r    r&   Ú_delete_index_sqlÚexecuter   ÚloggerÚerrorr   Úremove_field)r
   r'   r   Ú
index_nameÚsqlr   r   r   r2   8   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&   G   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
   r4   r   r   r   r+   J   s   

ÿÿ
z+MySQLGISSchemaEditor.create_spatial_indexes)F)Ú__name__Ú
__module__Ú__qualname__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    
