mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[3.0.x] Fixed #30562 -- Doc'd MariaDB support for GIS spatial lookups.
Backport of 1c5ec221a4 from master
			
			
This commit is contained in:
		
				
					committed by
					
						 Carlton Gibson
						Carlton Gibson
					
				
			
			
				
	
			
			
			
						parent
						
							8047961d7c
						
					
				
				
					commit
					336c9cb7f4
				
			| @@ -219,7 +219,7 @@ in the :doc:`model-api` documentation for more details. | ||||
| Distance Lookups | ||||
| ---------------- | ||||
|  | ||||
| *Availability*: PostGIS, MySQL, Oracle, SpatiaLite, PGRaster (Native) | ||||
| *Availability*: PostGIS, MariaDB, MySQL, Oracle, SpatiaLite, PGRaster (Native) | ||||
|  | ||||
| The following distance lookups are available: | ||||
|  | ||||
| @@ -227,7 +227,7 @@ The following distance lookups are available: | ||||
| * :lookup:`distance_lte` | ||||
| * :lookup:`distance_gt` | ||||
| * :lookup:`distance_gte` | ||||
| * :lookup:`dwithin` (except MySQL) | ||||
| * :lookup:`dwithin` (except MariaDB and MySQL) | ||||
|  | ||||
| .. note:: | ||||
|  | ||||
| @@ -310,41 +310,41 @@ divided into the three categories described in the :ref:`raster lookup details | ||||
| <spatial-lookup-raster>`: native support ``N``, bilateral native support ``B``, | ||||
| and geometry conversion support ``C``. | ||||
|  | ||||
| =================================  =========  ========  ============ ========== ======== | ||||
| Lookup Type                        PostGIS    Oracle    MySQL [#]_   SpatiaLite PGRaster | ||||
| =================================  =========  ========  ============ ========== ======== | ||||
| :lookup:`bbcontains`               X                    X            X          N | ||||
| :lookup:`bboverlaps`               X                    X            X          N | ||||
| :lookup:`contained`                X                    X            X          N | ||||
| :lookup:`contains <gis-contains>`  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          C | ||||
| :lookup:`disjoint`                 X          X         X            X          B | ||||
| :lookup:`distance_gt`              X          X         X            X          N | ||||
| :lookup:`distance_gte`             X          X         X            X          N | ||||
| :lookup:`distance_lt`              X          X         X            X          N | ||||
| :lookup:`distance_lte`             X          X         X            X          N | ||||
| :lookup:`dwithin`                  X          X                      X          B | ||||
| :lookup:`equals`                   X          X         X            X          C | ||||
| :lookup:`exact`                    X          X         X            X          B | ||||
| :lookup:`intersects`               X          X         X            X          B | ||||
| :lookup:`isvalid`                  X          X         X (≥ 5.7.5)  X (LWGEOM) | ||||
| :lookup:`overlaps`                 X          X         X            X          B | ||||
| :lookup:`relate`                   X          X                      X          C | ||||
| :lookup:`same_as`                  X          X         X            X          B | ||||
| :lookup:`touches`                  X          X         X            X          B | ||||
| :lookup:`within`                   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 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 <gis-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:`isvalid`                  X          X                  X (≥ 5.7.5)  X (LWGEOM) | ||||
| :lookup:`overlaps`                 X          X        X         X            X          B | ||||
| :lookup:`relate`                   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: | ||||
|  | ||||
|   | ||||
| @@ -66,7 +66,7 @@ Spatial lookups with rasters are only supported for PostGIS backends | ||||
| -------------- | ||||
|  | ||||
| *Availability*: `PostGIS <https://postgis.net/docs/ST_Geometry_Contain.html>`__, | ||||
| MySQL, SpatiaLite, PGRaster (Native) | ||||
| MariaDB, MySQL, SpatiaLite, PGRaster (Native) | ||||
|  | ||||
| Tests if the geometry or raster field's bounding box completely contains the | ||||
| lookup geometry's bounding box. | ||||
| @@ -79,6 +79,7 @@ Example:: | ||||
| Backend     SQL Equivalent | ||||
| ==========  ========================== | ||||
| PostGIS     ``poly ~ geom`` | ||||
| MariaDB     ``MBRContains(poly, geom)`` | ||||
| MySQL       ``MBRContains(poly, geom)`` | ||||
| SpatiaLite  ``MbrContains(poly, geom)`` | ||||
| ==========  ========================== | ||||
| @@ -89,7 +90,7 @@ SpatiaLite  ``MbrContains(poly, geom)`` | ||||
| -------------- | ||||
|  | ||||
| *Availability*: `PostGIS <https://postgis.net/docs/geometry_overlaps.html>`__, | ||||
| MySQL, SpatiaLite, PGRaster (Native) | ||||
| MariaDB, MySQL, SpatiaLite, PGRaster (Native) | ||||
|  | ||||
| Tests if the geometry field's bounding box overlaps the lookup geometry's | ||||
| bounding box. | ||||
| @@ -102,6 +103,7 @@ Example:: | ||||
| Backend     SQL Equivalent | ||||
| ==========  ========================== | ||||
| PostGIS     ``poly && geom`` | ||||
| MariaDB     ``MBROverlaps(poly, geom)`` | ||||
| MySQL       ``MBROverlaps(poly, geom)`` | ||||
| SpatiaLite  ``MbrOverlaps(poly, geom)`` | ||||
| ==========  ========================== | ||||
| @@ -112,7 +114,7 @@ SpatiaLite  ``MbrOverlaps(poly, geom)`` | ||||
| ------------- | ||||
|  | ||||
| *Availability*: `PostGIS <https://postgis.net/docs/ST_Geometry_Contained.html>`__, | ||||
| MySQL, SpatiaLite, PGRaster (Native) | ||||
| MariaDB, MySQL, SpatiaLite, PGRaster (Native) | ||||
|  | ||||
| Tests if the geometry field's bounding box is completely contained by the | ||||
| lookup geometry's bounding box. | ||||
| @@ -125,6 +127,7 @@ Example:: | ||||
| Backend     SQL Equivalent | ||||
| ==========  ========================== | ||||
| PostGIS     ``poly @ geom`` | ||||
| MariaDB     ``MBRWithin(poly, geom)`` | ||||
| MySQL       ``MBRWithin(poly, geom)`` | ||||
| SpatiaLite  ``MbrWithin(poly, geom)`` | ||||
| ==========  ========================== | ||||
| @@ -135,7 +138,7 @@ SpatiaLite  ``MbrWithin(poly, geom)`` | ||||
| ------------ | ||||
|  | ||||
| *Availability*: `PostGIS <https://postgis.net/docs/ST_Contains.html>`__, | ||||
| Oracle, MySQL, SpatiaLite, PGRaster (Bilateral) | ||||
| Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral) | ||||
|  | ||||
| Tests if the geometry field spatially contains the lookup geometry. | ||||
|  | ||||
| @@ -148,6 +151,7 @@ Backend     SQL Equivalent | ||||
| ==========  ============================ | ||||
| PostGIS     ``ST_Contains(poly, geom)`` | ||||
| Oracle      ``SDO_CONTAINS(poly, geom)`` | ||||
| MariaDB     ``ST_Contains(poly, geom)`` | ||||
| MySQL       ``ST_Contains(poly, geom)`` | ||||
| SpatiaLite  ``Contains(poly, geom)`` | ||||
| ==========  ============================ | ||||
| @@ -238,7 +242,7 @@ SpatiaLite  ``Covers(poly, geom)`` | ||||
| ----------- | ||||
|  | ||||
| *Availability*: `PostGIS <https://postgis.net/docs/ST_Crosses.html>`__, | ||||
| MySQL, SpatiaLite, PGRaster (Conversion) | ||||
| MariaDB, MySQL, SpatiaLite, PGRaster (Conversion) | ||||
|  | ||||
| Tests if the geometry field spatially crosses the lookup geometry. | ||||
|  | ||||
| @@ -250,6 +254,7 @@ Example:: | ||||
| Backend     SQL Equivalent | ||||
| ==========  ========================== | ||||
| PostGIS     ``ST_Crosses(poly, geom)`` | ||||
| MariaDB     ``ST_Crosses(poly, geom)`` | ||||
| MySQL       ``ST_Crosses(poly, geom)`` | ||||
| SpatiaLite  ``Crosses(poly, geom)`` | ||||
| ==========  ========================== | ||||
| @@ -264,7 +269,7 @@ SpatiaLite  ``Crosses(poly, geom)`` | ||||
| ------------ | ||||
|  | ||||
| *Availability*: `PostGIS <https://postgis.net/docs/ST_Disjoint.html>`__, | ||||
| Oracle, MySQL, SpatiaLite, PGRaster (Bilateral) | ||||
| Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral) | ||||
|  | ||||
| Tests if the geometry field is spatially disjoint from the lookup geometry. | ||||
|  | ||||
| @@ -277,6 +282,7 @@ Backend     SQL Equivalent | ||||
| ==========  ================================================= | ||||
| PostGIS     ``ST_Disjoint(poly, geom)`` | ||||
| Oracle      ``SDO_GEOM.RELATE(poly, 'DISJOINT', geom, 0.05)`` | ||||
| MariaDB     ``ST_Disjoint(poly, geom)`` | ||||
| MySQL       ``ST_Disjoint(poly, geom)`` | ||||
| SpatiaLite  ``Disjoint(poly, geom)`` | ||||
| ==========  ================================================= | ||||
| @@ -292,7 +298,7 @@ SpatiaLite  ``Disjoint(poly, geom)`` | ||||
| ---------- | ||||
|  | ||||
| *Availability*: `PostGIS <https://postgis.net/docs/ST_Equals.html>`__, | ||||
| Oracle, MySQL, SpatiaLite, PGRaster (Conversion) | ||||
| Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Conversion) | ||||
|  | ||||
| Tests if the geometry field is spatially equal to the lookup geometry. | ||||
|  | ||||
| @@ -305,6 +311,7 @@ Backend     SQL Equivalent | ||||
| ==========  ================================================= | ||||
| PostGIS     ``ST_Equals(poly, geom)`` | ||||
| Oracle      ``SDO_EQUAL(poly, geom)`` | ||||
| MariaDB     ``ST_Equals(poly, geom)`` | ||||
| MySQL       ``ST_Equals(poly, geom)`` | ||||
| SpatiaLite  ``Equals(poly, geom)`` | ||||
| ==========  ================================================= | ||||
| @@ -321,7 +328,7 @@ SpatiaLite  ``Equals(poly, geom)`` | ||||
| ---------------------- | ||||
|  | ||||
| *Availability*: `PostGIS <https://postgis.net/docs/ST_Geometry_Same.html>`__, | ||||
| Oracle, MySQL, SpatiaLite, PGRaster (Bilateral) | ||||
| Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral) | ||||
|  | ||||
| Tests if the geometry field is "equal" to the lookup geometry. On Oracle, | ||||
| MySQL, and SpatiaLite, it tests spatial equality, while on PostGIS it tests | ||||
| @@ -336,6 +343,7 @@ Backend     SQL Equivalent | ||||
| ==========  ================================================= | ||||
| PostGIS     ``poly ~= geom`` | ||||
| Oracle      ``SDO_EQUAL(poly, geom)`` | ||||
| MariaDB     ``ST_Equals(poly, geom)`` | ||||
| MySQL       ``ST_Equals(poly, geom)`` | ||||
| SpatiaLite  ``Equals(poly, geom)`` | ||||
| ==========  ================================================= | ||||
| @@ -351,7 +359,7 @@ SpatiaLite  ``Equals(poly, geom)`` | ||||
| -------------- | ||||
|  | ||||
| *Availability*: `PostGIS <https://postgis.net/docs/ST_Intersects.html>`__, | ||||
| Oracle, MySQL, SpatiaLite, PGRaster (Bilateral) | ||||
| Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral) | ||||
|  | ||||
| Tests if the geometry field spatially intersects the lookup geometry. | ||||
|  | ||||
| @@ -364,6 +372,7 @@ Backend     SQL Equivalent | ||||
| ==========  ================================================= | ||||
| PostGIS     ``ST_Intersects(poly, geom)`` | ||||
| Oracle      ``SDO_OVERLAPBDYINTERSECT(poly, geom)`` | ||||
| MariaDB     ``ST_Intersects(poly, geom)`` | ||||
| MySQL       ``ST_Intersects(poly, geom)`` | ||||
| SpatiaLite  ``Intersects(poly, geom)`` | ||||
| ==========  ================================================= | ||||
| @@ -400,7 +409,7 @@ Oracle                      ``SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(poly, 0.05 | ||||
| ------------ | ||||
|  | ||||
| *Availability*: `PostGIS <https://postgis.net/docs/ST_Overlaps.html>`__, | ||||
| Oracle, MySQL, SpatiaLite, PGRaster (Bilateral) | ||||
| Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral) | ||||
|  | ||||
| Tests if the geometry field spatially overlaps the lookup geometry. | ||||
|  | ||||
| @@ -409,6 +418,7 @@ Backend     SQL Equivalent | ||||
| ==========  ============================ | ||||
| PostGIS     ``ST_Overlaps(poly, geom)`` | ||||
| Oracle      ``SDO_OVERLAPS(poly, geom)`` | ||||
| MariaDB     ``ST_Overlaps(poly, geom)`` | ||||
| MySQL       ``ST_Overlaps(poly, geom)`` | ||||
| SpatiaLite  ``Overlaps(poly, geom)`` | ||||
| ==========  ============================ | ||||
| @@ -495,7 +505,7 @@ Oracle SQL equivalent: | ||||
| ----------- | ||||
|  | ||||
| *Availability*: `PostGIS <https://postgis.net/docs/ST_Touches.html>`__, | ||||
| Oracle, MySQL, SpatiaLite | ||||
| Oracle, MariaDB, MySQL, SpatiaLite | ||||
|  | ||||
| Tests if the geometry field spatially touches the lookup geometry. | ||||
|  | ||||
| @@ -507,6 +517,7 @@ Example:: | ||||
| Backend     SQL Equivalent | ||||
| ==========  ========================== | ||||
| PostGIS     ``ST_Touches(poly, geom)`` | ||||
| MariaDB     ``ST_Touches(poly, geom)`` | ||||
| MySQL       ``ST_Touches(poly, geom)`` | ||||
| Oracle      ``SDO_TOUCH(poly, geom)`` | ||||
| SpatiaLite  ``Touches(poly, geom)`` | ||||
| @@ -523,7 +534,7 @@ SpatiaLite  ``Touches(poly, geom)`` | ||||
| ---------- | ||||
|  | ||||
| *Availability*: `PostGIS <https://postgis.net/docs/ST_Within.html>`__, | ||||
| Oracle, MySQL, SpatiaLite, PGRaster (Bilateral) | ||||
| Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral) | ||||
|  | ||||
| Tests if the geometry field is spatially within the lookup geometry. | ||||
|  | ||||
| @@ -535,6 +546,7 @@ Example:: | ||||
| Backend     SQL Equivalent | ||||
| ==========  ========================== | ||||
| PostGIS     ``ST_Within(poly, geom)`` | ||||
| MariaDB     ``ST_Within(poly, geom)`` | ||||
| MySQL       ``ST_Within(poly, geom)`` | ||||
| Oracle      ``SDO_INSIDE(poly, geom)`` | ||||
| SpatiaLite  ``Within(poly, geom)`` | ||||
| @@ -720,7 +732,7 @@ PostGIS equivalent: | ||||
| Distance Lookups | ||||
| ================ | ||||
|  | ||||
| *Availability*: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Native) | ||||
| *Availability*: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Native) | ||||
|  | ||||
| For an overview on performing distance queries, please refer to | ||||
| the :ref:`distance queries introduction <distance-queries>`. | ||||
| @@ -765,6 +777,7 @@ Example:: | ||||
| Backend     SQL Equivalent | ||||
| ==========  ================================================== | ||||
| PostGIS     ``ST_Distance/ST_Distance_Sphere(poly, geom) > 5`` | ||||
| MariaDB     ``ST_Distance(poly, geom) > 5`` | ||||
| MySQL       ``ST_Distance(poly, geom) > 5`` | ||||
| Oracle      ``SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) > 5`` | ||||
| SpatiaLite  ``Distance(poly, geom) > 5`` | ||||
| @@ -786,6 +799,7 @@ Example:: | ||||
| Backend     SQL Equivalent | ||||
| ==========  =================================================== | ||||
| PostGIS     ``ST_Distance/ST_Distance_Sphere(poly, geom) >= 5`` | ||||
| MariaDB     ``ST_Distance(poly, geom) >= 5`` | ||||
| MySQL       ``ST_Distance(poly, geom) >= 5`` | ||||
| Oracle      ``SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) >= 5`` | ||||
| SpatiaLite  ``Distance(poly, geom) >= 5`` | ||||
| @@ -807,6 +821,7 @@ Example:: | ||||
| Backend     SQL Equivalent | ||||
| ==========  ================================================== | ||||
| PostGIS     ``ST_Distance/ST_Distance_Sphere(poly, geom) < 5`` | ||||
| MariaDB     ``ST_Distance(poly, geom) < 5`` | ||||
| MySQL       ``ST_Distance(poly, geom) < 5`` | ||||
| Oracle      ``SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) < 5`` | ||||
| SpatiaLite  ``Distance(poly, geom) < 5`` | ||||
| @@ -828,6 +843,7 @@ Example:: | ||||
| Backend     SQL Equivalent | ||||
| ==========  =================================================== | ||||
| PostGIS     ``ST_Distance/ST_Distance_Sphere(poly, geom) <= 5`` | ||||
| MariaDB     ``ST_Distance(poly, geom) <= 5`` | ||||
| MySQL       ``ST_Distance(poly, geom) <= 5`` | ||||
| Oracle      ``SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) <= 5`` | ||||
| SpatiaLite  ``Distance(poly, geom) <= 5`` | ||||
|   | ||||
		Reference in New Issue
	
	Block a user