From dd4db5f048a353b0cb19bd45da7e44ce220c777c Mon Sep 17 00:00:00 2001 From: Belonogov Nikolay Date: Mon, 22 Jan 2024 13:04:12 +0300 Subject: [PATCH] Add support for "force_map_call" option Closes #459 --- .../api/space/options/SelectOptions.java | 4 ++- .../OperationWithForceMapCallOptions.java | 34 +++++++++++++++++++ .../space/options/crud/enums/ProxyOption.java | 4 ++- .../options/ProxySpaceSelectOptionsIT.java | 16 +++++++++ 4 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/tarantool/driver/api/space/options/crud/OperationWithForceMapCallOptions.java diff --git a/src/main/java/io/tarantool/driver/api/space/options/SelectOptions.java b/src/main/java/io/tarantool/driver/api/space/options/SelectOptions.java index 79f953923..5756756ea 100644 --- a/src/main/java/io/tarantool/driver/api/space/options/SelectOptions.java +++ b/src/main/java/io/tarantool/driver/api/space/options/SelectOptions.java @@ -3,6 +3,7 @@ import io.tarantool.driver.api.space.options.crud.OperationWithBatchSizeOptions; import io.tarantool.driver.api.space.options.crud.OperationWithBucketIdOptions; import io.tarantool.driver.api.space.options.crud.OperationWithFieldsOptions; +import io.tarantool.driver.api.space.options.crud.OperationWithForceMapCallOptions; import io.tarantool.driver.api.space.options.crud.OperationWithModeOptions; import io.tarantool.driver.api.space.options.crud.OperationWithTimeoutOptions; import io.tarantool.driver.api.space.options.crud.OperationWithYieldEveryOptions; @@ -17,5 +18,6 @@ */ public interface SelectOptions> extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions, - OperationWithModeOptions, OperationWithBatchSizeOptions, OperationWithYieldEveryOptions { + OperationWithModeOptions, OperationWithBatchSizeOptions, OperationWithYieldEveryOptions, + OperationWithForceMapCallOptions { } diff --git a/src/main/java/io/tarantool/driver/api/space/options/crud/OperationWithForceMapCallOptions.java b/src/main/java/io/tarantool/driver/api/space/options/crud/OperationWithForceMapCallOptions.java new file mode 100644 index 000000000..071bc9084 --- /dev/null +++ b/src/main/java/io/tarantool/driver/api/space/options/crud/OperationWithForceMapCallOptions.java @@ -0,0 +1,34 @@ +package io.tarantool.driver.api.space.options.crud; + +import java.util.Optional; + +import io.tarantool.driver.api.space.options.Options; +import io.tarantool.driver.api.space.options.Self; +import io.tarantool.driver.api.space.options.crud.enums.ProxyOption; + +/** + * Base interface for all operation options that may have a configurable "force_map_call" option. + * + * @author Belonogov Nikolay + */ +public interface OperationWithForceMapCallOptions> + extends Options, Self { + + /** + * Sets "force_map_call" option to true. if true then the map call is performed without any optimizations even, + * default value is false. + * + * @return forceMapCall option value. + */ + default T forceMapCall() { + addOption(ProxyOption.FORCE_MAP_CALL, true); + return self(); + } + + /** + * @return "force_map_call" option value. + */ + default Optional getForceMapCall() { + return getOption(ProxyOption.FORCE_MAP_CALL, Boolean.class); + } +} diff --git a/src/main/java/io/tarantool/driver/api/space/options/crud/enums/ProxyOption.java b/src/main/java/io/tarantool/driver/api/space/options/crud/enums/ProxyOption.java index 5ece16ba3..d560e1653 100644 --- a/src/main/java/io/tarantool/driver/api/space/options/crud/enums/ProxyOption.java +++ b/src/main/java/io/tarantool/driver/api/space/options/crud/enums/ProxyOption.java @@ -25,7 +25,9 @@ public enum ProxyOption { FIRST("first"), - YIELD_EVERY("yield_every"); + YIELD_EVERY("yield_every"), + + FORCE_MAP_CALL("force_map_call"); private final String name; diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java index d2c01daac..76719fedf 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java @@ -29,6 +29,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Artyom Dubinin @@ -255,4 +256,19 @@ public void withYieldEveryTest() { assertEquals(yieldEvery, ((HashMap) crudSelectOpts.get(0)).get(ProxyOption.YIELD_EVERY.toString())); } + + @Test + public void withForceMapCallTest() { + TarantoolSpaceOperations> profileSpace = + client.space(TEST_SPACE_NAME); + + SelectOptions options = ProxySelectOptions.create().forceMapCall(); + + assertTrue(options.getForceMapCall().isPresent()); + assertTrue(options.getForceMapCall().get()); + + profileSpace.select(Conditions.any(), options).join(); + List crudSelectOpts = client.eval("return crud_select_opts").join(); + assertEquals(true, ((HashMap) crudSelectOpts.get(0)).get(ProxyOption.FORCE_MAP_CALL.toString())); + } }