Skip to content

Commit d3ba446

Browse files
committed
Merge branch 'asynos-ctx-fix'
2 parents 2fd5097 + 9e10657 commit d3ba446

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

src/operations/cdt_context.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use crate::operations::lists::{list_order_flag, ListOrderType};
1717
use crate::operations::MapOrder;
1818
use crate::Value;
19+
use crate::operations::maps::map_order_flag;
1920

2021
#[doc(hidden)]
2122
// Empty Context for scalar operations
@@ -133,7 +134,7 @@ pub const fn ctx_map_key(key: Value) -> CdtContext {
133134
pub const fn ctx_map_key_create(key: Value, order: MapOrder) -> CdtContext {
134135
CdtContext {
135136
id: CtxType::MapKey as u8,
136-
flags: order as u8,
137+
flags: map_order_flag(order),
137138
value: key,
138139
}
139140
}

src/operations/maps.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,15 @@ const fn map_order_arg(policy: &MapPolicy) -> Option<CdtArgument> {
226226
}
227227
}
228228

229+
#[doc(hidden)]
230+
pub const fn map_order_flag(order: MapOrder) -> u8 {
231+
match order {
232+
MapOrder::KeyOrdered => 0x80,
233+
MapOrder::Unordered => 0x40,
234+
MapOrder::KeyValueOrdered => 0xc0
235+
}
236+
}
237+
229238
/// Create set map policy operation. Server set the map policy attributes. Server does not
230239
/// return a result.
231240
///

tests/src/cdt_map.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ use std::collections::HashMap;
1818
use crate::common;
1919
use env_logger;
2020

21-
use aerospike::operations::cdt_context::ctx_map_key;
22-
use aerospike::operations::maps;
21+
use aerospike::operations::cdt_context::{ctx_map_key, ctx_map_key_create};
22+
use aerospike::operations::{maps, MapOrder};
2323
use aerospike::{
2424
as_bin, as_key, as_list, as_map, as_val, Bins, MapPolicy, MapReturnType, ReadPolicy,
2525
WritePolicy,
@@ -300,4 +300,24 @@ fn map_operations() {
300300
let op = maps::get_by_key(bin_name, &xkey, MapReturnType::Value).set_context(ctx);
301301
let rec = client.operate(&wpolicy, &key, &[op]).unwrap();
302302
assert_eq!(*rec.bins.get(bin_name).unwrap(), as_val!(8));
303+
304+
let mkey = as_val!("ctxtest2");
305+
let ctx = &vec![ctx_map_key_create(mkey.clone(), MapOrder::KeyOrdered)];
306+
let xkey = as_val!("y");
307+
let xval = as_val!(8);
308+
let op = [maps::put(&mpolicy, bin_name, &xkey, &xval).set_context(ctx)];
309+
client.operate(&wpolicy, &key, &op).unwrap();
310+
let op = [maps::get_by_key(bin_name, &xkey, MapReturnType::Value).set_context(ctx)];
311+
let rec = client.operate(&wpolicy, &key, &op).unwrap();
312+
assert_eq!(*rec.bins.get(bin_name).unwrap(), as_val!(8));
313+
314+
let mkey2 = as_val!("ctxtest3");
315+
let ctx = &vec![ctx_map_key(mkey), ctx_map_key_create(mkey2, MapOrder::Unordered)];
316+
let xkey = as_val!("c");
317+
let xval = as_val!(9);
318+
let op = [maps::put(&mpolicy, bin_name, &xkey, &xval).set_context(ctx)];
319+
client.operate(&wpolicy, &key, &op).unwrap();
320+
let op = [maps::get_by_key(bin_name, &xkey, MapReturnType::Value).set_context(ctx)];
321+
let rec = client.operate(&wpolicy, &key, &op).unwrap();
322+
assert_eq!(*rec.bins.get(bin_name).unwrap(), as_val!(9));
303323
}

0 commit comments

Comments
 (0)