public static Projection<Entry<Object, Object>, JetSqlRow> toProjection(
            KvRowProjector.Supplier rightRowProjectorSupplier,
            ExpressionEvalContext evalContext
    ) {
        return new JoinProjection(rightRowProjectorSupplier, UntrustedExpressionEvalContext.from(evalContext));
    }
@Test
    public void when_serializedObject_then_deserializedCorrect() {
        AbstractSerializationService service = (AbstractSerializationService) TestUtil.getNode(instance()).getSerializationService();

        var evalContextMock = mock(ExpressionEvalContext.class);
        when(evalContextMock.getSerializationService()).thenReturn(mock());
        when(evalContextMock.getArguments()).thenReturn(emptyList());
        when(evalContextMock.getNodeEngine()).thenReturn(mock());

        var supplier = KvRowProjector.supplier(
                new QueryPath[]{},
                new QueryDataType[]{},
                null,
                null,
                null,
                null
        );
        DataSerializable projection = (DataSerializable) QueryUtil.toProjection(supplier, evalContextMock);

        var data = service.toData(projection);
        var actual = service.toObject(data);

        assertThat(actual)
                .usingRecursiveComparison()
                .comparingOnlyFields("arguments")
                .isEqualTo(projection);
    }