|
16 | 16 | import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory; |
17 | 17 | import io.tarantool.driver.api.tuple.TarantoolTuple; |
18 | 18 | import io.tarantool.driver.api.tuple.TarantoolTupleFactory; |
| 19 | +import io.tarantool.driver.api.tuple.TarantoolTupleResult; |
19 | 20 | import io.tarantool.driver.api.tuple.operations.TupleOperations; |
20 | 21 | import io.tarantool.driver.auth.SimpleTarantoolCredentials; |
21 | 22 | import io.tarantool.driver.auth.TarantoolCredentials; |
|
26 | 27 | import io.tarantool.driver.core.ClusterTarantoolTupleClient; |
27 | 28 | import io.tarantool.driver.core.ProxyTarantoolTupleClient; |
28 | 29 | import io.tarantool.driver.core.RetryingTarantoolTupleClient; |
| 30 | +import io.tarantool.driver.core.TarantoolTupleResultImpl; |
29 | 31 | import io.tarantool.driver.core.tuple.TarantoolTupleImpl; |
30 | 32 | import io.tarantool.driver.exceptions.TarantoolInternalException; |
31 | 33 | import io.tarantool.driver.exceptions.TarantoolNoSuchProcedureException; |
32 | 34 | import io.tarantool.driver.mappers.CallResultMapper; |
33 | 35 | import io.tarantool.driver.mappers.MessagePackMapper; |
34 | 36 | import io.tarantool.driver.mappers.MessagePackValueMapper; |
35 | 37 | import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; |
| 38 | +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactory; |
36 | 39 | import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactoryImpl; |
37 | 40 | import org.junit.jupiter.api.BeforeAll; |
38 | 41 | import org.junit.jupiter.api.BeforeEach; |
@@ -426,6 +429,53 @@ public void test_crudMetadataResponse_shouldReturnTuple_withoutDDLMetadata() |
426 | 429 | assertEquals(field4, tuple.getObject("field4").orElse(null)); |
427 | 430 | } |
428 | 431 |
|
| 432 | + @Test |
| 433 | + public void test_universalConverter_shouldWorkWithBoxAndCrudCorrectly() { |
| 434 | + Integer id = 123000; |
| 435 | + String field1 = "Jane Doe"; |
| 436 | + Integer field2 = 999; |
| 437 | + |
| 438 | + List<Object> values = Arrays.asList(id, null, field1, field2); |
| 439 | + TarantoolTuple tarantoolTuple = tupleFactory.create(values); |
| 440 | + client.space("test_space").insert(tarantoolTuple).join(); |
| 441 | + |
| 442 | + MessagePackMapper valueMapper = client.getConfig().getMessagePackMapper(); |
| 443 | + |
| 444 | + ResultMapperFactoryFactory factory = |
| 445 | + client.getResultMapperFactoryFactory(); |
| 446 | + CallResultMapper callReturnMapper = factory.createMapper() |
| 447 | + .withSingleValueConverter( |
| 448 | + factory.createMapper() |
| 449 | + .withArrayValueToTarantoolTupleResultConverter(valueMapper, null) |
| 450 | + .withRowsMetadataToTarantoolTupleResultMapper(valueMapper, null) |
| 451 | + .buildMessagePackMapper(valueMapper.copy()) |
| 452 | + ) |
| 453 | + .buildCallResultMapper(valueMapper.copy()); |
| 454 | + |
| 455 | + Object crudResult = |
| 456 | + client.call("crud.select", Collections.singletonList("test_space"), callReturnMapper).join(); |
| 457 | + |
| 458 | + assertTrue(crudResult instanceof TarantoolTupleResultImpl); |
| 459 | + TarantoolTupleResultImpl tarantoolResult = (TarantoolTupleResultImpl) crudResult; |
| 460 | + assertEquals(1, tarantoolResult.size()); |
| 461 | + TarantoolTuple tuple = tarantoolResult.get(0); |
| 462 | + assertEquals(id, tuple.getObject("id").orElse(null)); |
| 463 | + assertEquals(field1, tuple.getObject("field1").orElse(null)); |
| 464 | + assertEquals(field2, tuple.getObject("field2").orElse(null)); |
| 465 | + |
| 466 | + Object boxResult = |
| 467 | + client.call("select_router_space", new ArrayList<>(), callReturnMapper).join(); |
| 468 | + |
| 469 | + assertTrue(boxResult instanceof TarantoolTupleResultImpl); |
| 470 | + tarantoolResult = (TarantoolTupleResultImpl) boxResult; |
| 471 | + assertEquals(1, tarantoolResult.size()); |
| 472 | + tuple = tarantoolResult.get(0); |
| 473 | + assertEquals(1, tuple.getObject(0).orElse(null)); |
| 474 | + |
| 475 | + Object primitiveObject = client.call("returning_number", new ArrayList<>(), callReturnMapper).join(); |
| 476 | + assertEquals(2, primitiveObject); |
| 477 | + } |
| 478 | + |
429 | 479 | @Test |
430 | 480 | public void clusterUpsertTest() throws ExecutionException, InterruptedException { |
431 | 481 | TarantoolSpaceOperations<TarantoolTuple, TarantoolResult<TarantoolTuple>> profileSpace = |
|
0 commit comments