You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by vl...@apache.org on 2014/12/14 13:13:17 UTC
incubator-calcite git commit: [CALCITE-462] Allow table functions in
LATERAL expression
Repository: incubator-calcite
Updated Branches:
refs/heads/master b7427ed74 -> 039f7cb08
[CALCITE-462] Allow table functions in LATERAL expression
Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/039f7cb0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/039f7cb0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/039f7cb0
Branch: refs/heads/master
Commit: 039f7cb08fb7ac7fb8e099862b01b807923c8c9e
Parents: b7427ed
Author: Vladimir Sitnikov <si...@gmail.com>
Authored: Sun Dec 14 15:03:30 2014 +0300
Committer: Vladimir Sitnikov <si...@gmail.com>
Committed: Sun Dec 14 15:03:30 2014 +0300
----------------------------------------------------------------------
.../enumerable/EnumerableTableFunctionScan.java | 1 +
.../java/org/apache/calcite/test/JdbcTest.java | 50 ++++++++++++++++----
2 files changed, 42 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/039f7cb0/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScan.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScan.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScan.java
index 9ed359f..936e7fc 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScan.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScan.java
@@ -64,6 +64,7 @@ public class EnumerableTableFunctionScan extends TableFunctionScan
: JavaRowFormat.CUSTOM);
RexToLixTranslator t = RexToLixTranslator.forAggregation(
(JavaTypeFactory) getCluster().getTypeFactory(), bb, null);
+ t = t.setCorrelates(implementor.allCorrelateVariables);
final Expression translated = t.translate(getCall());
bb.add(Expressions.return_(null, translated));
return implementor.result(physType, bb.toBlock());
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/039f7cb0/core/src/test/java/org/apache/calcite/test/JdbcTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/JdbcTest.java b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
index 9b7d947..486ffb3 100644
--- a/core/src/test/java/org/apache/calcite/test/JdbcTest.java
+++ b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
@@ -469,17 +469,17 @@ public class JdbcTest {
/** Tests a JDBC connection that provides a model that contains a table
* function. */
@Test public void testTableFunctionInModel() throws Exception {
- checkTableMacroInModel(TestTableFunction.class);
+ checkTableFunctionInModel(TestTableFunction.class);
}
/** Tests a JDBC connection that provides a model that contains a table
* function defined as a static method. */
@Test public void testStaticTableFunctionInModel() throws Exception {
- checkTableMacroInModel(TestStaticTableFunction.class);
+ checkTableFunctionInModel(TestStaticTableFunction.class);
}
- private void checkTableMacroInModel(Class clazz) {
- CalciteAssert.that()
+ private CalciteAssert.AssertThat assertWithMacro(Class clazz) {
+ return CalciteAssert.that()
.withModel("{\n"
+ " version: '1.0',\n"
+ " schemas: [\n"
@@ -493,7 +493,11 @@ public class JdbcTest {
+ " ]\n"
+ " }\n"
+ " ]\n"
- + "}")
+ + "}");
+ }
+
+ private void checkTableMacroInModel(Class clazz) {
+ assertWithMacro(clazz)
.query("select * from table(\"adhoc\".\"View\"('(30)'))")
.returns(""
+ "c=1\n"
@@ -501,6 +505,27 @@ public class JdbcTest {
+ "c=30\n");
}
+ private void checkTableFunctionInModel(Class clazz) {
+ checkTableMacroInModel(clazz);
+
+ assertWithMacro(clazz)
+ .query("select \"a\".\"c\" a, \"b\".\"c\" b\n"
+ + " from table(\"adhoc\".\"View\"('(30)')) \"a\",\n"
+ + " lateral(select *\n"
+ + " from table(\"adhoc\".\"View\"('('||\n"
+ + " cast(\"a\".\"c\" as varchar(10))||')'))) \"b\"")
+ .returnsUnordered(
+ "A=1; B=1",
+ "A=1; B=3",
+ "A=1; B=1",
+ "A=3; B=1",
+ "A=3; B=3",
+ "A=3; B=3",
+ "A=30; B=1",
+ "A=30; B=3",
+ "A=30; B=30");
+ }
+
public static <T> Queryable<T> stringUnion(
Queryable<T> q0, Queryable<T> q1) {
return q0.concat(q1);
@@ -6334,11 +6359,18 @@ public class JdbcTest {
}
private static QueryableTable oneThreePlus(String s) {
- Integer latest = Integer.parseInt(s.substring(1, s.length() - 1));
- List<Object> items = Arrays.<Object>asList(1, 3, latest);
- final Enumerable<Object> enumerable = Linq4j.asEnumerable(items);
+ List<Integer> items;
+ // Argument is null in case SQL contains function call with expression.
+ // Then the engine calls a function with null argumets to get getRowType.
+ if (s == null) {
+ items = ImmutableList.of();
+ } else {
+ Integer latest = Integer.parseInt(s.substring(1, s.length() - 1));
+ items = ImmutableList.of(1, 3, latest);
+ }
+ final Enumerable<Integer> enumerable = Linq4j.asEnumerable(items);
return new AbstractQueryableTable(Object[].class) {
- public Queryable<Object> asQueryable(
+ public Queryable<Integer> asQueryable(
QueryProvider queryProvider, SchemaPlus schema, String tableName) {
return enumerable.asQueryable();
}