Skip to content

Commit 33111b4

Browse files
Fix using the wrong manager from LLAPI (RedisJSON#736)
* Fix using the wrong manager from LLAPI the LLAPI was using the wrong manager to access the json data. Share code with RedisJson command to use the right manager. * format fixes
1 parent 8cad4bb commit 33111b4

File tree

2 files changed

+101
-218
lines changed

2 files changed

+101
-218
lines changed

src/c_api.rs

+75-194
Original file line numberDiff line numberDiff line change
@@ -256,20 +256,11 @@ macro_rules! redis_json_module_export_shared_api {
256256
ctx: *mut rawmod::RedisModuleCtx,
257257
key_str: *mut rawmod::RedisModuleString,
258258
) -> *mut c_void {
259-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
260-
261-
let m = $get_manager_expr;
262-
match m {
263-
Some(mngr) => json_api_open_key_internal(mngr, ctx, RedisString::new(ctx, key_str))
264-
as *mut c_void,
265-
None => json_api_open_key_internal(
266-
manager::RedisJsonKeyManager {
267-
phantom: PhantomData,
268-
},
269-
ctx,
270-
RedisString::new(ctx, key_str),
271-
) as *mut c_void,
272-
}
259+
run_on_manager!(
260+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
261+
get_mngr: $get_manager_expr,
262+
run: |mngr|{json_api_open_key_internal(mngr, ctx, RedisString::new(ctx, key_str))as *mut c_void},
263+
)
273264
}
274265

275266
#[no_mangle]
@@ -278,187 +269,102 @@ macro_rules! redis_json_module_export_shared_api {
278269
ctx: *mut rawmod::RedisModuleCtx,
279270
path: *const c_char,
280271
) -> *mut c_void {
281-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
282-
283272
let key = unsafe { CStr::from_ptr(path).to_str().unwrap() };
284-
let m = $get_manager_expr;
285-
match m {
286-
Some(mngr) => json_api_open_key_internal(mngr, ctx, RedisString::create(ctx, key))
287-
as *mut c_void,
288-
None => json_api_open_key_internal(
289-
manager::RedisJsonKeyManager {
290-
phantom: PhantomData,
291-
},
292-
ctx,
293-
RedisString::create(ctx, key),
294-
) as *mut c_void,
295-
}
273+
run_on_manager!(
274+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
275+
get_mngr: $get_manager_expr,
276+
run: |mngr|{json_api_open_key_internal(mngr, ctx, RedisString::create(ctx, key)) as *mut c_void},
277+
)
296278
}
297279

298280
#[no_mangle]
299281
pub extern "C" fn JSONAPI_get(key: *const c_void, path: *const c_char) -> *const c_void {
300-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
301-
302-
let m = $get_manager_expr;
303-
match m {
304-
Some(mngr) => json_api_get(mngr, key, path),
305-
None => json_api_get(
306-
manager::RedisJsonKeyManager {
307-
phantom: PhantomData,
308-
},
309-
key,
310-
path,
311-
),
312-
}
282+
run_on_manager!(
283+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
284+
get_mngr: $get_manager_expr,
285+
run: |mngr|{json_api_get(mngr, key, path)},
286+
)
313287
}
314288

315289
#[no_mangle]
316290
pub extern "C" fn JSONAPI_next(iter: *mut c_void) -> *const c_void {
317-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
318-
319-
let m = $get_manager_expr;
320-
match m {
321-
Some(mngr) => json_api_next(mngr, iter),
322-
None => json_api_next(
323-
manager::RedisJsonKeyManager {
324-
phantom: PhantomData,
325-
},
326-
iter,
327-
),
328-
}
291+
run_on_manager!(
292+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
293+
get_mngr: $get_manager_expr,
294+
run: |mngr|{json_api_next(mngr, iter)},
295+
)
329296
}
330297

331298
#[no_mangle]
332299
pub extern "C" fn JSONAPI_len(iter: *const c_void) -> size_t {
333-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
334-
335-
let m = $get_manager_expr;
336-
match m {
337-
Some(mngr) => json_api_len(mngr, iter),
338-
None => json_api_len(
339-
manager::RedisJsonKeyManager {
340-
phantom: PhantomData,
341-
},
342-
iter,
343-
),
344-
}
300+
run_on_manager!(
301+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
302+
get_mngr: $get_manager_expr,
303+
run: |mngr|{json_api_len(mngr, iter)},
304+
)
345305
}
346306

347307
#[no_mangle]
348308
pub extern "C" fn JSONAPI_freeIter(iter: *mut c_void) {
349-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
350-
351-
let m = $get_manager_expr;
352-
match m {
353-
Some(mngr) => json_api_free_iter(mngr, iter),
354-
None => json_api_free_iter(
355-
manager::RedisJsonKeyManager {
356-
phantom: PhantomData,
357-
},
358-
iter,
359-
),
360-
}
309+
run_on_manager!(
310+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
311+
get_mngr: $get_manager_expr,
312+
run: |mngr|{json_api_free_iter(mngr, iter)},
313+
)
361314
}
362315

363316
#[no_mangle]
364317
pub extern "C" fn JSONAPI_getAt(json: *const c_void, index: size_t) -> *const c_void {
365-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
366-
367-
let m = $get_manager_expr;
368-
match m {
369-
Some(mngr) => json_api_get_at(mngr, json, index),
370-
None => json_api_get_at(
371-
manager::RedisJsonKeyManager {
372-
phantom: PhantomData,
373-
},
374-
json,
375-
index,
376-
),
377-
}
318+
run_on_manager!(
319+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
320+
get_mngr: $get_manager_expr,
321+
run: |mngr|{json_api_get_at(mngr, json, index)},
322+
)
378323
}
379324

380325
#[no_mangle]
381326
pub extern "C" fn JSONAPI_getLen(json: *const c_void, count: *mut size_t) -> c_int {
382-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
383-
384-
let m = $get_manager_expr;
385-
match m {
386-
Some(mngr) => json_api_get_len(mngr, json, count),
387-
None => json_api_get_len(
388-
manager::RedisJsonKeyManager {
389-
phantom: PhantomData,
390-
},
391-
json,
392-
count,
393-
),
394-
}
327+
run_on_manager!(
328+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
329+
get_mngr: $get_manager_expr,
330+
run: |mngr|{json_api_get_len(mngr, json, count)},
331+
)
395332
}
396333

397334
#[no_mangle]
398335
pub extern "C" fn JSONAPI_getType(json: *const c_void) -> c_int {
399-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
400-
401-
let m = $get_manager_expr;
402-
match m {
403-
Some(mngr) => json_api_get_type(mngr, json),
404-
None => json_api_get_type(
405-
manager::RedisJsonKeyManager {
406-
phantom: PhantomData,
407-
},
408-
json,
409-
),
410-
}
336+
run_on_manager!(
337+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
338+
get_mngr: $get_manager_expr,
339+
run: |mngr|{json_api_get_type(mngr, json)},
340+
)
411341
}
412342

413343
#[no_mangle]
414344
pub extern "C" fn JSONAPI_getInt(json: *const c_void, val: *mut c_longlong) -> c_int {
415-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
416-
417-
let m = $get_manager_expr;
418-
match m {
419-
Some(mngr) => json_api_get_int(mngr, json, val),
420-
None => json_api_get_int(
421-
manager::RedisJsonKeyManager {
422-
phantom: PhantomData,
423-
},
424-
json,
425-
val,
426-
),
427-
}
345+
run_on_manager!(
346+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
347+
get_mngr: $get_manager_expr,
348+
run: |mngr|{json_api_get_int(mngr, json, val)},
349+
)
428350
}
429351

430352
#[no_mangle]
431353
pub extern "C" fn JSONAPI_getDouble(json: *const c_void, val: *mut c_double) -> c_int {
432-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
433-
434-
let m = $get_manager_expr;
435-
match m {
436-
Some(mngr) => json_api_get_double(mngr, json, val),
437-
None => json_api_get_double(
438-
manager::RedisJsonKeyManager {
439-
phantom: PhantomData,
440-
},
441-
json,
442-
val,
443-
),
444-
}
354+
run_on_manager!(
355+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
356+
get_mngr: $get_manager_expr,
357+
run: |mngr|{json_api_get_double(mngr, json, val)},
358+
)
445359
}
446360

447361
#[no_mangle]
448362
pub extern "C" fn JSONAPI_getBoolean(json: *const c_void, val: *mut c_int) -> c_int {
449-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
450-
451-
let m = $get_manager_expr;
452-
match m {
453-
Some(mngr) => json_api_get_boolean(mngr, json, val),
454-
None => json_api_get_boolean(
455-
manager::RedisJsonKeyManager {
456-
phantom: PhantomData,
457-
},
458-
json,
459-
val,
460-
),
461-
}
363+
run_on_manager!(
364+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
365+
get_mngr: $get_manager_expr,
366+
run: |mngr|{json_api_get_boolean(mngr, json, val)},
367+
)
462368
}
463369

464370
#[no_mangle]
@@ -467,20 +373,11 @@ macro_rules! redis_json_module_export_shared_api {
467373
str: *mut *const c_char,
468374
len: *mut size_t,
469375
) -> c_int {
470-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
471-
472-
let m = $get_manager_expr;
473-
match m {
474-
Some(mngr) => json_api_get_string(mngr, json, str, len),
475-
None => json_api_get_string(
476-
manager::RedisJsonKeyManager {
477-
phantom: PhantomData,
478-
},
479-
json,
480-
str,
481-
len,
482-
),
483-
}
376+
run_on_manager!(
377+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
378+
get_mngr: $get_manager_expr,
379+
run: |mngr|{json_api_get_string(mngr, json, str, len)},
380+
)
484381
}
485382

486383
#[no_mangle]
@@ -489,36 +386,20 @@ macro_rules! redis_json_module_export_shared_api {
489386
ctx: *mut rawmod::RedisModuleCtx,
490387
str: *mut *mut rawmod::RedisModuleString,
491388
) -> c_int {
492-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
493-
494-
let m = $get_manager_expr;
495-
match m {
496-
Some(mngr) => json_api_get_json(mngr, json, ctx, str),
497-
None => json_api_get_json(
498-
manager::RedisJsonKeyManager {
499-
phantom: PhantomData,
500-
},
501-
json,
502-
ctx,
503-
str,
504-
),
505-
}
389+
run_on_manager!(
390+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
391+
get_mngr: $get_manager_expr,
392+
run: |mngr|{json_api_get_json(mngr, json, ctx, str)},
393+
)
506394
}
507395

508396
#[no_mangle]
509397
pub extern "C" fn JSONAPI_isJSON(key: *mut rawmod::RedisModuleKey) -> c_int {
510-
$pre_command_function_expr(&get_llapi_ctx(), &Vec::new());
511-
512-
let m = $get_manager_expr;
513-
match m {
514-
Some(mngr) => json_api_is_json(mngr, key),
515-
None => json_api_is_json(
516-
manager::RedisJsonKeyManager {
517-
phantom: PhantomData,
518-
},
519-
key,
520-
),
521-
}
398+
run_on_manager!(
399+
pre_command: ||$pre_command_function_expr(&get_llapi_ctx(), &Vec::new()),
400+
get_mngr: $get_manager_expr,
401+
run: |mngr|{json_api_is_json(mngr, key)},
402+
)
522403
}
523404

524405
static REDISJSON_GETAPI: &str = concat!("RedisJSON_V1", "\0");

0 commit comments

Comments
 (0)