public Object resolve(final Expression expression) {
    return new Visitor().process(expression, null);
  }
@Test
  public void shouldResolveArbitraryExpressions() {
    // Given:
    final SqlType type = SqlTypes.struct().field("FOO", SqlTypes.STRING).build();
    final Expression exp = new CreateStructExpression(ImmutableList.of(
        new Field("FOO", new FunctionCall(
            FunctionName.of("CONCAT"),
            ImmutableList.of(
                new StringLiteral("bar"),
                new StringLiteral("baz"))
        ))
    ));

    // When:
    final Object o = new GenericExpressionResolver(type, FIELD_NAME, registry, config,
        "insert value", false).resolve(exp);

    // Then:
    assertThat(o, is(new Struct(
        SchemaBuilder.struct().field("FOO", Schema.OPTIONAL_STRING_SCHEMA).optional().build()
    ).put("FOO", "barbaz")));
  }