Skip to content

Commit 4fe89c9

Browse files
authored
Prevent use of transforms as values passed to 'Query.where'. (googleapis#6703)
Closes googleapis#6699.
1 parent cd143fb commit 4fe89c9

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

‎firestore/google/cloud/firestore_v1beta1/query.py‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
_BAD_OP_STRING = 'Operator string {!r} is invalid. Valid choices are: {}.'
4747
_BAD_OP_NAN_NULL = (
4848
'Only an equality filter ("==") can be used with None or NaN values')
49+
_INVALID_WHERE_TRANSFORM = 'Transforms cannot be used as where values.'
4950
_BAD_DIR_STRING = 'Invalid direction {!r}. Must be one of {!r} or {!r}.'
5051
_INVALID_CURSOR_TRANSFORM = 'Transforms cannot be used as cursor values.'
5152
_MISSING_ORDER_BY = (
@@ -234,6 +235,8 @@ def where(self, field_path, op_string, value):
234235
),
235236
op=enums.StructuredQuery.UnaryFilter.Operator.IS_NAN,
236237
)
238+
elif isinstance(value, (transforms.Sentinel, transforms._ValueList)):
239+
raise ValueError(_INVALID_WHERE_TRANSFORM)
237240
else:
238241
filter_pb = query_pb2.StructuredQuery.FieldFilter(
239242
field=query_pb2.StructuredQuery.FieldReference(

‎firestore/tests/unit/test_query.py‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,12 +199,38 @@ def test_where_le_nan(self):
199199
with self.assertRaises(ValueError):
200200
self._where_unary_helper(float('nan'), 0, op_string='<=')
201201

202+
203+
def test_where_w_delete(self):
204+
from google.cloud.firestore_v1beta1 import DELETE_FIELD
205+
206+
with self.assertRaises(ValueError):
207+
self._where_unary_helper(DELETE_FIELD, 0)
208+
209+
def test_where_w_server_timestamp(self):
210+
from google.cloud.firestore_v1beta1 import SERVER_TIMESTAMP
211+
212+
with self.assertRaises(ValueError):
213+
self._where_unary_helper(SERVER_TIMESTAMP, 0)
214+
215+
def test_where_w_array_remove(self):
216+
from google.cloud.firestore_v1beta1 import ArrayRemove
217+
218+
with self.assertRaises(ValueError):
219+
self._where_unary_helper(ArrayRemove([1, 3, 5]), 0)
220+
221+
def test_where_w_array_union(self):
222+
from google.cloud.firestore_v1beta1 import ArrayUnion
223+
224+
with self.assertRaises(ValueError):
225+
self._where_unary_helper(ArrayUnion([2, 4, 8]), 0)
226+
202227
def test_order_by_invalid_path(self):
203228
query = self._make_one(mock.sentinel.parent)
204229

205230
with self.assertRaises(ValueError):
206231
query.order_by('*')
207232

233+
208234
def test_order_by(self):
209235
from google.cloud.firestore_v1beta1.gapic import enums
210236

0 commit comments

Comments
 (0)