This is an automated email from the ASF dual-hosted git repository.

lmccay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git


The following commit(s) were added to refs/heads/master by this push:
     new bd24b53  KNOX-2132 - JDBCKnoxShellTableBuilder should have optional 
username and password fields
bd24b53 is described below

commit bd24b537b722b98b7dec7ec00b5af7d795ae196b
Author: lmccay <[email protected]>
AuthorDate: Sat Dec 7 13:50:33 2019 -0500

    KNOX-2132 - JDBCKnoxShellTableBuilder should have optional username and 
password fields
---
 .../shell/table/JDBCKnoxShellTableBuilder.java     | 49 ++++++++++++++++++++--
 .../gateway/shell/table/KnoxShellTableTest.java    | 17 ++++++++
 2 files changed, 62 insertions(+), 4 deletions(-)

diff --git 
a/gateway-shell/src/main/java/org/apache/knox/gateway/shell/table/JDBCKnoxShellTableBuilder.java
 
b/gateway-shell/src/main/java/org/apache/knox/gateway/shell/table/JDBCKnoxShellTableBuilder.java
index 63be4a1..a2e5d7f 100644
--- 
a/gateway-shell/src/main/java/org/apache/knox/gateway/shell/table/JDBCKnoxShellTableBuilder.java
+++ 
b/gateway-shell/src/main/java/org/apache/knox/gateway/shell/table/JDBCKnoxShellTableBuilder.java
@@ -32,6 +32,26 @@ public class JDBCKnoxShellTableBuilder extends 
KnoxShellTableBuilder {
   private String driver;
   private Connection conn;
   private boolean tableManagedConnection = true;
+  private String username;
+  private String pass;
+
+  public JDBCKnoxShellTableBuilder username(String username) {
+    this.username = username;
+    return this;
+  }
+
+  public String username() {
+    return username;
+  }
+
+  public JDBCKnoxShellTableBuilder pwd(String pass) {
+    this.pass = pass;
+    return this;
+  }
+
+  public String password() {
+    return pass;
+  }
 
   JDBCKnoxShellTableBuilder(KnoxShellTable table) {
     super(table);
@@ -76,7 +96,7 @@ public class JDBCKnoxShellTableBuilder extends 
KnoxShellTableBuilder {
   }
 
   public KnoxShellTable sql(String sql) throws IOException, SQLException {
-    conn = conn == null ? DriverManager.getConnection(connectionUrl) : conn;
+    conn = conn == null ? createConnection() : conn;
     try (Statement statement = conn.createStatement(); ResultSet resultSet = 
statement.executeQuery(sql);) {
       processResultSet(resultSet);
     } finally {
@@ -87,19 +107,40 @@ public class JDBCKnoxShellTableBuilder extends 
KnoxShellTableBuilder {
     return this.table;
   }
 
+  public Connection createConnection() throws SQLException {
+    Connection con = null;
+    if (username != null && pass != null) {
+      con = DriverManager.getConnection(connectionUrl, username, pass);
+    }
+    else {
+      con = DriverManager.getConnection(connectionUrl);
+    }
+    return con;
+  }
+
   // added this as a private method so that KnoxShellTableHistoryAspect will 
not
   // intercept this call
   private void processResultSet(ResultSet resultSet) throws SQLException {
     final ResultSetMetaData metadata = resultSet.getMetaData();
     final int colCount = metadata.getColumnCount();
-    this.table.title(metadata.getTableName(1));
+    try {
+      table.title(metadata.getTableName(1));
+    }
+    catch (SQLException e) {
+      // nop. Apache HiveDriver doesn't support this.
+    }
     for (int i = 1; i < colCount + 1; i++) {
       this.table.header(metadata.getColumnName(i));
     }
     while (resultSet.next()) {
-      this.table.row();
+      table.row();
       for (int i = 1; i < colCount + 1; i++) {
-        this.table.value(resultSet.getObject(metadata.getColumnName(i), 
Comparable.class));
+        try {
+          table.value(resultSet.getObject(metadata.getColumnName(i), 
Comparable.class));
+        }
+        catch (SQLException e) {
+          table.value(resultSet.getString(metadata.getColumnName(i)));
+        }
       }
     }
   }
diff --git 
a/gateway-shell/src/test/java/org/apache/knox/gateway/shell/table/KnoxShellTableTest.java
 
b/gateway-shell/src/test/java/org/apache/knox/gateway/shell/table/KnoxShellTableTest.java
index 2e2cd2d..84d1723 100644
--- 
a/gateway-shell/src/test/java/org/apache/knox/gateway/shell/table/KnoxShellTableTest.java
+++ 
b/gateway-shell/src/test/java/org/apache/knox/gateway/shell/table/KnoxShellTableTest.java
@@ -384,6 +384,23 @@ public class KnoxShellTableTest {
   }
 
   @Test
+  public void testJDBCBuilderUsernamePassword() throws Exception {
+    // Since testing statics isn't really doable with EasyMock we
+    // are limited to what we can test here. We will just ensure that
+    // the expected username/password are set when needed in the sql call.
+    KnoxShellTable table = new KnoxShellTable();
+    JDBCKnoxShellTableBuilder builder = new JDBCKnoxShellTableBuilder(table) {
+      @Override
+      public KnoxShellTable sql(String sql) {
+        assertNotNull(username());
+        assertNotNull(password());
+        return table;
+      }
+    };
+    builder.username("joe").pwd("pass").sql("select * from book");
+  }
+
+  @Test
   public void testJDBCBuilderUsingConnectionString() throws Exception {
     System.setProperty(SYSTEM_PROPERTY_DERBY_STREAM_ERROR_FILE, "/dev/null");
     final Path derbyDatabaseFolder = 
Paths.get(testFolder.newFolder().toPath().toString(), 
SAMPLE_DERBY_DATABASE_NAME);

Reply via email to