o
    :Zc                     @   s,   d dl mZ d dlmZ G dd deZdS )    )DatabaseSchemaEditor)DatabaseErrorc                       s   e Zd ZdZdZdZdZdZdZdZ	g dZ
 fd	d
Zdd Zd fdd	Zdd Z fddZ fddZ fddZ fddZd fdd	Z  ZS )SpatialiteSchemaEditorz[SELECT AddGeometryColumn(%(table)s, %(column)s, %(srid)s, %(geom_type)s, %(dim)s, %(null)s)z0SELECT CreateSpatialIndex(%(table)s, %(column)s)z#DROP TABLE idx_%(table)s_%(column)szUSELECT RecoverGeometryColumn(%(table)s, %(column)s, %(srid)s, %(geom_type)s, %(dim)s)z3SELECT DiscardGeometryColumn(%(table)s, %(column)s)z9DELETE FROM %(geom_table)s WHERE f_table_name = %(table)szYUPDATE %(geom_table)s SET f_table_name = %(new_table)s WHERE f_table_name = %(old_table)s)geometry_columnsgeometry_columns_authgeometry_columns_timegeometry_columns_statisticsc                    s   t  j|i | g | _d S N)super__init__geometry_sql)selfargskwargs	__class__ f/var/www/chikooza/env/lib/python3.10/site-packages/django/contrib/gis/db/backends/spatialite/schema.pyr      s   
zSpatialiteSchemaEditor.__init__c                 C   s   | j j|S r	   )
connectionopsgeo_quote_name)r   namer   r   r   r   "   s   z%SpatialiteSchemaEditor.geo_quote_nameFc              
      s   ddl m} t||st |||S | j| j| |j	j
| |j|j| |j|jt|j d  |jrN| j| j| |j	j
| |jd  dS )Nr   GeometryField)tablecolumnsrid	geom_typedimnullr   r   )NN)#django.contrib.gis.db.models.fieldsr   
isinstancer
   
column_sqlr   appendsql_add_geometry_columnr   _metadb_tabler   r   r   r   intr   spatial_indexsql_add_spatial_index
quote_name)r   modelfieldinclude_defaultr   r   r   r   r#   %   s*   




z!SpatialiteSchemaEditor.column_sqlc                 C   sH   |  | j| |jj| |jd  |  | j|jj|jd  d S )Nr    )executesql_remove_geometry_metadatar+   r&   r'   r   sql_drop_spatial_index)r   r,   r-   r   r   r   remove_geometry_metadata?   s   
z/SpatialiteSchemaEditor.remove_geometry_metadatac                    s,   t  | | jD ]}| | q	g | _d S r	   )r
   create_modelr   r/   )r   r,   sqlr   r   r   r3   M   s   

z#SpatialiteSchemaEditor.create_modelc              	      s   ddl m} |jjD ]}t||r| || q
| jD ]}z| | j|| 	|jj
d  W q ty8   Y qw t j|fi | d S )Nr   r   )
geom_tabler   )r!   r   r&   local_fieldsr"   r2   geometry_tablesr/   sql_discard_geometry_columnsr+   r'   r   r
   delete_model)r   r,   r   r   r-   r5   r   r   r   r9   T   s"   

z#SpatialiteSchemaEditor.delete_modelc                    sT   ddl m} t||r!| || | jD ]}| | qg | _d S t || d S )Nr   r   )r!   r   r"   r#   r   r/   r
   	add_field)r   r,   r-   r   r4   r   r   r   r:   g   s   


z SpatialiteSchemaEditor.add_fieldc                    s:   ddl m} t||r| j||d d S t || d S )Nr   r   )delete_field)r!   r   r"   _remake_tabler
   remove_field)r   r,   r-   r   r   r   r   r=   r   s   
z#SpatialiteSchemaEditor.remove_fieldTc              
      s4  ddl m} |jjD ]}t||r#| | j| || |jd  q
t	 
|||| | jD ]}z| | j|| || |d  W q0 tyO   Y q0w |jjD ]C}t||rv| | j| || |j|j| |j|jd  t|ddr| | j| d||jf | d||jf d	  qTd S )
Nr   r   r    )r5   	old_table	new_table)r   r   r   r   r   r)   Fz	idx_%s_%s)r>   r?   )r!   r   r&   r6   r"   r/   r0   r+   r   r
   alter_db_tabler7   sql_update_geometry_columnsr   sql_recover_geometry_metadatar   r   r   r   getattrsql_rename_table)r   r,   old_db_tablenew_db_tabledisable_constraintsr   r-   r5   r   r   r   r@   ~   sN   







z%SpatialiteSchemaEditor.alter_db_table)F)T)__name__
__module____qualname__r%   r*   r1   rB   r0   r8   rA   r7   r   r   r#   r2   r3   r9   r:   r=   r@   __classcell__r   r   r   r   r      s*    r   N)!django.db.backends.sqlite3.schemar   django.db.utilsr   r   r   r   r   r   <module>   s    