o
    <g                     @   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dd Zedd ZdddZedd Zdd Zdd Zdd Zdd ZdS )MySQLOperationsmysqlST_c                 C   s   | j jS N
connectionmysql_is_mariadbself r   b/var/www/html/venv/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   )NGeomFromTextr   r   r   r   r   	from_text   r   zMySQLOperations.from_textc                 C   s   | j jjr
| jd S d S )NCollect)r   featuressupports_collect_aggrr   r   r   r   r   collect"   s   

zMySQLOperations.collectc                 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 )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within	ST_Relaterelate)r   r   r   )r   	operatorsr   r   r   gis_operators'   s&   zMySQLOperations.gis_operatorsc                 C   sB   t jt jt jt jg}| jj}|s| jjdk r|dt j	 t
|S )N)   r      r   )r   ExtentExtent3DMakeLineUnionr   r   mysql_versioninsertr   tuple)r   disallowed_aggregates
is_mariadbr   r   r   rH   >   s   z%MySQLOperations.disallowed_aggregatesST_GeomFromWKBST_GeomFromText)FromWKBFromWKTc                 C   s,   h d}| j jr|d |ddh |S )N>   AsGMLAsKMLAsSVGScaleAzimuthIsEmptyMemSizeReverse	MakeValid	Perimeter	Transform	Translate
SnapToGridClosestPointBoundingCircleForcePolygonCWPointOnSurfaceLineLocatePointGeometryDistancer^   GeoHashIsValid)r   r   removeupdate)r   unsupportedr   r   r   unsupported_functionsP   s
   
z%MySQLOperations.unsupported_functionsc                 C   s   |j S r   )	geom_type)r   fr   r   r   geo_db_typel   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   geodeticr   
ValueErrorgetattrunit_attname
units_name)r   rh   valuelookup_type
dist_paramr   r   r   get_distanceo   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)rp   
expressionr   geom
geom_classreadrv   r   r   	converter   s   z9MySQLOperations.get_geometry_converter.<locals>.converter)r   r{   output_fieldrv   rz   )r   rw   r|   r   ry   r   get_geometry_converter~   s   z&MySQLOperations.get_geometry_converterc                 C   s   t | | S r   )rm   lower)r   agg_namer   r   r   spatial_aggregate_name   s   z&MySQLOperations.spatial_aggregate_nameN)__name__
__module____qualname__namer   r   Adapterr
   r   r   r   r   r!   r>   rH   function_namesrf   ri   rs   r~   r   r   r   r   r   r      s6    







r   N)django.contrib.gis.dbr   +django.contrib.gis.db.backends.base.adapterr   .django.contrib.gis.db.backends.base.operationsr   $django.contrib.gis.db.backends.utilsr    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    