| Index: lib/src/db/db.dart
|
| diff --git a/lib/src/db/db.dart b/lib/src/db/db.dart
|
| index 210ee2a6b54f4b7ea2097c5cce2e3c98a8f0f9bd..d1a7978339aa3a08dc6336d6c96e467dc3a0d62c 100644
|
| --- a/lib/src/db/db.dart
|
| +++ b/lib/src/db/db.dart
|
| @@ -162,11 +162,30 @@ class Query {
|
| "Invalid filter string '$filterString'.");
|
| }
|
|
|
| - // TODO: do value transformation on [comparisonObject]
|
| + var name = parts[0];
|
| + var comparison = parts[1];
|
| + var propertyName = _convertToDatastoreName(name);
|
| +
|
| + // This is for backwards compatibility: We allow [datastore.Key]s for now.
|
| + // TODO: We should remove the condition in a major version update of
|
| + // `package:gcloud`.
|
| + if (comparisonObject is! datastore.Key) {
|
| + var encoded = _db.modelDB.toDatastoreValue(_kind, name, comparisonObject);
|
| +
|
| + // We encode Lists as repeated properties normally, and the encoding of
|
| + // `['abc']` will just be `'abc'` (see [ListProperty]).
|
| + // But for IN filters, we need to treat them as lists.
|
| + if (comparison == 'IN' &&
|
| + comparisonObject is List &&
|
| + comparisonObject.length == 1 &&
|
| + encoded is! List) {
|
| + encoded = [encoded];
|
| + }
|
|
|
| - var propertyName = _convertToDatastoreName(parts[0]);
|
| + comparisonObject = encoded;
|
| + }
|
| _filters.add(new datastore.Filter(
|
| - _relationMapping[parts[1]], propertyName, comparisonObject));
|
| + _relationMapping[comparison], propertyName, comparisonObject));
|
| }
|
|
|
| /**
|
|
|