
    g                         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    /var/www/python.vincentserveurtest.ovh/public_html/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   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<   |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   	operatorss     r   gis_operatorszMySQLOperations.gis_operators'   s     *" *}=(k:'];&L9'];%;7$+6)?'];&K8&L9%;7
	" ??++"1{"CIhr   c                 6   t         j                  t         j                  t         j                  t         j                  g}| j
                  j                  }|s| j
                  j                  dk  r |j                  dt         j                         t        |      S )N)   r      r   )r   ExtentExtent3DMakeLineUnionr   r   mysql_versioninsertr$   tuple)r   disallowed_aggregates
is_mariadbs      r   rP   z%MySQLOperations.disallowed_aggregates>   sm     MMOOOOLL	!
 __55
66C!((FNN;*++r   ST_GeomFromWKBST_GeomFromText)FromWKBFromWKTc                     h d}| j                   j                  r$|j                  d       |j                  ddh       |S )N>   AsGMLAsKMLAsSVGScaleAzimuthIsEmptyMemSizeReverse	MakeValid	Perimeter	Transform	Translate
SnapToGridClosestPointBoundingCircleForcePolygonCWPointOnSurfaceLineLocatePointGeometryDistancerg   GeoHashIsValid)r   r   removeupdate)r   unsupporteds     r   unsupported_functionsz%MySQLOperations.unsupported_functionsP   s@    
* ??++/0	956r   c                     |j                   S r   )	geom_type)r   fs     r   geo_db_typezMySQLOperations.geo_db_typel   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   rr   valuelookup_type
dist_params        r   get_distancezMySQLOperations.get_distanceo   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   )rx   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'   rE   rP   function_namesro   rs   r~   r   r    r   r   r   r      s    DG0 0 4 4 6 6 6 6 5 5  , 
, 
, $$N
  6 /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C/+-? C/r   