a
    [f>"                     @   s   d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZ dd	lmZ dd
lmZ dZG dd de	ZG dd de	ZG dd de	ZG dd de	ZG dd deeZdS )aU  
 This module contains the spatial lookup types, and the `get_geo_where_clause`
 routine for Oracle Spatial.

 Please note that WKT support is broken on the XE version, and thus
 this backend will not work on such platforms.  Specifically, XE lacks
 support for an internal JVM, and Java libraries are required to use
 the WKT constructors.
    N)models)BaseSpatialOperations)OracleSpatialAdapter)SpatialOperator)GEOSGeometryGEOSGeometryBase)wkb_r)Distance)DatabaseOperationsz0.05c                   @   s   e Zd ZdZdS )SDOOperatorz#%(func)s(%(lhs)s, %(rhs)s) = 'TRUE'N__name__
__module____qualname__sql_template r   r   C:\Users\91910\OneDrive\Desktop\vts_admin_rebuild-master\vts\Lib\site-packages\django/contrib/gis/db/backends/oracle/operations.pyr      s   r   c                   @   s   e Zd ZdZdS )
SDODWithinz3SDO_WITHIN_DISTANCE(%(lhs)s, %(rhs)s, %%s) = 'TRUE'Nr   r   r   r   r   r      s   r   c                   @   s   e Zd Zde ZdS )SDODisjointz@SDO_GEOM.RELATE(%%(lhs)s, 'DISJOINT', %%(rhs)s, %s) = 'DISJOINT'N)r   r   r   DEFAULT_TOLERANCEr   r   r   r   r   r       s   r   c                       s(   e Zd ZdZdd Z fddZ  ZS )	SDORelatez6SDO_RELATE(%(lhs)s, %(rhs)s, 'mask=%(mask)s') = 'TRUE'c                 C   s>   d}t d||f t j}t|tr.||s:td| d S )NzbTOUCH|OVERLAPBDYDISJOINT|OVERLAPBDYINTERSECT|EQUAL|INSIDE|COVEREDBY|CONTAINS|COVERS|ANYINTERACT|ONz^(%s)(\+(%s))*$zInvalid SDO_RELATE mask: "%s")recompileI
isinstancestrmatch
ValueError)selfargmasksZ
mask_regexr   r   r   check_relate_argument*   s
    zSDORelate.check_relate_argumentc                    s&   |d |d< t  ||||d d S )Nmask)superas_sql)r   
connectionlookupZtemplate_paramsZ
sql_params	__class__r   r   r%   3   s    zSDORelate.as_sql)r   r   r   r   r!   r%   __classcell__r   r   r(   r   r   '   s   	r   c                       s<  e Zd ZdZdZejejejfZ	e
ZdZdZdZdddd	d
ddddddddddddddddddZdZeddedded de ed!ded"ded"ded#ded"de ed$ded%de d&Zh d'Z fd(d)Zd*d+ Zd,d- Zd.d/ Z fd0d1Zd2d3 Zd4d5 Zd6d7 Z fd8d9Zd:d; Z d<d= Z!  Z"S )>OracleOperationsoracleTZSDO_AGGR_MBRZSDO_AGGR_UNIONZSDO_GEOMETRYzSDO_GEOM.SDO_AREAzSDO_UTIL.TO_GEOJSONzSDO_UTIL.TO_WKBGEOMETRYzSDO_UTIL.TO_WKTGEOMETRYzSDO_GEOM.SDO_MBCzSDO_GEOM.SDO_CENTROIDzSDO_GEOM.SDO_DIFFERENCEzSDO_GEOM.SDO_DISTANCEZSDO_GEOM_MBRzSDO_UTIL.FROM_WKBGEOMETRYzSDO_UTIL.FROM_WKTGEOMETRYzSDO_GEOM.SDO_INTERSECTIONz'SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTzSDO_GEOM.SDO_LENGTHzSDO_UTIL.GETNUMELEMzSDO_UTIL.GETNUMVERTICESzSDO_GEOM.SDO_POINTONSURFACEzSDO_UTIL.REVERSE_LINESTRINGzSDO_GEOM.SDO_XORzSDO_CS.TRANSFORMzSDO_GEOM.SDO_UNION)ZAreaZ	AsGeoJSONZAsWKBZAsWKTZBoundingCircleZCentroidZ
Differencer	   ZEnvelopeZFromWKBZFromWKTZIntersectionZIsValidZLengthZNumGeometriesZ	NumPointsZ	PerimeterZPointOnSurfaceZReverseZSymDifferenceZ	TransformUnionzSDO_UTIL.TO_WKBGEOMETRY(%s)ZSDO_CONTAINS)funcZSDO_COVEREDBYZ
SDO_COVERSZSDO_OVERLAPBDYINTERSECTZ	SDO_EQUALZSDO_OVERLAPSZ	SDO_TOUCHZ
SDO_INSIDE)containsZ	coveredbyZcoversZdisjointZ
intersectsequalsexactoverlapsZsame_asZrelateZtouchesZwithindwithin>   ZGeoHashZScaleZ
SnapToGridZIsEmptyZGeometryDistanceZAsSVGZMemSizeZLineLocatePointZForcePolygonCWZAzimuthZ	TranslateZ	MakeValidZAsKMLc                    s   t  | S N)r$   geo_quote_nameupper)r   namer(   r   r   r5      s    zOracleOperations.geo_quote_namec                 C   s   |rt t| }t|j}|dkrP|j}|d d d |d d d  }}n(|dkrl|jd d }|}ntd| |\}}|\}	}
|||	|
fS d S d S )NZPolygonr      ZPointz0Unexpected geometry type returned for extent: %s)r   
memoryviewreadr   Z	geom_typeshellZcoords	Exception)r   ZclobZext_geomgtyper;   llurZxminZyminZxmaxZymaxr   r   r   convert_extent   s     
$zOracleOperations.convert_extentc                 C   s   dS )z
        Return the geometry database type for Oracle. Unlike other spatial
        backends, no stored procedure is necessary and it's the same for all
        geometry types.
        zMDSYS.SDO_GEOMETRYr   )r   fr   r   r   geo_db_type   s    zOracleOperations.geo_db_typec                 C   sb   |sg S |d }t |trH|| jr.|j}qLt|t|| j}n|}|dkr\d| }|gS )a  
        Return the distance parameters given the value and the lookup type.
        On Oracle, geometry columns with a geodetic coordinate system behave
        implicitly like a geography column, and thus meters will be used as
        the distance parameter on them.
        r   r3   zdistance=%s)r   r	   Zgeodeticr&   mgetattrZunit_attnameZ
units_name)r   rA   valueZlookup_typeZ
dist_paramr   r   r   get_distance   s    
zOracleOperations.get_distancec                    s   |d u rdS t  |||S )NNULL)r$   get_geom_placeholder)r   rA   rE   compilerr(   r   r   rH      s    z%OracleOperations.get_geom_placeholderc                 C   s"   |  dkrdn|  }t| |S )z8
        Return the spatial aggregate SQL name.
        unionunionagg)lowerrD   )r   Zagg_namer   r   r   spatial_aggregate_name   s    z'OracleOperations.spatial_aggregate_namec                 C   s   ddl m} |S )Nr   )OracleGeometryColumns),django.contrib.gis.db.backends.oracle.modelsrN   )r   rN   r   r   r   geometry_columns   s    z!OracleOperations.geometry_columnsc                 C   s   ddl m} |S )Nr   )OracleSpatialRefSys)rO   rQ   )r   rQ   r   r   r   spatial_ref_sys   s    z OracleOperations.spatial_ref_sysc                    s   |dkrg S t  ||S )zrDrop out insert parameters for NULL placeholder. Needed for Oracle Spatial
        backend due to #10888.
        rG   )r$   modify_insert_params)r   placeholderparamsr(   r   r   rS      s    z%OracleOperations.modify_insert_paramsc                    s8   t  j|jjdkrd |jj  fdd}|S )Nr"   c                    s0   | d ur,t t|   }r(|_|S d S r4   )r   r9   r:   srid)rE   
expressionr&   Zgeom
geom_classr:   rV   r   r   	converter   s
    z:OracleOperations.get_geometry_converter.<locals>.converter)r   r:   Zoutput_fieldrV   rY   )r   rW   rZ   r   rX   r   get_geometry_converter   s    z'OracleOperations.get_geometry_converterc                 C   s   dS )NZsq_mr   )r   fieldr   r   r   get_area_att_for_field   s    z'OracleOperations.get_area_att_for_field)#r   r   r   r7   r,   r   ZCollectZExtent3DZMakeLineZdisallowed_aggregatesr   ZAdapterZextentrK   Z	from_textZfunction_namesselectr   r   r   r   Zgis_operatorsZunsupported_functionsr5   r@   rB   rF   rH   rM   rP   rR   rS   r[   r]   r*   r   r   r(   r   r+   8   sv   r+   )__doc__r   Zdjango.contrib.gis.dbr   Z.django.contrib.gis.db.backends.base.operationsr   Z-django.contrib.gis.db.backends.oracle.adapterr   Z$django.contrib.gis.db.backends.utilsr   Z django.contrib.gis.geos.geometryr   r   Z%django.contrib.gis.geos.prototypes.ior   Zdjango.contrib.gis.measurer	   Z$django.db.backends.oracle.operationsr
   r   r   r   r   r   r+   r   r   r   r   <module>   s   	