
    +{Bi                         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ee      Zy)    )models)
WKTAdapter)BaseSpatialOperations)SpatialOperator)GEOSGeometryBase)wkb_r)Distance)DatabaseOperations)cached_propertyc                       e Zd ZdZdZeZed        Zed        Z	ed        Z
ed        Zed        Zed        Zed	        Zd
ddZed        Zd Zd Zd Zd Zy)MySQLOperationsmysqlST_c                 .    | j                   j                  S N
connectionmysql_is_mariadbselfs    d/var/www/python/venv/lib/python3.12/site-packages/django/contrib/gis/db/backends/mysql/operations.pymariadbzMySQLOperations.mariadb   s    ///    c                 0    | j                   j                   S r   r   r   s    r   r   zMySQLOperations.mysql   s    ??3333r   c                      | j                   dz   S )NzAsBinary(%s)geom_func_prefixr   s    r   selectzMySQLOperations.select       $$~55r   c                      | j                   dz   S )NGeomFromTextr   r   s    r   	from_textzMySQLOperations.from_text   r   r   c                 b    | j                   j                  j                  r| j                  dz   S y )NCollect)r   featuressupports_collect_aggrr   r   s    r   collectzMySQLOperations.collect"   s+    ??##99((944 :r   c                    t        d      t        d      t        d      t        d      t        d      t        d      t        d      t        d	      t        d	      t        d
      t        d      t        d	      t        d      t        d      d}| j                  j                  r-t        d      |d<   | j                  j                  dk  r|d= |S t        d      |d<   |S )NMBRContains)funcMBROverlaps	MBRWithinST_ContainsMBRCoveredBy
ST_CrossesST_Disjoint	ST_EqualsST_IntersectsST_Overlaps
ST_Touches	ST_Within)
bbcontains
bboverlaps	containedcontains	coveredbycrossesdisjointequalsexact
intersectsoverlapssame_astoucheswithin	ST_Relaterelate   r      r:   	MBRCoverscovers)r   r   r   mysql_version)r   	operatorss     r   gis_operatorszMySQLOperations.gis_operators'   s     *" *}=(k:'];(n=&L9'];%;7$+6)?'];&K8&L9%;7!
	$ ??++"1{"CIh,,z9k*  #2{"CIhr   c                    t         j                  t         j                  t         j                  t         j                  g}| j
                  j                  }|rD| j
                  j                  dk  rd|j                  dt         j                         t        |      S | j
                  j                  dk  r |j                  dt         j                         t        |      S )NrF   r   )   r      )r   ExtentExtent3DMakeLineUnionr   r   rK   insertr$   tuple)r   disallowed_aggregates
is_mariadbs      r   rW   z%MySQLOperations.disallowed_aggregatesC   s     MMOOOOLL	!
 __55
,,z9%,,Q? *++ __**Z7!((FNN;*++r   ST_GeomFromWKBST_GeomFromText)FromWKBFromWKTc                     h d}| j                   j                  r=|j                  d       | j                   j                  dk  r|j	                  ddh       |S )N>   AsGMLAsKMLAsSVGScaleRotateAzimuthIsEmptyMemSizeReverse	MakeValid	Perimeter	Transform	Translate
SnapToGridClosestPointBoundingCircleForcePolygonCWPointOnSurfaceLineLocatePointGeometryDistancero   rF   GeoHashIsValid)r   r   removerK   update)r   unsupporteds     r   unsupported_functionsz%MySQLOperations.unsupported_functionsX   sR    
, ??++/0,,z9""Iy#9:r   c                     |j                   S r   )	geom_type)r   fs     r   geo_db_typezMySQLOperations.geo_db_typev   s    {{r   c                     |d   }t        |t              ra|j                  | j                        rt	        d      t        |t        j                  |j                  | 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   rz   valuelookup_type
dist_params        r   get_distancezMySQLOperations.get_distancey   sy    aeX&zz$//* 1  !x,,Q\\$//-JKJ
 | J|r   c                     t               j                  |j                  j                  dk(  rd |j                  j                  fd}|S )Nc                 V    | &t         t        |                   }r|_        |S y r   )r   
memoryviewsrid)r   
expressionr   geom
geom_classreadr   s       r   	converterz9MySQLOperations.get_geometry_converter.<locals>.converter   s3     'Z->(?L $DI	 !r   )r   r   output_fieldr   r   )r   r   r   r   r   r   s      @@@r   get_geometry_converterz&MySQLOperations.get_geometry_converter   sI    w||&&++2:D,,77
	 r   c                 6    t        | |j                               S r   )r   lower)r   agg_names     r   spatial_aggregate_namez&MySQLOperations.spatial_aggregate_name   s    tX^^-..r   N)__name__
__module____qualname__namer   r   Adapterr   r   r   r   r"   r'   rM   rW   function_namesrw   r{   r   r   r    r   r   r   r      s    DG0 0 4 4 6 6 6 6 5 5  6 , ,  $$N
  : /r   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   <module>r      s2    ( B P @ = 7 / B 3M/+-? M/r   