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(