Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions google/cloud/ndb/_datastore_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,13 @@ def make_filter(name, op, value):
op=FILTER_OPERATORS[op],
)
helpers._set_protobuf_value(filter_pb.value._pb, value)

# Handle UserProperty meanings which are stored at the entity's top level,
# not within individual property values. This ensures proper meaning propagation
# when filtering on UserProperty fields.
if hasattr(value, "_meanings"):
helpers._set_pb_meaning_from_entity(value, name, value, filter_pb.value._pb)

return filter_pb


Expand Down
11 changes: 11 additions & 0 deletions google/cloud/ndb/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -3471,6 +3471,17 @@ def __init__(
if auto_current_user_add is not None:
raise exceptions.NoLongerImplementedError()

def _comparison(self, op, value):
query = super(UserProperty, self)._comparison(op, value)
# Assign _MEANING_PREDEFINED_ENTITY_USER to the property's meaning dictionary
# This special meaning designation is crucial for enabling filter queries on userProperty
# Without this meaning, the datastore would not properly recognize user-related filters
# in queries. This ensures the outer layer of userProperty is correctly marked as a
# predefined user entity type for query operations
query._value._meanings = {self._name: (_MEANING_PREDEFINED_ENTITY_USER, query._value)}

return query

def _validate(self, value):
"""Validate a ``value`` before setting it.

Expand Down