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