You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by mi...@apache.org on 2017/10/20 15:28:12 UTC

[3/3] incubator-impala git commit: IMPALA-4918: Support getting column comments via HS2

IMPALA-4918: Support getting column comments via HS2

Fill the 'comments'/'remarks' field during HS2 column metadata requests.

To test:
- create a JDBC connection to Impala with HS2 driver
- call getMetaData().getColumns() for a table with column comments
- the returned ResultSet should include column comments in field "REMARKS"

Change-Id: I1d33dfd031b5344d7136695b623cec76143ada5c
Reviewed-on: http://gerrit.cloudera.org:8080/8315
Reviewed-by: Lars Volker <lv...@cloudera.com>
Reviewed-by: Alex Behm <al...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/0bccb3ea
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/0bccb3ea
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/0bccb3ea

Branch: refs/heads/master
Commit: 0bccb3ea02817b7cc67d57458dc9fb341f96d119
Parents: 359b409
Author: Csaba Ringhofer <cs...@cloudera.com>
Authored: Wed Oct 18 15:51:28 2017 +0200
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Fri Oct 20 07:55:18 2017 +0000

----------------------------------------------------------------------
 .../org/apache/impala/service/MetadataOp.java   |  2 +-
 .../apache/impala/common/FrontendTestBase.java  |  3 ++-
 .../org/apache/impala/service/FrontendTest.java | 27 ++++++++++++++++---
 .../org/apache/impala/service/JdbcTest.java     | 28 ++++++++++++++++++++
 4 files changed, 55 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/0bccb3ea/fe/src/main/java/org/apache/impala/service/MetadataOp.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/service/MetadataOp.java b/fe/src/main/java/org/apache/impala/service/MetadataOp.java
index 290720e..c541cc5 100644
--- a/fe/src/main/java/org/apache/impala/service/MetadataOp.java
+++ b/fe/src/main/java/org/apache/impala/service/MetadataOp.java
@@ -400,7 +400,7 @@ public class MetadataOp {
           row.colVals.add(createTColumnValue(colType.getNumPrecRadix()));
           // NULLABLE
           row.colVals.add(createTColumnValue(DatabaseMetaData.columnNullable));
-          row.colVals.add(NULL_COL_VAL); // REMARKS
+          row.colVals.add(createTColumnValue(column.getComment())); // REMARKS
           row.colVals.add(NULL_COL_VAL); // COLUMN_DEF
           row.colVals.add(NULL_COL_VAL); // SQL_DATA_TYPE
           row.colVals.add(NULL_COL_VAL); // SQL_DATETIME_SUB

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/0bccb3ea/fe/src/test/java/org/apache/impala/common/FrontendTestBase.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/common/FrontendTestBase.java b/fe/src/test/java/org/apache/impala/common/FrontendTestBase.java
index aa96490..c014dff 100644
--- a/fe/src/test/java/org/apache/impala/common/FrontendTestBase.java
+++ b/fe/src/test/java/org/apache/impala/common/FrontendTestBase.java
@@ -186,7 +186,8 @@ public class FrontendTestBase {
       columnDefs.addAll(createTableStmt.getColumnDefs());
       for (int i = 0; i < columnDefs.size(); ++i) {
         ColumnDef colDef = columnDefs.get(i);
-        dummyTable.addColumn(new Column(colDef.getColName(), colDef.getType(), i));
+        dummyTable.addColumn(
+            new Column(colDef.getColName(), colDef.getType(), colDef.getComment(), i));
       }
       try {
         HdfsTable hdfsTable = (HdfsTable) dummyTable;

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/0bccb3ea/fe/src/test/java/org/apache/impala/service/FrontendTest.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/service/FrontendTest.java b/fe/src/test/java/org/apache/impala/service/FrontendTest.java
index 54fa302..deab9eb 100644
--- a/fe/src/test/java/org/apache/impala/service/FrontendTest.java
+++ b/fe/src/test/java/org/apache/impala/service/FrontendTest.java
@@ -223,9 +223,14 @@ public class FrontendTest extends FrontendTestBase {
     final String dbName = "tbls_with_comments_test_db";
     Db testDb = addTestDb(dbName, "Stores tables with comments");
     assertNotNull(testDb);
-    final String commentStr = "this table has a comment";
+    final String tableComment = "this table has a comment";
+    final String columnComment = "this column has a comment";
+    final String columnWithCommentName = "column_with_comment";
+    final String columnWithoutCommentName = "column_without_comment";
     final String tableWithCommentsStmt = String.format(
-        "create table %s.tbl_with_comments (a int) comment '%s'", dbName, commentStr);
+        "create table %s.tbl_with_comments (%s int comment '%s', %s int) comment '%s'",
+         dbName, columnWithCommentName, columnComment, columnWithoutCommentName,
+         tableComment);
     Table tbl = addTestTable(tableWithCommentsStmt);
     assertNotNull(tbl);
     final String tableWithoutCommentsStmt = String.format(
@@ -242,12 +247,28 @@ public class FrontendTest extends FrontendTestBase {
     assertEquals(2, resp.rows.size());
     for (TResultRow row: resp.rows) {
       if (row.colVals.get(2).string_val.toLowerCase().equals("tbl_with_comments")) {
-        assertEquals(commentStr, row.colVals.get(4).string_val.toLowerCase());
+        assertEquals(tableComment, row.colVals.get(4).string_val.toLowerCase());
       } else {
         assertEquals("", row.colVals.get(4).string_val);
       }
     }
 
+    // Test column comments
+    req = new TMetadataOpRequest();
+    req.opcode = TMetadataOpcode.GET_COLUMNS;
+    req.get_columns_req = new TGetColumnsReq();
+    req.get_columns_req.setSchemaName(dbName);
+    req.get_columns_req.setTableName("tbl_with_comments");
+    resp = execMetadataOp(req);
+    assertEquals(2, resp.rows.size());
+    for (TResultRow row: resp.rows) {
+      if (row.colVals.get(3).string_val.equals(columnWithCommentName)) {
+        assertEquals(columnComment, row.colVals.get(11).string_val);
+      } else {
+        assertEquals(null, row.colVals.get(11).string_val);
+      }
+    }
+
     // Make sure tables that can't be loaded don't result in errors in the GetTables
     // request (see IMPALA-5579)
     req = new TMetadataOpRequest();

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/0bccb3ea/fe/src/test/java/org/apache/impala/service/JdbcTest.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/service/JdbcTest.java b/fe/src/test/java/org/apache/impala/service/JdbcTest.java
index 4c06cb4..8ee8fba 100644
--- a/fe/src/test/java/org/apache/impala/service/JdbcTest.java
+++ b/fe/src/test/java/org/apache/impala/service/JdbcTest.java
@@ -445,6 +445,34 @@ public class JdbcTest {
   }
 
   @Test
+  public void testMetaDataGetColumnComments() throws Exception {
+    addTestTable("create table default.jdbc_column_comments_test (" +
+         "a int comment 'column comment') comment 'table comment'");
+
+    // If a table is not yet loaded before getTables(), then the 'remarks' field
+    // is left empty. getColumns() loads the table metadata, so later getTables()
+    // calls will return 'remarks' correctly.
+    ResultSet rs = con_.getMetaData().getTables(
+        null, "default", "jdbc_column_comments_test", null);
+    assertTrue(rs.next());
+    assertEquals("Incorrect table name", "jdbc_column_comments_test",
+        rs.getString("TABLE_NAME"));
+    assertEquals("Incorrect table comment", "", rs.getString("REMARKS"));
+
+    rs = con_.getMetaData().getColumns(
+        null, "default", "jdbc_column_comments_test", null);
+    assertTrue(rs.next());
+    assertEquals("Incorrect column comment", "column comment", rs.getString("REMARKS"));
+
+    rs = con_.getMetaData().getTables(
+        null, "default", "jdbc_column_comments_test", null);
+    assertTrue(rs.next());
+    assertEquals("Incorrect table name", "jdbc_column_comments_test",
+        rs.getString("TABLE_NAME"));
+    assertEquals("Incorrect table comment", "table comment", rs.getString("REMARKS"));
+  }
+
+  @Test
   public void testDecimalGetColumnTypes() throws SQLException {
     // Table has 5 decimal columns
     ResultSet rs = con_.createStatement().executeQuery(