o
    e                     @   s,   d dl mZ d dlmZ G dd deZdS )    )DatabaseError)DatabaseSchemaEditorc                       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 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__ c/var/www/html/venv/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.modelsr   
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_metadataD   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   T   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   [   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:   p   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=   |   s   
z#SpatialiteSchemaEditor.remove_fieldc              
      sX  ddl m} ||ks| jjjr| | krd S |jjD ]}t||r6| 	| j
| || |jd  qt ||| | jD ]}z| 	| j|| || |d  W qB tya   Y qBw |jjD ]C}t||r| 	| j| || |j|j| |j|jd  t|ddr| 	| j| d||jf | d||jf d	  qfd S )
Nr   r   r    )r5   	old_table	new_table)r   r   r   r   r   r)   Fz	idx_%s_%s)r>   r?   )r!   r   r   featuresignores_table_name_caselowerr&   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_tabler   r-   r5   r   r   r   rC      sp   






z%SpatialiteSchemaEditor.alter_db_table)F)__name__
__module____qualname__r%   r*   r1   rE   r0   r8   rD   r7   r   r   r#   r2   r3   r9   r:   r=   rC   __classcell__r   r   r   r   r      s,    r   N)	django.dbr   !django.db.backends.sqlite3.schemar   r   r   r   r   r   <module>   s    