public void testLimit() throws JSQLParserException {
    String statement = "SELECT * FROM mytable WHERE mytable.col = 9 LIMIT 3, ?";

    Select select = (Select) parserManager.parse(new StringReader(statement));

    assertEquals(3, ((PlainSelect) select.getSelectBody()).getLimit().getOffset());
    assertTrue(((PlainSelect) select.getSelectBody()).getLimit().isRowCountJdbcParameter());
    assertFalse(((PlainSelect) select.getSelectBody()).getLimit().isOffsetJdbcParameter());
    assertFalse(((PlainSelect) select.getSelectBody()).getLimit().isLimitAll());

    // toString uses standard syntax
    statement = "SELECT * FROM mytable WHERE mytable.col = 9 LIMIT ? OFFSET 3";
    assertEquals(statement, "" + select);

    statement = "SELECT * FROM mytable WHERE mytable.col = 9 OFFSET ?";
    select = (Select) parserManager.parse(new StringReader(statement));

    assertEquals(0, ((PlainSelect) select.getSelectBody()).getLimit().getRowCount());
    assertTrue(((PlainSelect) select.getSelectBody()).getLimit().isOffsetJdbcParameter());
    assertFalse(((PlainSelect) select.getSelectBody()).getLimit().isLimitAll());
    assertEquals(statement, "" + select);

    statement =
        "(SELECT * FROM mytable WHERE mytable.col = 9 OFFSET ?) UNION "
            + "(SELECT * FROM mytable2 WHERE mytable2.col = 9 OFFSET ?) LIMIT 3, 4";
    select = (Select) parserManager.parse(new StringReader(statement));
    Union union = (Union) select.getSelectBody();
    assertEquals(3, union.getLimit().getOffset());
    assertEquals(4, union.getLimit().getRowCount());

    // toString uses standard syntax
    statement =
        "(SELECT * FROM mytable WHERE mytable.col = 9 OFFSET ?) UNION "
            + "(SELECT * FROM mytable2 WHERE mytable2.col = 9 OFFSET ?) LIMIT 4 OFFSET 3";
    assertEquals(statement, "" + select);

    statement =
        "(SELECT * FROM mytable WHERE mytable.col = 9 OFFSET ?) UNION ALL "
            + "(SELECT * FROM mytable2 WHERE mytable2.col = 9 OFFSET ?) UNION ALL "
            + "(SELECT * FROM mytable3 WHERE mytable4.col = 9 OFFSET ?) LIMIT 4 OFFSET 3";
    select = (Select) parserManager.parse(new StringReader(statement));
    assertEquals(statement, "" + select);
  }
  public void testUnion() throws JSQLParserException {
    String statement =
        "SELECT * FROM mytable WHERE mytable.col = 9 UNION "
            + "SELECT * FROM mytable3 WHERE mytable3.col = ? UNION "
            + "SELECT * FROM mytable2 LIMIT 3,4";

    Union union =
        (Union) ((Select) parserManager.parse(new StringReader(statement))).getSelectBody();
    assertEquals(3, union.getPlainSelects().size());
    assertEquals(
        "mytable",
        ((Table) ((PlainSelect) union.getPlainSelects().get(0)).getFromItem()).getName());
    assertEquals(
        "mytable3",
        ((Table) ((PlainSelect) union.getPlainSelects().get(1)).getFromItem()).getName());
    assertEquals(
        "mytable2",
        ((Table) ((PlainSelect) union.getPlainSelects().get(2)).getFromItem()).getName());
    assertEquals(3, ((PlainSelect) union.getPlainSelects().get(2)).getLimit().getOffset());

    // use brakets for toString
    // use standard limit syntax
    String statementToString =
        "(SELECT * FROM mytable WHERE mytable.col = 9) UNION "
            + "(SELECT * FROM mytable3 WHERE mytable3.col = ?) UNION "
            + "(SELECT * FROM mytable2 LIMIT 4 OFFSET 3)";
    assertEquals(statementToString, "" + union);
  }