
    Vh6                     B    d dl mZ d dlmZ d dlmZmZ  G d de      Zy)    )GeometryField)DatabaseSchemaEditor)strip_quotestruncate_namec                        e Zd ZdZdZdZdZ fdZd Z fdZ	 fdZ
d fd		Z fd
Z fdZ fdZ fdZd Z	 d fd	Zd Zd Zd Z xZS )OracleGISSchemaEditora  
        INSERT INTO USER_SDO_GEOM_METADATA
            ("TABLE_NAME", "COLUMN_NAME", "DIMINFO", "SRID")
        VALUES (
            %(table)s,
            %(column)s,
            MDSYS.SDO_DIM_ARRAY(
                MDSYS.SDO_DIM_ELEMENT('LONG', %(dim0)s, %(dim2)s, %(tolerance)s),
                MDSYS.SDO_DIM_ELEMENT('LAT', %(dim1)s, %(dim3)s, %(tolerance)s)
            ),
            %(srid)s
        )zPCREATE INDEX %(index)s ON %(table)s(%(column)s) INDEXTYPE IS MDSYS.SPATIAL_INDEXz?DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = %(table)sz\DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = %(table)s AND COLUMN_NAME = %(column)sc                 2    t        |   |i | g | _        y N)super__init__geometry_sql)selfargskwargs	__class__s      \/home/dcms/DCMS/lib/python3.12/site-packages/django/contrib/gis/db/backends/oracle/schema.pyr   zOracleGISSchemaEditor.__init__   s    $)&)    c                 L    | j                   j                  j                  |      S r
   )
connectionopsgeo_quote_name)r   names     r   r   z$OracleGISSchemaEditor.geo_quote_name#   s    ""11$77r   c                     t        || j                  j                  j                        rt        |   t        |            S t        |   |      S r
   )
isinstancer   r   Adapterr   quote_valuestr)r   valuer   s     r   r   z!OracleGISSchemaEditor.quote_value&   sA    eT__008897&s5z22w"5))r   c                     t        |t              r|j                  r| j                  ||      gS t        |   ||      S r
   )r   r   spatial_index_create_spatial_index_sqlr   _field_indexes_sqlr   modelfieldr   s      r   r"   z(OracleGISSchemaEditor._field_indexes_sql+   s=    e]+0C0C225%@AAw)%77r   c                    t         |   |||      }t        |t              r| j                  j                  | j                  | j                  |j                  j                        | j                  |j                        |j                  d   |j                  d   |j                  d   |j                  d   |j                  |j                  dz         |S )Nr            )tablecolumndim0dim1dim2dim3	tolerancesrid)r   
column_sqlr   r   r   appendsql_add_geometry_metadatar   _metadb_tabler+   _extent
_tolerancer1   )r   r$   r%   include_defaultr2   r   s        r   r2   z OracleGISSchemaEditor.column_sql0   s    W'uoF
e]+$$..!001E1EF"11%,,?!MM!,!MM!,!MM!,!MM!,!&!1!1!JJ	
 r   c                 D    t         |   |       | j                          y r
   )r   create_modelrun_geometry_sqlr   r$   r   s     r   r;   z"OracleGISSchemaEditor.create_modelB   s    U#r   c                     t         |   |       | j                  | j                  d| j	                  |j
                  j                        iz         y )Nr*   )r   delete_modelexecute!sql_clear_geometry_table_metadatar   r5   r6   r=   s     r   r?   z"OracleGISSchemaEditor.delete_modelF   sI    U#22,,U[[-A-AB	
r   c                 F    t         |   ||       | j                          y r
   )r   	add_fieldr<   r#   s      r   rC   zOracleGISSchemaEditor.add_fieldO   s    %'r   c                 Z   t        |t              r| j                  | j                  | j	                  |j
                  j                        | j	                  |j                        dz         |j                  r!| j                  | j                  ||             t        | -  ||       y )N)r*   r+   )r   r   r@   !sql_clear_geometry_field_metadatar   r5   r6   r+   r    _delete_spatial_index_sqlr   remove_fieldr#   s      r   rG   z"OracleGISSchemaEditor.remove_fieldS   s    e]+LL66!001E1EF"11%,,? ""T;;E5IJUE*r   c                 V    | j                   D ]  }| j                  |        g | _         y r
   )r   r@   )r   sqls     r   r<   z&OracleGISSchemaEditor.run_geometry_sql`   s+    $$ 	CLL	r   c	           
      F   t         |   ||||||||       t        |t              xr |j                  }	t        |t              xr |j                  }
|	s$|
r"| j                  | j                  ||             y |	r%|
s"| j                  | j                  ||             y y y )N)strict)r   _alter_fieldr   r   r    r@   r!   rF   )r   r$   	old_field	new_fieldold_typenew_typeold_db_paramsnew_db_paramsrK   old_field_spatial_indexnew_field_spatial_indexr   s              r   rL   z"OracleGISSchemaEditor._alter_fielde   s     	 	 		
 y-0LY5L5L 	  y-0LY5L5L 	  '+BLL77yIJ$-DLL77yIJ .E$r   c                 t    t        t        |j                  j                        d|j                  dd      S )N__id   )r   r   r5   r6   r+   )r   r$   r%   s      r   _create_spatial_index_namez0OracleGISSchemaEditor._create_spatial_index_name   s.     &u{{';';<ellKR
 	
r   c                     | j                  ||      }| j                  | j                  |      | j                  |j                  j                        | j                  |j
                        dz  S )N)indexr*   r+   )rY   sql_add_spatial_index
quote_namer5   r6   r+   r   r$   r%   
index_names       r   r!   z/OracleGISSchemaEditor._create_spatial_index_sql   s^    44UEB
))__Z0__U[[%9%9:ooell3-
 
 	
r   c                 J    | j                  ||      }| j                  ||      S r
   )rY   _delete_index_sqlr^   s       r   rF   z/OracleGISSchemaEditor._delete_spatial_index_sql   s'    44UEB
%%eZ88r   )F)__name__
__module____qualname__r4   r\   rA   rE   r   r   r   r"   r2   r;   r?   rC   rG   r<   rL   rY   r!   rF   __classcell__)r   s   @r   r   r      sw    !	+ 
 	J &	' &
8*
8
$ 
 + KB

9r   r   N)django.contrib.gis.db.modelsr    django.db.backends.oracle.schemar   django.db.backends.utilsr   r   r    r   r   <module>rj      s    6 A @Q90 Q9r   