blob: 78f6ebfa6e108846fec8ae1a05a657c3f0864bf9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.calcite.test.enumerable;
import org.apache.calcite.config.CalciteConnectionProperty;
import org.apache.calcite.config.Lex;
import org.apache.calcite.test.CalciteAssert;
import org.junit.jupiter.api.Test;
/** Test for {@link org.apache.calcite.adapter.enumerable.EnumerableUncollect}. */
class EnumerableUncollectTest {
@Test void simpleUnnestArray() {
final String sql = "select * from UNNEST(array[3, 4]) as T2(y)";
tester()
.query(sql)
.returnsUnordered(
"y=3",
"y=4");
}
@Test void simpleUnnestArrayOfArrays() {
final String sql = "select * from UNNEST(array[array[3], array[4]]) as T2(y)";
tester()
.query(sql)
.returnsUnordered(
"y=[3]",
"y=[4]");
}
@Test void simpleUnnestArrayOfArrays2() {
final String sql = "select * from UNNEST(array[array[3, 4], array[4, 5]]) as T2(y)";
tester()
.query(sql)
.returnsUnordered(
"y=[3, 4]",
"y=[4, 5]");
}
@Test void simpleUnnestArrayOfArrays3() {
final String sql = "select * from UNNEST("
+ "array[array[array[3,4], array[4,5]], array[array[7,8], array[9,10]]]) as T2(y)";
tester()
.query(sql)
.returnsUnordered(
"y=[[3, 4], [4, 5]]",
"y=[[7, 8], [9, 10]]");
}
@Test void simpleUnnestArrayOfRows() {
final String sql = "select * from UNNEST(array[ROW(3), ROW(4)]) as T2(y)";
tester()
.query(sql)
.returnsUnordered(
"y=3",
"y=4");
}
@Test void simpleUnnestArrayOfRows2() {
final String sql = "select * from UNNEST(array[ROW(3, 5), ROW(4, 6)]) as T2(y, z)";
tester()
.query(sql)
.returnsUnordered(
"y=3; z=5",
"y=4; z=6");
}
@Test void simpleUnnestArrayOfRows3() {
final String sql = "select * from UNNEST(array[ROW(3), ROW(4)]) WITH ORDINALITY as T2(y, o)";
tester()
.query(sql)
.returnsUnordered(
"y=3; o=1",
"y=4; o=2");
}
@Test void simpleUnnestArrayOfRows4() {
final String sql = "select * from UNNEST(array[ROW(1, ROW(5, 10)), ROW(2, ROW(6, 12))]) "
+ "as T2(y, z)";
tester()
.query(sql)
.returnsUnordered(
"y=1; z={5, 10}",
"y=2; z={6, 12}");
}
@Test void simpleUnnestArrayOfRows5() {
final String sql = "select * from UNNEST(array[ROW(ROW(3)), ROW(ROW(4))]) as T2(y)";
tester()
.query(sql)
.returnsUnordered(
"y={3}",
"y={4}");
}
@Test void chainedUnnestArray() {
final String sql = "select * from (values (1), (2)) T1(x),"
+ "UNNEST(array[3, 4]) as T2(y)";
tester()
.query(sql)
.returnsUnordered(
"x=1; y=3",
"x=1; y=4",
"x=2; y=3",
"x=2; y=4");
}
@Test void chainedUnnestArrayOfArrays() {
final String sql = "select * from (values (1), (2)) T1(x),"
+ "UNNEST(array[array[3], array[4]]) as T2(y)";
tester()
.query(sql)
.returnsUnordered(
"x=1; y=[3]",
"x=1; y=[4]",
"x=2; y=[3]",
"x=2; y=[4]");
}
@Test void chainedUnnestArrayOfArrays2() {
final String sql = "select * from (values (1), (2)) T1(x),"
+ "UNNEST(array[array[3, 4], array[4, 5]]) as T2(y)";
tester()
.query(sql)
.returnsUnordered(
"x=1; y=[3, 4]",
"x=1; y=[4, 5]",
"x=2; y=[3, 4]",
"x=2; y=[4, 5]");
}
@Test void chainedUnnestArrayOfArrays3() {
final String sql = "select * from (values (1), (2)) T1(x),"
+ "UNNEST(array[array[array[3,4], array[4,5]], array[array[7,8], array[9,10]]]) as T2(y)";
tester()
.query(sql)
.returnsUnordered(
"x=1; y=[[3, 4], [4, 5]]",
"x=1; y=[[7, 8], [9, 10]]",
"x=2; y=[[3, 4], [4, 5]]",
"x=2; y=[[7, 8], [9, 10]]");
}
@Test void chainedUnnestArrayOfRows() {
final String sql = "select * from (values (1), (2)) T1(x),"
+ "UNNEST(array[ROW(3), ROW(4)]) as T2(y)";
tester()
.query(sql)
.returnsUnordered(
"x=1; y=3",
"x=1; y=4",
"x=2; y=3",
"x=2; y=4");
}
@Test void chainedUnnestArrayOfRows2() {
final String sql = "select * from (values (1), (2)) T1(x),"
+ "UNNEST(array[ROW(3, 5), ROW(4, 6)]) as T2(y, z)";
tester()
.query(sql)
.returnsUnordered(
"x=1; y=3; z=5",
"x=1; y=4; z=6",
"x=2; y=3; z=5",
"x=2; y=4; z=6");
}
@Test void chainedUnnestArrayOfRows3() {
final String sql = "select * from (values (1), (2)) T1(x),"
+ "UNNEST(array[ROW(3), ROW(4)]) WITH ORDINALITY as T2(y, o)";
tester()
.query(sql)
.returnsUnordered(
"x=1; y=3; o=1",
"x=1; y=4; o=2",
"x=2; y=3; o=1",
"x=2; y=4; o=2");
}
private CalciteAssert.AssertThat tester() {
return CalciteAssert.that()
.with(CalciteConnectionProperty.LEX, Lex.JAVA)
.with(CalciteConnectionProperty.FORCE_DECORRELATE, false);
}
}