@Test
  public void testBuildExpression_01() {
    String query = "UPDATE Employee e SET e.name = 'Pascal'";
    JPQLExpression jpqlExpression = JPQLQueryBuilder.buildQuery(query);

    // UpdateStatement
    Expression expression = jpqlExpression.getQueryStatement();
    assertTrue(expression instanceof UpdateStatement);
    UpdateStatement updateStatement = (UpdateStatement) expression;

    // UpdateClause
    expression = updateStatement.getUpdateClause();
    assertTrue(expression instanceof UpdateClause);
    UpdateClause updateClause = (UpdateClause) expression;

    // UpdateItem
    expression = updateClause.getUpdateItems();
    assertTrue(expression instanceof UpdateItem);
    UpdateItem updateItem = (UpdateItem) expression;

    assertTrue(updateItem.hasEqualSign());
    assertEquals("e.name = 'Pascal'", updateItem.toParsedText());

    // StateFieldPathExpression
    expression = updateItem.getStateFieldPathExpression();
    assertTrue(expression instanceof StateFieldPathExpression);
    StateFieldPathExpression stateFieldPathExpression = (StateFieldPathExpression) expression;

    assertEquals("e.name", stateFieldPathExpression.toParsedText());

    // StringLiteral
    expression = updateItem.getNewValue();
    assertTrue(expression instanceof StringLiteral);
    StringLiteral stringLiteral = (StringLiteral) expression;

    assertEquals("'Pascal'", stringLiteral.toParsedText());
  }
  @Test
  public void testBuildExpression_02() {
    String query = "UPDATE Employee e SET e.name = 'Pascal', e.manager.salary = 100000";
    JPQLExpression jpqlExpression = JPQLQueryBuilder.buildQuery(query);

    // UpdateStatement
    Expression expression = jpqlExpression.getQueryStatement();
    assertTrue(expression instanceof UpdateStatement);
    UpdateStatement updateStatement = (UpdateStatement) expression;

    // UpdateClause
    expression = updateStatement.getUpdateClause();
    assertTrue(expression instanceof UpdateClause);
    UpdateClause updateClause = (UpdateClause) expression;

    // CollectionExpression
    expression = updateClause.getUpdateItems();
    assertTrue(expression instanceof CollectionExpression);
    CollectionExpression collectionExpression = (CollectionExpression) expression;

    assertEquals(2, collectionExpression.childrenSize());

    // Item 1: UpdateItem
    expression = collectionExpression.getChild(0);
    assertTrue(expression instanceof UpdateItem);
    UpdateItem updateItem = (UpdateItem) expression;

    assertTrue(updateItem.hasEqualSign());
    assertEquals("e.name = 'Pascal'", updateItem.toParsedText());

    // StateFieldPathExpression
    expression = updateItem.getStateFieldPathExpression();
    assertTrue(expression instanceof StateFieldPathExpression);
    StateFieldPathExpression stateFieldPathExpression = (StateFieldPathExpression) expression;

    assertEquals("e.name", stateFieldPathExpression.toParsedText());

    // StringLiteral
    expression = updateItem.getNewValue();
    assertTrue(expression instanceof StringLiteral);
    StringLiteral stringLiteral = (StringLiteral) expression;

    assertEquals("'Pascal'", stringLiteral.toParsedText());

    // Item 1: UpdateItem
    expression = collectionExpression.getChild(1);
    assertTrue(expression instanceof UpdateItem);
    updateItem = (UpdateItem) expression;

    assertTrue(updateItem.hasEqualSign());
    assertEquals("e.manager.salary = 100000", updateItem.toParsedText());

    // StateFieldPathExpression
    expression = updateItem.getStateFieldPathExpression();
    assertTrue(expression instanceof StateFieldPathExpression);
    stateFieldPathExpression = (StateFieldPathExpression) expression;

    assertEquals("e.manager.salary", stateFieldPathExpression.toParsedText());

    // NumericLiteral
    expression = updateItem.getNewValue();
    assertTrue(expression instanceof NumericLiteral);
    NumericLiteral numericLiteral = (NumericLiteral) expression;

    assertEquals("100000", numericLiteral.toParsedText());
  }