diff --git a/src/test/java/net/sf/jsqlparser/statement/piped/FromQueryTest.java b/src/test/java/net/sf/jsqlparser/statement/piped/FromQueryTest.java index 2b9fd4f40..6c1f2b926 100644 --- a/src/test/java/net/sf/jsqlparser/statement/piped/FromQueryTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/piped/FromQueryTest.java @@ -41,7 +41,7 @@ void testParseAndDeparseJoin() throws JSQLParserException { } @Test - void testParseAndDeparseWith() throws JSQLParserException { + void testParseAndDeparseWithIssue73() throws JSQLParserException { // formatter:off String sqlStr = "with client_info as (\n" + @@ -80,4 +80,42 @@ void testParseAndDeparseWith() throws JSQLParserException { // formatter:on TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true); } + + @Test + void testParseAndDeparseWithJoinIssue72() throws JSQLParserException { + // formatter:off + String sqlStr = + "with client as (\n" + + " select 1 as client_id\n" + + " |> UNION ALL\n" + + " (select 2),\n" + + " (select 3)\n" + + "), basket as (\n" + + " select 1 as basket_id, 1 as client_id\n" + + " |> UNION ALL\n" + + " (select 2, 2)\n" + + "), basket_item as (\n" + + " select 1 as item_id, 1 as basket_id\n" + + " |> UNION ALL\n" + + " (select 2, 1),\n" + + " (select 3, 1),\n" + + " (select 4, 2)\n" + + "), item as (\n" + + " select 1 as item_id, 'milk' as name\n" + + " |> UNION ALL\n" + + " (select 2, \"chocolate\"),\n" + + " (select 3, \"donut\"),\n" + + " (select 4, \"croissant\")\n" + + ")\n" + + "FROM client c\n" + + " left join basket b using(client_id)\n" + + " left join basket_item bi using(basket_id)\n" + + " left join item i on i.item_id = bi.item_id\n" + + "|> aggregate count(i.item_id) as bought_item\n" + + " group by c.client_id, i.item_id, i.name\n" + + "|> aggregate array_agg((select as struct item_id, name, bought_item)) as items_info\n" + + " group by client_id"; + // formatter:on + TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true); + } }