This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 47689551c50 Support the pushdown of between predicate to schema region
47689551c50 is described below
commit 47689551c5044a8e67e6c2529826077e53377a77
Author: Caideyipi <[email protected]>
AuthorDate: Mon Sep 9 14:22:00 2024 +0800
Support the pushdown of between predicate to schema region
---
.../iotdb/relational/it/schema/IoTDBDeviceIT.java | 5 +-
.../PredicatePushIntoMetadataChecker.java | 11 +++-
.../schema/CheckSchemaPredicateVisitor.java | 6 +-
.../ConvertSchemaPredicateToFilterVisitor.java | 23 +++++--
.../schema/ExtractPredicateColumnNameVisitor.java | 27 +++++----
.../plan/relational/metadata/Metadata.java | 35 ++++++-----
.../metadata/fetcher/SchemaPredicateUtil.java | 70 +++++++++++++---------
.../metric/SchemaRegionCachedMetric.java | 2 +-
.../rescon/MemSchemaRegionStatistics.java | 31 +++++-----
.../schemaregion/impl/SchemaRegionPBTreeImpl.java | 2 +-
.../plan/relational/analyzer/AnalyzerTest.java | 15 +++++
11 files changed, 144 insertions(+), 83 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDeviceIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDeviceIT.java
index 63cb87ff350..c4f8bcafb29 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDeviceIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDeviceIT.java
@@ -89,7 +89,8 @@ public class IoTDBDeviceIT {
// Test show / count with where expression
// Test AND
TestUtils.assertResultSetEqual(
- statement.executeQuery("show devices from table0 where region_id =
'1' and model = 'A'"),
+ statement.executeQuery(
+ "show devices from table0 where region_id between '0' and '2'
and model = 'A'"),
"region_id,plant_id,device_id,model,",
Collections.singleton("1,5,3,A,"));
// Test OR
@@ -114,7 +115,7 @@ public class IoTDBDeviceIT {
Collections.singleton("1,"));
TestUtils.assertResultSetEqual(
statement.executeQuery(
- "count devices from table0 where substring(region_id,
cast((cast(plant_id as int32) - 4) as int32 ) , 1) < plant_id"),
+ "count devices from table0 where substring(region_id,
cast((cast(plant_id as int32) - 4) as int32), 1) < plant_id"),
"count(devices),",
Collections.singleton("1,"));
// Test get from cache
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/PredicatePushIntoMetadataChecker.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/PredicatePushIntoMetadataChecker.java
index c01ba634bfd..b4dd31d74fc 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/PredicatePushIntoMetadataChecker.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/PredicatePushIntoMetadataChecker.java
@@ -106,8 +106,11 @@ public class PredicatePushIntoMetadataChecker extends
PredicateVisitor<Boolean,
@Override
protected Boolean visitComparisonExpression(final ComparisonExpression node,
final Void context) {
- return (isIdOrAttributeColumn(node.getLeft()) ||
isStringLiteral(node.getLeft()))
- && (isIdOrAttributeColumn(node.getRight()) ||
isStringLiteral(node.getRight()));
+ return isIdOrAttributeOrLiteral(node.getLeft()) &&
isIdOrAttributeOrLiteral(node.getRight());
+ }
+
+ private boolean isIdOrAttributeOrLiteral(final Expression expression) {
+ return isIdOrAttributeColumn(expression) || isStringLiteral(expression);
}
private boolean isIdOrAttributeColumn(final Expression expression) {
@@ -138,7 +141,9 @@ public class PredicatePushIntoMetadataChecker extends
PredicateVisitor<Boolean,
@Override
protected Boolean visitBetweenPredicate(final BetweenPredicate node, final
Void context) {
- return Boolean.FALSE;
+ return isIdOrAttributeOrLiteral(node.getValue())
+ && isIdOrAttributeOrLiteral(node.getMin())
+ && isIdOrAttributeOrLiteral(node.getMax());
}
public static boolean isStringLiteral(final Expression expression) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/CheckSchemaPredicateVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/CheckSchemaPredicateVisitor.java
index 154facb7b43..8efdfd028e5 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/CheckSchemaPredicateVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/CheckSchemaPredicateVisitor.java
@@ -38,6 +38,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.NotExpression;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.NullIfExpression;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SearchedCaseExpression;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SimpleCaseExpression;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SymbolReference;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.TableExpressionType;
import org.slf4j.Logger;
@@ -136,7 +137,10 @@ public class CheckSchemaPredicateVisitor
@Override
protected Boolean visitBetweenPredicate(final BetweenPredicate node, final
Context context) {
- return visitExpression(node, context);
+ return node.getValue() instanceof SymbolReference
+ && (node.getMin() instanceof SymbolReference
+ || node.getMax() instanceof SymbolReference)
+ || processColumn(node, context);
}
private boolean processColumn(final Expression node, final Context context) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/ConvertSchemaPredicateToFilterVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/ConvertSchemaPredicateToFilterVisitor.java
index ef275ed9921..6130f507215 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/ConvertSchemaPredicateToFilterVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/ConvertSchemaPredicateToFilterVisitor.java
@@ -126,38 +126,49 @@ public class ConvertSchemaPredicateToFilterVisitor
final ComparisonExpression node, final Context context) {
final String columnName;
final String value;
+ final boolean isOrdered;
if (node.getLeft() instanceof Literal) {
value = ((StringLiteral) (node.getLeft())).getValue();
checkArgument(isSymbolReference(node.getRight()));
columnName = ((SymbolReference) (node.getRight())).getName();
+ isOrdered = false;
} else {
value = ((StringLiteral) (node.getRight())).getValue();
checkArgument(isSymbolReference(node.getLeft()));
columnName = ((SymbolReference) (node.getLeft())).getName();
+ isOrdered = true;
}
return wrapIdOrAttributeFilter(
node.getOperator() == ComparisonExpression.Operator.EQUAL
? new PreciseFilter(value)
: new ComparisonFilter(
- convertExpressionOperator2SchemaOperator(node.getOperator()),
value),
+ convertExpressionOperator2SchemaOperator(node.getOperator(),
isOrdered), value),
columnName,
context);
}
private ComparisonFilter.Operator convertExpressionOperator2SchemaOperator(
- final ComparisonExpression.Operator operator) {
+ final ComparisonExpression.Operator operator, final boolean isOrdered) {
switch (operator) {
case NOT_EQUAL:
return ComparisonFilter.Operator.NOT_EQUAL;
case LESS_THAN:
- return ComparisonFilter.Operator.LESS_THAN;
+ return isOrdered
+ ? ComparisonFilter.Operator.LESS_THAN
+ : ComparisonFilter.Operator.GREATER_THAN;
case LESS_THAN_OR_EQUAL:
- return ComparisonFilter.Operator.LESS_THAN_OR_EQUAL;
+ return isOrdered
+ ? ComparisonFilter.Operator.LESS_THAN_OR_EQUAL
+ : ComparisonFilter.Operator.GREATER_THAN_OR_EQUAL;
case GREATER_THAN:
- return ComparisonFilter.Operator.GREATER_THAN;
+ return isOrdered
+ ? ComparisonFilter.Operator.GREATER_THAN
+ : ComparisonFilter.Operator.LESS_THAN;
case GREATER_THAN_OR_EQUAL:
- return ComparisonFilter.Operator.GREATER_THAN_OR_EQUAL;
+ return isOrdered
+ ? ComparisonFilter.Operator.GREATER_THAN_OR_EQUAL
+ : ComparisonFilter.Operator.LESS_THAN_OR_EQUAL;
default:
throw new UnsupportedOperationException("Unsupported operator " +
operator);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/ExtractPredicateColumnNameVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/ExtractPredicateColumnNameVisitor.java
index 004f4166340..92cb4d6408d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/ExtractPredicateColumnNameVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/ExtractPredicateColumnNameVisitor.java
@@ -77,13 +77,23 @@ public class ExtractPredicateColumnNameVisitor extends
PredicateVisitor<String,
@Override
protected String visitComparisonExpression(final ComparisonExpression node,
final Void context) {
- final String columnName;
- if (node.getLeft() instanceof Literal) {
- columnName = node.getRight().accept(this, context);
- } else {
- columnName = node.getLeft().accept(this, context);
+ return node.getLeft() instanceof Literal
+ ? node.getRight().accept(this, context)
+ : node.getLeft().accept(this, context);
+ }
+
+ @Override
+ protected String visitBetweenPredicate(final BetweenPredicate node, final
Void context) {
+ if (node.getValue() instanceof SymbolReference) {
+ return node.getValue().accept(this, context);
+ }
+ if (node.getMin() instanceof SymbolReference) {
+ return node.getMin().accept(this, context);
+ }
+ if (node.getMax() instanceof SymbolReference) {
+ return node.getMax().accept(this, context);
}
- return columnName;
+ return null;
}
@Override
@@ -112,11 +122,6 @@ public class ExtractPredicateColumnNameVisitor extends
PredicateVisitor<String,
return null;
}
- @Override
- protected String visitBetweenPredicate(final BetweenPredicate node, final
Void context) {
- return null;
- }
-
private static class ExtractPredicateColumnVisitorContainer {
private static final ExtractPredicateColumnNameVisitor instance =
new ExtractPredicateColumnNameVisitor();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
index cda9925825f..01fd54e206b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
@@ -40,7 +40,7 @@ import java.util.Optional;
public interface Metadata {
- boolean tableExists(QualifiedObjectName name);
+ boolean tableExists(final QualifiedObjectName name);
/**
* Return table schema definition for the specified table handle. Table
schema definition is a set
@@ -48,19 +48,20 @@ public interface Metadata {
*
* @throws RuntimeException if table handle is no longer valid
*/
- Optional<TableSchema> getTableSchema(SessionInfo session,
QualifiedObjectName name);
+ Optional<TableSchema> getTableSchema(final SessionInfo session, final
QualifiedObjectName name);
- Type getOperatorReturnType(OperatorType operatorType, List<? extends Type>
argumentTypes)
+ Type getOperatorReturnType(
+ final OperatorType operatorType, final List<? extends Type>
argumentTypes)
throws OperatorNotFoundException;
- Type getFunctionReturnType(String functionName, List<? extends Type>
argumentTypes);
+ Type getFunctionReturnType(final String functionName, final List<? extends
Type> argumentTypes);
boolean isAggregationFunction(
- SessionInfo session, String functionName, AccessControl accessControl);
+ final SessionInfo session, final String functionName, final
AccessControl accessControl);
- Type getType(TypeSignature signature) throws TypeNotFoundException;
+ Type getType(final TypeSignature signature) throws TypeNotFoundException;
- boolean canCoerce(Type from, Type to);
+ boolean canCoerce(final Type from, final Type to);
IPartitionFetcher getPartitionFetcher();
@@ -103,7 +104,10 @@ public interface Metadata {
* are not STRING or Category, Type of any missing ColumnSchema is null
*/
Optional<TableSchema> validateTableHeaderSchema(
- String database, TableSchema tableSchema, MPPQueryContext context,
boolean allowCreateTable);
+ final String database,
+ final TableSchema tableSchema,
+ final MPPQueryContext context,
+ final boolean allowCreateTable);
/**
* This method is used for table device validation and should be invoked
after column validation.
@@ -115,7 +119,8 @@ public interface Metadata {
*
* <p>If validation failed, a SemanticException will be thrown.
*/
- void validateDeviceSchema(ITableDeviceSchemaValidation schemaValidation,
MPPQueryContext context);
+ void validateDeviceSchema(
+ final ITableDeviceSchemaValidation schemaValidation, final
MPPQueryContext context);
/**
* Get or create data partition, used in cluster write scenarios. if
enableAutoCreateSchema is
@@ -125,7 +130,7 @@ public interface Metadata {
* @param userName
*/
default DataPartition getOrCreateDataPartition(
- List<DataPartitionQueryParam> dataPartitionQueryParams, String userName)
{
+ final List<DataPartitionQueryParam> dataPartitionQueryParams, final
String userName) {
throw new UnsupportedOperationException();
}
@@ -139,7 +144,7 @@ public interface Metadata {
* <p>The device id shall be [table, seg1, ....]
*/
SchemaPartition getOrCreateSchemaPartition(
- String database, List<IDeviceID> deviceIDList, String userName);
+ final String database, final List<IDeviceID> deviceIDList, final String
userName);
/**
* For data query with completed id.
@@ -148,7 +153,7 @@ public interface Metadata {
*
* <p>The device id shall be [table, seg1, ....]
*/
- SchemaPartition getSchemaPartition(String database, List<IDeviceID>
deviceIDList);
+ SchemaPartition getSchemaPartition(final String database, final
List<IDeviceID> deviceIDList);
/**
* For data query with partial device id conditions.
@@ -157,7 +162,7 @@ public interface Metadata {
*
* <p>The device id shall be [table, seg1, ....]
*/
- SchemaPartition getSchemaPartition(String database);
+ SchemaPartition getSchemaPartition(final String database);
// ======================== Table Model Data Partition Interface
========================
/**
@@ -167,7 +172,7 @@ public interface Metadata {
* @param sgNameToQueryParamsMap database name -> the list of
DataPartitionQueryParams
*/
DataPartition getDataPartition(
- String database, List<DataPartitionQueryParam> sgNameToQueryParamsMap);
+ final String database, final List<DataPartitionQueryParam>
sgNameToQueryParamsMap);
/**
* Get data partition, used in query scenarios which contains time filter
like: time < XX or time
@@ -177,5 +182,5 @@ public interface Metadata {
* @return sgNameToQueryParamsMap database name -> the list of
DataPartitionQueryParams
*/
DataPartition getDataPartitionWithUnclosedTimeRange(
- String database, List<DataPartitionQueryParam> sgNameToQueryParamsMap);
+ final String database, final List<DataPartitionQueryParam>
sgNameToQueryParamsMap);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/SchemaPredicateUtil.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/SchemaPredicateUtil.java
index b470a2465b1..06f6c3af5cf 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/SchemaPredicateUtil.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/SchemaPredicateUtil.java
@@ -31,11 +31,10 @@ import
org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import
org.apache.iotdb.db.queryengine.plan.relational.analyzer.predicate.schema.CheckSchemaPredicateVisitor;
import
org.apache.iotdb.db.queryengine.plan.relational.analyzer.predicate.schema.ConvertSchemaPredicateToFilterVisitor;
import org.apache.iotdb.db.queryengine.plan.relational.planner.ir.IrUtils;
+import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.BetweenPredicate;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ComparisonExpression;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Literal;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LogicalExpression;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SymbolReference;
import org.apache.tsfile.utils.Pair;
@@ -44,6 +43,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.stream.Collectors;
public class SchemaPredicateUtil {
@@ -63,18 +63,52 @@ public class SchemaPredicateUtil {
final CheckSchemaPredicateVisitor.Context context =
new CheckSchemaPredicateVisitor.Context(table, queryContext,
isDirectDeviceQuery);
for (final Expression expression : expressionList) {
- if (expression == null) {
+ if (Objects.isNull(expression)) {
continue;
}
- if (Boolean.TRUE.equals(expression.accept(visitor, context))) {
- idFuzzyList.add(expression);
- } else {
- idDeterminedList.add(expression);
+ if (expression instanceof BetweenPredicate) {
+ final BetweenPredicate predicate = (BetweenPredicate) expression;
+
+ // Separate the between predicate to simply the logic and to handle
cases like
+ // '2' between id1 and attr2 / id1 between '2' and attr1
+ separateExpression(
+ new ComparisonExpression(
+ ComparisonExpression.Operator.LESS_THAN_OR_EQUAL,
+ predicate.getMin(),
+ predicate.getValue()),
+ idDeterminedList,
+ idFuzzyList,
+ visitor,
+ context);
+ separateExpression(
+ new ComparisonExpression(
+ ComparisonExpression.Operator.LESS_THAN_OR_EQUAL,
+ predicate.getValue(),
+ predicate.getMax()),
+ idDeterminedList,
+ idFuzzyList,
+ visitor,
+ context);
+ continue;
}
+ separateExpression(expression, idDeterminedList, idFuzzyList, visitor,
context);
}
return new Pair<>(idDeterminedList, idFuzzyList);
}
+ private static void separateExpression(
+ final Expression expression,
+ final List<Expression> idDeterminedList,
+ final List<Expression> idFuzzyList,
+ final CheckSchemaPredicateVisitor visitor,
+ final CheckSchemaPredicateVisitor.Context context) {
+ if (Boolean.TRUE.equals(expression.accept(visitor, context))) {
+ idFuzzyList.add(expression);
+ } else {
+ idDeterminedList.add(expression);
+ }
+ }
+
// input and-concat filter list
// return or concat filter list, inner which all filter is and concat
// e.g. (a OR b) AND (c OR d) -> (a AND c) OR (a AND d) OR (b AND c) OR (b
AND d)
@@ -91,10 +125,7 @@ public class SchemaPredicateUtil {
.map(IrUtils::extractOrPredicatesWithInExpanded)
.collect(Collectors.toList());
final int orSize = orConcatList.size();
- int remainingCaseNum = 1;
- for (final List<Expression> filterList : orConcatList) {
- remainingCaseNum *= filterList.size();
- }
+ int remainingCaseNum = orConcatList.stream().map(List::size).reduce(1, (a,
b) -> a * b);
final List<Map<Integer, List<SchemaFilter>>> result = new ArrayList<>();
final int[] indexes = new int[orSize]; // index count, each case
represents one possible result
boolean hasConflictFilter;
@@ -182,23 +213,6 @@ public class SchemaPredicateUtil {
return true;
}
- public static String getColumnName(Expression expression) {
- ComparisonExpression node = (ComparisonExpression) expression;
- String columnName;
- if (node.getLeft() instanceof Literal) {
- if (!(node.getRight() instanceof SymbolReference)) {
- throw new IllegalStateException("Can only be SymbolReference, now is "
+ node.getRight());
- }
- columnName = ((SymbolReference) (node.getRight())).getName();
- } else {
- if (!(node.getLeft() instanceof SymbolReference)) {
- throw new IllegalStateException("Can only be SymbolReference, now is "
+ node.getLeft());
- }
- columnName = ((SymbolReference) (node.getLeft())).getName();
- }
- return columnName;
- }
-
static List<Integer> extractIdSingleMatchExpressionCases(
final List<Map<Integer, List<SchemaFilter>>> index2FilterMapList,
final TsTable tableInstance) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaRegionCachedMetric.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaRegionCachedMetric.java
index 92024799aa7..91ed7a54eec 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaRegionCachedMetric.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaRegionCachedMetric.java
@@ -151,7 +151,7 @@ public class SchemaRegionCachedMetric implements
ISchemaRegionMetric {
Metric.SCHEMA_REGION.toString(),
MetricLevel.IMPORTANT,
regionStatistics,
- CachedSchemaRegionStatistics::getMlogLength,
+ CachedSchemaRegionStatistics::getMLogLength,
Tag.NAME.toString(),
MLOG_LENGTH,
Tag.REGION.toString(),
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java
index be960b3807b..eaec23ebcdc 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java
@@ -38,9 +38,10 @@ public class MemSchemaRegionStatistics implements
ISchemaRegionStatistics {
private final AtomicLong viewNumber = new AtomicLong(0);
private final Map<Integer, Integer> templateUsage = new
ConcurrentHashMap<>();
- private long mlogLength = 0;
+ private long mLogLength = 0;
- public MemSchemaRegionStatistics(int schemaRegionId, ISchemaEngineStatistics
engineStatistics) {
+ public MemSchemaRegionStatistics(
+ final int schemaRegionId, final ISchemaEngineStatistics
engineStatistics) {
this.schemaEngineStatistics =
engineStatistics.getAsMemSchemaEngineStatistics();
this.schemaRegionId = schemaRegionId;
}
@@ -50,18 +51,18 @@ public class MemSchemaRegionStatistics implements
ISchemaRegionStatistics {
return schemaEngineStatistics.isAllowToCreateNewSeries();
}
- public void requestMemory(long size) {
+ public void requestMemory(final long size) {
memoryUsage.addAndGet(size);
schemaEngineStatistics.requestMemory(size);
}
- public void releaseMemory(long size) {
+ public void releaseMemory(final long size) {
memoryUsage.addAndGet(-size);
schemaEngineStatistics.releaseMemory(size);
}
@Override
- public long getSeriesNumber(boolean includeView) {
+ public long getSeriesNumber(final boolean includeView) {
if (includeView) {
return viewNumber.get() + measurementNumber.get() +
getTemplateSeriesNumber();
} else {
@@ -69,7 +70,7 @@ public class MemSchemaRegionStatistics implements
ISchemaRegionStatistics {
}
}
- public void addMeasurement(long addedNum) {
+ public void addMeasurement(final long addedNum) {
measurementNumber.addAndGet(addedNum);
schemaEngineStatistics.addMeasurement(addedNum);
}
@@ -79,12 +80,12 @@ public class MemSchemaRegionStatistics implements
ISchemaRegionStatistics {
schemaEngineStatistics.deleteMeasurement(deletedNum);
}
- public void addView(long addedNum) {
+ public void addView(final long addedNum) {
viewNumber.addAndGet(addedNum);
schemaEngineStatistics.addView(addedNum);
}
- public void deleteView(long deletedNum) {
+ public void deleteView(final long deletedNum) {
viewNumber.addAndGet(-deletedNum);
schemaEngineStatistics.deleteView(deletedNum);
}
@@ -111,7 +112,7 @@ public class MemSchemaRegionStatistics implements
ISchemaRegionStatistics {
@Override
public long getTemplateSeriesNumber() {
- ClusterTemplateManager clusterTemplateManager =
ClusterTemplateManager.getInstance();
+ final ClusterTemplateManager clusterTemplateManager =
ClusterTemplateManager.getInstance();
return templateUsage.entrySet().stream()
.mapToLong(
i -> {
@@ -121,12 +122,12 @@ public class MemSchemaRegionStatistics implements
ISchemaRegionStatistics {
.sum();
}
- public void activateTemplate(int templateId) {
+ public void activateTemplate(final int templateId) {
templateUsage.compute(templateId, (k, v) -> (v == null) ? 1 : v + 1);
schemaEngineStatistics.activateTemplate(templateId);
}
- public void deactivateTemplate(int templateId) {
+ public void deactivateTemplate(final int templateId) {
templateUsage.compute(templateId, (k, v) -> (v == null || v == 1) ? null :
v - 1);
schemaEngineStatistics.deactivateTemplate(templateId, 1);
}
@@ -141,12 +142,12 @@ public class MemSchemaRegionStatistics implements
ISchemaRegionStatistics {
return schemaRegionId;
}
- public void setMlogLength(long mlogLength) {
- this.mlogLength = mlogLength;
+ public void setMLogLength(final long mLogLength) {
+ this.mLogLength = mLogLength;
}
- public long getMlogLength() {
- return mlogLength;
+ public long getMLogLength() {
+ return mLogLength;
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java
index 12fcadc3ccc..cce4f0384be 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java
@@ -330,7 +330,7 @@ public class SchemaRegionPBTreeImpl implements
ISchemaRegion {
public void writeToMLog(ISchemaRegionPlan schemaRegionPlan) throws
IOException {
if (usingMLog && !isRecovering) {
logWriter.write(schemaRegionPlan);
- regionStatistics.setMlogLength(logWriter.position());
+ regionStatistics.setMLogLength(logWriter.position());
}
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
index 365628f7063..433ebe797a4 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
@@ -672,6 +672,21 @@ public class AnalyzerTest {
tableScanNode = (TableScanNode) rootNode.getChildren().get(0);
assertNull(tableScanNode.getPushDownPredicate());
assertFalse(tableScanNode.getTimePredicate().isPresent());
+
+ // 7. Between
+ sql = "SELECT * FROM table1 WHERE tag1 Between attr1 and '2'";
+ context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
+ analysis = analyzeSQL(sql, metadata, context);
+ logicalQueryPlan =
+ new TableLogicalPlanner(context, metadata, sessionInfo,
WarningCollector.NOOP)
+ .plan(analysis);
+ rootNode = logicalQueryPlan.getRootNode();
+
+ assertFalse(rootNode.getChildren().get(0) instanceof FilterNode);
+ assertTrue(rootNode.getChildren().get(0) instanceof TableScanNode);
+ tableScanNode = (TableScanNode) rootNode.getChildren().get(0);
+ assertNull(tableScanNode.getPushDownPredicate());
+ assertFalse(tableScanNode.getTimePredicate().isPresent());
}
@Test