Made NumPoints raise TypeError on MySQL when it's used on fields besides LineStringField.
This commit is contained in:
parent
3215bc98fe
commit
5d28fef8f9
|
@ -382,9 +382,10 @@ class NumPoints(GeoFunc):
|
||||||
output_field_class = IntegerField
|
output_field_class = IntegerField
|
||||||
arity = 1
|
arity = 1
|
||||||
|
|
||||||
def as_sqlite(self, compiler, connection):
|
def as_sql(self, compiler, connection):
|
||||||
if self.source_expressions[self.geom_param_pos].output_field.geom_type != 'LINESTRING':
|
if self.source_expressions[self.geom_param_pos].output_field.geom_type != 'LINESTRING':
|
||||||
raise TypeError("SpatiaLite NumPoints can only operate on LineString content")
|
if not connection.features.supports_num_points_poly:
|
||||||
|
raise TypeError('NumPoints can only operate on LineString content on this database.')
|
||||||
return super(NumPoints, self).as_sql(compiler, connection)
|
return super(NumPoints, self).as_sql(compiler, connection)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -304,11 +304,14 @@ class GISFunctionsTests(TestCase):
|
||||||
Track.objects.create(name='Foo', line=LineString(coords))
|
Track.objects.create(name='Foo', line=LineString(coords))
|
||||||
qs = Track.objects.annotate(num_points=functions.NumPoints('line'))
|
qs = Track.objects.annotate(num_points=functions.NumPoints('line'))
|
||||||
self.assertEqual(qs.first().num_points, 2)
|
self.assertEqual(qs.first().num_points, 2)
|
||||||
if spatialite or mysql:
|
mpoly_qs = Country.objects.annotate(num_points=functions.NumPoints('mpoly'))
|
||||||
# SpatiaLite and MySQL can only count points on LineStrings
|
if not connection.features.supports_num_points_poly:
|
||||||
|
msg = 'NumPoints can only operate on LineString content on this database.'
|
||||||
|
with self.assertRaisesMessage(TypeError, msg):
|
||||||
|
list(mpoly_qs)
|
||||||
return
|
return
|
||||||
|
|
||||||
for c in Country.objects.annotate(num_points=functions.NumPoints('mpoly')):
|
for c in mpoly_qs:
|
||||||
self.assertEqual(c.mpoly.num_points, c.num_points)
|
self.assertEqual(c.mpoly.num_points, c.num_points)
|
||||||
|
|
||||||
if not oracle:
|
if not oracle:
|
||||||
|
|
Loading…
Reference in New Issue