You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ka...@apache.org on 2021/05/11 03:35:49 UTC
[iotdb] 02/02: add show index
This is an automated email from the ASF dual-hosted git repository.
kangrong pushed a commit to branch f_index_dev
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 83c6f251beaa07e8a83081737e6fc92aac6cbf5e
Author: kr11 <3095717866.com>
AuthorDate: Tue May 11 11:35:12 2021 +0800
add show index
---
.../antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4 | 1 +
.../org/apache/iotdb/db/conf/IoTDBConstant.java | 4 ++
.../org/apache/iotdb/db/index/IndexManager.java | 4 ++
.../iotdb/db/index/algorithm/IoTDBIndex.java | 21 +++++-----
.../algorithm/elb/ELBTimeFeatureExtractor.java | 46 ++++++++++++++--------
.../iotdb/db/index/algorithm/mmhh/MMHHIndex.java | 18 +++------
.../apache/iotdb/db/index/common/IndexInfo.java | 11 ++++++
.../apache/iotdb/db/index/router/IIndexRouter.java | 2 +
.../iotdb/db/index/router/ProtoIndexRouter.java | 28 +++++++++++++
.../apache/iotdb/db/qp/constant/SQLConstant.java | 2 +
.../apache/iotdb/db/qp/executor/PlanExecutor.java | 35 ++++++++++++++++
.../iotdb/db/qp/logical/sys/ShowIndexOperator.java | 40 +++++++++++++++++++
.../iotdb/db/qp/physical/sys/ShowIndexPlan.java | 29 ++++++++++++++
.../apache/iotdb/db/qp/physical/sys/ShowPlan.java | 1 +
.../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java | 11 ++++++
.../iotdb/db/qp/strategy/PhysicalGenerator.java | 4 ++
.../apache/iotdb/db/index/it/ELBIndexReadIT.java | 13 +++---
.../apache/iotdb/db/index/it/MMHHIndexReadIT.java | 6 +--
18 files changed, 227 insertions(+), 49 deletions(-)
diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4 b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4
index 37d9056..140e8b6 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4
@@ -81,6 +81,7 @@ statement
| SHOW DEVICES prefixPath? (WITH STORAGE GROUP)? limitClause? #showDevices
| SHOW MERGE #showMergeStatus
| SHOW QUERY PROCESSLIST #showQueryProcesslist
+ | SHOW INDEX (FROM prefixPath)? #showIndex
| KILL QUERY INT? #killQuery
| TRACING ON #tracingOn
| TRACING OFF #tracingOff
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
index 692a700..a9830a8 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
@@ -101,6 +101,10 @@ public class IoTDBConstant {
public static final String FUNCTION_TYPE_EXTERNAL_UDAF = "external UDAF";
public static final String FUNCTION_TYPE_EXTERNAL_UDTF = "external UDTF";
+ public static final String COLUMN_INDEX_SERIES = "index series";
+ public static final String COLUMN_INDEX_TYPE = "index type";
+ public static final String COLUMN_INDEX_ATTRIBUTE = "index attribute";
+
public static final String COLUMN_TRIGGER_NAME = "trigger name";
public static final String COLUMN_TRIGGER_STATUS = "status";
public static final String COLUMN_TRIGGER_EVENT = "event";
diff --git a/server/src/main/java/org/apache/iotdb/db/index/IndexManager.java b/server/src/main/java/org/apache/iotdb/db/index/IndexManager.java
index 30e5e21..2bd7557 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/IndexManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/IndexManager.java
@@ -273,6 +273,10 @@ public class IndexManager implements IndexManagerMBean, IService {
}
}
+ public Map<PartialPath, Map<IndexType, IndexInfo>> getIndexInfos(PartialPath prefixPath) {
+ return router.getIndexInfosByPrefixPath(prefixPath);
+ }
+
/**
* As IoTDB has no normal shutdown mechanism, this function will not be called. To ensure the
* information safety, The router needs to serialize index metadata every time createIndex or
diff --git a/server/src/main/java/org/apache/iotdb/db/index/algorithm/IoTDBIndex.java b/server/src/main/java/org/apache/iotdb/db/index/algorithm/IoTDBIndex.java
index de9495e..4cded51 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/algorithm/IoTDBIndex.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/algorithm/IoTDBIndex.java
@@ -17,9 +17,6 @@
*/
package org.apache.iotdb.db.index.algorithm;
-import java.util.Arrays;
-import java.util.PriorityQueue;
-import java.util.TreeMap;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.index.IndexManagerException;
import org.apache.iotdb.db.exception.index.QueryIndexException;
@@ -38,7 +35,6 @@ import org.apache.iotdb.db.query.context.QueryContext;
import org.apache.iotdb.db.rescon.TVListAllocator;
import org.apache.iotdb.db.utils.datastructure.TVList;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.read.TimeValuePair;
import org.apache.iotdb.tsfile.read.common.Field;
import org.apache.iotdb.tsfile.read.common.RowRecord;
import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
@@ -46,9 +42,11 @@ import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
/**
* For index developers, the indexing framework aims to provide a simple and friendly platform and
@@ -156,7 +154,7 @@ public abstract class IoTDBIndex {
List<DistSeries> res, boolean alignedByTime, int nMaxReturnSeries)
throws QueryIndexException {
if (alignedByTime) {
-// throw new QueryIndexException("Unsupported alignedByTime result");
+ // throw new QueryIndexException("Unsupported alignedByTime result");
return constructTimeAlignedSearchDataset(res, nMaxReturnSeries);
}
// make result paths and types
@@ -248,7 +246,7 @@ public abstract class IoTDBIndex {
TreeMap<Long, List<Field>> timeMergedFields = new TreeMap<>();
for (int col = 0; col < nMaxReturnSeries; col++) {
- TVList tvList = res.get(col).tvList;
+ TVList tvList = res.get(col).tvList;
for (int row = 0; row < tvList.size(); row++) {
long t = tvList.getTime(row);
@@ -260,12 +258,13 @@ public abstract class IoTDBIndex {
timeMergedFields.get(t).set(col, Field.getField(v, tsDataType));
}
}
-// timeMergedFields.forEach((k,v)-> System.out.println(k + "," + v));
+ // timeMergedFields.forEach((k,v)-> System.out.println(k + "," + v));
// to dataset
- timeMergedFields.forEach((k,v)->{
- RowRecord record = new RowRecord(k, v);
- dataSet.putRecord(record);
- });
+ timeMergedFields.forEach(
+ (k, v) -> {
+ RowRecord record = new RowRecord(k, v);
+ dataSet.putRecord(record);
+ });
return dataSet;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBTimeFeatureExtractor.java b/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBTimeFeatureExtractor.java
index bb5b114..75a2547 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBTimeFeatureExtractor.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBTimeFeatureExtractor.java
@@ -17,13 +17,7 @@
*/
package org.apache.iotdb.db.index.algorithm.elb;
-import org.apache.iotdb.db.exception.index.IllegalIndexParamException;
-import org.apache.iotdb.db.exception.index.IndexRuntimeException;
-import org.apache.iotdb.db.index.algorithm.elb.ELB.ELBType;
-import org.apache.iotdb.db.index.algorithm.elb.ELB.ELBWindowBlockFeature;
-import org.apache.iotdb.db.index.feature.CountFixedFeatureExtractor;
import org.apache.iotdb.db.index.feature.TimeFixedFeatureExtractor;
-import org.apache.iotdb.db.index.read.TVListPointer;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
/**
@@ -36,26 +30,44 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
* <p>Refer to: Kang, Rong, et al. Matching Consecutive Subpatterns over Streaming Time Series.
* APWeb-WAIM. Springer. 2018: 90-105.
*
- * Temp
+ * <p>Temp
*/
public class ELBTimeFeatureExtractor extends TimeFixedFeatureExtractor {
-
- public ELBTimeFeatureExtractor(TSDataType tsDataType, int windowRange, int slideStep,
- int alignedDim, long timeAnchor, boolean storeIdentifier, boolean storeAligned,
+ public ELBTimeFeatureExtractor(
+ TSDataType tsDataType,
+ int windowRange,
+ int slideStep,
+ int alignedDim,
+ long timeAnchor,
+ boolean storeIdentifier,
+ boolean storeAligned,
boolean inQueryMode) {
- super(tsDataType, windowRange, slideStep, alignedDim, timeAnchor, storeIdentifier, storeAligned,
+ super(
+ tsDataType,
+ windowRange,
+ slideStep,
+ alignedDim,
+ timeAnchor,
+ storeIdentifier,
+ storeAligned,
inQueryMode);
}
- public ELBTimeFeatureExtractor(TSDataType tsDataType, int windowRange, int slideStep,
- int alignedDim, long timeAnchor, boolean storeIdentifier, boolean storeAligned) {
- super(tsDataType, windowRange, slideStep, alignedDim, timeAnchor, storeIdentifier,
- storeAligned);
+ public ELBTimeFeatureExtractor(
+ TSDataType tsDataType,
+ int windowRange,
+ int slideStep,
+ int alignedDim,
+ long timeAnchor,
+ boolean storeIdentifier,
+ boolean storeAligned) {
+ super(
+ tsDataType, windowRange, slideStep, alignedDim, timeAnchor, storeIdentifier, storeAligned);
}
- public ELBTimeFeatureExtractor(TSDataType tsDataType, int windowRange, int alignedDim,
- int slideStep, long timeAnchor) {
+ public ELBTimeFeatureExtractor(
+ TSDataType tsDataType, int windowRange, int alignedDim, int slideStep, long timeAnchor) {
super(tsDataType, windowRange, alignedDim, slideStep, timeAnchor);
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/index/algorithm/mmhh/MMHHIndex.java b/server/src/main/java/org/apache/iotdb/db/index/algorithm/mmhh/MMHHIndex.java
index 86cc5b0..783482e 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/algorithm/mmhh/MMHHIndex.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/algorithm/mmhh/MMHHIndex.java
@@ -76,9 +76,7 @@ import static org.apache.iotdb.db.index.common.IndexConstant.SERIES_LENGTH;
import static org.apache.iotdb.db.index.common.IndexConstant.TOP_K;
import static org.apache.iotdb.db.index.common.IndexType.MMHH;
-/**
- * <p>Refer to: Kang, Rong, et al. Maximum-margin hamming hashing. ICCV. IEEE/CVF. 2019: 8252-8261.
- */
+/** Refer to: Kang, Rong, et al. Maximum-margin hamming hashing. ICCV. IEEE/CVF. 2019: 8252-8261. */
public class MMHHIndex extends IoTDBIndex {
private static final Logger logger = LoggerFactory.getLogger(MMHHIndex.class);
@@ -143,9 +141,7 @@ public class MMHHIndex extends IoTDBIndex {
return res;
}
- /**
- * should be concise into WholeIndex or IoTDBIndex, it's duplicate
- */
+ /** should be concise into WholeIndex or IoTDBIndex, it's duplicate */
public void endFlushTask() {
super.endFlushTask();
currentInsertPath = null;
@@ -217,9 +213,7 @@ public class MMHHIndex extends IoTDBIndex {
private static class MMHHQueryStruct {
- /**
- * features is represented by float array
- */
+ /** features is represented by float array */
// float[] patternFeatures;
// TriFunction<float[], float[], float[], Double> calcLowerDistFunc;
//
@@ -375,9 +369,7 @@ public class MMHHIndex extends IoTDBIndex {
return res;
}
- /**
- * if res has reached topK
- */
+ /** if res has reached topK */
private boolean scanBucket(
long queryCode,
int doneIdx,
@@ -423,7 +415,7 @@ public class MMHHIndex extends IoTDBIndex {
}
}
resList.sort(Comparator.comparingDouble(o -> o.backDist));
- if(tempQueryStruct.topK < resList.size()){
+ if (tempQueryStruct.topK < resList.size()) {
resList.subList(tempQueryStruct.topK, resList.size()).clear();
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/index/common/IndexInfo.java b/server/src/main/java/org/apache/iotdb/db/index/common/IndexInfo.java
index e2e67ab..3173eb4 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/common/IndexInfo.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/common/IndexInfo.java
@@ -130,6 +130,17 @@ public class IndexInfo implements Cloneable {
return String.format("[type: %s, time: %d, props: %s]", indexType, time, props);
}
+ public String toStringForShow() {
+ // no indexType. not default map.toString. no time if not set
+ StringBuilder sb = new StringBuilder();
+ props.forEach((k, v) -> sb.append(k).append("=").append(v).append(","));
+ if (time > 0) {
+ sb.append("time>").append(time);
+ }
+ sb.deleteCharAt(sb.length() - 1);
+ return sb.toString();
+ }
+
@Override
public Object clone() {
return new IndexInfo(indexType, time, new HashMap<>(props));
diff --git a/server/src/main/java/org/apache/iotdb/db/index/router/IIndexRouter.java b/server/src/main/java/org/apache/iotdb/db/index/router/IIndexRouter.java
index bc6cfdd..f558f41 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/router/IIndexRouter.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/router/IIndexRouter.java
@@ -116,6 +116,8 @@ public interface IIndexRouter {
*/
void endQuery(PartialPath indexSeries, IndexType indexType, QueryContext context);
+ Map<PartialPath, Map<IndexType, IndexInfo>> getIndexInfosByPrefixPath(PartialPath prefixPath);
+
class Factory {
private Factory() {
diff --git a/server/src/main/java/org/apache/iotdb/db/index/router/ProtoIndexRouter.java b/server/src/main/java/org/apache/iotdb/db/index/router/ProtoIndexRouter.java
index 640027c..1d962bc 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/router/ProtoIndexRouter.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/router/ProtoIndexRouter.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.db.index.router;
import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
import org.apache.iotdb.db.exception.index.QueryIndexException;
+import org.apache.iotdb.db.exception.metadata.IllegalPathException;
import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.index.IndexProcessor;
import org.apache.iotdb.db.index.common.IndexInfo;
@@ -231,6 +232,33 @@ public class ProtoIndexRouter implements IIndexRouter {
}
@Override
+ public Map<PartialPath, Map<IndexType, IndexInfo>> getIndexInfosByPrefixPath(
+ PartialPath prefixPath) {
+ // TODO prefixPath must be "prefix", i.e. ending with wildcard: root.XX.XX.*
+ // the wildcard match is costly. We'd move router into MManager
+ Map<PartialPath, Map<IndexType, IndexInfo>> res = new HashMap<>();
+ if (prefixPath != null) prefixPath.toLowerCase();
+ wildCardProcessorMap.forEach(
+ (indexSeries, struct) -> {
+ if (prefixPath == null || prefixPath.matchFullPath(indexSeries)) {
+ res.put(indexSeries, struct.infos);
+ }
+ });
+ fullPathProcessorMap.forEach(
+ (indexSeries, struct) -> {
+ try {
+ PartialPath path = new PartialPath(indexSeries);
+ if (prefixPath == null || prefixPath.matchFullPath(path)) {
+ res.put(path, struct.infos);
+ }
+ } catch (IllegalPathException e) {
+ // that's impossible but ugly, so let's move it into MManager quickly
+ }
+ });
+ return res;
+ }
+
+ @Override
public boolean addIndexIntoRouter(
PartialPath partialPath,
IndexInfo indexInfo,
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java b/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
index 35dcdec..4f79284 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
@@ -100,6 +100,7 @@ public class SQLConstant {
public static final int TOK_CREATE_INDEX = 31;
public static final int TOK_DROP_INDEX = 32;
public static final int TOK_QUERY_INDEX = 33;
+ public static final int TOK_SHOW_INDEX = 34;
public static final int TOK_GRANT_WATERMARK_EMBEDDING = 34;
public static final int TOK_REVOKE_WATERMARK_EMBEDDING = 35;
@@ -265,6 +266,7 @@ public class SQLConstant {
tokenNames.put(TOK_CREATE_INDEX, "TOK_CREATE_INDEX");
tokenNames.put(TOK_DROP_INDEX, "TOK_DROP_INDEX");
tokenNames.put(TOK_QUERY_INDEX, "TOK_QUERY_INDEX");
+ tokenNames.put(TOK_SHOW_INDEX, "TOK_SHOW_INDEX");
tokenNames.put(TOK_TRIGGER_CREATE, "TOK_TRIGGER_CREATE");
tokenNames.put(TOK_TRIGGER_DROP, "TOK_TRIGGER_DROP");
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
index db9d416..8b4cc14 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
@@ -101,6 +101,7 @@ import org.apache.iotdb.db.qp.physical.sys.ShowChildNodesPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowChildPathsPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowFunctionsPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowIndexPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowStorageGroupPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowTTLPlan;
@@ -168,6 +169,9 @@ import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_DONE;
import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_FUNCTION_CLASS;
import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_FUNCTION_NAME;
import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_FUNCTION_TYPE;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_INDEX_ATTRIBUTE;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_INDEX_SERIES;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_INDEX_TYPE;
import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_ITEM;
import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_PRIVILEGE;
import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_PROGRESS;
@@ -545,6 +549,8 @@ public class PlanExecutor implements IPlanExecutor {
return processShowQueryProcesslist();
case FUNCTIONS:
return processShowFunctions((ShowFunctionsPlan) showPlan);
+ case INDEX:
+ return processShowIndex((ShowIndexPlan) showPlan);
case TRIGGERS:
return processShowTriggers((ShowTriggersPlan) showPlan);
default:
@@ -829,6 +835,35 @@ public class PlanExecutor implements IPlanExecutor {
return listDataSet;
}
+ private QueryDataSet processShowIndex(ShowIndexPlan showPlan) throws QueryProcessException {
+ ListDataSet listDataSet =
+ new ListDataSet(
+ Arrays.asList(
+ new PartialPath(COLUMN_INDEX_SERIES, false),
+ new PartialPath(COLUMN_INDEX_TYPE, false),
+ new PartialPath(COLUMN_INDEX_ATTRIBUTE, false)),
+ Arrays.asList(TSDataType.TEXT, TSDataType.TEXT, TSDataType.TEXT));
+
+ Map<PartialPath, Map<IndexType, IndexInfo>> infos =
+ indexManager.getIndexInfos(showPlan.getPath());
+ infos.forEach(
+ (path, struct) ->
+ struct.forEach(
+ (indexType, info) -> {
+ RowRecord rowRecord = new RowRecord(0); // ignore timestamp
+ rowRecord.addField(Binary.valueOf(path.getFullPath()), TSDataType.TEXT);
+ rowRecord.addField(Binary.valueOf(indexType.toString()), TSDataType.TEXT);
+ rowRecord.addField(Binary.valueOf(info.toStringForShow()), TSDataType.TEXT);
+ listDataSet.putRecord(rowRecord);
+ }));
+
+ listDataSet.sort(
+ (r1, r2) ->
+ String.CASE_INSENSITIVE_ORDER.compare(
+ r1.getFields().get(0).getStringValue(), r2.getFields().get(0).getStringValue()));
+ return listDataSet;
+ }
+
@SuppressWarnings("squid:S3776")
private void appendUDFs(ListDataSet listDataSet, ShowFunctionsPlan showPlan)
throws QueryProcessException {
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowIndexOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowIndexOperator.java
new file mode 100644
index 0000000..2ff21b3
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowIndexOperator.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.qp.logical.sys;
+
+import org.apache.iotdb.db.metadata.PartialPath;
+import org.apache.iotdb.db.qp.constant.SQLConstant;
+
+public class ShowIndexOperator extends ShowOperator {
+
+ private PartialPath prefixPath;
+
+ public ShowIndexOperator() {
+ super(SQLConstant.TOK_SHOW_INDEX);
+ }
+
+ public PartialPath getPrefixPath() {
+ return prefixPath;
+ }
+
+ public void setPrefixPath(PartialPath prefixPath) {
+ this.prefixPath = prefixPath;
+ }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowIndexPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowIndexPlan.java
new file mode 100644
index 0000000..749d7ac
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowIndexPlan.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.qp.physical.sys;
+
+import org.apache.iotdb.db.metadata.PartialPath;
+
+public class ShowIndexPlan extends ShowPlan {
+
+ public ShowIndexPlan(PartialPath prefixPath) {
+ super(ShowContentType.INDEX, prefixPath);
+ }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java
index a77917a..a095398 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java
@@ -114,6 +114,7 @@ public class ShowPlan extends PhysicalPlan {
COUNT_NODES,
MERGE_STATUS,
FUNCTIONS,
+ INDEX,
COUNT_DEVICES,
COUNT_STORAGE_GROUP,
QUERY_PROCESSLIST,
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
index 33ceca0..67ff535 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
@@ -68,6 +68,7 @@ import org.apache.iotdb.db.qp.logical.sys.ShowChildNodesOperator;
import org.apache.iotdb.db.qp.logical.sys.ShowChildPathsOperator;
import org.apache.iotdb.db.qp.logical.sys.ShowDevicesOperator;
import org.apache.iotdb.db.qp.logical.sys.ShowFunctionsOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowIndexOperator;
import org.apache.iotdb.db.qp.logical.sys.ShowMergeStatusOperator;
import org.apache.iotdb.db.qp.logical.sys.ShowOperator;
import org.apache.iotdb.db.qp.logical.sys.ShowStorageGroupOperator;
@@ -183,6 +184,7 @@ import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowChildPathsContext;
import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowDevicesContext;
import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowFlushTaskInfoContext;
import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowFunctionsContext;
+import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowIndexContext;
import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowMergeStatusContext;
import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowQueryProcesslistContext;
import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowStorageGroupContext;
@@ -462,6 +464,15 @@ public class IoTDBSqlVisitor extends SqlBaseBaseVisitor<Operator> {
}
@Override
+ public Operator visitShowIndex(ShowIndexContext ctx) {
+ ShowIndexOperator showIndexOperator = new ShowIndexOperator();
+ if (ctx.prefixPath() != null) {
+ showIndexOperator.setPrefixPath(parsePrefixPath(ctx.prefixPath()));
+ }
+ return showIndexOperator;
+ }
+
+ @Override
public Operator visitCreateTrigger(CreateTriggerContext ctx) {
CreateTriggerOperator createTriggerOperator =
new CreateTriggerOperator(SQLConstant.TOK_TRIGGER_CREATE);
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index 4fddd2d..dde1f6c 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -62,6 +62,7 @@ import org.apache.iotdb.db.qp.logical.sys.ShowChildNodesOperator;
import org.apache.iotdb.db.qp.logical.sys.ShowChildPathsOperator;
import org.apache.iotdb.db.qp.logical.sys.ShowDevicesOperator;
import org.apache.iotdb.db.qp.logical.sys.ShowFunctionsOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowIndexOperator;
import org.apache.iotdb.db.qp.logical.sys.ShowStorageGroupOperator;
import org.apache.iotdb.db.qp.logical.sys.ShowTTLOperator;
import org.apache.iotdb.db.qp.logical.sys.ShowTimeSeriesOperator;
@@ -112,6 +113,7 @@ import org.apache.iotdb.db.qp.physical.sys.ShowChildNodesPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowChildPathsPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowFunctionsPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowIndexPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowMergeStatusPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowPlan.ShowContentType;
@@ -332,6 +334,8 @@ public class PhysicalGenerator {
return new ShowQueryProcesslistPlan(ShowContentType.QUERY_PROCESSLIST);
case SQLConstant.TOK_SHOW_FUNCTIONS:
return new ShowFunctionsPlan(((ShowFunctionsOperator) operator).showTemporary());
+ case SQLConstant.TOK_SHOW_INDEX:
+ return new ShowIndexPlan(((ShowIndexOperator) operator).getPrefixPath());
case SQLConstant.TOK_SHOW_TRIGGERS:
return new ShowTriggersPlan(((ShowTriggersOperator) operator).getPath());
default:
diff --git a/server/src/test/java/org/apache/iotdb/db/index/it/ELBIndexReadIT.java b/server/src/test/java/org/apache/iotdb/db/index/it/ELBIndexReadIT.java
index 07105ac..df85e78 100644
--- a/server/src/test/java/org/apache/iotdb/db/index/it/ELBIndexReadIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/index/it/ELBIndexReadIT.java
@@ -89,17 +89,20 @@ public class ELBIndexReadIT {
System.out.println(String.format("SET STORAGE GROUP TO %s", storageGroupWhole));
statement.execute(
String.format("CREATE TIMESERIES %s WITH DATATYPE=FLOAT,ENCODING=PLAIN", speed1));
- System.out.println(String.format("CREATE TIMESERIES %s WITH DATATYPE=FLOAT,ENCODING=PLAIN", speed1));
+ System.out.println(
+ String.format("CREATE TIMESERIES %s WITH DATATYPE=FLOAT,ENCODING=PLAIN", speed1));
for (int i = 0; i < wholeSize; i++) {
String wholePath = String.format(directionPattern, i);
statement.execute(
String.format("CREATE TIMESERIES %s WITH DATATYPE=FLOAT,ENCODING=PLAIN", wholePath));
- System.out.println(String.format("CREATE TIMESERIES %s WITH DATATYPE=FLOAT,ENCODING=PLAIN", wholePath));
+ System.out.println(
+ String.format("CREATE TIMESERIES %s WITH DATATYPE=FLOAT,ENCODING=PLAIN", wholePath));
}
statement.execute(
String.format("CREATE INDEX ON %s WITH INDEX=%s, BLOCK_SIZE=%d", indexSub, ELB_INDEX, 5));
- System.out.println(String.format("CREATE INDEX ON %s WITH INDEX=%s, BLOCK_SIZE=%d", indexSub, ELB_INDEX, 5));
+ System.out.println(
+ String.format("CREATE INDEX ON %s WITH INDEX=%s, BLOCK_SIZE=%d", indexSub, ELB_INDEX, 5));
TVList subInput = TVListAllocator.getInstance().allocate(TSDataType.DOUBLE);
for (int i = 0; i < subLength; i++) {
@@ -214,7 +217,7 @@ public class ELBIndexReadIT {
sb.append("\n");
}
System.out.println(sb);
-// Assert.assertEquals(gt, sb.toString());
+ // Assert.assertEquals(gt, sb.toString());
}
} catch (Exception e) {
e.printStackTrace();
@@ -226,7 +229,7 @@ public class ELBIndexReadIT {
public void checkRead() throws ClassNotFoundException {
Class.forName(Config.JDBC_DRIVER_NAME);
try (Connection connection =
- DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+ DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
String querySQL =
diff --git a/server/src/test/java/org/apache/iotdb/db/index/it/MMHHIndexReadIT.java b/server/src/test/java/org/apache/iotdb/db/index/it/MMHHIndexReadIT.java
index 0b257b2..ecef093 100644
--- a/server/src/test/java/org/apache/iotdb/db/index/it/MMHHIndexReadIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/index/it/MMHHIndexReadIT.java
@@ -90,9 +90,9 @@ public class MMHHIndexReadIT {
wholeDim,
hashLength,
MODEL_PATH,
-// "\"/Users/kangrong/code/github/deep-learning/hash_journal/TAH_project/src/mmhh.pt\""
- "\"resources/index/mmhh.pt\""
- ));
+ //
+ // "\"/Users/kangrong/code/github/deep-learning/hash_journal/TAH_project/src/mmhh.pt\""
+ "\"resources/index/mmhh.pt\""));
// String modelPath =
// "/Users/kangrong/code/github/deep-learning/hash_journal/TAH_project/src/mmhh.pt";
String modelPath = "src/test/resources/index/mmhh.pt";