diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2025-06-18 17:51:08 +0200 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-06-25 08:58:22 +0200 |
| commit | 7091801e046dc85dba2238ed4eaf0b3f62bcfc7f (patch) | |
| tree | e788679445d7ff0c854806631a99646c6226dc1d /django | |
| parent | b2407e4d7d25e4a5839bb512cb2fdf71e9e30a21 (diff) | |
Fixed #36471 -- Added support for __coveredby GIS lookup and Collect, GeoHash, IsValid on MariaDB 12.0.1+.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/gis/db/backends/mysql/operations.py | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/django/contrib/gis/db/backends/mysql/operations.py b/django/contrib/gis/db/backends/mysql/operations.py index 8af78d8703..f838a79da6 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,9 +58,10 @@ class MySQLOperations(BaseSpatialOperations, DatabaseOperations): } if self.connection.mysql_is_mariadb: operators["relate"] = SpatialOperator(func="ST_Relate") + if self.connection.mysql_version < (12, 0, 1): + del operators["coveredby"] else: operators["covers"] = SpatialOperator(func="MBRCovers") - operators["coveredby"] = SpatialOperator(func="MBRCoveredBy") return operators @cached_property @@ -71,7 +73,10 @@ class MySQLOperations(BaseSpatialOperations, DatabaseOperations): models.Union, ] is_mariadb = self.connection.mysql_is_mariadb - if is_mariadb or self.connection.mysql_version < (8, 0, 24): + if is_mariadb: + if self.connection.mysql_version < (12, 0, 1): + disallowed_aggregates.insert(0, models.Collect) + elif self.connection.mysql_version < (8, 0, 24): disallowed_aggregates.insert(0, models.Collect) return tuple(disallowed_aggregates) @@ -106,7 +111,8 @@ class MySQLOperations(BaseSpatialOperations, DatabaseOperations): } if self.connection.mysql_is_mariadb: unsupported.remove("PointOnSurface") - unsupported.update({"GeoHash", "IsValid"}) + if self.connection.mysql_version < (12, 0, 1): + unsupported.update({"GeoHash", "IsValid"}) return unsupported def geo_db_type(self, f): |
