You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2021/11/24 07:53:21 UTC
[iotdb] 02/03: p selectinto
This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch xianyi
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 048b4cea7d86990326ee2fc18eae047b0b5e3687
Author: Steve Yurong Su <ro...@apache.org>
AuthorDate: Wed Nov 24 11:34:59 2021 +0800
p selectinto
---
.../org/apache/iotdb/db/service/TSServiceImpl.java | 77 ++++++++++++++++++++++
1 file changed, 77 insertions(+)
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 b8a0a6b..9ca4fd0 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
@@ -132,6 +132,14 @@ import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
+import org.apache.iotdb.tsfile.read.expression.IExpression;
+import org.apache.iotdb.tsfile.read.expression.impl.GlobalTimeExpression;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.apache.iotdb.tsfile.read.filter.operator.AndFilter;
+import org.apache.iotdb.tsfile.read.filter.operator.Gt;
+import org.apache.iotdb.tsfile.read.filter.operator.GtEq;
+import org.apache.iotdb.tsfile.read.filter.operator.Lt;
+import org.apache.iotdb.tsfile.read.filter.operator.LtEq;
import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
import java.io.IOException;
@@ -1011,6 +1019,75 @@ public class TSServiceImpl extends BasicServiceProvider implements TSIService.If
String prefix = statement.split("where")[0] + " where ";
+ IExpression iExpression = udtfPlan.getExpression();
+ if (iExpression instanceof GlobalTimeExpression) {
+ GlobalTimeExpression globalTimeExpression = (GlobalTimeExpression) iExpression;
+ if (globalTimeExpression.getFilter() instanceof AndFilter) {
+ AndFilter andFilter = (AndFilter) globalTimeExpression.getFilter();
+
+ if ((andFilter.getLeft() instanceof Lt || andFilter.getLeft() instanceof LtEq)
+ && (andFilter.getRight() instanceof Gt || andFilter.getRight() instanceof GtEq)) {
+ Filter filter = andFilter.getLeft();
+ andFilter.setLeft(andFilter.getRight());
+ andFilter.setRight(filter);
+ }
+
+ final long dayTimeDelta = 24 * 60 * 60 * 1000;
+
+ if (andFilter.getLeft() instanceof Gt && andFilter.getRight() instanceof Lt) {
+ long left = (Long) ((Gt) andFilter.getLeft()).getValue();
+ long right = (Long) ((Lt) andFilter.getRight()).getValue();
+ boolean first = true;
+
+ while (left < right) {
+ if (first) {
+ first = false;
+ statements.add(prefix + " time>" + left + " and time<" + (left + dayTimeDelta));
+ } else {
+ statements.add(prefix + " time>=" + left + " and time<" + (left + dayTimeDelta));
+ }
+ left += dayTimeDelta;
+ }
+ }
+
+ if (andFilter.getLeft() instanceof GtEq && andFilter.getRight() instanceof Lt) {
+ long left = (Long) ((GtEq) andFilter.getLeft()).getValue();
+ long right = (Long) ((Lt) andFilter.getRight()).getValue();
+
+ while (left < right) {
+ statements.add(prefix + " time>=" + left + " and time<" + (left + dayTimeDelta));
+ left += dayTimeDelta;
+ }
+ }
+
+ if (andFilter.getLeft() instanceof Gt && andFilter.getRight() instanceof LtEq) {
+ long left = (Long) ((Gt) andFilter.getLeft()).getValue();
+ long right = (Long) ((LtEq) andFilter.getRight()).getValue();
+
+ while (left <= right) {
+ statements.add(prefix + " time>" + left + " and time<=" + (left + dayTimeDelta));
+ left += dayTimeDelta;
+ }
+ }
+
+ if (andFilter.getLeft() instanceof GtEq && andFilter.getRight() instanceof LtEq) {
+ long left = (Long) ((GtEq) andFilter.getLeft()).getValue();
+ long right = (Long) ((LtEq) andFilter.getRight()).getValue();
+ boolean first = true;
+
+ while (left < right) {
+ if (first) {
+ first = false;
+ statements.add(prefix + " time>=" + left + " and time<=" + (left + dayTimeDelta));
+ } else {
+ statements.add(prefix + " time>" + left + " and time<=" + (left + dayTimeDelta));
+ }
+ left += dayTimeDelta;
+ }
+ }
+ }
+ }
+
return statements;
}