Skip to content

Commit a15eed3

Browse files
committed
Add fields option to ProxySpace
Closes #236
1 parent 4c10d61 commit a15eed3

21 files changed

+254
-13
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Features
66
- Added options parameter to Tarantool Space API ([#266](https://github.com/tarantool/cartridge-java/pull/266))
7+
- Added `fields` option to ProxySpace ([#236](https://github.com/tarantool/cartridge-java/pull/236))
78

89
## [0.8.2] - 2022-09-16
910

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* @author Alexey Kuzin
99
* @author Artyom Dubinin
1010
*/
11-
public final class ProxyDeleteOptions extends ProxyBaseOptions<ProxyDeleteOptions> implements DeleteOptions {
11+
public final class ProxyDeleteOptions extends ProxyReturnOptions<ProxyDeleteOptions> implements DeleteOptions {
1212

1313
private ProxyDeleteOptions() {
1414
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* @author Alexey Kuzin
99
* @author Artyom Dubinin
1010
*/
11-
public final class ProxyInsertOptions extends ProxyBaseOptions<ProxyInsertOptions> implements InsertOptions {
11+
public final class ProxyInsertOptions extends ProxyReturnOptions<ProxyInsertOptions> implements InsertOptions {
1212

1313
private ProxyInsertOptions() {
1414
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* @author Alexey Kuzin
99
* @author Artyom Dubinin
1010
*/
11-
public final class ProxyReplaceOptions extends ProxyBaseOptions<ProxyReplaceOptions> implements ReplaceOptions {
11+
public final class ProxyReplaceOptions extends ProxyReturnOptions<ProxyReplaceOptions> implements ReplaceOptions {
1212

1313
private ProxyReplaceOptions() {
1414
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.tarantool.driver.api.space.options.proxy;
2+
3+
import java.util.List;
4+
5+
/**
6+
* Represent options for functions which return values
7+
*
8+
* @author Alexey Kuzin
9+
* @author Artyom Dubinin
10+
*/
11+
abstract class ProxyReturnOptions<B extends ProxyReturnOptions<B>> extends ProxyBaseOptions<B> {
12+
13+
public static final String FIELDS = "fields";
14+
15+
public B withFields(List<String> fields) {
16+
addOption(FIELDS, fields);
17+
return self();
18+
}
19+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* @author Alexey Kuzin
99
* @author Artyom Dubinin
1010
*/
11-
public final class ProxySelectOptions extends ProxyBaseOptions<ProxySelectOptions> implements SelectOptions {
11+
public final class ProxySelectOptions extends ProxyReturnOptions<ProxySelectOptions> implements SelectOptions {
1212

1313
public static final String BATCH_SIZE = "batch_size";
1414

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* @author Alexey Kuzin
99
* @author Artyom Dubinin
1010
*/
11-
public final class ProxyUpdateOptions extends ProxyBaseOptions<ProxyUpdateOptions> implements UpdateOptions {
11+
public final class ProxyUpdateOptions extends ProxyReturnOptions<ProxyUpdateOptions> implements UpdateOptions {
1212

1313
private ProxyUpdateOptions() {
1414
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* @author Alexey Kuzin
99
* @author Artyom Dubinin
1010
*/
11-
public final class ProxyUpsertOptions extends ProxyBaseOptions<ProxyUpsertOptions> implements UpsertOptions {
11+
public final class ProxyUpsertOptions extends ProxyReturnOptions<ProxyUpsertOptions> implements UpsertOptions {
1212

1313
private ProxyUpsertOptions() {
1414
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package io.tarantool.driver.core.proxy;
2+
3+
/**
4+
* This class is not part of the public API.
5+
*
6+
* Represent options for cluster proxy operations which returns fields
7+
*
8+
* @author Alexey Kuzin
9+
* @author Artyom Dubinin
10+
*/
11+
class CRUDReturnOptions extends CRUDBaseOptions {
12+
13+
public static final String FIELDS = "fields";
14+
15+
protected
16+
<O extends CRUDReturnOptions, T extends AbstractBuilder<O, T>>
17+
CRUDReturnOptions(AbstractBuilder<O, T> builder) {
18+
super(builder);
19+
20+
if (builder.options != null) {
21+
Object fields = builder.options.asMap().get(FIELDS);
22+
if (fields != null) {
23+
addOption(FIELDS, fields);
24+
}
25+
}
26+
}
27+
28+
/**
29+
* Concrete Builder implementation for select cluster proxy operation options.
30+
*/
31+
protected static final class Builder
32+
extends AbstractBuilder<CRUDReturnOptions, Builder> {
33+
34+
@Override
35+
Builder self() {
36+
return this;
37+
}
38+
39+
@Override
40+
public CRUDReturnOptions build() {
41+
return new CRUDReturnOptions(this);
42+
}
43+
}
44+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
* @author Alexey Kuzin
1212
* @author Artyom Dubinin
1313
*/
14-
final class CRUDSelectOptions extends CRUDBaseOptions {
14+
final class CRUDSelectOptions extends CRUDReturnOptions {
1515

1616
public static final String SELECT_LIMIT = "first";
1717
public static final String SELECT_AFTER = "after";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public Builder<T> withIndexQuery(TarantoolIndexQuery indexQuery) {
4646
}
4747

4848
public DeleteProxyOperation<T> build() {
49-
CRUDBaseOptions requestOptions = new CRUDBaseOptions.Builder()
49+
CRUDBaseOptions requestOptions = new CRUDReturnOptions.Builder()
5050
.withTimeout(requestTimeout)
5151
.withOptions(options)
5252
.build();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public Builder<T, R> withTuple(T tuple) {
4949
}
5050

5151
public InsertProxyOperation<T, R> build() {
52-
CRUDBaseOptions requestOptions = new CRUDBaseOptions.Builder()
52+
CRUDBaseOptions requestOptions = new CRUDReturnOptions.Builder()
5353
.withTimeout(requestTimeout)
5454
.withOptions(options)
5555
.build();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public Builder<T, R> withTuple(T tuple) {
5050
}
5151

5252
public ReplaceProxyOperation<T, R> build() {
53-
CRUDBaseOptions requestOptions = new CRUDBaseOptions.Builder()
53+
CRUDBaseOptions requestOptions = new CRUDReturnOptions.Builder()
5454
.withTimeout(requestTimeout)
5555
.withOptions(options)
5656
.build();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public Builder<T> withTupleOperation(TupleOperations operations) {
5353
}
5454

5555
public UpdateProxyOperation<T> build() {
56-
CRUDBaseOptions requestOptions = new CRUDBaseOptions.Builder()
56+
CRUDBaseOptions requestOptions = new CRUDReturnOptions.Builder()
5757
.withTimeout(requestTimeout)
5858
.withOptions(options)
5959
.build();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public Builder<T, R> withTupleOperation(TupleOperations operations) {
5656
}
5757

5858
public UpsertProxyOperation<T, R> build() {
59-
CRUDBaseOptions requestOptions = new CRUDBaseOptions.Builder()
59+
CRUDBaseOptions requestOptions = new CRUDReturnOptions.Builder()
6060
.withTimeout(requestTimeout)
6161
.withOptions(options)
6262
.build();

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import io.tarantool.driver.api.TarantoolResult;
66
import io.tarantool.driver.api.conditions.Conditions;
77
import io.tarantool.driver.api.space.TarantoolSpaceOperations;
8+
import io.tarantool.driver.api.space.options.DeleteOptions;
89
import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory;
910
import io.tarantool.driver.api.tuple.TarantoolTuple;
1011
import io.tarantool.driver.api.tuple.TarantoolTupleFactory;
@@ -18,11 +19,13 @@
1819
import org.junit.jupiter.api.BeforeEach;
1920
import org.junit.jupiter.api.Test;
2021

22+
import java.util.Arrays;
2123
import java.util.HashMap;
2224
import java.util.List;
2325
import java.util.concurrent.ExecutionException;
2426

2527
import static org.junit.jupiter.api.Assertions.assertEquals;
28+
import static org.junit.jupiter.api.Assertions.assertNotNull;
2629

2730
/**
2831
* @author Artyom Dubinin
@@ -91,4 +94,38 @@ public void withTimeout() throws ExecutionException, InterruptedException {
9194
crudDeleteOpts = client.eval("return crud_delete_opts").get();
9295
assertEquals(customRequestTimeout, ((HashMap) crudDeleteOpts.get(0)).get("timeout"));
9396
}
97+
98+
@Test
99+
public void withFieldsTest() throws ExecutionException, InterruptedException {
100+
TarantoolSpaceOperations<TarantoolTuple, TarantoolResult<TarantoolTuple>> profileSpace =
101+
client.space(TEST_SPACE_NAME);
102+
103+
TarantoolTuple tarantoolTuple = tupleFactory.create(1, null, "FIO", 50, 100);
104+
profileSpace.insert(tarantoolTuple).get();
105+
106+
Conditions conditions = Conditions.equals(PK_FIELD_NAME, 1);
107+
108+
// without fields
109+
TarantoolResult<TarantoolTuple> deleteResult = profileSpace.delete(conditions).get();
110+
assertEquals(1, deleteResult.size());
111+
112+
TarantoolTuple tuple = deleteResult.get(0);
113+
assertEquals(5, tuple.size());
114+
assertEquals(1, tuple.getInteger(0));
115+
assertNotNull(tuple.getInteger(1)); //bucket_id
116+
assertEquals("FIO", tuple.getString(2));
117+
assertEquals(50, tuple.getInteger(3));
118+
assertEquals(100, tuple.getInteger(4));
119+
120+
profileSpace.insert(tarantoolTuple).get();
121+
// with fields
122+
DeleteOptions options = ProxyDeleteOptions.create().withFields(Arrays.asList("profile_id", "fio"));
123+
deleteResult = profileSpace.delete(conditions, options).get();
124+
assertEquals(1, deleteResult.size());
125+
126+
tuple = deleteResult.get(0);
127+
assertEquals(2, tuple.size());
128+
assertEquals(1, tuple.getInteger(0));
129+
assertEquals("FIO", tuple.getString(1));
130+
}
94131
}

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import io.tarantool.driver.api.TarantoolResult;
66
import io.tarantool.driver.api.conditions.Conditions;
77
import io.tarantool.driver.api.space.TarantoolSpaceOperations;
8+
import io.tarantool.driver.api.space.options.InsertOptions;
89
import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory;
910
import io.tarantool.driver.api.tuple.TarantoolTuple;
1011
import io.tarantool.driver.api.tuple.TarantoolTupleFactory;
@@ -18,11 +19,13 @@
1819
import org.junit.jupiter.api.BeforeEach;
1920
import org.junit.jupiter.api.Test;
2021

22+
import java.util.Arrays;
2123
import java.util.HashMap;
2224
import java.util.List;
2325
import java.util.concurrent.ExecutionException;
2426

2527
import static org.junit.jupiter.api.Assertions.assertEquals;
28+
import static org.junit.jupiter.api.Assertions.assertNotNull;
2629

2730
/**
2831
* @author Artyom Dubinin
@@ -93,4 +96,35 @@ public void withTimeout() throws ExecutionException, InterruptedException {
9396
crudInsertOpts = client.eval("return crud_insert_opts").get();
9497
assertEquals(customRequestTimeout, ((HashMap) crudInsertOpts.get(0)).get("timeout"));
9598
}
99+
100+
@Test
101+
public void withFieldsTest() throws ExecutionException, InterruptedException {
102+
TarantoolSpaceOperations<TarantoolTuple, TarantoolResult<TarantoolTuple>> profileSpace =
103+
client.space(TEST_SPACE_NAME);
104+
105+
TarantoolTuple tarantoolTuple = tupleFactory.create(1, null, "FIO", 50, 100);
106+
107+
// without fields
108+
TarantoolResult<TarantoolTuple> insertResult = profileSpace.insert(tarantoolTuple).get();
109+
assertEquals(1, insertResult.size());
110+
111+
TarantoolTuple tuple = insertResult.get(0);
112+
assertEquals(5, tuple.size());
113+
assertEquals(1, tuple.getInteger(0));
114+
assertNotNull(tuple.getInteger(1)); //bucket_id
115+
assertEquals("FIO", tuple.getString(2));
116+
assertEquals(50, tuple.getInteger(3));
117+
assertEquals(100, tuple.getInteger(4));
118+
119+
// with fields
120+
profileSpace.delete(Conditions.equals(PK_FIELD_NAME, 1)).get();
121+
InsertOptions options = ProxyInsertOptions.create().withFields(Arrays.asList("profile_id", "fio"));
122+
insertResult = profileSpace.insert(tarantoolTuple, options).get();
123+
assertEquals(1, insertResult.size());
124+
125+
tuple = insertResult.get(0);
126+
assertEquals(2, tuple.size());
127+
assertEquals(1, tuple.getInteger(0));
128+
assertEquals("FIO", tuple.getString(1));
129+
}
96130
}

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

Lines changed: 33 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.ReplaceOptions;
78
import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory;
89
import io.tarantool.driver.api.tuple.TarantoolTuple;
910
import io.tarantool.driver.api.tuple.TarantoolTupleFactory;
@@ -17,11 +18,13 @@
1718
import org.junit.jupiter.api.BeforeEach;
1819
import org.junit.jupiter.api.Test;
1920

21+
import java.util.Arrays;
2022
import java.util.HashMap;
2123
import java.util.List;
2224
import java.util.concurrent.ExecutionException;
2325

2426
import static org.junit.jupiter.api.Assertions.assertEquals;
27+
import static org.junit.jupiter.api.Assertions.assertNotNull;
2528

2629
/**
2730
* @author Artyom Dubinin
@@ -91,4 +94,34 @@ public void withTimeout() throws ExecutionException, InterruptedException {
9194
crudReplaceOpts = client.eval("return crud_replace_opts").get();
9295
assertEquals(customRequestTimeout, ((HashMap) crudReplaceOpts.get(0)).get("timeout"));
9396
}
97+
98+
@Test
99+
public void withFieldsTest() throws ExecutionException, InterruptedException {
100+
TarantoolSpaceOperations<TarantoolTuple, TarantoolResult<TarantoolTuple>> profileSpace =
101+
client.space(TEST_SPACE_NAME);
102+
103+
TarantoolTuple tarantoolTuple = tupleFactory.create(1, null, "FIO", 50, 100);
104+
105+
// without fields
106+
TarantoolResult<TarantoolTuple> replaceResult = profileSpace.replace(tarantoolTuple).get();
107+
assertEquals(1, replaceResult.size());
108+
109+
TarantoolTuple tuple = replaceResult.get(0);
110+
assertEquals(5, tuple.size());
111+
assertEquals(1, tuple.getInteger(0));
112+
assertNotNull(tuple.getInteger(1)); //bucket_id
113+
assertEquals("FIO", tuple.getString(2));
114+
assertEquals(50, tuple.getInteger(3));
115+
assertEquals(100, tuple.getInteger(4));
116+
117+
// with fields
118+
ReplaceOptions options = ProxyReplaceOptions.create().withFields(Arrays.asList("profile_id", "fio"));
119+
replaceResult = profileSpace.replace(tarantoolTuple, options).get();
120+
assertEquals(1, replaceResult.size());
121+
122+
tuple = replaceResult.get(0);
123+
assertEquals(2, tuple.size());
124+
assertEquals(1, tuple.getInteger(0));
125+
assertEquals("FIO", tuple.getString(1));
126+
}
94127
}

0 commit comments

Comments
 (0)