From 6592fcbd9ebdd167d04faebf1247c3041907190d Mon Sep 17 00:00:00 2001 From: Belonogov Nikolay Date: Wed, 24 Jan 2024 10:30:25 +0300 Subject: [PATCH] Add support for "fullscan" option Closes #460 --- .../api/space/options/SelectOptions.java | 3 +- .../crud/OperationWithFullScanOptions.java | 28 +++++++++++++++++++ .../space/options/crud/enums/ProxyOption.java | 4 ++- .../options/ProxySpaceSelectOptionsIT.java | 15 ++++++++++ 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/tarantool/driver/api/space/options/crud/OperationWithFullScanOptions.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 5756756e..81a69dc6 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.OperationWithFullScanOptions; 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; @@ -19,5 +20,5 @@ public interface SelectOptions> extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions, OperationWithModeOptions, OperationWithBatchSizeOptions, OperationWithYieldEveryOptions, - OperationWithForceMapCallOptions { + OperationWithForceMapCallOptions, OperationWithFullScanOptions { } diff --git a/src/main/java/io/tarantool/driver/api/space/options/crud/OperationWithFullScanOptions.java b/src/main/java/io/tarantool/driver/api/space/options/crud/OperationWithFullScanOptions.java new file mode 100644 index 00000000..1634ad9e --- /dev/null +++ b/src/main/java/io/tarantool/driver/api/space/options/crud/OperationWithFullScanOptions.java @@ -0,0 +1,28 @@ +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; + +public interface OperationWithFullScanOptions> extends Options, Self { + + /** + * Sets "fullscan" option value to true. If true then a critical log entry will be skipped on potentially long + * select. + * + * @return this options instance. + */ + default T fullScan() { + addOption(ProxyOption.FULL_SCAN, true); + return self(); + } + + /** + * @return "fullscan" option value. + */ + default Optional getFullScan() { + return getOption(ProxyOption.FULL_SCAN, 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 d560e165..21cb5db7 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 @@ -27,7 +27,9 @@ public enum ProxyOption { YIELD_EVERY("yield_every"), - FORCE_MAP_CALL("force_map_call"); + FORCE_MAP_CALL("force_map_call"), + + FULL_SCAN("fullscan"); 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 76719fed..a41ed7c6 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 @@ -271,4 +271,19 @@ public void withForceMapCallTest() { List crudSelectOpts = client.eval("return crud_select_opts").join(); assertEquals(true, ((HashMap) crudSelectOpts.get(0)).get(ProxyOption.FORCE_MAP_CALL.toString())); } + + @Test + public void withFullScanTest() { + TarantoolSpaceOperations> operations = + client.space(TEST_SPACE_NAME); + + SelectOptions options = ProxySelectOptions.create().fullScan(); + + assertTrue(options.getFullScan().isPresent()); + assertTrue(options.getFullScan().get()); + + operations.select(Conditions.any(), options).join(); + List crudSelectOpts = client.eval("return crud_select_opts").join(); + assertEquals(true, ((HashMap) crudSelectOpts.get(0)).get(ProxyOption.FULL_SCAN.toString())); + } }