@Test
  public void testUpdateWithParameter() throws Exception {
    Map[] friends =
        new Map[] {
          new HashMap<String, Object>() {
            {
              put("name", "Slartibartfast");
            }
          },
          new HashMap<String, Object>() {
            {
              put("name", "Marvin");
            }
          }
        };
    UpdateAnalyzedStatement.NestedAnalyzedStatement analysis =
        analyze(
                "update users set name=?, other_id=?, friends=? where id=?",
                new Object[] {"Jeltz", 0, friends, "9"})
            .nestedStatements()
            .get(0);
    assertThat(analysis.assignments().size(), is(3));
    assertThat(
        analysis
            .assignments()
            .get(new Reference(USER_TABLE_INFO.getReferenceInfo(new ColumnIdent("name")))),
        isLiteral("Jeltz"));
    assertThat(
        analysis
            .assignments()
            .get(new Reference(USER_TABLE_INFO.getReferenceInfo(new ColumnIdent("friends")))),
        isLiteral(friends, new ArrayType(DataTypes.OBJECT)));
    assertThat(
        analysis
            .assignments()
            .get(new Reference(USER_TABLE_INFO.getReferenceInfo(new ColumnIdent("other_id")))),
        isLiteral(0L));

    assertThat(((Function) analysis.whereClause().query()).arguments().get(1), isLiteral(9L));
  }
  @Test
  public void testUpdateWithEmptyObjectArray() throws Exception {
    UpdateAnalyzedStatement.NestedAnalyzedStatement analysis =
        analyze("update users set friends=? where other_id=0", new Object[] {new Map[0], 0})
            .nestedStatements()
            .get(0);

    Literal friendsLiteral =
        (Literal)
            analysis
                .assignments()
                .get(new Reference(USER_TABLE_INFO.getReferenceInfo(new ColumnIdent("friends"))));
    assertThat(friendsLiteral.valueType().id(), is(ArrayType.ID));
    assertEquals(DataTypes.OBJECT, ((ArrayType) friendsLiteral.valueType()).innerType());
    assertThat(((Object[]) friendsLiteral.value()).length, is(0));
  }