o
    b                     @   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 )    )models)
WKTAdapter)BaseSpatialOperations)SpatialOperator)GEOSGeometryBase)wkb_r)Distance)DatabaseOperations)cached_propertyc                   @   s   e Zd ZdZdZeZedd Zedd 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 )MySQLOperationsmysqlZST_c                 C   s   | j jS N
connectionmysql_is_mariadbself r   n/var/www/secure340b-portal/env/lib/python3.10/site-packages/django/contrib/gis/db/backends/mysql/operations.pymariadb   s   zMySQLOperations.mariadbc                 C   s
   | j j S r   r   r   r   r   r   r         
zMySQLOperations.mysqlc                 C   
   | j d S )NzAsBinary(%s)geom_func_prefixr   r   r   r   select   r   zMySQLOperations.selectc                 C   r   )NZGeomFromTextr   r   r   r   r   	from_text    r   zMySQLOperations.from_textc                 C   s   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}| jjrBt dd|d< |S )NZMBRContains)funcZMBROverlapsZ	MBRWithinZST_ContainsZ
ST_CrossesZST_DisjointZ	ST_EqualsZST_IntersectsZST_OverlapsZ
ST_TouchesZ	ST_Within)Z
bbcontainsZ
bboverlaps	containedcontainsZcrossesZdisjointequalsexactZ
intersectsoverlapsZsame_asZtouchesZwithinZ	ST_RelateZrelate)r   r   r   )r   	operatorsr   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LineLocatePointGeometryDistancePointOnSurfacer4   GeoHashIsValid)
         	AsGeoJSON)      r;   >   r5   r6   r:   )r   r   removeupdateZmysql_versionadd)r   unsupportedr   r   r   unsupported_functions>   s   

z%MySQLOperations.unsupported_functionsc                 C   s   |j S r   )Z	geom_type)r   fr   r   r   geo_db_typeO   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   Zgeodeticr   
ValueErrorgetattrZunit_attnameZ
units_name)r   rB   valueZlookup_typeZ
dist_paramr   r   r   get_distanceR   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 r   )r   
memoryviewsrid)rG   
expressionr   Zgeom
geom_classreadrK   r   r   	converterf   s   z9MySQLOperations.get_geometry_converter.<locals>.converter)r   rO   Zoutput_fieldrK   rN   )r   rL   rP   r   rM   r   get_geometry_converter_   s   z&MySQLOperations.get_geometry_converterN)__name__
__module____qualname__namer   r   ZAdapterr
   r   r   r   r   r#   r   ZCollectZExtentZExtent3DZMakeLineUnionZdisallowed_aggregatesrA   rC   rH   rQ   r   r   r   r   r      s,    





r   N)Zdjango.contrib.gis.dbr   Z+django.contrib.gis.db.backends.base.adapterr   Z.django.contrib.gis.db.backends.base.operationsr   Z$django.contrib.gis.db.backends.utilsr   Z django.contrib.gis.geos.geometryr   Z%django.contrib.gis.geos.prototypes.ior   Zdjango.contrib.gis.measurer   Z#django.db.backends.mysql.operationsr	   Zdjango.utils.functionalr
   r   r   r   r   r   <module>   s    