This is an automated email from the ASF dual-hosted git repository.

rong pushed a commit to branch nested-operations
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 8a492c2fc4dfbff72abba73f4ffc7d9336d3fa2b
Author: Steve Yurong Su <[email protected]>
AuthorDate: Wed Sep 1 18:26:17 2021 +0800

    DAG builder
---
 .../iotdb/db/query/expression/Expression.java      | 12 ++++--
 .../expression/binary/AdditionExpression.java      | 10 +++++
 .../query/expression/binary/BinaryExpression.java  | 43 ++++++++++++++++------
 .../expression/binary/DivisionExpression.java      | 10 +++++
 .../query/expression/binary/ModuloExpression.java  |  9 +++++
 .../binary/MultiplicationExpression.java           | 10 +++++
 .../expression/binary/SubtractionExpression.java   | 10 +++++
 .../query/expression/unary/FunctionExpression.java | 28 +++++++-------
 .../query/expression/unary/NegationExpression.java | 32 +++++++++++-----
 .../query/expression/unary/TimeSeriesOperand.java  | 23 +++++++++---
 .../udf/core/builder/LayerPointReaderBuilder.java  | 22 -----------
 .../query/udf/core/builder/TransformerBuilder.java | 41 ---------------------
 .../udf/core/{builder => layer}/DAGBuilder.java    | 32 +++++++---------
 13 files changed, 158 insertions(+), 124 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java 
b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
index 43f792a..9dd75bd 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
@@ -20,9 +20,12 @@
 package org.apache.iotdb.db.query.expression;
 
 import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
+import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
 import org.apache.iotdb.db.qp.utils.WildcardsRemover;
-import org.apache.iotdb.db.query.udf.core.builder.TransformerBuilder;
+import org.apache.iotdb.db.query.udf.core.layer.InputLayer;
+import org.apache.iotdb.db.query.udf.core.layer.IntermediateLayer;
 
 import java.util.List;
 import java.util.Map;
@@ -48,8 +51,11 @@ public abstract class Expression {
 
   public abstract void collectPaths(Set<PartialPath> pathSet);
 
-  public abstract void constructTransformerBuilder(
-      Map<Expression, TransformerBuilder> expressionTransformerBuilderMap);
+  public abstract IntermediateLayer constructIntermediateLayer(
+      UDTFPlan udtfPlan,
+      InputLayer inputLayer,
+      Map<Expression, IntermediateLayer> expressionIntermediateLayerMap)
+      throws QueryProcessException;
 
   public String getExpressionString() {
     if (expressionString == null) {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
 
b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
index 5500ba4..3aca060 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
@@ -20,6 +20,9 @@
 package org.apache.iotdb.db.query.expression.binary;
 
 import org.apache.iotdb.db.query.expression.Expression;
+import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import 
org.apache.iotdb.db.query.udf.core.transformer.ArithmeticAdditionTransformer;
+import 
org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
 
 public class AdditionExpression extends BinaryExpression {
 
@@ -28,6 +31,13 @@ public class AdditionExpression extends BinaryExpression {
   }
 
   @Override
+  protected ArithmeticBinaryTransformer constructTransformer(
+      LayerPointReader leftParentLayerPointReader, LayerPointReader 
rightParentLayerPointReader) {
+    return new ArithmeticAdditionTransformer(
+        leftParentLayerPointReader, rightParentLayerPointReader);
+  }
+
+  @Override
   protected String operator() {
     return "+";
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
 
b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
index 36e31d5..4d52793 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
@@ -20,10 +20,15 @@
 package org.apache.iotdb.db.query.expression.binary;
 
 import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
+import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
 import org.apache.iotdb.db.qp.utils.WildcardsRemover;
 import org.apache.iotdb.db.query.expression.Expression;
-import org.apache.iotdb.db.query.udf.core.builder.TransformerBuilder;
+import org.apache.iotdb.db.query.udf.core.layer.InputLayer;
+import org.apache.iotdb.db.query.udf.core.layer.IntermediateLayer;
+import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import 
org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -105,21 +110,35 @@ public abstract class BinaryExpression extends Expression 
{
   }
 
   @Override
-  public void constructTransformerBuilder(
-      Map<Expression, TransformerBuilder> expressionTransformerBuilderMap) {
-    if (expressionTransformerBuilderMap.containsKey(this)) {
-      return;
+  public IntermediateLayer constructIntermediateLayer(
+      UDTFPlan udtfPlan,
+      InputLayer inputLayer,
+      Map<Expression, IntermediateLayer> expressionIntermediateLayerMap)
+      throws QueryProcessException {
+    if (!expressionIntermediateLayerMap.containsKey(this)) {
+      IntermediateLayer leftParentIntermediateLayer =
+          leftExpression.constructIntermediateLayer(
+              udtfPlan, inputLayer, expressionIntermediateLayerMap);
+      IntermediateLayer rightParentIntermediateLayer =
+          rightExpression.constructIntermediateLayer(
+              udtfPlan, inputLayer, expressionIntermediateLayerMap);
+
+      expressionIntermediateLayerMap.put(
+          this,
+          new IntermediateLayer(
+              constructTransformer(
+                  leftParentIntermediateLayer.constructPointReader(),
+                  rightParentIntermediateLayer.constructPointReader()),
+              -1,
+              -1));
     }
 
-    
leftExpression.constructTransformerBuilder(expressionTransformerBuilderMap);
-    
rightExpression.constructTransformerBuilder(expressionTransformerBuilderMap);
-
-    TransformerBuilder transformerBuilder = new TransformerBuilder(this);
-    transformerBuilder.addDependentExpression(leftExpression);
-    transformerBuilder.addDependentExpression(rightExpression);
-    expressionTransformerBuilderMap.put(this, transformerBuilder);
+    return expressionIntermediateLayerMap.get(this);
   }
 
+  protected abstract ArithmeticBinaryTransformer constructTransformer(
+      LayerPointReader leftParentLayerPointReader, LayerPointReader 
rightParentLayerPointReader);
+
   public Expression getLeftExpression() {
     return leftExpression;
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
 
b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
index e611887..9d8a613 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
@@ -20,6 +20,9 @@
 package org.apache.iotdb.db.query.expression.binary;
 
 import org.apache.iotdb.db.query.expression.Expression;
+import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import 
org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
+import 
org.apache.iotdb.db.query.udf.core.transformer.ArithmeticDivisionTransformer;
 
 public class DivisionExpression extends BinaryExpression {
 
@@ -28,6 +31,13 @@ public class DivisionExpression extends BinaryExpression {
   }
 
   @Override
+  protected ArithmeticBinaryTransformer constructTransformer(
+      LayerPointReader leftParentLayerPointReader, LayerPointReader 
rightParentLayerPointReader) {
+    return new ArithmeticDivisionTransformer(
+        leftParentLayerPointReader, rightParentLayerPointReader);
+  }
+
+  @Override
   protected String operator() {
     return "/";
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
 
b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
index 94dd905..464e623 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
@@ -20,6 +20,9 @@
 package org.apache.iotdb.db.query.expression.binary;
 
 import org.apache.iotdb.db.query.expression.Expression;
+import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import 
org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
+import 
org.apache.iotdb.db.query.udf.core.transformer.ArithmeticModuloTransformer;
 
 public class ModuloExpression extends BinaryExpression {
 
@@ -28,6 +31,12 @@ public class ModuloExpression extends BinaryExpression {
   }
 
   @Override
+  protected ArithmeticBinaryTransformer constructTransformer(
+      LayerPointReader leftParentLayerPointReader, LayerPointReader 
rightParentLayerPointReader) {
+    return new ArithmeticModuloTransformer(leftParentLayerPointReader, 
rightParentLayerPointReader);
+  }
+
+  @Override
   protected String operator() {
     return "%";
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
 
b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
index ae3d17b..420e2c7 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
@@ -20,6 +20,9 @@
 package org.apache.iotdb.db.query.expression.binary;
 
 import org.apache.iotdb.db.query.expression.Expression;
+import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import 
org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
+import 
org.apache.iotdb.db.query.udf.core.transformer.ArithmeticMultiplicationTransformer;
 
 public class MultiplicationExpression extends BinaryExpression {
 
@@ -28,6 +31,13 @@ public class MultiplicationExpression extends 
BinaryExpression {
   }
 
   @Override
+  protected ArithmeticBinaryTransformer constructTransformer(
+      LayerPointReader leftParentLayerPointReader, LayerPointReader 
rightParentLayerPointReader) {
+    return new ArithmeticMultiplicationTransformer(
+        leftParentLayerPointReader, rightParentLayerPointReader);
+  }
+
+  @Override
   protected String operator() {
     return "*";
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
 
b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
index 65bcf50..3eb918e 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
@@ -20,6 +20,9 @@
 package org.apache.iotdb.db.query.expression.binary;
 
 import org.apache.iotdb.db.query.expression.Expression;
+import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import 
org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
+import 
org.apache.iotdb.db.query.udf.core.transformer.ArithmeticSubtractionTransformer;
 
 public class SubtractionExpression extends BinaryExpression {
 
@@ -28,6 +31,13 @@ public class SubtractionExpression extends BinaryExpression {
   }
 
   @Override
+  protected ArithmeticBinaryTransformer constructTransformer(
+      LayerPointReader leftParentLayerPointReader, LayerPointReader 
rightParentLayerPointReader) {
+    return new ArithmeticSubtractionTransformer(
+        leftParentLayerPointReader, rightParentLayerPointReader);
+  }
+
+  @Override
   protected String operator() {
     return "-";
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
 
b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
index 2bb05b0..4773ae4 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
@@ -20,12 +20,15 @@
 package org.apache.iotdb.db.query.expression.unary;
 
 import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
 import org.apache.iotdb.db.qp.constant.SQLConstant;
+import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
 import org.apache.iotdb.db.qp.strategy.optimizer.ConcatPathOptimizer;
 import org.apache.iotdb.db.qp.utils.WildcardsRemover;
 import org.apache.iotdb.db.query.expression.Expression;
-import org.apache.iotdb.db.query.udf.core.builder.TransformerBuilder;
+import org.apache.iotdb.db.query.udf.core.layer.InputLayer;
+import org.apache.iotdb.db.query.udf.core.layer.IntermediateLayer;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -144,21 +147,20 @@ public class FunctionExpression extends Expression {
   }
 
   @Override
-  public void constructTransformerBuilder(
-      Map<Expression, TransformerBuilder> expressionTransformerBuilderMap) {
-    if (expressionTransformerBuilderMap.containsKey(this)) {
-      return;
-    }
+  public IntermediateLayer constructIntermediateLayer(
+      UDTFPlan udtfPlan,
+      InputLayer inputLayer,
+      Map<Expression, IntermediateLayer> expressionIntermediateLayerMap)
+      throws QueryProcessException {
+    if (!expressionIntermediateLayerMap.containsKey(this)) {
+      for (Expression expression : expressions) {
+        expression.constructIntermediateLayer(udtfPlan, inputLayer, 
expressionIntermediateLayerMap);
+      }
 
-    for (Expression expression : expressions) {
-      expression.constructTransformerBuilder(expressionTransformerBuilderMap);
+      // todo!
     }
 
-    TransformerBuilder transformerBuilder = new TransformerBuilder(this);
-    for (Expression expression : expressions) {
-      transformerBuilder.addDependentExpression(expression);
-    }
-    expressionTransformerBuilderMap.put(this, transformerBuilder);
+    return expressionIntermediateLayerMap.get(this);
   }
 
   public List<PartialPath> getPaths() {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
 
b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
index 2c6fb45..355eca0 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
@@ -20,10 +20,14 @@
 package org.apache.iotdb.db.query.expression.unary;
 
 import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
+import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
 import org.apache.iotdb.db.qp.utils.WildcardsRemover;
 import org.apache.iotdb.db.query.expression.Expression;
-import org.apache.iotdb.db.query.udf.core.builder.TransformerBuilder;
+import org.apache.iotdb.db.query.udf.core.layer.InputLayer;
+import org.apache.iotdb.db.query.udf.core.layer.IntermediateLayer;
+import 
org.apache.iotdb.db.query.udf.core.transformer.ArithmeticNegationTransformer;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -72,17 +76,25 @@ public class NegationExpression extends Expression {
   }
 
   @Override
-  public void constructTransformerBuilder(
-      Map<Expression, TransformerBuilder> expressionTransformerBuilderMap) {
-    if (expressionTransformerBuilderMap.containsKey(this)) {
-      return;
-    }
+  public IntermediateLayer constructIntermediateLayer(
+      UDTFPlan udtfPlan,
+      InputLayer inputLayer,
+      Map<Expression, IntermediateLayer> expressionIntermediateLayerMap)
+      throws QueryProcessException {
+    if (!expressionIntermediateLayerMap.containsKey(this)) {
+      IntermediateLayer parentIntermediateLayer =
+          expression.constructIntermediateLayer(
+              udtfPlan, inputLayer, expressionIntermediateLayerMap);
 
-    expression.constructTransformerBuilder(expressionTransformerBuilderMap);
+      expressionIntermediateLayerMap.put(
+          this,
+          new IntermediateLayer(
+              new 
ArithmeticNegationTransformer(parentIntermediateLayer.constructPointReader()),
+              -1,
+              -1));
+    }
 
-    TransformerBuilder transformerBuilder = new TransformerBuilder(this);
-    transformerBuilder.addDependentExpression(expression);
-    expressionTransformerBuilderMap.put(this, transformerBuilder);
+    return expressionIntermediateLayerMap.get(this);
   }
 
   @Override
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
 
b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
index 478e214..208a760 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
@@ -20,10 +20,13 @@
 package org.apache.iotdb.db.query.expression.unary;
 
 import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
+import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
 import org.apache.iotdb.db.qp.utils.WildcardsRemover;
 import org.apache.iotdb.db.query.expression.Expression;
-import org.apache.iotdb.db.query.udf.core.builder.TransformerBuilder;
+import org.apache.iotdb.db.query.udf.core.layer.InputLayer;
+import org.apache.iotdb.db.query.udf.core.layer.IntermediateLayer;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
 import java.util.List;
@@ -68,11 +71,21 @@ public class TimeSeriesOperand extends Expression {
   }
 
   @Override
-  public void constructTransformerBuilder(
-      Map<Expression, TransformerBuilder> expressionTransformerBuilderMap) {
-    if (!expressionTransformerBuilderMap.containsKey(this)) {
-      expressionTransformerBuilderMap.put(this, new TransformerBuilder(this));
+  public IntermediateLayer constructIntermediateLayer(
+      UDTFPlan udtfPlan,
+      InputLayer inputLayer,
+      Map<Expression, IntermediateLayer> expressionIntermediateLayerMap)
+      throws QueryProcessException {
+    if (!expressionIntermediateLayerMap.containsKey(this)) {
+      expressionIntermediateLayerMap.put(
+          this,
+          new IntermediateLayer(
+              
inputLayer.constructPointReader(udtfPlan.getReaderIndex(path.getFullPath())),
+              -1,
+              -1));
     }
+
+    return expressionIntermediateLayerMap.get(this);
   }
 
   @Override
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/udf/core/builder/LayerPointReaderBuilder.java
 
b/server/src/main/java/org/apache/iotdb/db/query/udf/core/builder/LayerPointReaderBuilder.java
deleted file mode 100644
index ed96576..0000000
--- 
a/server/src/main/java/org/apache/iotdb/db/query/udf/core/builder/LayerPointReaderBuilder.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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.query.udf.core.builder;
-
-public class LayerPointReaderBuilder {}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/udf/core/builder/TransformerBuilder.java
 
b/server/src/main/java/org/apache/iotdb/db/query/udf/core/builder/TransformerBuilder.java
deleted file mode 100644
index f365876..0000000
--- 
a/server/src/main/java/org/apache/iotdb/db/query/udf/core/builder/TransformerBuilder.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.query.udf.core.builder;
-
-import org.apache.iotdb.db.query.expression.Expression;
-
-import java.util.LinkedList;
-import java.util.List;
-
-public class TransformerBuilder {
-
-  private final Expression expression;
-
-  private final List<Expression> dependencies;
-
-  public TransformerBuilder(Expression expression) {
-    this.expression = expression;
-    dependencies = new LinkedList<>();
-  }
-
-  public void addDependentExpression(Expression dependentExpression) {
-    dependencies.add(dependentExpression);
-  }
-}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/udf/core/builder/DAGBuilder.java
 b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/DAGBuilder.java
similarity index 75%
rename from 
server/src/main/java/org/apache/iotdb/db/query/udf/core/builder/DAGBuilder.java
rename to 
server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/DAGBuilder.java
index d8dc64e..472ca2d 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/udf/core/builder/DAGBuilder.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/DAGBuilder.java
@@ -17,8 +17,9 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.query.udf.core.builder;
+package org.apache.iotdb.db.query.udf.core.layer;
 
+import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
 import org.apache.iotdb.db.query.expression.Expression;
 import org.apache.iotdb.db.query.expression.ResultColumn;
@@ -32,6 +33,7 @@ import java.util.Map;
 public class DAGBuilder {
 
   private final UDTFPlan udtfPlan;
+  private final InputLayer inputLayer;
 
   // input
   private final List<Expression> resultColumnExpressions;
@@ -40,38 +42,32 @@ public class DAGBuilder {
 
   // all result column expressions will be split into several sub-expressions, 
each expression has
   // its own transformer. different result column expressions may have the 
same sub-expressions,
-  // but they can share the same transformer. we cache the transformer builder 
here to make sure
-  // that only one transformer will be built for one expression.
-  private final Map<Expression, TransformerBuilder> 
expressionTransformerBuilderMap;
+  // but they can share the same transformer. we cache the transformer here to 
make sure that only
+  // one transformer will be built for one expression.
+  private final Map<Expression, IntermediateLayer> 
expressionIntermediateLayerMap;
 
-  public DAGBuilder(UDTFPlan udtfPlan) {
+  public DAGBuilder(UDTFPlan udtfPlan, InputLayer inputLayer) throws 
QueryProcessException {
     this.udtfPlan = udtfPlan;
+    this.inputLayer = inputLayer;
+
     resultColumnExpressions = new ArrayList<>();
     for (ResultColumn resultColumn : udtfPlan.getResultColumns()) {
       resultColumnExpressions.add(resultColumn.getExpression());
     }
     resultColumnTransformers = new Transformer[resultColumnExpressions.size()];
-    expressionTransformerBuilderMap = new HashMap<>();
 
-    build();
-  }
+    expressionIntermediateLayerMap = new HashMap<>();
 
-  public void build() {
-    constructTransformerBuilder();
-    buildTransformer();
-    buildDAG();
+    build();
   }
 
-  private void constructTransformerBuilder() {
+  public void build() throws QueryProcessException {
     for (Expression resultColumnExpression : resultColumnExpressions) {
-      
resultColumnExpression.constructTransformerBuilder(expressionTransformerBuilderMap);
+      resultColumnExpression.constructIntermediateLayer(
+          udtfPlan, inputLayer, expressionIntermediateLayerMap);
     }
   }
 
-  private void buildTransformer() {}
-
-  private void buildDAG() {}
-
   public Transformer[] getResultColumnTransformers() {
     return resultColumnTransformers;
   }

Reply via email to