From 1d69b7547fcf01686ea68d81853f3511d03aee27 Mon Sep 17 00:00:00 2001 From: samperson1997 Date: Wed, 25 Sep 2019 17:45:21 +0800 Subject: [PATCH 1/3] Add interface for showing devices --- .../UserGuide/6-JDBC API/1-JDBC API.md | 11 +++++- .../java/org/apache/iotdb/jdbc/Constant.java | 4 +- .../iotdb/jdbc/IoTDBDatabaseMetadata.java | 17 +++++---- .../iotdb/jdbc/IoTDBMetadataResultSet.java | 19 +++++++++- .../org/apache/iotdb/jdbc/IoTDBStatement.java | 5 +++ .../iotdb/jdbc/IoTDBDatabaseMetadataTest.java | 38 ++++++++++++++++++- .../org/apache/iotdb/db/metadata/MGraph.java | 4 ++ .../apache/iotdb/db/metadata/MManager.java | 15 ++++++++ .../org/apache/iotdb/db/metadata/MTree.java | 21 ++++++++-- .../iotdb/db/service/TSServiceImpl.java | 16 ++++---- .../db/integration/IoTDBMetadataFetchIT.java | 4 +- service-rpc/rpc-changelist.md | 2 + service-rpc/src/main/thrift/rpc.thrift | 3 +- 13 files changed, 128 insertions(+), 31 deletions(-) diff --git a/docs/Documentation/UserGuide/6-JDBC API/1-JDBC API.md b/docs/Documentation/UserGuide/6-JDBC API/1-JDBC API.md index 6e68d8dae41f..859ffad8c4f6 100644 --- a/docs/Documentation/UserGuide/6-JDBC API/1-JDBC API.md +++ b/docs/Documentation/UserGuide/6-JDBC API/1-JDBC API.md @@ -31,12 +31,16 @@ ## How to package only jdbc project In root directory: -> mvn clean package -pl jdbc -am -Dmaven.test.skip=true +``` +mvn clean package -pl jdbc -am -Dmaven.test.skip=true +``` ## How to install in local maven repository In root directory: -> mvn clean install -pl jdbc -am -Dmaven.test.skip=true +``` +mvn clean install -pl jdbc -am -Dmaven.test.skip=true +``` ## Using IoTDB JDBC with Maven @@ -99,6 +103,9 @@ public class JDBCExample { //Show time series statement.execute("SHOW TIMESERIES root.demo"); outputResult(statement.getResultSet()); + //Show devices + statement.execute("SHOW DEVICES"); + outputResult(statement.getResultSet()); //Count time series statement.execute("COUNT TIMESERIES root"); outputResult(statement.getResultSet()); diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/Constant.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/Constant.java index 34df3a3313ac..d7259fb683ec 100644 --- a/jdbc/src/main/java/org/apache/iotdb/jdbc/Constant.java +++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/Constant.java @@ -28,7 +28,7 @@ private Constant(){} public static final String GLOBAL_COLUMN_REQ = "COLUMN"; - public static final String GLOBAL_DELTA_OBJECT_REQ = "DELTA_OBEJECT"; + public static final String GLOBAL_SHOW_DEVICES_REQ = "SHOW_DEVICES"; public static final String GLOBAL_SHOW_TIMESERIES_REQ = "SHOW_TIMESERIES"; @@ -46,7 +46,7 @@ private Constant(){} public static final String CATALOG_COLUMN = "col"; public static final String CATALOG_TIMESERIES = "ts"; public static final String CATALOG_STORAGE_GROUP = "sg"; - public static final String CATALOG_DEVICE = "delta"; + public static final String CATALOG_DEVICES = "devices"; public static final String COUNT_TIMESERIES = "cntts"; public static final String COUNT_NODE_TIMESERIES = "cnttsbg"; public static final String COUNT_NODES = "cntnode"; diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadata.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadata.java index 1344c2df2ac2..caf1749bf216 100644 --- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadata.java +++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadata.java @@ -21,6 +21,7 @@ import java.sql.*; import java.util.List; import java.util.Set; +import org.apache.iotdb.jdbc.IoTDBMetadataResultSet.MetadataType; import org.apache.iotdb.rpc.IoTDBRPCException; import org.apache.iotdb.rpc.RpcUtils; import org.apache.iotdb.service.rpc.thrift.TSFetchMetadataReq; @@ -85,12 +86,12 @@ private ResultSet getColumnsFunc(String catalog, String schemaPattern) } catch (IoTDBRPCException e) { throw new IoTDBSQLException(e.getMessage()); } - return new IoTDBMetadataResultSet(resp.getColumnsList(), IoTDBMetadataResultSet.MetadataType.COLUMN); + return new IoTDBMetadataResultSet(resp.getColumnsList(), MetadataType.COLUMN); } catch (TException e) { throw new TException("Conncetion error when fetching column metadata", e); } - case Constant.CATALOG_DEVICE: - req = new TSFetchMetadataReq(Constant.GLOBAL_DELTA_OBJECT_REQ); + case Constant.CATALOG_DEVICES: + req = new TSFetchMetadataReq(Constant.GLOBAL_SHOW_DEVICES_REQ); req.setColumnPath(schemaPattern); try { TSFetchMetadataResp resp = client.fetchMetadata(req); @@ -99,9 +100,9 @@ private ResultSet getColumnsFunc(String catalog, String schemaPattern) } catch (IoTDBRPCException e) { throw new IoTDBSQLException(e.getMessage()); } - return new IoTDBMetadataResultSet(resp.getColumnsList(), IoTDBMetadataResultSet.MetadataType.COLUMN); + return new IoTDBMetadataResultSet(resp.getShowDevices(), MetadataType.DEVICES); } catch (TException e) { - throw new TException("Conncetion error when fetching delta object metadata", e); + throw new TException("Conncetion error when fetching device metadata", e); } case Constant.CATALOG_STORAGE_GROUP: req = new TSFetchMetadataReq(Constant.GLOBAL_SHOW_STORAGE_GROUP_REQ); @@ -113,7 +114,7 @@ private ResultSet getColumnsFunc(String catalog, String schemaPattern) throw new IoTDBSQLException(e.getMessage()); } Set showStorageGroup = resp.getShowStorageGroups(); - return new IoTDBMetadataResultSet(showStorageGroup, IoTDBMetadataResultSet.MetadataType.STORAGE_GROUP); + return new IoTDBMetadataResultSet(showStorageGroup, MetadataType.STORAGE_GROUP); } catch (TException e) { throw new TException("Conncetion error when fetching storage group metadata", e); } @@ -128,7 +129,7 @@ private ResultSet getColumnsFunc(String catalog, String schemaPattern) throw new IoTDBSQLException(e.getMessage()); } List> showTimeseriesList = resp.getShowTimeseriesList(); - return new IoTDBMetadataResultSet(showTimeseriesList, IoTDBMetadataResultSet.MetadataType.TIMESERIES); + return new IoTDBMetadataResultSet(showTimeseriesList, MetadataType.TIMESERIES); } catch (TException e) { throw new TException("Conncetion error when fetching timeseries metadata", e); } @@ -142,7 +143,7 @@ private ResultSet getColumnsFunc(String catalog, String schemaPattern) } catch (IoTDBRPCException e) { throw new IoTDBSQLException(e.getMessage()); } - return new IoTDBMetadataResultSet(resp.getColumnsList().size(), IoTDBMetadataResultSet.MetadataType.COUNT_TIMESERIES); + return new IoTDBMetadataResultSet(resp.getColumnsList().size(), MetadataType.COUNT_TIMESERIES); } catch (TException e) { throw new TException("Connection error when fetching timeseries metadata", e); } diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBMetadataResultSet.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBMetadataResultSet.java index c52d327d8fa2..1a56fcffc75f 100644 --- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBMetadataResultSet.java +++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBMetadataResultSet.java @@ -32,6 +32,7 @@ public class IoTDBMetadataResultSet extends IoTDBQueryResultSet { public static final String GET_STRING_NODE_PATH = "NODE_PATH"; public static final String GET_STRING_NODE_TIMESERIES_NUM = "NODE_TIMESERIES_NUM"; public static final String GET_STRING_TIMESERIES_NAME = "Timeseries"; + public static final String GET_STRING_DEVICES = "DEVICES"; public static final String GET_STRING_TIMESERIES_STORAGE_GROUP = "Storage Group"; public static final String GET_STRING_TIMESERIES_DATATYPE = "DataType"; public static final String GET_STRING_TIMESERIES_ENCODING = "Encoding"; @@ -39,6 +40,7 @@ public class IoTDBMetadataResultSet extends IoTDBQueryResultSet { private MetadataType type; private String currentColumn; private String currentStorageGroup; + private String currentDevice; private List currentTimeseries; private List timeseriesNumList; private List nodesNumList; @@ -71,6 +73,12 @@ public IoTDBMetadataResultSet(Object object, MetadataType type) throws SQLExcept showLabels = new String[]{"Storage Group"}; columnItr = storageGroupSet.iterator(); break; + case DEVICES: + Set devicesSet = (Set) object; + colCount = 1; + showLabels = new String[]{"Device"}; + columnItr = devicesSet.iterator(); + break; case TIMESERIES: List> showTimeseriesList = (List>) object; colCount = 4; @@ -239,6 +247,9 @@ public boolean next() throws SQLException { case COLUMN: currentColumn = (String) columnItr.next(); break; + case DEVICES: + currentDevice = (String) columnItr.next(); + break; case COUNT_TIMESERIES: timeseriesNum = (String) columnItr.next(); break; @@ -300,6 +311,10 @@ public String getString(int columnIndex) throws SQLException { return getString(GET_STRING_COLUMN); } break; + case DEVICES: + if (columnIndex == 1) { + return getString(GET_STRING_DEVICES); + } case COUNT_TIMESERIES: if (columnIndex == 1) { return getString(GET_STRING_TIMESERIES_NUM); @@ -333,6 +348,8 @@ public String getString(String columnName) throws SQLException { return currentTimeseries.get(3); case GET_STRING_COLUMN: return currentColumn; + case GET_STRING_DEVICES: + return currentDevice; case GET_STRING_TIMESERIES_NUM: return timeseriesNum; case GET_STRING_NODES_NUM: @@ -378,6 +395,6 @@ public boolean wasNull() throws SQLException { } public enum MetadataType { - STORAGE_GROUP, TIMESERIES, COLUMN, COUNT_TIMESERIES, COUNT_NODES, COUNT_NODE_TIMESERIES + STORAGE_GROUP, TIMESERIES, COLUMN, DEVICES, COUNT_TIMESERIES, COUNT_NODES, COUNT_NODE_TIMESERIES } } diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java index a786cb3bc19d..fde59aa5c3e3 100644 --- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java +++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java @@ -49,6 +49,7 @@ public class IoTDBStatement implements Statement { private static final String SHOW_TIMESERIES_COMMAND_LOWERCASE = "show timeseries"; private static final String SHOW_STORAGE_GROUP_COMMAND_LOWERCASE = "show storage group"; + private static final String SHOW_DEVICES_COMMAND_LOWERCASE = "show devices"; private static final String COUNT_TIMESERIES_COMMAND_LOWERCASE = "count timeseries"; private static final String COUNT_NODES_COMMAND_LOWERCASE = "count nodes"; private static final String METHOD_NOT_SUPPORTED_STRING = "Method not supported"; @@ -252,6 +253,10 @@ private boolean executeSQL(String sql) throws TException, SQLException { DatabaseMetaData databaseMetaData = connection.getMetaData(); resultSet = databaseMetaData.getColumns(Constant.CATALOG_STORAGE_GROUP, null, null, null); return true; + } else if (sqlToLowerCase.equals(SHOW_DEVICES_COMMAND_LOWERCASE)) { + DatabaseMetaData databaseMetaData = connection.getMetaData(); + resultSet = databaseMetaData.getColumns(Constant.CATALOG_DEVICES, null, null, null); + return true; } else if (sqlToLowerCase.startsWith(COUNT_TIMESERIES_COMMAND_LOWERCASE)) { String[] cmdSplited = sqlToLowerCase.split("\\s+", 4); if (cmdSplited.length != 3 && !(cmdSplited.length == 4 && cmdSplited[3].startsWith("group by level"))) { diff --git a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java index 28111f5e0579..e62c8dea04b2 100644 --- a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java +++ b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java @@ -231,7 +231,7 @@ public void CountNodeTimeseries() throws Exception { */ @SuppressWarnings("resource") @Test - public void device() throws Exception { + public void deviceUnderColumn() throws Exception { List columnList = new ArrayList<>(); columnList.add("root.vehicle.d0"); @@ -240,7 +240,41 @@ public void device() throws Exception { String standard = "column,\n" + "root.vehicle.d0,\n"; try { ResultSet resultSet = databaseMetaData - .getColumns(Constant.CATALOG_DEVICE, "vehicle", null, null); + .getColumns(Constant.CATALOG_COLUMN, "vehicle", null, null); + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + int colCount = resultSetMetaData.getColumnCount(); + StringBuilder resultStr = new StringBuilder(); + for (int i = 1; i < colCount + 1; i++) { + resultStr.append(resultSetMetaData.getColumnName(i)).append(","); + } + resultStr.append("\n"); + while (resultSet.next()) { + for (int i = 1; i <= colCount; i++) { + resultStr.append(resultSet.getString(i)).append(","); + } + resultStr.append("\n"); + } + Assert.assertEquals(resultStr.toString(), standard); + } catch (SQLException e) { + System.out.println(e); + } + } + + /** + * get all devices + */ + @SuppressWarnings("resource") + @Test + public void device() throws Exception { + Set devicesSet = new HashSet<>(); + devicesSet.add("root.vehicle.d0"); + + when(fetchMetadataResp.getShowDevices()).thenReturn(devicesSet); + + String standard = "Device,\n" + "root.vehicle.d0,\n"; + try { + ResultSet resultSet = databaseMetaData + .getColumns(Constant.CATALOG_DEVICES, null, null, null); ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); int colCount = resultSetMetaData.getColumnCount(); StringBuilder resultStr = new StringBuilder(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MGraph.java b/server/src/main/java/org/apache/iotdb/db/metadata/MGraph.java index 1251d6842336..28675250cf9e 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MGraph.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MGraph.java @@ -248,6 +248,10 @@ HashSet getAllStorageGroup() { return mtree.getAllStorageGroup(); } + HashSet getAllDevices() { + return mtree.getAllDevices(); + } + List getNodesList(String nodeLevel) { return mtree.getNodesList(nodeLevel); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java index 854f58517efa..9d2098d5a82c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java @@ -761,6 +761,21 @@ public Set getAllStorageGroup() throws PathErrorException { } } + /** + * Get the full devices info. + * + * @return A HashSet instance which stores all devices info + */ + public Set getAllDevices() throws PathErrorException { + + lock.readLock().lock(); + try { + return mgraph.getAllDevices(); + } finally { + lock.readLock().unlock(); + } + } + /** * Get all nodes from the given level * diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java index aaa74d9fd9e2..bf0cfb6c5b37 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java @@ -18,14 +18,18 @@ */ package org.apache.iotdb.db.metadata; -import java.io.Serializable; -import java.util.*; - import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import org.apache.iotdb.db.exception.PathErrorException; -import org.apache.iotdb.tsfile.common.conf.TSFileConfig; import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -760,6 +764,15 @@ private void findStorageGroup(MNode node, String path, HashSet res) { } } + /** + * Get all devices in current Metadata Tree. + * + * @return a list contains all distinct storage groups + */ + HashSet getAllDevices() { + return new HashSet<>(getNodesList("3")); + } + /** * Get all nodes at the given level in current Metadata Tree. * diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java index 59c3ce91dcea..dd18945c8cd1 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java @@ -311,15 +311,9 @@ public TSFetchMetadataResp fetchMetadata(TSFetchMetadataReq req) { resp.setMetadataInJson(metadataInJson); status = new TSStatus(getStatus(TSStatusCode.SUCCESS_STATUS)); break; - case "DELTA_OBEJECT": - Metadata metadata = getMetadata(); - String column = req.getColumnPath(); - Map> deviceMap = metadata.getDeviceMap(); - if (deviceMap == null || !deviceMap.containsKey(column)) { - resp.setColumnsList(new ArrayList<>()); - } else { - resp.setColumnsList(deviceMap.get(column)); - } + case "SHOW_DEVICES": + Set devices = getAllDevices(); + resp.setShowDevices(devices); status = new TSStatus(getStatus(TSStatusCode.SUCCESS_STATUS)); break; case "COLUMN": @@ -372,6 +366,10 @@ private Set getAllStorageGroups() throws PathErrorException { return MManager.getInstance().getAllStorageGroup(); } + private Set getAllDevices() throws PathErrorException { + return MManager.getInstance().getAllDevices(); + } + private List> getTimeSeriesForPath(String path) throws PathErrorException { return MManager.getInstance().getShowTimeseriesPath(path); diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java index 379d663dd4ad..67bc5d6b1d37 100644 --- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java +++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java @@ -230,10 +230,10 @@ private void allColumns() throws SQLException { * get all delta objects under a given column */ private void device() throws SQLException { - String standard = "column,\n" + "root.ln.wf01.wt01,\n"; + String standard = "Device,\n" + "root.ln.wf01,\n"; - try (ResultSet resultSet = databaseMetaData.getColumns(Constant.CATALOG_DEVICE, "ln", null, + try (ResultSet resultSet = databaseMetaData.getColumns(Constant.CATALOG_DEVICES, null, null, null)) { ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); int colCount = resultSetMetaData.getColumnCount(); diff --git a/service-rpc/rpc-changelist.md b/service-rpc/rpc-changelist.md index 25a2b87c0ba5..be822e26a909 100644 --- a/service-rpc/rpc-changelist.md +++ b/service-rpc/rpc-changelist.md @@ -36,3 +36,5 @@ * Add method **TSStatus deleteTimeseries(1:TSDeleteReq req)** for deleting timeseries. * Change item in enum **TSProtocolVersion** from ~~TSFILE_SERVICE_PROTOCOL_V1~~ to IOTDB_SERVICE_PROTOCOL_V1. + +* Add `6: optional set showStorageGroups` in struct **TSFetchMetadataResp**. diff --git a/service-rpc/src/main/thrift/rpc.thrift b/service-rpc/src/main/thrift/rpc.thrift index 88fb51b5147a..8db737171b8c 100644 --- a/service-rpc/src/main/thrift/rpc.thrift +++ b/service-rpc/src/main/thrift/rpc.thrift @@ -195,7 +195,8 @@ struct TSFetchMetadataResp{ 3: optional list ColumnsList 4: optional string dataType 5: optional list> showTimeseriesList - 7: optional set showStorageGroups + 6: optional set showStorageGroups + 7: optional set showDevices 8: optional list nodesList 9: optional map nodeTimeseriesNum } From 04d84102343c95b2d5910198108f0f5658c694c0 Mon Sep 17 00:00:00 2001 From: samperson1997 Date: Wed, 25 Sep 2019 20:07:09 +0800 Subject: [PATCH 2/3] Change names of struct values and method param types --- .../apache/iotdb/jdbc/IoTDBDatabaseMetadata.java | 10 +++++----- .../java/org/apache/iotdb/jdbc/IoTDBStatement.java | 4 ++-- .../iotdb/jdbc/IoTDBDatabaseMetadataTest.java | 13 +++++++------ .../java/org/apache/iotdb/db/metadata/MGraph.java | 2 +- .../java/org/apache/iotdb/db/metadata/MManager.java | 2 +- .../java/org/apache/iotdb/db/metadata/MTree.java | 9 ++++----- .../org/apache/iotdb/db/service/TSServiceImpl.java | 10 +++++----- service-rpc/rpc-changelist.md | 2 +- service-rpc/src/main/thrift/rpc.thrift | 10 +++++----- 9 files changed, 31 insertions(+), 31 deletions(-) diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadata.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadata.java index caf1749bf216..3e3dbb4ec9bf 100644 --- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadata.java +++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadata.java @@ -100,7 +100,7 @@ private ResultSet getColumnsFunc(String catalog, String schemaPattern) } catch (IoTDBRPCException e) { throw new IoTDBSQLException(e.getMessage()); } - return new IoTDBMetadataResultSet(resp.getShowDevices(), MetadataType.DEVICES); + return new IoTDBMetadataResultSet(resp.getDevices(), MetadataType.DEVICES); } catch (TException e) { throw new TException("Conncetion error when fetching device metadata", e); } @@ -113,7 +113,7 @@ private ResultSet getColumnsFunc(String catalog, String schemaPattern) } catch (IoTDBRPCException e) { throw new IoTDBSQLException(e.getMessage()); } - Set showStorageGroup = resp.getShowStorageGroups(); + Set showStorageGroup = resp.getStorageGroups(); return new IoTDBMetadataResultSet(showStorageGroup, MetadataType.STORAGE_GROUP); } catch (TException e) { throw new TException("Conncetion error when fetching storage group metadata", e); @@ -128,7 +128,7 @@ private ResultSet getColumnsFunc(String catalog, String schemaPattern) } catch (IoTDBRPCException e) { throw new IoTDBSQLException(e.getMessage()); } - List> showTimeseriesList = resp.getShowTimeseriesList(); + List> showTimeseriesList = resp.getTimeseriesList(); return new IoTDBMetadataResultSet(showTimeseriesList, MetadataType.TIMESERIES); } catch (TException e) { throw new TException("Conncetion error when fetching timeseries metadata", e); @@ -154,7 +154,7 @@ private ResultSet getColumnsFunc(String catalog, String schemaPattern) } public ResultSet getNodes(String catalog, String schemaPattern, String columnPattern, - String devicePattern, String nodeLevel) throws SQLException { + String devicePattern, int nodeLevel) throws SQLException { try { return getNodesFunc(catalog, nodeLevel); } catch (TException e) { @@ -179,7 +179,7 @@ public ResultSet getNodes(String catalog, String schemaPattern, String columnPat } } - private ResultSet getNodesFunc(String catalog, String nodeLevel) throws TException, SQLException { + private ResultSet getNodesFunc(String catalog, int nodeLevel) throws TException, SQLException { TSFetchMetadataReq req; switch (catalog) { case Constant.COUNT_NODES: diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java index fde59aa5c3e3..c442c9d6cb69 100644 --- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java +++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java @@ -270,7 +270,7 @@ private boolean executeSQL(String sql) throws TException, SQLException { return true; } else { String path = cmdSplited[2]; - String level = cmdSplited[3].replaceAll(" ", "").substring(13); + int level = Integer.parseInt(cmdSplited[3].replaceAll(" ", "").substring(13)); IoTDBDatabaseMetadata databaseMetadata = (IoTDBDatabaseMetadata) connection.getMetaData(); resultSet = databaseMetadata.getNodes(Constant.COUNT_NODE_TIMESERIES, path, null, null, level); return true; @@ -281,7 +281,7 @@ private boolean executeSQL(String sql) throws TException, SQLException { throw new SQLException("Error format of \'COUNT NODES LEVEL=\'"); } else { String path = cmdSplited[2]; - String level = cmdSplited[3].replaceAll(" ", "").substring(6); + int level = Integer.parseInt(cmdSplited[3].replaceAll(" ", "").substring(6)); IoTDBDatabaseMetadata databaseMetaData = (IoTDBDatabaseMetadata) connection.getMetaData(); resultSet = databaseMetaData.getNodes(Constant.COUNT_NODES, path, null, null, level); return true; diff --git a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java index e62c8dea04b2..6e2136648f82 100644 --- a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java +++ b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java @@ -163,7 +163,7 @@ public void CountNodes() throws Exception { String standard = "count,\n" + "4,\n"; try { IoTDBDatabaseMetadata metadata = (IoTDBDatabaseMetadata) databaseMetaData; - String level = "3"; + int level = 3; ResultSet resultSet = metadata.getNodes(Constant.COUNT_NODES, "root", null, null, level); ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); int colCount = resultSetMetaData.getColumnCount(); @@ -205,7 +205,7 @@ public void CountNodeTimeseries() throws Exception { + "root.vehicle.d4,2,\n"; try { IoTDBDatabaseMetadata metadata = (IoTDBDatabaseMetadata) databaseMetaData; - String level = "3"; + int level = 3; ResultSet resultSet = metadata.getNodes(Constant.COUNT_NODE_TIMESERIES, "root", null, null, level); ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); int colCount = resultSetMetaData.getColumnCount(); @@ -269,7 +269,7 @@ public void device() throws Exception { Set devicesSet = new HashSet<>(); devicesSet.add("root.vehicle.d0"); - when(fetchMetadataResp.getShowDevices()).thenReturn(devicesSet); + when(fetchMetadataResp.getDevices()).thenReturn(devicesSet); String standard = "Device,\n" + "root.vehicle.d0,\n"; try { @@ -326,7 +326,7 @@ public void ShowTimeseriesPath1() throws Exception { } }); - when(fetchMetadataResp.getShowTimeseriesList()).thenReturn(tslist); + when(fetchMetadataResp.getTimeseriesList()).thenReturn(tslist); String standard = "Timeseries,Storage Group,DataType,Encoding,\n" + "root.vehicle.d0.s0,root.vehicle,INT32,RLE,\n" @@ -369,7 +369,7 @@ public void ShowTimeseriesPath2() throws Exception { } }); - when(fetchMetadataResp.getShowTimeseriesList()).thenReturn(tslist); + when(fetchMetadataResp.getTimeseriesList()).thenReturn(tslist); String standard = "DataType,\n" + "INT32,\n"; try (ResultSet resultSet = databaseMetaData @@ -397,7 +397,7 @@ public void ShowTimeseriesPath2() throws Exception { public void ShowStorageGroup() throws Exception { Set sgSet = new HashSet<>(); sgSet.add("root.vehicle"); - when(fetchMetadataResp.getShowStorageGroups()).thenReturn(sgSet); + when(fetchMetadataResp.getStorageGroups()).thenReturn(sgSet); String standard = "Storage Group,\n" + "root.vehicle,\n"; try (ResultSet resultSet = databaseMetaData @@ -419,6 +419,7 @@ public void ShowStorageGroup() throws Exception { } catch (SQLException e) { System.out.println(e); } + } /** diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MGraph.java b/server/src/main/java/org/apache/iotdb/db/metadata/MGraph.java index 28675250cf9e..a0fe2907deb2 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MGraph.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MGraph.java @@ -252,7 +252,7 @@ HashSet getAllDevices() { return mtree.getAllDevices(); } - List getNodesList(String nodeLevel) { + List getNodesList(int nodeLevel) { return mtree.getNodesList(nodeLevel); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java index 9d2098d5a82c..05c9331c4259 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java @@ -781,7 +781,7 @@ public Set getAllDevices() throws PathErrorException { * * @return A List instance which stores all node at given level */ - public List getNodesList(String nodeLevel) { + public List getNodesList(int nodeLevel) { lock.readLock().lock(); try { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java index bf0cfb6c5b37..109321e591c1 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java @@ -767,10 +767,10 @@ private void findStorageGroup(MNode node, String path, HashSet res) { /** * Get all devices in current Metadata Tree. * - * @return a list contains all distinct storage groups + * @return a list contains all distinct devices */ HashSet getAllDevices() { - return new HashSet<>(getNodesList("3")); + return new HashSet<>(getNodesList(3)); } /** @@ -778,12 +778,11 @@ HashSet getAllDevices() { * * @return a list contains all nodes at the given level */ - List getNodesList(String nodeLevel) { + List getNodesList(int nodeLevel) { List res = new ArrayList<>(); - int level = Integer.parseInt(nodeLevel); MNode rootNode; if ((rootNode = getRoot()) != null) { - findNodes(rootNode, "root", res, level); + findNodes(rootNode, "root", res, nodeLevel); } return res; } diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java index dd18945c8cd1..41ceed358143 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java @@ -297,13 +297,13 @@ public TSFetchMetadataResp fetchMetadata(TSFetchMetadataReq req) { switch (req.getType()) { case "SHOW_TIMESERIES": String path = req.getColumnPath(); - List> showTimeseriesList = getTimeSeriesForPath(path); - resp.setShowTimeseriesList(showTimeseriesList); + List> timeseriesList = getTimeSeriesForPath(path); + resp.setTimeseriesList(timeseriesList); status = new TSStatus(getStatus(TSStatusCode.SUCCESS_STATUS)); break; case "SHOW_STORAGE_GROUP": Set storageGroups = getAllStorageGroups(); - resp.setShowStorageGroups(storageGroups); + resp.setStorageGroups(storageGroups); status = new TSStatus(getStatus(TSStatusCode.SUCCESS_STATUS)); break; case "METADATA_IN_JSON": @@ -313,7 +313,7 @@ public TSFetchMetadataResp fetchMetadata(TSFetchMetadataReq req) { break; case "SHOW_DEVICES": Set devices = getAllDevices(); - resp.setShowDevices(devices); + resp.setDevices(devices); status = new TSStatus(getStatus(TSStatusCode.SUCCESS_STATUS)); break; case "COLUMN": @@ -358,7 +358,7 @@ private Map getNodeTimeseriesNum(List nodes) throws Meta return nodeColumnsNum; } - private List getNodesList(String level) throws PathErrorException { + private List getNodesList(int level) throws PathErrorException { return MManager.getInstance().getNodesList(level); } diff --git a/service-rpc/rpc-changelist.md b/service-rpc/rpc-changelist.md index be822e26a909..3b9166cc6222 100644 --- a/service-rpc/rpc-changelist.md +++ b/service-rpc/rpc-changelist.md @@ -37,4 +37,4 @@ * Change item in enum **TSProtocolVersion** from ~~TSFILE_SERVICE_PROTOCOL_V1~~ to IOTDB_SERVICE_PROTOCOL_V1. -* Add `6: optional set showStorageGroups` in struct **TSFetchMetadataResp**. +* Add **storageGroups** in struct **TSFetchMetadataResp**. Rename ~~ColumnsList~~ to **columnsList**, ~~showTimeseriesList~~ to **timeseriesList**, ~~showStorageGroups~~ to **storageGroups**. \ No newline at end of file diff --git a/service-rpc/src/main/thrift/rpc.thrift b/service-rpc/src/main/thrift/rpc.thrift index 8db737171b8c..79ff7575fd9f 100644 --- a/service-rpc/src/main/thrift/rpc.thrift +++ b/service-rpc/src/main/thrift/rpc.thrift @@ -192,11 +192,11 @@ struct TSFetchResultsResp{ struct TSFetchMetadataResp{ 1: required TSStatus status 2: optional string metadataInJson - 3: optional list ColumnsList + 3: optional list columnsList 4: optional string dataType - 5: optional list> showTimeseriesList - 6: optional set showStorageGroups - 7: optional set showDevices + 5: optional list> timeseriesList + 6: optional set storageGroups + 7: optional set devices 8: optional list nodesList 9: optional map nodeTimeseriesNum } @@ -204,7 +204,7 @@ struct TSFetchMetadataResp{ struct TSFetchMetadataReq{ 1: required string type 2: optional string columnPath - 3: optional string nodeLevel + 3: optional i32 nodeLevel } struct TSColumnSchema{ From 287d315cef03e57f4d090f72fda17d135b44b2e4 Mon Sep 17 00:00:00 2001 From: samperson1997 Date: Wed, 25 Sep 2019 20:31:00 +0800 Subject: [PATCH 3/3] Add asserting fails in tests and fix return type of methods --- .../org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java | 9 +++++++++ .../java/org/apache/iotdb/jdbc/IoTDBStatementTest.java | 8 +++++--- .../main/java/org/apache/iotdb/db/metadata/MGraph.java | 4 ++-- .../main/java/org/apache/iotdb/db/metadata/MTree.java | 4 ++-- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java index 6e2136648f82..ec63598c7316 100644 --- a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java +++ b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java @@ -108,6 +108,7 @@ public void AllColumns() throws Exception { Assert.assertEquals(resultStr.toString(), standard); } catch (SQLException e) { System.out.println(e); + Assert.fail(e.getMessage()); } } @@ -143,6 +144,7 @@ public void CountTimeseries() throws Exception { Assert.assertEquals(resultStr.toString(), standard); } catch (SQLException e) { System.out.println(e); + Assert.fail(e.getMessage()); } } @@ -181,6 +183,7 @@ public void CountNodes() throws Exception { Assert.assertEquals(resultStr.toString(), standard); } catch (SQLException e) { System.out.println(e); + Assert.fail(e.getMessage()); } } @@ -223,6 +226,7 @@ public void CountNodeTimeseries() throws Exception { Assert.assertEquals(resultStr.toString(), standard); } catch (SQLException e) { System.out.println(e); + Assert.fail(e.getMessage()); } } @@ -257,6 +261,7 @@ public void deviceUnderColumn() throws Exception { Assert.assertEquals(resultStr.toString(), standard); } catch (SQLException e) { System.out.println(e); + Assert.fail(e.getMessage()); } } @@ -291,6 +296,7 @@ public void device() throws Exception { Assert.assertEquals(resultStr.toString(), standard); } catch (SQLException e) { System.out.println(e); + Assert.fail(e.getMessage()); } } @@ -350,6 +356,7 @@ public void ShowTimeseriesPath1() throws Exception { Assert.assertEquals(resultStr.toString(), standard); } catch (SQLException e) { System.out.println(e); + Assert.fail(e.getMessage()); } } @@ -386,6 +393,7 @@ public void ShowTimeseriesPath2() throws Exception { Assert.assertEquals(resultStr.toString(), standard); } catch (SQLException e) { System.out.println(e); + Assert.fail(e.getMessage()); } } @@ -418,6 +426,7 @@ public void ShowStorageGroup() throws Exception { Assert.assertEquals(resultStr.toString(), standard); } catch (SQLException e) { System.out.println(e); + Assert.fail(e.getMessage()); } } diff --git a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBStatementTest.java b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBStatementTest.java index 6a558cf80e29..2991d160bffc 100644 --- a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBStatementTest.java +++ b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBStatementTest.java @@ -107,7 +107,7 @@ public void testExecuteSQL1() throws SQLException, TException { + "root.vehicle.d0.s0,root.vehicle,INT32,RLE,\n" + "root.vehicle.d0.s1,root.vehicle,INT64,RLE,\n" + "root.vehicle.d0.s2,root.vehicle,FLOAT,RLE,\n"; - when(fetchMetadataResp.getShowTimeseriesList()).thenReturn(tslist); + when(fetchMetadataResp.getTimeseriesList()).thenReturn(tslist); boolean res = stmt.execute("show timeseries"); assertTrue(res); try (ResultSet resultSet = stmt.getResultSet()) { @@ -127,6 +127,7 @@ public void testExecuteSQL1() throws SQLException, TException { Assert.assertEquals(resultStr.toString(), standard); } catch (SQLException e) { System.out.println(e); + Assert.fail(e.getMessage()); } } @@ -163,7 +164,7 @@ public void testExecuteSQL2() throws SQLException, TException { + "root.vehicle.d0.s0,root.vehicle,INT32,RLE,\n" + "root.vehicle.d0.s1,root.vehicle,INT64,RLE,\n" + "root.vehicle.d0.s2,root.vehicle,FLOAT,RLE,\n"; - when(fetchMetadataResp.getShowTimeseriesList()).thenReturn(tslist); + when(fetchMetadataResp.getTimeseriesList()).thenReturn(tslist); boolean res = stmt.execute("show timeseries root.vehicle.d0"); assertTrue(res); try (ResultSet resultSet = stmt.getResultSet()) { @@ -192,7 +193,7 @@ public void testExecuteSQL3() throws SQLException, TException { IoTDBStatement stmt = new IoTDBStatement(connection, client, sessHandle, zoneID); Set sgSet = new HashSet<>(); sgSet.add("root.vehicle"); - when(fetchMetadataResp.getShowStorageGroups()).thenReturn(sgSet); + when(fetchMetadataResp.getStorageGroups()).thenReturn(sgSet); String standard = "Storage Group,\nroot.vehicle,\n"; boolean res = stmt.execute("show storage group"); assertTrue(res); @@ -213,6 +214,7 @@ public void testExecuteSQL3() throws SQLException, TException { Assert.assertEquals(resultStr.toString(), standard); } catch (SQLException e) { System.out.println(e); + Assert.fail(e.getMessage()); } } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MGraph.java b/server/src/main/java/org/apache/iotdb/db/metadata/MGraph.java index a0fe2907deb2..1dedc8063222 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MGraph.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MGraph.java @@ -244,11 +244,11 @@ public Metadata getMetadata() throws PathErrorException { return new Metadata(deviceIdMap); } - HashSet getAllStorageGroup() { + Set getAllStorageGroup() { return mtree.getAllStorageGroup(); } - HashSet getAllDevices() { + Set getAllDevices() { return mtree.getAllDevices(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java index 109321e591c1..e3f6431e7d76 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java @@ -745,7 +745,7 @@ ArrayList getAllType() { * * @return a list contains all distinct storage groups */ - HashSet getAllStorageGroup() { + Set getAllStorageGroup() { HashSet res = new HashSet<>(); MNode rootNode; if ((rootNode = getRoot()) != null) { @@ -769,7 +769,7 @@ private void findStorageGroup(MNode node, String path, HashSet res) { * * @return a list contains all distinct devices */ - HashSet getAllDevices() { + Set getAllDevices() { return new HashSet<>(getNodesList(3)); }