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 c7c6815d..7d5dc3a8 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.OperationWithModeOptions; import io.tarantool.driver.api.space.options.crud.OperationWithTimeoutOptions; @@ -16,5 +17,5 @@ */ public interface SelectOptions> extends OperationWithBucketIdOptions, OperationWithTimeoutOptions, OperationWithFieldsOptions, - OperationWithModeOptions, OperationWithBatchSizeOptions { + OperationWithModeOptions, OperationWithBatchSizeOptions, 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..3b82ad96 --- /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. If true then a critical log entry will be skipped on potentially long select. + * + * @param fullScan if true then a critical log entry will be skipped on potentially long select. + * @return this options instance. + */ + default T withFullScan(boolean fullScan) { + addOption(ProxyOption.FULL_SCAN, fullScan); + 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 c2b9de5f..95329457 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 @@ -23,7 +23,9 @@ public enum ProxyOption { AFTER("after"), - FIRST("first"); + FIRST("first"), + + 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 8c023dd7..110a0ed4 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 @@ -8,6 +8,7 @@ import io.tarantool.driver.api.space.options.SelectOptions; import io.tarantool.driver.api.space.TarantoolSpaceOperations; import io.tarantool.driver.api.space.options.ProxySelectOptions; +import io.tarantool.driver.api.space.options.crud.enums.ProxyOption; import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory; import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; @@ -174,4 +175,18 @@ public void withModeTest() throws ExecutionException, InterruptedException { crudSelectOpts = client.eval("return crud_select_opts").get(); assertEquals(Mode.WRITE.value(), ((HashMap) crudSelectOpts.get(0)).get("mode")); } + + @Test + public void withFullScanTest() { + TarantoolSpaceOperations> operations = + client.space(TEST_SPACE_NAME); + + operations.select(Conditions.any()).join(); + List crudSelectOpts = client.eval("return crud_select_opts").join(); + assertNull(((HashMap) crudSelectOpts.get(0)).get(ProxyOption.FULL_SCAN)); + + operations.select(Conditions.any(), ProxySelectOptions.create().withFullScan(true)).join(); + crudSelectOpts = client.eval("return crud_select_opts").join(); + assertEquals(true, ((HashMap) crudSelectOpts.get(0)).get(ProxyOption.FULL_SCAN.toString())); + } }