/**
   * エイリアス指定付きの結合モデルの確認。
   *
   * @throws Exception 例外が発生した場合
   */
  @Test
  public void parseJoin_withAlias() throws Exception {
    ViewDefinition def =
        def(
            "select"
                + "  `a`.`pk` AS `pk`,"
                + "  `a`.`val1` AS `val1`,"
                + "  `b`.`val2` AS `val2`"
                + "from `test`.`t1` `a`"
                + "join `test`.`t2` `b`"
                + "where"
                + "  (`test`.`a`.`pk` = `test`.`b`.`pk`)");

    CreateView model = ViewParser.parse(def);
    assertThat(
        model,
        is(
            new CreateView(
                n("test"),
                Arrays.asList(
                    new Select[] {
                      new Select(n("a.pk"), Aggregator.IDENT, n("pk")),
                      new Select(n("a.val1"), Aggregator.IDENT, n("val1")),
                      new Select(n("b.val2"), Aggregator.IDENT, n("val2")),
                    }),
                new From(
                    n("t1"),
                    "a",
                    new Join(n("t2"), "b", Arrays.asList(new On(n("a.pk"), n("b.pk"))))),
                Arrays.<Name>asList())));
  }
  /**
   * 集計モデルの確認。
   *
   * @throws Exception 例外が発生した場合
   */
  @Test
  public void parseSummarize_multiGroupCoulmns() throws Exception {
    ViewDefinition def =
        def(
            "select"
                + "  `test`.`t1`.`pk` AS `pk`,"
                + "  count(`test`.`t1`.`pk`) AS `count`,"
                + "  max(`test`.`t1`.`pk`) AS `max`,"
                + "  sum(`test`.`t1`.`pk`) AS `sum`"
                + "from"
                + "  `test`.`t1`"
                + "group by"
                + "  `test`.`t1`.`val1` , `test`.`t1`.`val2`");

    CreateView model = ViewParser.parse(def);
    assertThat(
        model,
        is(
            new CreateView(
                n("test"),
                Arrays.asList(
                    new Select[] {
                      new Select(n("t1.pk"), Aggregator.IDENT, n("pk")),
                      new Select(n("t1.pk"), Aggregator.COUNT, n("count")),
                      new Select(n("t1.pk"), Aggregator.MAX, n("max")),
                      new Select(n("t1.pk"), Aggregator.SUM, n("sum")),
                    }),
                new From(n("t1"), null, null),
                Arrays.<Name>asList(n("t1.val1"), n("t1.val2")))));
  }