4
4
import static org .junit .jupiter .api .Assertions .assertThrows ;
5
5
import static org .junit .jupiter .api .Assertions .assertTrue ;
6
6
import static org .tarantool .TestAssertions .checkRawTupleResult ;
7
+ import static org .tarantool .TestAssumptions .assumeMinimalServerVersion ;
7
8
8
9
import org .tarantool .schema .TarantoolIndexNotFoundException ;
9
10
import org .tarantool .schema .TarantoolSpaceNotFoundException ;
@@ -78,8 +79,8 @@ void testStringInsert() {
78
79
client .syncOps ().insert ("basic_test" , Arrays .asList (1 , "one" ));
79
80
client .syncOps ().insert ("basic_test" , Arrays .asList (10 , "ten" ));
80
81
81
- checkRawTupleResult (consoleSelect (1 ), Arrays .asList (1 , "one" ));
82
- checkRawTupleResult (consoleSelect (10 ), Arrays .asList (10 , "ten" ));
82
+ checkRawTupleResult (consoleSelect ("basic_test" , 1 ), Arrays .asList (1 , "one" ));
83
+ checkRawTupleResult (consoleSelect ("basic_test" , 10 ), Arrays .asList (10 , "ten" ));
83
84
}
84
85
85
86
@ Test
@@ -90,8 +91,8 @@ void testStringReplace() {
90
91
client .syncOps ().replace ("basic_test" , Arrays .asList (1 , "one" ));
91
92
client .syncOps ().replace ("basic_test" , Arrays .asList (10 , "ten" ));
92
93
93
- checkRawTupleResult (consoleSelect (1 ), Arrays .asList (1 , "one" ));
94
- checkRawTupleResult (consoleSelect (10 ), Arrays .asList (10 , "ten" ));
94
+ checkRawTupleResult (consoleSelect ("basic_test" , 1 ), Arrays .asList (1 , "one" ));
95
+ checkRawTupleResult (consoleSelect ("basic_test" , 10 ), Arrays .asList (10 , "ten" ));
95
96
}
96
97
97
98
@ Test
@@ -103,9 +104,9 @@ void testStringDelete() {
103
104
client .syncOps ().delete ("basic_test" , Collections .singletonList (1 ));
104
105
client .syncOps ().delete ("basic_test" , Collections .singletonList (20 ));
105
106
106
- assertEquals (Collections .emptyList (), consoleSelect (1 ));
107
- checkRawTupleResult (consoleSelect (10 ), Arrays .asList (10 , "10" ));
108
- assertEquals (Collections .emptyList (), consoleSelect (20 ));
107
+ assertEquals (Collections .emptyList (), consoleSelect ("basic_test" , 1 ));
108
+ checkRawTupleResult (consoleSelect ("basic_test" , 10 ), Arrays .asList (10 , "10" ));
109
+ assertEquals (Collections .emptyList (), consoleSelect ("basic_test" , 20 ));
109
110
}
110
111
111
112
@ Test
@@ -118,9 +119,9 @@ void testStringUpdate() {
118
119
clientOps .update ("basic_test" , Collections .singletonList (2 ), Arrays .asList ("=" , 1 , "two" ));
119
120
clientOps .update ("basic_test" , Collections .singletonList (10 ), Arrays .asList ("=" , 1 , "ten" ));
120
121
121
- checkRawTupleResult (consoleSelect (1 ), Arrays .asList (1 , "one" ));
122
- assertEquals (Collections .emptyList (), consoleSelect (2 ));
123
- checkRawTupleResult (consoleSelect (10 ), Arrays .asList (10 , "ten" ));
122
+ checkRawTupleResult (consoleSelect ("basic_test" , 1 ), Arrays .asList (1 , "one" ));
123
+ assertEquals (Collections .emptyList (), consoleSelect ("basic_test" , 2 ));
124
+ checkRawTupleResult (consoleSelect ("basic_test" , 10 ), Arrays .asList (10 , "ten" ));
124
125
}
125
126
126
127
@ Test
@@ -142,9 +143,9 @@ void testStringUpsert() {
142
143
Arrays .asList (10 , "010" ), Arrays .asList ("=" , 1 , "ten" )
143
144
);
144
145
145
- checkRawTupleResult (consoleSelect (1 ), Arrays .asList (1 , "one" ));
146
- checkRawTupleResult (consoleSelect (2 ), Arrays .asList (2 , "002" ));
147
- checkRawTupleResult (consoleSelect (10 ), Arrays .asList (10 , "ten" ));
146
+ checkRawTupleResult (consoleSelect ("basic_test" , 1 ), Arrays .asList (1 , "one" ));
147
+ checkRawTupleResult (consoleSelect ("basic_test" , 2 ), Arrays .asList (2 , "002" ));
148
+ checkRawTupleResult (consoleSelect ("basic_test" , 10 ), Arrays .asList (10 , "ten" ));
148
149
}
149
150
150
151
@ Test
@@ -229,8 +230,114 @@ void testCreateSpaceAfterFailedRequest() {
229
230
testHelper .executeLua ("box.space.base_test_unknown:drop()" );
230
231
}
231
232
232
- private List <?> consoleSelect (Object key ) {
233
- return testHelper .evaluate (TestUtils .toLuaSelect ("basic_test" , key ));
233
+ @ Test
234
+ void testNamedFieldUpdate () {
235
+ assumeMinimalServerVersion (testHelper .getInstanceVersion (), ServerVersion .V_2_3 );
236
+ testHelper .executeLua ("box.space.basic_test:insert{1, '1'}" );
237
+ testHelper .executeLua ("box.space.basic_test:insert{10, '10'}" );
238
+
239
+ TarantoolClientOps <Integer , List <?>, Object , List <?>> clientOps = client .syncOps ();
240
+ clientOps .update ("basic_test" , Collections .singletonList (1 ), Arrays .asList ("=" , "val" , "un" ));
241
+ clientOps .update ("basic_test" , Collections .singletonList (2 ), Arrays .asList ("=" , "val" , "deux" ));
242
+ clientOps .update ("basic_test" , Collections .singletonList (10 ), Arrays .asList ("=" , "val" , "dix" ));
243
+
244
+ checkRawTupleResult (consoleSelect ("basic_test" , 1 ), Arrays .asList (1 , "un" ));
245
+ assertEquals (Collections .emptyList (), consoleSelect ("basic_test" , 2 ));
246
+ checkRawTupleResult (consoleSelect ("basic_test" , 10 ), Arrays .asList (10 , "dix" ));
247
+ }
248
+
249
+ @ Test
250
+ void testWrongNamedFieldUpdate () {
251
+ assumeMinimalServerVersion (testHelper .getInstanceVersion (), ServerVersion .V_2_3 );
252
+ testHelper .executeLua ("box.space.basic_test:insert{1, '1'}" );
253
+
254
+ TarantoolClientOps <Integer , List <?>, Object , List <?>> clientOps = client .syncOps ();
255
+ TarantoolException exception = assertThrows (
256
+ TarantoolException .class ,
257
+ () -> clientOps .update ("basic_test" , Collections .singletonList (1 ), Arrays .asList ("=" , "wrong" , "un" ))
258
+ );
259
+ assertEquals (exception .getMessage (), "Field 'wrong' was not found in the tuple" );
260
+ }
261
+
262
+ @ Test
263
+ void testNamedFieldUpsert () {
264
+ assumeMinimalServerVersion (testHelper .getInstanceVersion (), ServerVersion .V_2_3 );
265
+ testHelper .executeLua ("box.space.basic_test:insert{1, '1'}" );
266
+ testHelper .executeLua ("box.space.basic_test:insert{10, '10'}" );
267
+
268
+ TarantoolClientOps <Integer , List <?>, Object , List <?>> ops = client .syncOps ();
269
+ ops .upsert (
270
+ "basic_test" , Collections .singletonList (1 ),
271
+ Arrays .asList (1 , "un" ), Arrays .asList ("=" , "val" , "one" )
272
+ );
273
+ ops .upsert (
274
+ "basic_test" , Collections .singletonList (2 ),
275
+ Arrays .asList (2 , "deux" ), Arrays .asList ("=" , "val" , "two" )
276
+ );
277
+ ops .upsert (
278
+ "basic_test" , Collections .singletonList (10 ),
279
+ Arrays .asList (10 , "dix" ), Arrays .asList ("=" , "val" , "ten" )
280
+ );
281
+
282
+ checkRawTupleResult (consoleSelect ("basic_test" , 1 ), Arrays .asList (1 , "one" ));
283
+ checkRawTupleResult (consoleSelect ("basic_test" , 2 ), Arrays .asList (2 , "deux" ));
284
+ checkRawTupleResult (consoleSelect ("basic_test" , 10 ), Arrays .asList (10 , "ten" ));
285
+ }
286
+
287
+ @ Test
288
+ void testWrongNamedFieldUpsert () {
289
+ assumeMinimalServerVersion (testHelper .getInstanceVersion (), ServerVersion .V_2_3 );
290
+ testHelper .executeLua ("box.space.basic_test:insert{1, '1'}" );
291
+
292
+ TarantoolClientOps <Integer , List <?>, Object , List <?>> ops = client .syncOps ();
293
+ TarantoolException exception = assertThrows (
294
+ TarantoolException .class ,
295
+ () -> {
296
+ ops .upsert (
297
+ "basic_test" , Collections .singletonList (1 ),
298
+ Arrays .asList (1 , "un" ), Arrays .asList ("=" , "bad_field" , "one" )
299
+ );
300
+ }
301
+ );
302
+ assertEquals (exception .getMessage (), "Field 'bad_field' was not found in the tuple" );
303
+ }
304
+
305
+ @ Test
306
+ void testUpdateNamedFieldsOperations () {
307
+ assumeMinimalServerVersion (testHelper .getInstanceVersion (), ServerVersion .V_2_3 );
308
+ testHelper .executeLua (
309
+ "box.schema.space.create('animals', { format = " +
310
+ "{ {name = 'id', type = 'integer'}," +
311
+ " {name = 'name', type = 'string'}," +
312
+ " {name = 'mph', type = 'integer'}," +
313
+ " {name = 'habitat', type = 'string', is_nullable = true} } })" ,
314
+ "box.space.animals:create_index('pk', { type = 'TREE', parts = {'id'} } )" ,
315
+
316
+ "box.space.animals:insert{1, 'Golden eagle', 200}" ,
317
+ "box.space.animals:insert{2, 'Cheetah', 75}" ,
318
+ "box.space.animals:insert{3, 'lion', 30, 'Africa'}"
319
+ );
320
+
321
+ TarantoolClientOps <Integer , List <?>, Object , List <?>> ops = client .syncOps ();
322
+ ops .update ("animals" , Collections .singletonList (1 ), Arrays .asList ("!" , "habitat" , "North America" ));
323
+ ops .update ("animals" , Collections .singletonList (3 ), Arrays .asList ("=" , "name" , "Lion" ));
324
+ ops .update ("animals" , Collections .singletonList (3 ), Arrays .asList ("+" , "mph" , 20 ));
325
+ ops .update ("animals" , Collections .singletonList (3 ), Arrays .asList ("#" , "habitat" , 1 ));
326
+ ops .upsert (
327
+ "animals" , Collections .singletonList (4 ),
328
+ Arrays .asList (4 , "Swordfish" , 60 ), Arrays .asList ("=" , "mph" , 60 )
329
+ );
330
+
331
+ checkRawTupleResult (consoleSelect ("animals" , 1 ), Arrays .asList (1 , "Golden eagle" , 200 , "North America" ));
332
+ checkRawTupleResult (consoleSelect ("animals" , 2 ), Arrays .asList (2 , "Cheetah" , 75 ));
333
+ checkRawTupleResult (consoleSelect ("animals" , 3 ), Arrays .asList (3 , "Lion" , 50 ));
334
+ checkRawTupleResult (consoleSelect ("animals" , 4 ), Arrays .asList (4 , "Swordfish" , 60 ));
335
+
336
+ testHelper .executeLua ("box.space.animals:drop()" );
337
+ }
338
+
339
+ private List <?> consoleSelect (String spaceName , Object key ) {
340
+ return testHelper .evaluate (TestUtils .toLuaSelect (spaceName , key ));
234
341
}
235
342
236
343
}
0 commit comments