You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2016/05/03 19:17:10 UTC
calcite git commit: [CALCITE-1222] DatabaseMetaData.getColumnLabel
returns null when query has ORDER BY
Repository: calcite
Updated Branches:
refs/heads/master e4dd6dc76 -> af315fbea
[CALCITE-1222] DatabaseMetaData.getColumnLabel returns null when query has ORDER BY
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/af315fbe
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/af315fbe
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/af315fbe
Branch: refs/heads/master
Commit: af315fbeab178437162ebf3e00c44f6f2b133ba3
Parents: e4dd6dc
Author: Julian Hyde <jh...@apache.org>
Authored: Fri Apr 29 16:59:33 2016 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon May 2 19:35:18 2016 -0700
----------------------------------------------------------------------
.../calcite/sql/validate/SqlValidatorImpl.java | 13 +++--
.../java/org/apache/calcite/test/JdbcTest.java | 53 ++++++++++++--------
2 files changed, 41 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/af315fbe/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java b/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java
index b9ccf13..9f46a20 100644
--- a/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java
+++ b/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java
@@ -77,6 +77,7 @@ import org.apache.calcite.sql.type.SqlTypeUtil;
import org.apache.calcite.sql.util.SqlShuttle;
import org.apache.calcite.sql.util.SqlVisitor;
import org.apache.calcite.util.BitString;
+import org.apache.calcite.util.ImmutableNullableList;
import org.apache.calcite.util.Litmus;
import org.apache.calcite.util.Pair;
import org.apache.calcite.util.Static;
@@ -4096,11 +4097,9 @@ public class SqlValidatorImpl implements SqlValidatorWithHints {
}
final List<List<String>> list = new ArrayList<>();
for (int i = 0; i < fieldCount; i++) {
- List<String> origin = getFieldOrigin(sqlQuery, i);
-// assert origin == null || origin.size() >= 4 : origin;
- list.add(origin);
+ list.add(getFieldOrigin(sqlQuery, i));
}
- return list;
+ return ImmutableNullableList.copyOf(list);
}
private List<String> getFieldOrigin(SqlNode sqlQuery, int i) {
@@ -4128,8 +4127,12 @@ public class SqlValidatorImpl implements SqlValidatorWithHints {
}
return origin;
}
+ return null;
+ } else if (sqlQuery instanceof SqlOrderBy) {
+ return getFieldOrigin(((SqlOrderBy) sqlQuery).query, i);
+ } else {
+ return null;
}
- return null;
}
public RelDataType getParameterRowType(SqlNode sqlQuery) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/af315fbe/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 cfebfb2..8874ea5 100644
--- a/core/src/test/java/org/apache/calcite/test/JdbcTest.java
+++ b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
@@ -1143,28 +1143,41 @@ public class JdbcTest {
assertTrue(b == regex.matcher(abc).matches());
}
- /** Tests driver's implementation of {@link DatabaseMetaData#getColumns}. */
+ /** Tests driver's implementation of {@link DatabaseMetaData#getColumns},
+ * and also
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-1222">[CALCITE-1222]
+ * DatabaseMetaData.getColumnLabel returns null when query has ORDER
+ * BY</a>, */
@Test public void testResultSetMetaData()
throws ClassNotFoundException, SQLException {
- Connection connection = CalciteAssert
- .that(CalciteAssert.Config.REGULAR).connect();
- Statement statement = connection.createStatement();
- ResultSet resultSet =
- statement.executeQuery("select \"empid\", \"deptno\" as x, 1 as y\n"
- + "from \"hr\".\"emps\"");
- ResultSetMetaData metaData = resultSet.getMetaData();
- assertEquals(3, metaData.getColumnCount());
- assertEquals("empid", metaData.getColumnLabel(1));
- assertEquals("empid", metaData.getColumnName(1));
- assertEquals("emps", metaData.getTableName(1));
- assertEquals("X", metaData.getColumnLabel(2));
- assertEquals("deptno", metaData.getColumnName(2));
- assertEquals("emps", metaData.getTableName(2));
- assertEquals("Y", metaData.getColumnLabel(3));
- assertEquals("Y", metaData.getColumnName(3));
- assertEquals(null, metaData.getTableName(3));
- resultSet.close();
- connection.close();
+ try (Connection connection =
+ CalciteAssert.that(CalciteAssert.Config.REGULAR).connect()) {
+ final String sql0 = "select \"empid\", \"deptno\" as x, 1 as y\n"
+ + "from \"hr\".\"emps\"";
+ checkResultSetMetaData(connection, sql0);
+ final String sql1 = "select \"empid\", \"deptno\" as x, 1 as y\n"
+ + "from \"hr\".\"emps\"\n"
+ + "order by 1";
+ checkResultSetMetaData(connection, sql1);
+ }
+ }
+
+ private void checkResultSetMetaData(Connection connection, String sql)
+ throws SQLException {
+ try (Statement statement = connection.createStatement();
+ ResultSet resultSet = statement.executeQuery(sql)) {
+ ResultSetMetaData metaData = resultSet.getMetaData();
+ assertEquals(3, metaData.getColumnCount());
+ assertEquals("empid", metaData.getColumnLabel(1));
+ assertEquals("empid", metaData.getColumnName(1));
+ assertEquals("emps", metaData.getTableName(1));
+ assertEquals("X", metaData.getColumnLabel(2));
+ assertEquals("deptno", metaData.getColumnName(2));
+ assertEquals("emps", metaData.getTableName(2));
+ assertEquals("Y", metaData.getColumnLabel(3));
+ assertEquals("Y", metaData.getColumnName(3));
+ assertEquals(null, metaData.getTableName(3));
+ }
}
/** Tests some queries that have expedited processing because connection pools