@Test
public void testUnnest()
{
assertStatement("SELECT * FROM t CROSS JOIN UNNEST(a)",
simpleQuery(
selectList(new AllColumns()),
new Join(
Join.Type.CROSS,
new Table(QualifiedName.of("t")),
new Unnest(ImmutableList.of(new Identifier("a")), false),
Optional.empty())));
assertStatement("SELECT * FROM t CROSS JOIN UNNEST(a, b) WITH ORDINALITY",
simpleQuery(
selectList(new AllColumns()),
new Join(
Join.Type.CROSS,
new Table(QualifiedName.of("t")),
new Unnest(ImmutableList.of(new Identifier("a"), new Identifier("b")), true),
Optional.empty())));
assertStatement("SELECT * FROM t FULL JOIN UNNEST(a) AS tmp (c) ON true",
simpleQuery(
selectList(new AllColumns()),
new Join(
Join.Type.FULL,
new Table(QualifiedName.of("t")),
new AliasedRelation(new Unnest(ImmutableList.of(new Identifier("a")), false), new Identifier("tmp"), ImmutableList.of(new Identifier("c"))),
Optional.of(new JoinOn(BooleanLiteral.TRUE_LITERAL)))));
}