
    	it                     J    d dl mZ d dlmZ d dlmZmZ  G d de          ZdS )    )GeometryField)DatabaseSchemaEditor)ColFuncc                   v     e Zd ZdZdZdZdZdZd Z fdZ	dd	 fd

Z
 fdZ	 d fd	Zd Z fdZd Z xZS )PostGISSchemaEditorGISTGIST_GEOMETRY_OPS_NDzST_ConvexHull(%(expressions)s)zLALTER COLUMN %(column)s TYPE %(type)s USING ST_Force3D(%(column)s)::%(type)szLALTER COLUMN %(column)s TYPE %(type)s USING ST_Force2D(%(column)s)::%(type)sc                 @    | j         j                            |          S N)
connectionopsgeo_quote_name)selfnames     e/srv/django_bis/venv311/lib/python3.11/site-packages/django/contrib/gis/db/backends/postgis/schema.pyr   z"PostGISSchemaEditor.geo_quote_name   s    "11$777    c                 n    t          |dd          rdS t                                          ||          S )Nspatial_indexFT)getattrsuper_field_should_be_indexed)r   modelfield	__class__s      r   r   z,PostGISSchemaEditor._field_should_be_indexed   s6    5/511 	4ww//u===r   N)fieldsc                    |)t          |          dk    st          |d         d          s t                      j        |fd|i|S  | j        ||d         fi |S )N   r   geodeticr   )lenhasattrr   _create_index_sql_create_spatial_index_sql)r   r   r   kwargsr   s       r   r"   z%PostGISSchemaEditor._create_index_sql   sp    >S[[A--WVAY
5S5S-,577,ULL6LVLLL-t-eVAYII&IIIr   c                 `   t          |d          rt          |d          s&t                                          ||||||          S |j        dk    r|j        dk    r| j        }n%|j        dk    r|j        dk    r| j        }n| j        }||                     |j                  |ddz  g fg fS )z6
        Special case when dimension changed.
        dim       )columntype	collation)	r!   r   _alter_column_type_sqlr&   sql_alter_column_to_3dsql_alter_column_to_2dsql_alter_column_type
quote_namer*   )	r   table	old_field	new_fieldnew_typeold_collationnew_collation	sql_alterr   s	           r   r-   z*PostGISSchemaEditor._alter_column_type_sql    s     y%(( 		50I0I 	7711y)X}m   =A)-1"4"43II]aIMQ$6$63II2I "ooi.>??$!#   
 	
r   Fc	           
         t                                          ||||||||           t          |t                    o|j        }	t          |t                    o|j        }
|	s-|
r+|                     |                     ||                     d S |	r-|
s-|                     |                     ||                     d S d S d S )N)strict)r   _alter_field
isinstancer   r   executer#   _delete_spatial_index_sql)r   r   r3   r4   old_typer5   old_db_paramsnew_db_paramsr:   old_field_spatial_indexnew_field_spatial_indexr   s              r   r;   z PostGISSchemaEditor._alter_field>   s    	 	 		
 		
 		
 y-00LY5L 	  y-00LY5L 	  ' 	K+B 	KLL77yIIJJJJJ$ 	K-D 	KLL77yIIJJJJJ	K 	K 	K 	Kr   c                 P    |                      |j        j        |j        gd          S )N_id)_create_index_name_metadb_tabler*   )r   r   r   s      r   _create_spatial_index_namez.PostGISSchemaEditor._create_spatial_index_name_   s#    &&u{';el^USSSr   c                 b   d }d }|g}|j         dk    r't          t          d |          | j                  }d }n|j        dk    r|j        s| j        g}|                    d          x}s|                     ||          }t                      
                    |||d| j        z  ||          S )NRASTER)templater'   r   z	 USING %s)r   r   using	opclassesexpressions)	geom_typer   r   rast_index_templater&   	geographygeom_index_ops_ndgetrI   r   r"   geom_index_type)	r   r   r   r$   rO   rN   r   r   r   s	           r   r#   z-PostGISSchemaEditor._create_spatial_index_sqlb   s    	?h&& s4//$:RSSSKFFY]]5?]/0I

6*** 	A225%@@Dww(( 44# ) 
 
 	
r   c                 Z    |                      ||          }|                     ||          S r   )rI   _delete_index_sql)r   r   r   
index_names       r   r>   z-PostGISSchemaEditor._delete_spatial_index_sqlz   s-    44UEBB
%%eZ888r   )F)__name__
__module____qualname__rU   rS   rQ   r.   r/   r   r   r"   r-   r;   rI   r#   r>   __classcell__)r   s   @r   r   r      s       O.: 	W  	W 8 8 8> > > > >
 26 J J J J J J J
 
 
 
 
N K K K K K KBT T T
 
 
 
 
09 9 9 9 9 9 9r   r   N)django.contrib.gis.db.modelsr   $django.db.backends.postgresql.schemar   django.db.models.expressionsr   r   r    r   r   <module>ra      s    6 6 6 6 6 6 E E E E E E 2 2 2 2 2 2 2 2v9 v9 v9 v9 v9. v9 v9 v9 v9 v9r   