o
    ^"<f  ã                   @   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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__© úg/var/www/html/kck/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_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:   h   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   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.dbr   Ú!django.db.backends.sqlite3.schemar   r   r   r   r   r   Ú<module>   s    