You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
var (nFilter, bucket) :=ExtractBucketNumber(filterExpr);
258
-
if nFilter.Some? then
259
-
:-Need(bucket < search.numBuckets, E("Bucket number specified in FilterExpression was " + String.Base10Int2String(bucket as int) + "but it must be less than the number of buckets " + String.Base10Int2String(search.numBuckets as int)));
260
-
:-Need(bucket < 256, E("Bucket must be less than 256")); // unreachable
261
-
if bucket == 0 then
262
-
Success((nFilter, []))
263
-
else
264
-
Success((nFilter, [bucket as uint8]))
265
-
else
266
-
// TODO - if no encrypted beacons then OK
267
-
Failure(E("When numberOfBuckets is greater than one, FilterExpression must start with 'aws_dbe_bucket = NN && '"))
257
+
if search.numBuckets <= 1 {
258
+
returnSuccess((values, []));
259
+
}
260
+
261
+
var foo :-ExtractBucketNumber(values);
262
+
var (nValues, bucket) := foo;
263
+
if bucket.Some? {
264
+
:-Need(bucket.value < search.numBuckets, E("Bucket number specified in FilterExpression was " + String.Base10Int2String(bucket.value as int) + "but it must be less than the number of buckets " + String.Base10Int2String(search.numBuckets as int)));
265
+
:-Need(bucket.value < 256, E("Bucket must be less than 256")); // unreachable
266
+
var nbucket := (bucket.value asnat) as uint8;
267
+
if nbucket == 0 {
268
+
returnSuccess((nValues, []));
269
+
} else {
270
+
returnSuccess((nValues, [nbucket]));
271
+
}
272
+
}
273
+
// No bucket specified is OK if no encrypted fields are searched
274
+
var encrypted :=set k <- actions | actions[k] == SE.ENCRYPT_AND_SIGN :: k;
275
+
var filterHasEncField := Filter.UsesEncryptedField(Filter.ParseExprOpt(filterExpr), encrypted, names);
276
+
var keyHasEncField := Filter.UsesEncryptedField(Filter.ParseExprOpt(keyExpr), encrypted, names);
277
+
if keyHasEncField.Some? || filterHasEncField.Some? {
278
+
returnFailure(E("When numberOfBuckets is greater than one, FilterExpression must start with 'aws_dbe_bucket = NN && '"));
279
+
} else {
280
+
returnSuccess((values, []));
281
+
}
268
282
}
269
283
270
284
// Transform a QueryInput object for searchable encryption.
@@ -283,9 +297,9 @@ module DynamoDBSupport {
283
297
} else {
284
298
var keyId :- Filter.GetBeaconKeyId(search.value.curr(), req.KeyConditionExpression, req.FilterExpression, req.ExpressionAttributeValues, req.ExpressionAttributeNames);
285
299
286
-
var foo :-ExtractBucket(search.value.curr(), req.FilterExpression);
287
-
var (newFilter, bucket) := foo;
288
-
var oldContext := Filter.ExprContext(req.KeyConditionExpression, newFilter, req.ExpressionAttributeValues, req.ExpressionAttributeNames);
300
+
var foo :-ExtractBucket(search.value.curr(), req.FilterExpression, req.KeyConditionExpression, req.ExpressionAttributeNames, req.ExpressionAttributeValues, actions);
301
+
var (newValues, bucket) := foo;
302
+
var oldContext := Filter.ExprContext(req.KeyConditionExpression, req.FilterExpression, newValues, req.ExpressionAttributeNames);
289
303
var newContext :- Filter.Beaconize(search.value.curr(), oldContext, keyId, bucket);
290
304
returnSuccess(req.(
291
305
KeyConditionExpression := newContext.keyExpr,
@@ -307,15 +321,15 @@ module DynamoDBSupport {
307
321
var trimmedItems := Seq.Map(i => DoRemoveBeacons(i), resp.Items.value);
0 commit comments