diff --git a/client/src/main/java/org/apache/iotdb/client/AbstractClient.java b/client/src/main/java/org/apache/iotdb/client/AbstractClient.java index fc77adeb195b..7a098427eade 100644 --- a/client/src/main/java/org/apache/iotdb/client/AbstractClient.java +++ b/client/src/main/java/org/apache/iotdb/client/AbstractClient.java @@ -531,8 +531,15 @@ private static void executeQuery(IoTDBConnection connection, String cmd) { ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); int columnLength = resultSetMetaData.getColumnCount(); List maxSizeList = new ArrayList<>(columnLength); - List> lists = cacheResult(resultSet, maxSizeList, columnLength, - resultSetMetaData, zoneId); + List> lists; + if (resultSet instanceof IoTDBQueryResultSet) { + lists = cacheResult(resultSet, maxSizeList, columnLength, + resultSetMetaData, zoneId); + } + else { + lists = cacheNonAlignResult(resultSet, maxSizeList, columnLength, + resultSetMetaData, zoneId); + } output(lists, maxSizeList); long costTime = System.currentTimeMillis() - startTime; println(String.format("It costs %.3fs", costTime / 1000.0)); @@ -544,8 +551,14 @@ private static void executeQuery(IoTDBConnection connection, String cmd) { try { if (br.readLine().equals("")) { maxSizeList = new ArrayList<>(columnLength); - lists = cacheResult(resultSet, maxSizeList, columnLength, - resultSetMetaData, zoneId); + if (resultSet instanceof IoTDBQueryResultSet) { + lists = cacheResult(resultSet, maxSizeList, columnLength, + resultSetMetaData, zoneId); + } + else { + lists = cacheNonAlignResult(resultSet, maxSizeList, columnLength, + resultSetMetaData, zoneId); + } output(lists, maxSizeList); } else { break; @@ -611,6 +624,57 @@ private static List> cacheResult(ResultSet resultSet, List return lists; } + /** + * cache all disable align results + * + * @param resultSet jdbc resultSet + * @param maxSizeList the longest result of every column + * @param columnCount the number of column + * @param resultSetMetaData jdbc resultSetMetaData + * @param zoneId your time zone + * @return List> result + * @throws SQLException throw exception + */ + private static List> cacheNonAlignResult(ResultSet resultSet, List maxSizeList, + int columnCount, ResultSetMetaData resultSetMetaData, ZoneId zoneId) throws SQLException { + + List> lists = new ArrayList<>(columnCount); + for (int i = 1; i <= columnCount; i++) { + List list = new ArrayList<>(maxPrintRowCount + 1); + if (resultSetMetaData.getColumnLabel(i).startsWith(TIMESTAMP_STR)) { + list.add(TIMESTAMP_STR); + maxSizeList.add(TIMESTAMP_STR.length()); + } else { + list.add(resultSetMetaData.getColumnLabel(i)); + maxSizeList.add(resultSetMetaData.getColumnLabel(i).length()); + } + lists.add(list); + } + int j = 0; + if (cursorBeforeFirst) { + isReachEnd = !resultSet.next(); + cursorBeforeFirst = false; + } + while (j < maxPrintRowCount && !isReachEnd) { + for (int i = 1; i <= columnCount; i++) { + String tmp = resultSet.getString(i); + if (tmp == null) { + tmp = NULL; + } + else if ((i & 1) == 1) { // for Time columns + tmp = formatDatetime(resultSet.getLong(i), zoneId); + } + lists.get(i - 1).add(tmp); + if (maxSizeList.get(i - 1) < tmp.length()) { + maxSizeList.set(i - 1, tmp.length()); + } + } + j++; + isReachEnd = !resultSet.next(); + } + return lists; + } + private static void output(List> lists, List maxSizeList) { printBlockLine(maxSizeList); printRow(lists, 0, maxSizeList);