o
    :Zc                     @   s   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	 d dl
mZ d dlmZ d dlmZ d d	lmZ G d
d deeZdS )    )
WKTAdapter)BaseSpatialOperationsSpatialOperator)
aggregates)GEOSGeometryBase)wkb_r)Distance)DatabaseOperations)cached_propertyc                   @   s|   e Zd ZdZdZdZeZedd Z	edd Z
edd	 ZejejejejejfZed
d Zdd Zdd Zdd ZdS )MySQLOperationsTmysqlST_c                 C   
   | j d S )NzAsBinary(%s)geom_func_prefixself r   e/var/www/chikooza/env/lib/python3.10/site-packages/django/contrib/gis/db/backends/mysql/operations.pyselect      
zMySQLOperations.selectc                 C   r   )NGeomFromTextr   r   r   r   r   	from_text   r   zMySQLOperations.from_textc                 C   sn   t ddt ddt ddt ddt ddt ddt ddt ddt d	dt d
dt ddt ddt dddS )NMBRContains)funcMBROverlaps	MBRWithinST_Contains
ST_CrossesST_Disjoint	ST_EqualsST_IntersectsST_Overlaps
ST_Touches	ST_Within)
bbcontains
bboverlaps	containedcontainscrossesdisjointequalsexact
intersectsoverlapssame_astoucheswithinr   r   r   r   r   gis_operators   s   zMySQLOperations.gis_operatorsc                 C   s`   h d}| j jr!|d |ddh | j jdk r|d |S | j jdk r.|h d |S )	N>   AsGMLAsKMLAsSVGScaleAzimuthMemSizeReverse	MakeValid	Perimeter	Transform	Translate
SnapToGridBoundingCircleForcePolygonCWPointOnSurfaceLineLocatePointGeometryDistancerB   GeoHashIsValid)
         	AsGeoJSON)      rK   >   rE   rF   rJ   )
connectionmysql_is_mariadbremoveupdatemysql_versionadd)r   unsupportedr   r   r   unsupported_functions5   s   

z%MySQLOperations.unsupported_functionsc                 C   s   |j S N)	geom_type)r   fr   r   r   geo_db_typeF   s   zMySQLOperations.geo_db_typec                 C   sN   |d }t |tr"|| jrtdt|t|| j}|gS |}|gS )Nr   zMOnly numeric values of degree units are allowed on geodetic distance queries.)
isinstancer	   geodeticrM   
ValueErrorgetattrunit_attname
units_name)r   rW   valuelookup_type
dist_paramr   r   r   get_distanceI   s   
zMySQLOperations.get_distancec                    s8   t  j|jjdkrd |jj  fdd}|S )Nc                    s,   | d urt t|  }r|_|S d S rU   )r   
memoryviewsrid)r_   
expressionrM   geom
geom_classreadre   r   r   	converter]   s   z9MySQLOperations.get_geometry_converter.<locals>.converter)r   rj   output_fieldre   ri   )r   rf   rk   r   rh   r   get_geometry_converterV   s   z&MySQLOperations.get_geometry_converterN)__name__
__module____qualname__r   namer   r   Adapterr   r   r   r3   r   CollectExtentExtent3DMakeLineUniondisallowed_aggregatesrT   rX   rb   rm   r   r   r   r   r      s&    



r   N)+django.contrib.gis.db.backends.base.adapterr   .django.contrib.gis.db.backends.base.operationsr   $django.contrib.gis.db.backends.utilsr   django.contrib.gis.db.modelsr    django.contrib.gis.geos.geometryr   %django.contrib.gis.geos.prototypes.ior   django.contrib.gis.measurer	   #django.db.backends.mysql.operationsr
   django.utils.functionalr   r   r   r   r   r   <module>   s    