Search in sources :

Example 1 with SerializingConverter

use of org.apache.ignite.internal.schema.marshaller.reflection.SerializingConverter in project ignite-3 by apache.

the class KvMarshallerTest method pojoMapping.

@ParameterizedTest
@MethodSource("marshallerFactoryProvider")
public void pojoMapping(MarshallerFactory factory) throws MarshallerException, IOException {
    Assumptions.assumeFalse(factory instanceof AsmMarshallerGenerator, "Generated marshaller doesn't support column mapping.");
    final SchemaDescriptor schema = new SchemaDescriptor(1, new Column[] { new Column("key", INT64, false) }, new Column[] { new Column("val", BYTES, true) });
    final TestPojo pojo = new TestPojo(42);
    final byte[] serializedPojo = serializeObject(pojo);
    final KvMarshaller<Long, TestPojo> marshaller1 = factory.create(schema, Mapper.of(Long.class, "\"key\""), Mapper.of(TestPojo.class, "\"val\"", new SerializingConverter<>()));
    final KvMarshaller<Long, byte[]> marshaller2 = factory.create(schema, Mapper.of(Long.class, "\"key\""), Mapper.of(byte[].class, "\"val\""));
    final KvMarshaller<Long, TestPojoWrapper> marshaller3 = factory.create(schema, Mapper.of(Long.class, "\"key\""), Mapper.builder(TestPojoWrapper.class).map("pojoField", "\"val\"", new SerializingConverter<>()).build());
    final KvMarshaller<Long, TestPojoWrapper> marshaller4 = factory.create(schema, Mapper.of(Long.class, "\"key\""), Mapper.builder(TestPojoWrapper.class).map("rawField", "\"val\"").build());
    BinaryRow row = marshaller1.marshal(1L, pojo);
    BinaryRow row2 = marshaller2.marshal(1L, serializedPojo);
    BinaryRow row3 = marshaller3.marshal(1L, new TestPojoWrapper(pojo));
    BinaryRow row4 = marshaller4.marshal(1L, new TestPojoWrapper(serializedPojo));
    // Verify all rows are equivalent.
    assertArrayEquals(row.bytes(), row2.bytes());
    assertArrayEquals(row.bytes(), row3.bytes());
    assertArrayEquals(row.bytes(), row4.bytes());
    // Check key.
    assertEquals(1L, marshaller1.unmarshalKey(new Row(schema, row)));
    assertEquals(1L, marshaller2.unmarshalKey(new Row(schema, row)));
    assertEquals(1L, marshaller3.unmarshalKey(new Row(schema, row)));
    assertEquals(1L, marshaller4.unmarshalKey(new Row(schema, row)));
    // Check values.
    assertEquals(pojo, marshaller1.unmarshalValue(new Row(schema, row)));
    assertArrayEquals(serializedPojo, marshaller2.unmarshalValue(new Row(schema, row)));
    assertEquals(new TestPojoWrapper(pojo), marshaller3.unmarshalValue(new Row(schema, row)));
    assertEquals(new TestPojoWrapper(serializedPojo), marshaller4.unmarshalValue(new Row(schema, row)));
}
Also used : SchemaDescriptor(org.apache.ignite.internal.schema.SchemaDescriptor) BinaryRow(org.apache.ignite.internal.schema.BinaryRow) Column(org.apache.ignite.internal.schema.Column) AsmMarshallerGenerator(org.apache.ignite.internal.schema.marshaller.asm.AsmMarshallerGenerator) SerializingConverter(org.apache.ignite.internal.schema.marshaller.reflection.SerializingConverter) Row(org.apache.ignite.internal.schema.row.Row) BinaryRow(org.apache.ignite.internal.schema.BinaryRow) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Aggregations

BinaryRow (org.apache.ignite.internal.schema.BinaryRow)1 Column (org.apache.ignite.internal.schema.Column)1 SchemaDescriptor (org.apache.ignite.internal.schema.SchemaDescriptor)1 AsmMarshallerGenerator (org.apache.ignite.internal.schema.marshaller.asm.AsmMarshallerGenerator)1 SerializingConverter (org.apache.ignite.internal.schema.marshaller.reflection.SerializingConverter)1 Row (org.apache.ignite.internal.schema.row.Row)1 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)1 MethodSource (org.junit.jupiter.params.provider.MethodSource)1