commit 8c4bfc5eff33469177f3c9e796732aa6da2d36f5 Author: Vihang Karajgaonkar Date: Wed Jun 29 17:03:14 2016 -0700 HIVE-14135 : beeline output not formatted correctly for large column widths diff --git a/beeline/pom.xml b/beeline/pom.xml index a720d0835314221ec3bd9e8d354d148498ff794c..5503add360b07ccf255097248206958a9471d9a8 100644 --- a/beeline/pom.xml +++ b/beeline/pom.xml @@ -119,6 +119,11 @@ test + org.mockito + mockito-all + test + + postgresql postgresql 9.1-901.jdbc4 diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java b/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java index 5aaa38527734d46de037352ff51e54e0ae1cede0..e2bbbea28f8d66a88116a9805118ee0ba6f12d87 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java @@ -58,6 +58,7 @@ PROPERTY_PREFIX + "system.exit"; public static final String DEFAULT_NULL_STRING = "NULL"; public static final char DEFAULT_DELIMITER_FOR_DSV = '|'; + public static final int DEFAULT_MAX_COLUMN_WIDTH = 50; public static String URL_ENV_PREFIX = "BEELINE_URL_"; @@ -80,7 +81,7 @@ private final Terminal terminal = TerminalFactory.get(); private int maxWidth = DEFAULT_MAX_WIDTH; private int maxHeight = DEFAULT_MAX_HEIGHT; - private int maxColumnWidth = 15; + private int maxColumnWidth = DEFAULT_MAX_COLUMN_WIDTH; int timeout = -1; private String isolation = DEFAULT_ISOLATION_LEVEL; private String outputFormat = "table"; diff --git a/beeline/src/java/org/apache/hive/beeline/BufferedRows.java b/beeline/src/java/org/apache/hive/beeline/BufferedRows.java index 962c5319bb7e6e448979e1cef80a086cadd2ecc6..defec75775d4d951ab96814d02bb3f2b8ce5c634 100644 --- a/beeline/src/java/org/apache/hive/beeline/BufferedRows.java +++ b/beeline/src/java/org/apache/hive/beeline/BufferedRows.java @@ -33,6 +33,7 @@ class BufferedRows extends Rows { private final LinkedList list; private final Iterator iterator; + private int maxColumnWidth; BufferedRows(BeeLine beeLine, ResultSet rs) throws SQLException { super(beeLine, rs); @@ -43,6 +44,7 @@ list.add(new Row(count, rs)); } iterator = list.iterator(); + maxColumnWidth = beeLine.getOpts().getMaxColumnWidth(); } public boolean hasNext() { @@ -69,6 +71,10 @@ void normalizeWidths() { max[j] = Math.max(max[j], row.sizes[j] + 1); } } + //if the max column width is too large, reset it to max allowed Column width + for(int i=0; i() { + private int mockRowDataIndex = 0; + + public Boolean answer(InvocationOnMock invocation) { + if (mockRowDataIndex < mockRowData.length) { + mockRow.setCurrentRowData(mockRowData[mockRowDataIndex]); + mockRowDataIndex++; + return true; + } else { + return false; + } + } + }); + + when(mockResultSet.getString(Matchers.anyInt())).thenAnswer(new Answer() { + public String answer(InvocationOnMock invocation) { + Object[] args = invocation.getArguments(); + int index = ((Integer) args[0]).intValue(); + return mockRow.getColumn(index); + } + }); + } + + static class MockRow { + String[] rowData; + + public void setCurrentRowData(String[] rowData) { + this.rowData = rowData; + } + + public String getColumn(int idx) { + return rowData[idx - 1]; + } + } +} \ No newline at end of file