static Result coerceUserList(
      final Collection<Expression> expressions,
      final ExpressionTypeManager typeManager
  ) {
    return coerceUserList(expressions, typeManager, Collections.emptyMap());
  }
@Test
  public void shouldDriveCoercionFromFirstNonNullExpression() {
    // Given:
    final ImmutableList<Expression> stringFirst = ImmutableList.of(
        new NullLiteral(),
        new StringLiteral("false"),
        new BooleanLiteral(true)
    );

    final ImmutableList<Expression> boolFirst = ImmutableList.of(
        new NullLiteral(),
        new BooleanLiteral(true),
        new StringLiteral("false")
    );

    // When:
    final Result stringResult = CoercionUtil.coerceUserList(stringFirst, typeManager);
    final Result boolResult = CoercionUtil.coerceUserList(boolFirst, typeManager);

    // Then:
    assertThat(stringResult.commonType(), is(Optional.of(SqlTypes.STRING)));
    assertThat(stringResult.expressions(), is(ImmutableList.of(
        new NullLiteral(),
        new StringLiteral("false"),
        new StringLiteral("true")
    )));

    assertThat(boolResult.commonType(), is(Optional.of(SqlTypes.BOOLEAN)));
    assertThat(boolResult.expressions(), is(ImmutableList.of(
        new NullLiteral(),
        new BooleanLiteral(true),
        new BooleanLiteral(false)
    )));
  }