
vÅÏ^L  ã               @   sP   d  d l  m Z d  d l m Z d  d l m Z m Z Gd d „  d e ƒ Z d S)é    )ÚGeometryField)ÚDatabaseSchemaEditor)Ústrip_quotesÚtruncate_namec                   sÁ   e  Z d  Z d Z d Z d Z d Z d Z ‡  f d d †  Z d d	 „  Z	 d
 ‡  f d d † Z
 ‡  f d d †  Z ‡  f d d †  Z ‡  f d d †  Z ‡  f d d †  Z d d „  Z d d „  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DROP INDEX %(index)sz?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                s    t  ƒ  j | | Ž  g  |  _ d  S)N)ÚsuperÚ__init__Úgeometry_sql)ÚselfÚargsÚkwargs)Ú	__class__© úN/tmp/pip-build-8lau8j11/django/django/contrib/gis/db/backends/oracle/schema.pyr      s    zOracleGISSchemaEditor.__init__c             C   s   |  j  j j | ƒ S)N)Ú
connectionÚopsÚgeo_quote_name)r
   Únamer   r   r   r      s    z$OracleGISSchemaEditor.geo_quote_nameFc                s  t  ƒ  j | | | ƒ } t | t ƒ r| j j } |  j j |  j d |  j	 | ƒ d |  j	 | j
 ƒ d | j d d | j d d | j d d	 | j d
 d | j d | j i ƒ | j r|  j j |  j d |  j |  j | | ƒ ƒ d |  j | ƒ d |  j | j
 ƒ i ƒ | S)NÚtableÚcolumnZdim0r   Zdim1é   Zdim2é   Zdim3é   Z	toleranceÚsridÚindex)r   Ú
column_sqlÚ
isinstancer   Ú_metaÚdb_tabler	   ÚappendÚsql_add_geometry_metadatar   r   Z_extentZ
_tolerancer   Úspatial_indexÚsql_add_spatial_indexÚ
quote_nameÚ_create_spatial_index_name)r
   ÚmodelÚfieldÚinclude_defaultr   r   )r   r   r   r   "   s(    				z OracleGISSchemaEditor.column_sqlc                s   t  ƒ  j | ƒ |  j ƒ  d  S)N)r   Úcreate_modelÚrun_geometry_sql)r
   r%   )r   r   r   r(   <   s    z"OracleGISSchemaEditor.create_modelc                s=   t  ƒ  j | ƒ |  j |  j d |  j | j j ƒ i ƒ d  S)Nr   )r   Údelete_modelÚexecuteÚ!sql_clear_geometry_table_metadatar   r   r   )r
   r%   )r   r   r   r*   @   s    z"OracleGISSchemaEditor.delete_modelc                s!   t  ƒ  j | | ƒ |  j ƒ  d  S)N)r   Ú	add_fieldr)   )r
   r%   r&   )r   r   r   r-   F   s    zOracleGISSchemaEditor.add_fieldc                s™   t  | t ƒ r‚ |  j |  j d |  j | j j ƒ d |  j | j ƒ i ƒ | j r‚ |  j |  j	 d |  j
 |  j | | ƒ ƒ i ƒ t ƒ  j | | ƒ d  S)Nr   r   r   )r   r   r+   Ú!sql_clear_geometry_field_metadatar   r   r   r   r!   Úsql_drop_spatial_indexr#   r$   r   Úremove_field)r
   r%   r&   )r   r   r   r0   J   s    	#z"OracleGISSchemaEditor.remove_fieldc             C   s.   x |  j  D] } |  j | ƒ q
 Wg  |  _  d  S)N)r	   r+   )r
   Zsqlr   r   r   r)   V   s    z&OracleGISSchemaEditor.run_geometry_sqlc             C   s&   t  d t | j j ƒ | j f d ƒ S)Nz%s_%s_idé   )r   r   r   r   r   )r
   r%   r&   r   r   r   r$   [   s    z0OracleGISSchemaEditor._create_spatial_index_name)Ú__name__Ú
__module__Ú__qualname__r    r"   r/   r,   r.   r   r   r   r(   r*   r-   r0   r)   r$   r   r   )r   r   r      s   r   N)Z#django.contrib.gis.db.models.fieldsr   Z django.db.backends.oracle.schemar   Zdjango.db.backends.utilsr   r   r   r   r   r   r   Ú<module>   s   