From 0b7edb9fcdd33d47ec5701b4f9b9553e27a88e95 Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Fri, 27 Sep 2024 21:08:20 +0200 Subject: [PATCH] Refs #35803 -- Added support for __coveredby GIS lookup on MySQL and MariaDB 11.7+. --- .../gis/db/backends/mysql/operations.py | 3 + docs/ref/contrib/gis/db-api.txt | 70 +++++++++---------- docs/ref/contrib/gis/geoquerysets.txt | 8 ++- docs/releases/5.2.txt | 4 ++ 4 files changed, 49 insertions(+), 36 deletions(-) diff --git a/django/contrib/gis/db/backends/mysql/operations.py b/django/contrib/gis/db/backends/mysql/operations.py index 1004cfb5648..f4533a3b4ef 100644 --- a/django/contrib/gis/db/backends/mysql/operations.py +++ b/django/contrib/gis/db/backends/mysql/operations.py @@ -45,6 +45,7 @@ class MySQLOperations(BaseSpatialOperations, DatabaseOperations): "bboverlaps": SpatialOperator(func="MBROverlaps"), # ... "contained": SpatialOperator(func="MBRWithin"), # ... "contains": SpatialOperator(func="ST_Contains"), + "coveredby": SpatialOperator(func="MBRCoveredBy"), "crosses": SpatialOperator(func="ST_Crosses"), "disjoint": SpatialOperator(func="ST_Disjoint"), "equals": SpatialOperator(func="ST_Equals"), @@ -57,6 +58,8 @@ class MySQLOperations(BaseSpatialOperations, DatabaseOperations): } if self.connection.mysql_is_mariadb: operators["relate"] = SpatialOperator(func="ST_Relate") + if self.connection.mysql_version < (11, 7): + del operators["coveredby"] return operators @cached_property diff --git a/docs/ref/contrib/gis/db-api.txt b/docs/ref/contrib/gis/db-api.txt index bce6f2efcca..8afc29869e1 100644 --- a/docs/ref/contrib/gis/db-api.txt +++ b/docs/ref/contrib/gis/db-api.txt @@ -339,42 +339,42 @@ divided into the three categories described in the :ref:`raster lookup details `: native support ``N``, bilateral native support ``B``, and geometry conversion support ``C``. -================================= ========= ======== ========= ============ ========== ======== -Lookup Type PostGIS Oracle MariaDB MySQL [#]_ SpatiaLite PGRaster -================================= ========= ======== ========= ============ ========== ======== -:lookup:`bbcontains` X X X X N -:lookup:`bboverlaps` X X X X N -:lookup:`contained` X X X X N -:lookup:`contains ` X X X X X B -:lookup:`contains_properly` X B -:lookup:`coveredby` X X X B -:lookup:`covers` X X X B -:lookup:`crosses` X X X X C -:lookup:`disjoint` X X X X X B -:lookup:`distance_gt` X X X X X N -:lookup:`distance_gte` X X X X X N -:lookup:`distance_lt` X X X X X N -:lookup:`distance_lte` X X X X X N -:lookup:`dwithin` X X X B -:lookup:`equals` X X X X X C -:lookup:`exact ` X X X X X B -:lookup:`intersects` X X X X X B +================================= ========= ======== ========== ============ ========== ======== +Lookup Type PostGIS Oracle MariaDB MySQL [#]_ SpatiaLite PGRaster +================================= ========= ======== ========== ============ ========== ======== +:lookup:`bbcontains` X X X X N +:lookup:`bboverlaps` X X X X N +:lookup:`contained` X X X X N +:lookup:`contains ` X X X X X B +:lookup:`contains_properly` X B +:lookup:`coveredby` X X X (≥ 11.7) X X B +:lookup:`covers` X X X B +:lookup:`crosses` X X X X C +:lookup:`disjoint` X X X X X B +:lookup:`distance_gt` X X X X X N +:lookup:`distance_gte` X X X X X N +:lookup:`distance_lt` X X X X X N +:lookup:`distance_lte` X X X X X N +:lookup:`dwithin` X X X B +:lookup:`equals` X X X X X C +:lookup:`exact ` X X X X X B +:lookup:`intersects` X X X X X B :lookup:`isempty` X -:lookup:`isvalid` X X X X -:lookup:`overlaps` X X X X X B -:lookup:`relate` X X X X C -:lookup:`same_as` X X X X X B -:lookup:`touches` X X X X X B -:lookup:`within` X X X X X B -:lookup:`left` X C -:lookup:`right` X C -:lookup:`overlaps_left` X B -:lookup:`overlaps_right` X B -:lookup:`overlaps_above` X C -:lookup:`overlaps_below` X C -:lookup:`strictly_above` X C -:lookup:`strictly_below` X C -================================= ========= ======== ========= ============ ========== ======== +:lookup:`isvalid` X X X X +:lookup:`overlaps` X X X X X B +:lookup:`relate` X X X X C +:lookup:`same_as` X X X X X B +:lookup:`touches` X X X X X B +:lookup:`within` X X X X X B +:lookup:`left` X C +:lookup:`right` X C +:lookup:`overlaps_left` X B +:lookup:`overlaps_right` X B +:lookup:`overlaps_above` X C +:lookup:`overlaps_below` X C +:lookup:`strictly_above` X C +:lookup:`strictly_below` X C +================================= ========= ======== ========== ============ ========== ======== .. _database-functions-compatibility: diff --git a/docs/ref/contrib/gis/geoquerysets.txt b/docs/ref/contrib/gis/geoquerysets.txt index b639c5271e2..2bafa8eb437 100644 --- a/docs/ref/contrib/gis/geoquerysets.txt +++ b/docs/ref/contrib/gis/geoquerysets.txt @@ -183,7 +183,7 @@ PostGIS ``ST_ContainsProperly(poly, geom)`` ------------- *Availability*: `PostGIS `__, -Oracle, PGRaster (Bilateral), SpatiaLite +Oracle, MariaDB 11.7+, MySQL, PGRaster (Bilateral), SpatiaLite Tests if no point in the geometry field is outside the lookup geometry. [#fncovers]_ @@ -197,9 +197,15 @@ Backend SQL Equivalent ========== ============================= PostGIS ``ST_CoveredBy(poly, geom)`` Oracle ``SDO_COVEREDBY(poly, geom)`` +MariaDB ``MBRCoveredBy(poly, geom)`` +MySQL ``MBRCoveredBy(poly, geom)`` SpatiaLite ``CoveredBy(poly, geom)`` ========== ============================= +.. versionchanged:: 5.2 + + MySQL and MariaDB 11.7+ support was added. + .. fieldlookup:: covers ``covers`` diff --git a/docs/releases/5.2.txt b/docs/releases/5.2.txt index 507676d9983..faee74548ee 100644 --- a/docs/releases/5.2.txt +++ b/docs/releases/5.2.txt @@ -100,6 +100,10 @@ Minor features :meth:`.OGRGeometry.get_linear_geometry` and :meth:`.OGRGeometry.get_curve_geometry` methods. +* :lookup:`coveredby` lookup is now supported on MySQL. + +* :lookup:`coveredby` lookup is now supported on MariaDB 11.7+. + :mod:`django.contrib.messages` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~