Skip to content

Commit d82b697

Browse files
committed
Fix review notes from @akudiyar and @Elishtar
1 parent 1618cfe commit d82b697

File tree

11 files changed

+130
-55
lines changed

11 files changed

+130
-55
lines changed

src/main/java/io/tarantool/driver/api/space/TarantoolSpaceOperations.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ default CompletableFuture<R> replaceMany(Collection<T> tuples, ReplaceManyOption
139139
}
140140

141141
/**
142-
* Select tuples matching the specified query with options.
142+
* Search for a tuple or a set of tuples with a specific conditions.
143143
*
144144
* @param conditions query with options
145145
* @return a future that will contain all corresponding tuples once completed
@@ -148,7 +148,7 @@ default CompletableFuture<R> replaceMany(Collection<T> tuples, ReplaceManyOption
148148
CompletableFuture<R> select(Conditions conditions) throws TarantoolClientException;
149149

150150
/**
151-
* Select tuples matching the specified query with specified conditions and options.
151+
* Search for a tuple or a set of tuples with a specific conditions and additional options.
152152
*
153153
* @param conditions specified conditions
154154
* @param options operation options

src/main/java/io/tarantool/driver/api/space/options/OperationWithFieldsOptions.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
*/
1111
public interface OperationWithFieldsOptions extends OperationWithTimeoutOptions {
1212
/**
13-
* Return list of fields.
13+
* Return list of fields names for getting only a subset of fields.
1414
*
15-
* @return timeout, in milliseconds.
15+
* @return list of fields string names
1616
*/
1717
Optional<List> getFields();
1818
}

src/main/java/io/tarantool/driver/api/space/options/proxy/ProxyReturnOptions.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package io.tarantool.driver.api.space.options.proxy;
22

33
import io.tarantool.driver.api.space.options.OperationWithFieldsOptions;
4-
import io.tarantool.driver.api.space.options.OperationWithTimeoutOptions;
54

65
import java.util.List;
76
import java.util.Optional;
87

98
/**
10-
* Represent options for functions which return values
9+
* Represent options for functions which return values.
1110
*
1211
* @author Alexey Kuzin
1312
* @author Artyom Dubinin
@@ -17,11 +16,11 @@ abstract class ProxyReturnOptions<B extends ProxyReturnOptions<B>> extends Proxy
1716

1817
public static final String FIELDS = "fields";
1918

20-
/** TODO:
21-
* Specifies timeout for waiting for a server response for the operation.
22-
* Configured request timeout for that client will be used by default.
19+
/**
20+
* Specifies list of fields names for getting only a subset of fields.
21+
* By default, all fields are returned.
2322
*
24-
* @param fields request timeout, in milliseconds
23+
* @param fields list of string field names
2524
* @return this options instance
2625
*/
2726
public B withFields(List<String> fields) {

src/main/java/io/tarantool/driver/core/proxy/CRUDBaseOptions.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
/**
66
* This class is not part of the public API.
7-
*
7+
* <p>
88
* Represent basic options for all cluster operations
99
*
1010
* @author Alexey Kuzin
@@ -14,9 +14,7 @@ class CRUDBaseOptions extends CRUDAbstractOperationOptions {
1414

1515
public static final String TIMEOUT = "timeout";
1616

17-
protected
18-
<O extends CRUDBaseOptions, B extends AbstractBuilder<O, B>>
19-
CRUDBaseOptions(AbstractBuilder<O, B> builder) {
17+
protected <O extends CRUDBaseOptions, B extends AbstractBuilder<O, B>> CRUDBaseOptions(AbstractBuilder<O, B> builder) {
2018
addOption(TIMEOUT, builder.timeout);
2119
}
2220

@@ -25,9 +23,8 @@ class CRUDBaseOptions extends CRUDAbstractOperationOptions {
2523
*
2624
* @see CRUDAbstractOperationOptions.AbstractBuilder
2725
*/
28-
protected abstract static
29-
class AbstractBuilder<O extends CRUDBaseOptions, B extends AbstractBuilder<O, B>>
30-
extends CRUDAbstractOperationOptions.AbstractBuilder<O, B> {
26+
protected abstract static class AbstractBuilder<O extends CRUDBaseOptions, B extends AbstractBuilder<O, B>>
27+
extends CRUDAbstractOperationOptions.AbstractBuilder<O, B> {
3128
protected Optional<Integer> timeout = Optional.empty();
3229

3330
public B withTimeout(Optional<Integer> timeout) {
@@ -40,7 +37,7 @@ public B withTimeout(Optional<Integer> timeout) {
4037
* Concrete Builder implementation for basic cluster proxy operation options.
4138
*/
4239
protected static final class Builder
43-
extends AbstractBuilder<CRUDBaseOptions, Builder> {
40+
extends AbstractBuilder<CRUDBaseOptions, Builder> {
4441

4542
@Override
4643
Builder self() {

src/main/java/io/tarantool/driver/core/proxy/CRUDBatchOptions.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,24 @@
44

55
/**
66
* This class is not part of the public API.
7-
*
7+
* <p>
88
* Represent options for proxy cluster batch operations
99
*
1010
* @author Alexey Kuzin
1111
*/
12-
public final class CRUDBatchOptions extends CRUDReturnOptions {
12+
final class CRUDBatchOptions extends CRUDReturnOptions {
1313

1414
public static final String BATCH_STOP_ON_ERROR = "stop_on_error";
1515
public static final String BATCH_ROLLBACK_ON_ERROR = "rollback_on_error";
1616

17-
protected
18-
<O extends CRUDBatchOptions, B extends AbstractBuilder<O, B>>
19-
CRUDBatchOptions(AbstractBuilder<O, B> builder) {
17+
private <B extends AbstractBuilder<B>> CRUDBatchOptions(AbstractBuilder<B> builder) {
2018
super(builder);
21-
2219
addOption(BATCH_STOP_ON_ERROR, builder.stopOnError);
2320
addOption(BATCH_ROLLBACK_ON_ERROR, builder.rollbackOnError);
2421
}
2522

26-
protected abstract static
27-
class AbstractBuilder<O extends CRUDBatchOptions, B extends AbstractBuilder<O, B>>
28-
extends CRUDReturnOptions.AbstractBuilder<O, B> {
23+
protected abstract static class AbstractBuilder<B extends AbstractBuilder<B>>
24+
extends CRUDReturnOptions.AbstractBuilder<CRUDBatchOptions, B> {
2925
private Optional<Boolean> stopOnError = Optional.empty();
3026
private Optional<Boolean> rollbackOnError = Optional.empty();
3127

@@ -40,8 +36,7 @@ public B withRollbackOnError(Optional<Boolean> rollbackOnError) {
4036
}
4137
}
4238

43-
protected static final class Builder extends AbstractBuilder<CRUDBatchOptions, Builder> {
44-
39+
protected static final class Builder extends AbstractBuilder<Builder> {
4540
@Override
4641
Builder self() {
4742
return this;

src/main/java/io/tarantool/driver/core/proxy/CRUDReturnOptions.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
/**
77
* This class is not part of the public API.
88
* <p>
9-
* Represent options for cluster proxy operations which returns fields
9+
* Represent returned options for cluster proxy operations.
10+
* The return set of fields of the tuples can be specified.
1011
*
1112
* @author Alexey Kuzin
1213
* @author Artyom Dubinin
@@ -18,7 +19,6 @@ class CRUDReturnOptions extends CRUDBaseOptions {
1819
protected <O extends CRUDReturnOptions, B extends AbstractBuilder<O, B>>
1920
CRUDReturnOptions(CRUDReturnOptions.AbstractBuilder<O, B> builder) {
2021
super(builder);
21-
2222
addOption(FIELDS, builder.fields);
2323
}
2424

src/main/java/io/tarantool/driver/core/proxy/CRUDSelectOptions.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
/**
88
* This class is not part of the public API.
9-
*
9+
* <p>
1010
* Represent options for select cluster proxy operation
1111
*
1212
* @author Sergey Volgin
@@ -19,8 +19,7 @@ final class CRUDSelectOptions extends CRUDReturnOptions {
1919
public static final String SELECT_AFTER = "after";
2020
public static final String SELECT_BATCH_SIZE = "batch_size";
2121

22-
private <O extends CRUDSelectOptions, B extends AbstractBuilder<O, B>>
23-
CRUDSelectOptions(AbstractBuilder<O, B> builder) {
22+
private <B extends AbstractBuilder<B>> CRUDSelectOptions(AbstractBuilder<B> builder) {
2423
super(builder);
2524

2625
addOption(SELECT_LIMIT, builder.selectLimit);
@@ -33,9 +32,8 @@ final class CRUDSelectOptions extends CRUDReturnOptions {
3332
*
3433
* @see CRUDAbstractOperationOptions.AbstractBuilder
3534
*/
36-
protected abstract static
37-
class AbstractBuilder<O extends CRUDSelectOptions, B extends AbstractBuilder<O, B>>
38-
extends CRUDReturnOptions.AbstractBuilder<O, B> {
35+
protected abstract static class AbstractBuilder<B extends AbstractBuilder<B>>
36+
extends CRUDReturnOptions.AbstractBuilder<CRUDSelectOptions, B> {
3937
private Optional<Long> selectLimit = Optional.empty();
4038
private Optional<Packable> after = Optional.empty();
4139
private Optional<Integer> selectBatchSize = Optional.empty();
@@ -59,8 +57,7 @@ public B withSelectAfter(Optional<Packable> startTuple) {
5957
/**
6058
* Concrete Builder implementation for select cluster proxy operation options.
6159
*/
62-
protected static final class Builder extends AbstractBuilder<CRUDSelectOptions, Builder> {
63-
60+
protected static final class Builder extends AbstractBuilder<Builder> {
6461
@Override
6562
Builder self() {
6663
return this;

src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertManyOptionsIT.java

Lines changed: 60 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
import io.tarantool.driver.api.TarantoolClient;
44
import io.tarantool.driver.api.TarantoolClientConfig;
55
import io.tarantool.driver.api.TarantoolResult;
6+
import io.tarantool.driver.api.conditions.Conditions;
67
import io.tarantool.driver.api.space.TarantoolSpaceOperations;
8+
import io.tarantool.driver.api.space.options.InsertManyOptions;
9+
import io.tarantool.driver.api.space.options.InsertOptions;
10+
import io.tarantool.driver.api.space.options.proxy.ProxyInsertOptions;
711
import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory;
812
import io.tarantool.driver.api.tuple.TarantoolTuple;
913
import io.tarantool.driver.api.tuple.TarantoolTupleFactory;
@@ -24,9 +28,11 @@
2428
import java.util.concurrent.ExecutionException;
2529

2630
import static org.junit.jupiter.api.Assertions.assertEquals;
31+
import static org.junit.jupiter.api.Assertions.assertNotNull;
2732

2833
/**
2934
* @author Alexey Kuzin
35+
* @author Artyom Dubinin
3036
*/
3137
public class ProxySpaceInsertManyOptionsIT extends SharedCartridgeContainer {
3238

@@ -39,6 +45,7 @@ public class ProxySpaceInsertManyOptionsIT extends SharedCartridgeContainer {
3945
public static String PASSWORD;
4046

4147
private static final String TEST_SPACE_NAME = "test__profile";
48+
private static final String PK_FIELD_NAME = "profile_id";
4249

4350
@BeforeAll
4451
public static void setUp() throws Exception {
@@ -75,8 +82,8 @@ public void withStopOnError_withRollbackOnError() throws ExecutionException, Int
7582
client.space(TEST_SPACE_NAME);
7683

7784
List<TarantoolTuple> tarantoolTuples = Arrays.asList(
78-
tupleFactory.create(1, null, "FIO", 50, 100),
79-
tupleFactory.create(2, null, "KEK", 75, 125)
85+
tupleFactory.create(1, null, "FIO", 50, 100),
86+
tupleFactory.create(2, null, "KEK", 75, 125)
8087
);
8188

8289
// with default values
@@ -87,15 +94,15 @@ public void withStopOnError_withRollbackOnError() throws ExecutionException, Int
8794

8895
// with custom values
8996
tarantoolTuples = Arrays.asList(
90-
tupleFactory.create(3, null, "FIO", 50, 100),
91-
tupleFactory.create(4, null, "KEK", 75, 125)
97+
tupleFactory.create(3, null, "FIO", 50, 100),
98+
tupleFactory.create(4, null, "KEK", 75, 125)
9299
);
93100

94101
profileSpace.insertMany(
95-
tarantoolTuples,
96-
ProxyInsertManyOptions.create()
97-
.withRollbackOnError(false)
98-
.withStopOnError(false)
102+
tarantoolTuples,
103+
ProxyInsertManyOptions.create()
104+
.withRollbackOnError(false)
105+
.withStopOnError(false)
99106
).get();
100107
crudInsertManyOpts = client.eval("return crud_insert_many_opts").get();
101108
assertEquals(false, ((HashMap) crudInsertManyOpts.get(0)).get("rollback_on_error"));
@@ -111,8 +118,8 @@ public void withTimeout() throws ExecutionException, InterruptedException {
111118
int customRequestTimeout = requestConfigTimeout * 2;
112119

113120
List<TarantoolTuple> tarantoolTuples = Arrays.asList(
114-
tupleFactory.create(1, null, "FIO", 50, 100),
115-
tupleFactory.create(2, null, "KEK", 75, 125)
121+
tupleFactory.create(1, null, "FIO", 50, 100),
122+
tupleFactory.create(2, null, "KEK", 75, 125)
116123
);
117124

118125
// with config timeout
@@ -122,15 +129,54 @@ public void withTimeout() throws ExecutionException, InterruptedException {
122129

123130
// with option timeout
124131
tarantoolTuples = Arrays.asList(
125-
tupleFactory.create(3, null, "FIO", 50, 100),
126-
tupleFactory.create(4, null, "KEK", 75, 125)
132+
tupleFactory.create(3, null, "FIO", 50, 100),
133+
tupleFactory.create(4, null, "KEK", 75, 125)
127134
);
128135

129136
profileSpace.insertMany(
130-
tarantoolTuples,
131-
ProxyInsertManyOptions.create().withTimeout(customRequestTimeout)
137+
tarantoolTuples,
138+
ProxyInsertManyOptions.create().withTimeout(customRequestTimeout)
132139
).get();
133140
crudInsertManyOpts = client.eval("return crud_insert_many_opts").get();
134141
assertEquals(customRequestTimeout, ((HashMap) crudInsertManyOpts.get(0)).get("timeout"));
135142
}
143+
144+
@Test
145+
public void withFieldsTest() throws ExecutionException, InterruptedException {
146+
TarantoolSpaceOperations<TarantoolTuple, TarantoolResult<TarantoolTuple>> profileSpace =
147+
client.space(TEST_SPACE_NAME);
148+
149+
List<TarantoolTuple> tarantoolTuples = Arrays.asList(
150+
tupleFactory.create(0, null, "0", 0, 0),
151+
tupleFactory.create(1, null, "1", 1, 1)
152+
);
153+
154+
// without fields
155+
TarantoolResult<TarantoolTuple> insertResult = profileSpace.insertMany(tarantoolTuples).get();
156+
assertEquals(2, insertResult.size());
157+
158+
for (int i = 0; i < insertResult.size(); i++) {
159+
TarantoolTuple tuple = insertResult.get(i);
160+
assertEquals(5, tuple.size());
161+
assertEquals(i, tuple.getInteger(0));
162+
assertNotNull(tuple.getInteger(1)); //bucket_id
163+
assertEquals(String.valueOf(i), tuple.getString(2));
164+
assertEquals(i, tuple.getInteger(3));
165+
assertEquals(i, tuple.getInteger(4));
166+
}
167+
168+
// with fields
169+
profileSpace.delete(Conditions.equals(PK_FIELD_NAME, 0)).get();
170+
profileSpace.delete(Conditions.equals(PK_FIELD_NAME, 1)).get();
171+
InsertManyOptions options = ProxyInsertManyOptions.create().withFields(Arrays.asList("profile_id", "fio"));
172+
insertResult = profileSpace.insertMany(tarantoolTuples, options).get();
173+
assertEquals(2, insertResult.size());
174+
175+
for (int i = 0; i < insertResult.size(); i++) {
176+
TarantoolTuple tuple = insertResult.get(i);
177+
assertEquals(2, tuple.size());
178+
assertEquals(i, tuple.getInteger(0));
179+
assertEquals(String.valueOf(i), tuple.getString(1));
180+
}
181+
}
136182
}

src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceManyOptionsIT.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.tarantool.driver.api.TarantoolClientConfig;
55
import io.tarantool.driver.api.TarantoolResult;
66
import io.tarantool.driver.api.space.TarantoolSpaceOperations;
7+
import io.tarantool.driver.api.space.options.ReplaceManyOptions;
78
import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory;
89
import io.tarantool.driver.api.tuple.TarantoolTuple;
910
import io.tarantool.driver.api.tuple.TarantoolTupleFactory;
@@ -24,6 +25,7 @@
2425
import java.util.concurrent.ExecutionException;
2526

2627
import static org.junit.jupiter.api.Assertions.assertEquals;
28+
import static org.junit.jupiter.api.Assertions.assertNotNull;
2729

2830
/**
2931
* @author Alexey Kuzin
@@ -123,4 +125,41 @@ public void withTimeout() throws ExecutionException, InterruptedException {
123125
crudReplaceManyOpts = client.eval("return crud_replace_many_opts").get();
124126
assertEquals(customRequestTimeout, ((HashMap) crudReplaceManyOpts.get(0)).get("timeout"));
125127
}
128+
129+
@Test
130+
public void withFieldsTest() throws ExecutionException, InterruptedException {
131+
TarantoolSpaceOperations<TarantoolTuple, TarantoolResult<TarantoolTuple>> profileSpace =
132+
client.space(TEST_SPACE_NAME);
133+
134+
List<TarantoolTuple> tarantoolTuples = Arrays.asList(
135+
tupleFactory.create(0, null, "0", 0, 0),
136+
tupleFactory.create(1, null, "1", 1, 1)
137+
);
138+
139+
// without fields
140+
TarantoolResult<TarantoolTuple> replaceResult = profileSpace.replaceMany(tarantoolTuples).get();
141+
assertEquals(2, replaceResult.size());
142+
143+
for (int i = 0; i < replaceResult.size(); i++) {
144+
TarantoolTuple tuple = replaceResult.get(i);
145+
assertEquals(5, tuple.size());
146+
assertEquals(i, tuple.getInteger(0));
147+
assertNotNull(tuple.getInteger(1)); //bucket_id
148+
assertEquals(String.valueOf(i), tuple.getString(2));
149+
assertEquals(i, tuple.getInteger(3));
150+
assertEquals(i, tuple.getInteger(4));
151+
}
152+
153+
// with fields
154+
ReplaceManyOptions options = ProxyReplaceManyOptions.create().withFields(Arrays.asList("profile_id", "fio"));
155+
replaceResult = profileSpace.replaceMany(tarantoolTuples, options).get();
156+
assertEquals(2, replaceResult.size());
157+
158+
for (int i = 0; i < replaceResult.size(); i++) {
159+
TarantoolTuple tuple = replaceResult.get(i);
160+
assertEquals(2, tuple.size());
161+
assertEquals(i, tuple.getInteger(0));
162+
assertEquals(String.valueOf(i), tuple.getString(1));
163+
}
164+
}
126165
}

0 commit comments

Comments
 (0)