o
    ó<âg¬  ã                   @   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    