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

shuwenwei pushed a commit to branch calc_commons
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 3f9f6930c502606ee899f6620feece68bed70e12
Author: shuwenwei <[email protected]>
AuthorDate: Wed Apr 15 17:00:11 2026 +0800

    move fill
---
 .../src/main/codegen/templates/constantFill.ftl    |   6 +-
 .../src/main/codegen/templates/linearFill.ftl      |   4 +-
 .../src/main/codegen/templates/previousFill.ftl    |   6 +-
 .../templates/previousFillWithTimeDuration.ftl     |   8 +-
 .../execution/operator/process/fill/IFill.java     |   2 +-
 .../operator/process/fill/IFillFilter.java         |   2 +-
 .../operator/process/fill/ILinearFill.java         |   2 +-
 .../filter/AbstractMonthIntervalFillFilter.java    |   4 +-
 .../fill/filter/FixedIntervalFillFilter.java       |   4 +-
 .../fill/filter/MonthIntervalMSFillFilter.java     |   2 +-
 .../fill/filter/MonthIntervalNSFillFilter.java     |   2 +-
 .../fill/filter/MonthIntervalUSFillFilter.java     |   2 +-
 .../process/fill/identity/IdentityFill.java        |   4 +-
 .../process/fill/identity/IdentityLinearFill.java  |   4 +-
 .../operator/process/fill/linear/LinearFill.java   |   4 +-
 .../relational/ColumnTransformerBuilder.java       |   6 +-
 .../plan/planner/OperatorGeneratorUtils.java       | 174 ++++++++++++++++++++
 .../plan/planner/TableOperatorGenerator.java       |  24 +--
 .../plan/udf/TableUDFUtils.java                    |   3 +-
 .../dag/util/CommonTransformUtils.java             |   6 +
 .../operator/process/AbstractFillOperator.java     |   2 +-
 .../process/AbstractLinearFillOperator.java        |   2 +-
 .../process/PreviousFillWithGroupOperator.java     |   2 +-
 .../operator/process/TableFillOperator.java        |   2 +-
 .../operator/process/TableLinearFillOperator.java  |   2 +-
 .../process/TableLinearFillWithGroupOperator.java  |   2 +-
 .../operator/process/TreeFillOperator.java         |   2 +-
 .../operator/process/TreeLinearFillOperator.java   |   2 +-
 .../relational/aggregation/AccumulatorFactory.java |   2 +-
 .../config/metadata/ShowFunctionsTask.java         |   2 +-
 .../planner/DataNodeTableOperatorGenerator.java    |   2 +-
 .../plan/planner/OperatorGeneratorUtil.java        |   2 +-
 .../plan/planner/OperatorTreeGenerator.java        | 176 ++-------------------
 .../relational/analyzer/ExpressionTreeUtils.java   |   2 +-
 .../PredicatePushIntoMetadataChecker.java          |   4 -
 .../relational/metadata/TableMetadataImpl.java     |   2 +-
 .../plan/relational/sql/ast/DeleteDevice.java      |   2 +-
 .../schemaregion/impl/SchemaRegionMemoryImpl.java  |   2 +-
 .../execution/operator/FillOperatorTest.java       |  10 +-
 .../execution/operator/OperatorMemoryTest.java     |   4 +-
 .../operator/TreeLinearFillOperatorTest.java       |   8 +-
 .../fill/filter/MonthIntervalFillFilterTest.java   |   4 +
 .../plan/relational/analyzer/TestMetadata.java     |   2 +-
 43 files changed, 272 insertions(+), 237 deletions(-)

diff --git a/iotdb-core/datanode/src/main/codegen/templates/constantFill.ftl 
b/iotdb-core/datanode/src/main/codegen/templates/constantFill.ftl
index 9ff15a15062..d4cb860c341 100644
--- a/iotdb-core/datanode/src/main/codegen/templates/constantFill.ftl
+++ b/iotdb-core/datanode/src/main/codegen/templates/constantFill.ftl
@@ -20,10 +20,10 @@
 <#list allDataTypes.types as type>
 
   <#assign className = "${type.dataType?cap_first}ConstantFill">
-  <@pp.changeOutputFile 
name="/org/apache/iotdb/db/queryengine/execution/operator/process/fill/constant/${className}.java"
 />
-package 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant;
+  <@pp.changeOutputFile 
name="/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/constant/${className}.java"
 />
+package 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant;
 
-import org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFill;
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
 import org.apache.tsfile.read.common.block.column.${type.column};
 import org.apache.tsfile.block.column.Column;
 import org.apache.tsfile.read.common.block.column.RunLengthEncodedColumn;
diff --git a/iotdb-core/datanode/src/main/codegen/templates/linearFill.ftl 
b/iotdb-core/datanode/src/main/codegen/templates/linearFill.ftl
index f63b40bc379..acc3d72f270 100644
--- a/iotdb-core/datanode/src/main/codegen/templates/linearFill.ftl
+++ b/iotdb-core/datanode/src/main/codegen/templates/linearFill.ftl
@@ -21,8 +21,8 @@
 <#list decimalDataTypes.types as type>
 
   <#assign className = "${type.dataType?cap_first}LinearFill">
-  <@pp.changeOutputFile 
name="/org/apache/iotdb/db/queryengine/execution/operator/process/fill/linear/${className}.java"
 />
-package org.apache.iotdb.db.queryengine.execution.operator.process.fill.linear;
+  <@pp.changeOutputFile 
name="/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/linear/${className}.java"
 />
+package 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.linear;
 
 import org.apache.tsfile.block.column.Column;
 import org.apache.tsfile.read.common.block.column.${type.column};
diff --git a/iotdb-core/datanode/src/main/codegen/templates/previousFill.ftl 
b/iotdb-core/datanode/src/main/codegen/templates/previousFill.ftl
index 8efa0bd0a7b..41c5227447a 100644
--- a/iotdb-core/datanode/src/main/codegen/templates/previousFill.ftl
+++ b/iotdb-core/datanode/src/main/codegen/templates/previousFill.ftl
@@ -21,10 +21,10 @@
 <#list allDataTypes.types as type>
 
   <#assign className = "${type.dataType?cap_first}PreviousFill">
-  <@pp.changeOutputFile 
name="/org/apache/iotdb/db/queryengine/execution/operator/process/fill/previous/${className}.java"
 />
-package 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous;
+  <@pp.changeOutputFile 
name="/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/previous/${className}.java"
 />
+package 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous;
 
-import org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFill;
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
 import org.apache.tsfile.block.column.Column;
 import org.apache.tsfile.read.common.block.column.${type.column};
 import org.apache.tsfile.read.common.block.column.${type.column}Builder;
diff --git 
a/iotdb-core/datanode/src/main/codegen/templates/previousFillWithTimeDuration.ftl
 
b/iotdb-core/datanode/src/main/codegen/templates/previousFillWithTimeDuration.ftl
index 4de0b724357..4a740be669a 100644
--- 
a/iotdb-core/datanode/src/main/codegen/templates/previousFillWithTimeDuration.ftl
+++ 
b/iotdb-core/datanode/src/main/codegen/templates/previousFillWithTimeDuration.ftl
@@ -21,11 +21,11 @@
 <#list allDataTypes.types as type>
 
     <#assign className = 
"${type.dataType?cap_first}PreviousFillWithTimeDuration">
-    <@pp.changeOutputFile 
name="/org/apache/iotdb/db/queryengine/execution/operator/process/fill/previous/${className}.java"
 />
-package 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous;
+    <@pp.changeOutputFile 
name="/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/previous/${className}.java"
 />
+package 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous;
 
-import org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFillFilter;
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFillFilter;
 import org.apache.tsfile.block.column.Column;
 import org.apache.tsfile.read.common.block.column.${type.column};
 import org.apache.tsfile.read.common.block.column.${type.column}Builder;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/IFill.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/IFill.java
similarity index 92%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/IFill.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/IFill.java
index 009c106541a..ea52a14e1fb 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/IFill.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/IFill.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.execution.operator.process.fill;
+package org.apache.iotdb.db.calc_commons.execution.operator.process.fill;
 
 import org.apache.tsfile.block.column.Column;
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/IFillFilter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/IFillFilter.java
similarity index 93%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/IFillFilter.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/IFillFilter.java
index 736be974cab..631ceefaeb3 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/IFillFilter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/IFillFilter.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.execution.operator.process.fill;
+package org.apache.iotdb.db.calc_commons.execution.operator.process.fill;
 
 public interface IFillFilter {
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/ILinearFill.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/ILinearFill.java
similarity index 97%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/ILinearFill.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/ILinearFill.java
index 0dccba10546..e270b572b6b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/ILinearFill.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/ILinearFill.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.execution.operator.process.fill;
+package org.apache.iotdb.db.calc_commons.execution.operator.process.fill;
 
 import org.apache.tsfile.block.column.Column;
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/AbstractMonthIntervalFillFilter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/AbstractMonthIntervalFillFilter.java
similarity index 89%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/AbstractMonthIntervalFillFilter.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/AbstractMonthIntervalFillFilter.java
index 24a629189ab..5ec13d39f05 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/AbstractMonthIntervalFillFilter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/AbstractMonthIntervalFillFilter.java
@@ -17,9 +17,9 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.execution.operator.process.fill.filter;
+package 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter;
 
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFillFilter;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFillFilter;
 
 import java.time.ZoneId;
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/FixedIntervalFillFilter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/FixedIntervalFillFilter.java
similarity index 89%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/FixedIntervalFillFilter.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/FixedIntervalFillFilter.java
index 840148438a7..9ccd6275a91 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/FixedIntervalFillFilter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/FixedIntervalFillFilter.java
@@ -17,9 +17,9 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.execution.operator.process.fill.filter;
+package 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter;
 
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFillFilter;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFillFilter;
 
 public class FixedIntervalFillFilter implements IFillFilter {
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalMSFillFilter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/MonthIntervalMSFillFilter.java
similarity index 95%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalMSFillFilter.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/MonthIntervalMSFillFilter.java
index c8e56a8cca9..1fe26846eef 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalMSFillFilter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/MonthIntervalMSFillFilter.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.execution.operator.process.fill.filter;
+package 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter;
 
 import java.time.Instant;
 import java.time.LocalDateTime;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalNSFillFilter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/MonthIntervalNSFillFilter.java
similarity index 96%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalNSFillFilter.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/MonthIntervalNSFillFilter.java
index b2c389a1d87..6260c679bb6 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalNSFillFilter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/MonthIntervalNSFillFilter.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.execution.operator.process.fill.filter;
+package 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter;
 
 import java.time.Instant;
 import java.time.LocalDateTime;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalUSFillFilter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/MonthIntervalUSFillFilter.java
similarity index 96%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalUSFillFilter.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/MonthIntervalUSFillFilter.java
index c99ede2702e..d8af68bb626 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalUSFillFilter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/filter/MonthIntervalUSFillFilter.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.execution.operator.process.fill.filter;
+package 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter;
 
 import java.time.Instant;
 import java.time.LocalDateTime;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/identity/IdentityFill.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/identity/IdentityFill.java
similarity index 86%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/identity/IdentityFill.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/identity/IdentityFill.java
index 74801480c64..f3329598b10 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/identity/IdentityFill.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/identity/IdentityFill.java
@@ -17,9 +17,9 @@
  * under the License.
  */
 
-package 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.identity;
+package 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.identity;
 
-import org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFill;
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
 
 import org.apache.tsfile.block.column.Column;
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/identity/IdentityLinearFill.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/identity/IdentityLinearFill.java
similarity index 90%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/identity/IdentityLinearFill.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/identity/IdentityLinearFill.java
index 9ccd42ec51e..c87820757b3 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/identity/IdentityLinearFill.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/identity/IdentityLinearFill.java
@@ -17,9 +17,9 @@
  * under the License.
  */
 
-package 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.identity;
+package 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.identity;
 
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.ILinearFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.ILinearFill;
 
 import org.apache.tsfile.block.column.Column;
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/linear/LinearFill.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/linear/LinearFill.java
similarity index 98%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/linear/LinearFill.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/linear/LinearFill.java
index 5cd278cc0e7..e1813795cad 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/linear/LinearFill.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/operator/process/fill/linear/LinearFill.java
@@ -17,9 +17,9 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.execution.operator.process.fill.linear;
+package 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.linear;
 
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.ILinearFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.ILinearFill;
 
 import org.apache.tsfile.block.column.Column;
 import org.apache.tsfile.read.common.block.column.RunLengthEncodedColumn;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/relational/ColumnTransformerBuilder.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/relational/ColumnTransformerBuilder.java
similarity index 99%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/relational/ColumnTransformerBuilder.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/relational/ColumnTransformerBuilder.java
index 54b8ca1027d..e476a881ccf 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/relational/ColumnTransformerBuilder.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/execution/relational/ColumnTransformerBuilder.java
@@ -17,10 +17,11 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.execution.relational;
+package org.apache.iotdb.db.calc_commons.execution.relational;
 
 import 
org.apache.iotdb.commons.udf.builtin.relational.TableBuiltinScalarFunction;
 import org.apache.iotdb.commons.udf.utils.UDFDataTypeTransformer;
+import org.apache.iotdb.db.calc_commons.plan.udf.TableUDFUtils;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.ColumnTransformer;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.FailFunctionColumnTransformer;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.TableCaseWhenThenColumnTransformer;
@@ -196,7 +197,6 @@ import 
org.apache.iotdb.db.node_commons.plan.relational.type.TypeNotFoundExcepti
 import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContext;
 import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
-import org.apache.iotdb.db.queryengine.plan.udf.TableUDFUtils;
 import org.apache.iotdb.udf.api.customizer.analysis.ScalarFunctionAnalysis;
 import org.apache.iotdb.udf.api.customizer.parameter.FunctionArguments;
 import org.apache.iotdb.udf.api.relational.ScalarFunction;
@@ -238,9 +238,9 @@ import static 
org.apache.iotdb.db.calc_commons.transformation.dag.column.binary.
 import static 
org.apache.iotdb.db.calc_commons.transformation.dag.column.binary.factory.HmacStrategiesFactory.createConstantKeyHmacSha256Strategy;
 import static 
org.apache.iotdb.db.calc_commons.transformation.dag.column.binary.factory.HmacStrategiesFactory.createConstantKeyHmacSha512Strategy;
 import static 
org.apache.iotdb.db.calc_commons.transformation.dag.util.CommonTransformUtils.getEscapeCharacter;
+import static 
org.apache.iotdb.db.calc_commons.transformation.dag.util.CommonTransformUtils.isStringLiteral;
 import static 
org.apache.iotdb.db.node_commons.plan.relational.type.InternalTypeManager.getTSDataType;
 import static 
org.apache.iotdb.db.node_commons.plan.relational.type.TypeSignatureTranslator.toTypeSignature;
-import static 
org.apache.iotdb.db.queryengine.plan.relational.analyzer.predicate.PredicatePushIntoMetadataChecker.isStringLiteral;
 import static org.apache.tsfile.read.common.type.BlobType.BLOB;
 import static org.apache.tsfile.read.common.type.BooleanType.BOOLEAN;
 import static org.apache.tsfile.read.common.type.DoubleType.DOUBLE;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/plan/planner/OperatorGeneratorUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/plan/planner/OperatorGeneratorUtils.java
new file mode 100644
index 00000000000..6464ac4814b
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/plan/planner/OperatorGeneratorUtils.java
@@ -0,0 +1,174 @@
+/*
+ * Licensed 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.calc_commons.plan.planner;
+
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFillFilter;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.ILinearFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter.FixedIntervalFillFilter;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter.MonthIntervalMSFillFilter;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter.MonthIntervalNSFillFilter;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter.MonthIntervalUSFillFilter;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.identity.IdentityLinearFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.linear.DoubleLinearFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.linear.FloatLinearFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.linear.IntLinearFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.linear.LongLinearFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.BinaryPreviousFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.BinaryPreviousFillWithTimeDuration;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.BooleanPreviousFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.BooleanPreviousFillWithTimeDuration;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.DoublePreviousFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.DoublePreviousFillWithTimeDuration;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.FloatPreviousFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.FloatPreviousFillWithTimeDuration;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.IntPreviousFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.IntPreviousFillWithTimeDuration;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.LongPreviousFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.LongPreviousFillWithTimeDuration;
+
+import org.apache.tsfile.enums.TSDataType;
+import org.apache.tsfile.utils.TimeDuration;
+
+import java.time.ZoneId;
+import java.util.List;
+
+import static 
org.apache.iotdb.db.utils.TimestampPrecisionUtils.TIMESTAMP_PRECISION;
+
+public class OperatorGeneratorUtils {
+  public static final IdentityLinearFill IDENTITY_LINEAR_FILL = new 
IdentityLinearFill();
+  public static final String UNKNOWN_DATATYPE = "Unknown data type: ";
+
+  public static ILinearFill[] getLinearFill(int inputColumns, List<TSDataType> 
inputDataTypes) {
+    ILinearFill[] linearFill = new ILinearFill[inputColumns];
+    for (int i = 0; i < inputColumns; i++) {
+      switch (inputDataTypes.get(i)) {
+        case INT32:
+        case DATE:
+          linearFill[i] = new IntLinearFill();
+          break;
+        case INT64:
+        case TIMESTAMP:
+          linearFill[i] = new LongLinearFill();
+          break;
+        case FLOAT:
+          linearFill[i] = new FloatLinearFill();
+          break;
+        case DOUBLE:
+          linearFill[i] = new DoubleLinearFill();
+          break;
+        case BOOLEAN:
+        case TEXT:
+        case STRING:
+        case BLOB:
+        case OBJECT:
+          linearFill[i] = IDENTITY_LINEAR_FILL;
+          break;
+        default:
+          throw new IllegalArgumentException(UNKNOWN_DATATYPE + 
inputDataTypes.get(i));
+      }
+    }
+    return linearFill;
+  }
+
+  public static IFill[] getPreviousFill(
+      int inputColumns,
+      List<TSDataType> inputDataTypes,
+      TimeDuration timeDurationThreshold,
+      ZoneId zoneId) {
+    IFillFilter filter;
+    if (timeDurationThreshold == null) {
+      filter = null;
+    } else if (!timeDurationThreshold.containsMonth()) {
+      filter = new 
FixedIntervalFillFilter(timeDurationThreshold.nonMonthDuration);
+    } else {
+      switch (TIMESTAMP_PRECISION) {
+        case "ms":
+          filter =
+              new MonthIntervalMSFillFilter(
+                  timeDurationThreshold.monthDuration,
+                  timeDurationThreshold.nonMonthDuration,
+                  zoneId);
+          break;
+        case "us":
+          filter =
+              new MonthIntervalUSFillFilter(
+                  timeDurationThreshold.monthDuration,
+                  timeDurationThreshold.nonMonthDuration,
+                  zoneId);
+          break;
+        case "ns":
+          filter =
+              new MonthIntervalNSFillFilter(
+                  timeDurationThreshold.monthDuration,
+                  timeDurationThreshold.nonMonthDuration,
+                  zoneId);
+          break;
+        default:
+          // this case will never reach
+          throw new UnsupportedOperationException(
+              "not supported time_precision: " + TIMESTAMP_PRECISION);
+      }
+    }
+
+    IFill[] previousFill = new IFill[inputColumns];
+    for (int i = 0; i < inputColumns; i++) {
+      switch (inputDataTypes.get(i)) {
+        case BOOLEAN:
+          previousFill[i] =
+              filter == null
+                  ? new BooleanPreviousFill()
+                  : new BooleanPreviousFillWithTimeDuration(filter);
+          break;
+        case TEXT:
+        case STRING:
+        case BLOB:
+        case OBJECT:
+          previousFill[i] =
+              filter == null
+                  ? new BinaryPreviousFill()
+                  : new BinaryPreviousFillWithTimeDuration(filter);
+          break;
+        case INT32:
+        case DATE:
+          previousFill[i] =
+              filter == null ? new IntPreviousFill() : new 
IntPreviousFillWithTimeDuration(filter);
+          break;
+        case INT64:
+        case TIMESTAMP:
+          previousFill[i] =
+              filter == null
+                  ? new LongPreviousFill()
+                  : new LongPreviousFillWithTimeDuration(filter);
+          break;
+        case FLOAT:
+          previousFill[i] =
+              filter == null
+                  ? new FloatPreviousFill()
+                  : new FloatPreviousFillWithTimeDuration(filter);
+          break;
+        case DOUBLE:
+          previousFill[i] =
+              filter == null
+                  ? new DoublePreviousFill()
+                  : new DoublePreviousFillWithTimeDuration(filter);
+          break;
+        default:
+          throw new IllegalArgumentException(UNKNOWN_DATATYPE + 
inputDataTypes.get(i));
+      }
+    }
+    return previousFill;
+  }
+}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/plan/planner/TableOperatorGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/plan/planner/TableOperatorGenerator.java
index ea6eadbf787..25850882370 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/plan/planner/TableOperatorGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/plan/planner/TableOperatorGenerator.java
@@ -19,6 +19,15 @@
 
 package org.apache.iotdb.db.calc_commons.plan.planner;
 
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.ILinearFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.BinaryConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.BooleanConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.DoubleConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.FloatConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.IntConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.LongConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.relational.ColumnTransformerBuilder;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.ColumnTransformer;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.leaf.LeafColumnTransformer;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -98,14 +107,6 @@ import 
org.apache.iotdb.db.queryengine.execution.operator.process.TableSortOpera
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TableStreamSortOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TableTopKOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.ValuesOperator;
-import org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.ILinearFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.BinaryConstantFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.BooleanConstantFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.DoubleConstantFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.FloatConstantFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.IntConstantFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.LongConstantFill;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.function.TableFunctionLeafOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.function.TableFunctionOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.gapfill.GapFillWGroupWMoOperator;
@@ -152,7 +153,6 @@ import 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggr
 import 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggregation.grouped.HashAggregationOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggregation.grouped.StreamingAggregationOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggregation.grouped.StreamingHashAggregationOperator;
-import 
org.apache.iotdb.db.queryengine.execution.relational.ColumnTransformerBuilder;
 import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
 import org.apache.iotdb.db.queryengine.plan.planner.LocalExecutionPlanContext;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
@@ -210,6 +210,9 @@ import static 
com.google.common.collect.ImmutableList.toImmutableList;
 import static com.google.common.collect.Iterables.getOnlyElement;
 import static java.util.Objects.requireNonNull;
 import static 
org.apache.iotdb.commons.udf.builtin.relational.TableBuiltinAggregationFunction.getAggregationTypeByFuncName;
+import static 
org.apache.iotdb.db.calc_commons.plan.planner.OperatorGeneratorUtils.UNKNOWN_DATATYPE;
+import static 
org.apache.iotdb.db.calc_commons.plan.planner.OperatorGeneratorUtils.getLinearFill;
+import static 
org.apache.iotdb.db.calc_commons.plan.planner.OperatorGeneratorUtils.getPreviousFill;
 import static 
org.apache.iotdb.db.node_commons.execution.operator.source.relational.aggregation.grouped.hash.hash.GroupByHash.DEFAULT_GROUP_NUMBER;
 import static 
org.apache.iotdb.db.node_commons.plan.relational.planner.SortOrder.ASC_NULLS_FIRST;
 import static 
org.apache.iotdb.db.node_commons.plan.relational.planner.SortOrder.ASC_NULLS_LAST;
@@ -226,9 +229,6 @@ import static 
org.apache.iotdb.db.queryengine.execution.operator.source.relation
 import static 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggregation.AccumulatorFactory.createBuiltinAccumulator;
 import static 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggregation.AccumulatorFactory.createGroupedAccumulator;
 import static 
org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.IDENTITY_FILL;
-import static 
org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.UNKNOWN_DATATYPE;
-import static 
org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.getLinearFill;
-import static 
org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.getPreviousFill;
 import static org.apache.iotdb.db.utils.constant.SqlConstant.FIRST_AGGREGATION;
 import static 
org.apache.iotdb.db.utils.constant.SqlConstant.FIRST_BY_AGGREGATION;
 import static org.apache.iotdb.db.utils.constant.SqlConstant.LAST_AGGREGATION;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/udf/TableUDFUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/plan/udf/TableUDFUtils.java
similarity index 95%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/udf/TableUDFUtils.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/plan/udf/TableUDFUtils.java
index 861bc701a49..a1e2a69ab76 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/udf/TableUDFUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/plan/udf/TableUDFUtils.java
@@ -17,11 +17,12 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.udf;
+package org.apache.iotdb.db.calc_commons.plan.udf;
 
 import org.apache.iotdb.common.rpc.thrift.FunctionType;
 import org.apache.iotdb.common.rpc.thrift.Model;
 import org.apache.iotdb.commons.udf.UDFInformation;
+import org.apache.iotdb.db.queryengine.plan.udf.UDFManagementService;
 import org.apache.iotdb.udf.api.exception.UDFException;
 import org.apache.iotdb.udf.api.relational.AggregateFunction;
 import org.apache.iotdb.udf.api.relational.ScalarFunction;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/transformation/dag/util/CommonTransformUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/transformation/dag/util/CommonTransformUtils.java
index 07772699854..92b282e9abc 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/transformation/dag/util/CommonTransformUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/calc_commons/transformation/dag/util/CommonTransformUtils.java
@@ -15,6 +15,8 @@
 package org.apache.iotdb.db.calc_commons.transformation.dag.util;
 
 import org.apache.iotdb.db.exception.sql.SemanticException;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.StringLiteral;
 
 import org.apache.tsfile.utils.Binary;
 
@@ -37,4 +39,8 @@ public class CommonTransformUtils {
       throw new SemanticException("Escape string must be a single character");
     }
   }
+
+  public static boolean isStringLiteral(final Expression expression) {
+    return expression instanceof StringLiteral;
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/AbstractFillOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/AbstractFillOperator.java
index 717a8522b1f..8fc3f822121 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/AbstractFillOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/AbstractFillOperator.java
@@ -19,10 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.execution.operator.process;
 
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
 import org.apache.iotdb.db.node_commons.execution.MemoryEstimationHelper;
 import org.apache.iotdb.db.queryengine.execution.operator.Operator;
 import org.apache.iotdb.db.queryengine.execution.operator.OperatorContext;
-import org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFill;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import org.apache.tsfile.block.column.Column;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/AbstractLinearFillOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/AbstractLinearFillOperator.java
index 5254520cc67..2f2de6ff711 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/AbstractLinearFillOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/AbstractLinearFillOperator.java
@@ -19,10 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.execution.operator.process;
 
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.ILinearFill;
 import org.apache.iotdb.db.node_commons.execution.MemoryEstimationHelper;
 import org.apache.iotdb.db.queryengine.execution.operator.Operator;
 import org.apache.iotdb.db.queryengine.execution.operator.OperatorContext;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.ILinearFill;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import org.apache.tsfile.block.column.Column;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/PreviousFillWithGroupOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/PreviousFillWithGroupOperator.java
index 1b9059dea53..c10d73f403b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/PreviousFillWithGroupOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/PreviousFillWithGroupOperator.java
@@ -19,10 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.execution.operator.process;
 
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
 import org.apache.iotdb.db.node_commons.execution.MemoryEstimationHelper;
 import org.apache.iotdb.db.queryengine.execution.operator.Operator;
 import org.apache.iotdb.db.queryengine.execution.operator.OperatorContext;
-import org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFill;
 import org.apache.iotdb.db.utils.datastructure.SortKey;
 
 import com.google.common.util.concurrent.ListenableFuture;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TableFillOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TableFillOperator.java
index dd55e6ca490..00edaee90d9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TableFillOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TableFillOperator.java
@@ -19,9 +19,9 @@
 
 package org.apache.iotdb.db.queryengine.execution.operator.process;
 
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
 import org.apache.iotdb.db.queryengine.execution.operator.Operator;
 import org.apache.iotdb.db.queryengine.execution.operator.OperatorContext;
-import org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFill;
 
 import org.apache.tsfile.block.column.Column;
 import org.apache.tsfile.read.common.block.TsBlock;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TableLinearFillOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TableLinearFillOperator.java
index cb51a26057f..df72932c540 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TableLinearFillOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TableLinearFillOperator.java
@@ -19,9 +19,9 @@
 
 package org.apache.iotdb.db.queryengine.execution.operator.process;
 
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.ILinearFill;
 import org.apache.iotdb.db.queryengine.execution.operator.Operator;
 import org.apache.iotdb.db.queryengine.execution.operator.OperatorContext;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.ILinearFill;
 
 import org.apache.tsfile.block.column.Column;
 import org.apache.tsfile.read.common.block.TsBlock;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TableLinearFillWithGroupOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TableLinearFillWithGroupOperator.java
index b9fb7c095b1..95550238fb3 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TableLinearFillWithGroupOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TableLinearFillWithGroupOperator.java
@@ -19,9 +19,9 @@
 
 package org.apache.iotdb.db.queryengine.execution.operator.process;
 
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.ILinearFill;
 import org.apache.iotdb.db.queryengine.execution.operator.Operator;
 import org.apache.iotdb.db.queryengine.execution.operator.OperatorContext;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.ILinearFill;
 import org.apache.iotdb.db.utils.datastructure.SortKey;
 
 import org.apache.tsfile.block.column.Column;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TreeFillOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TreeFillOperator.java
index b2c539533f7..12ee422fe2e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TreeFillOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TreeFillOperator.java
@@ -19,9 +19,9 @@
 
 package org.apache.iotdb.db.queryengine.execution.operator.process;
 
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
 import org.apache.iotdb.db.queryengine.execution.operator.Operator;
 import org.apache.iotdb.db.queryengine.execution.operator.OperatorContext;
-import org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFill;
 
 import org.apache.tsfile.block.column.Column;
 import org.apache.tsfile.read.common.block.TsBlock;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TreeLinearFillOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TreeLinearFillOperator.java
index a1e372c7a28..6e894c983e0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TreeLinearFillOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TreeLinearFillOperator.java
@@ -19,9 +19,9 @@
 
 package org.apache.iotdb.db.queryengine.execution.operator.process;
 
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.ILinearFill;
 import org.apache.iotdb.db.queryengine.execution.operator.Operator;
 import org.apache.iotdb.db.queryengine.execution.operator.OperatorContext;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.ILinearFill;
 
 import org.apache.tsfile.block.column.Column;
 import org.apache.tsfile.read.common.block.TsBlock;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/AccumulatorFactory.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/AccumulatorFactory.java
index 1a4b9245cc4..2d4cb2942fc 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/AccumulatorFactory.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/AccumulatorFactory.java
@@ -21,6 +21,7 @@ package 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.agg
 
 import org.apache.iotdb.common.rpc.thrift.TAggregationType;
 import org.apache.iotdb.commons.udf.utils.UDFDataTypeTransformer;
+import org.apache.iotdb.db.calc_commons.plan.udf.TableUDFUtils;
 import 
org.apache.iotdb.db.node_commons.execution.operator.source.relational.aggregation.grouped.UpdateMemory;
 import 
org.apache.iotdb.db.node_commons.execution.operator.source.relational.aggregation.grouped.hash.hash.MarkDistinctHash;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
@@ -54,7 +55,6 @@ import 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggr
 import 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggregation.grouped.GroupedVarianceAccumulator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggregation.grouped.IntGroupedApproxMostFrequentAccumulator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggregation.grouped.LongGroupedApproxMostFrequentAccumulator;
-import org.apache.iotdb.db.queryengine.plan.udf.TableUDFUtils;
 import org.apache.iotdb.udf.api.customizer.parameter.FunctionArguments;
 import org.apache.iotdb.udf.api.relational.AggregateFunction;
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowFunctionsTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowFunctionsTask.java
index b99e8c6fbf3..0feb6cda37a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowFunctionsTask.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowFunctionsTask.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.commons.udf.UDFInformation;
 import org.apache.iotdb.commons.udf.UDFType;
 import 
org.apache.iotdb.commons.udf.builtin.relational.TableBuiltinAggregationFunction;
 import 
org.apache.iotdb.commons.udf.builtin.relational.TableBuiltinScalarFunction;
+import org.apache.iotdb.db.calc_commons.plan.udf.TableUDFUtils;
 import 
org.apache.iotdb.db.node_commons.plan.relational.function.TableBuiltinTableFunction;
 import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
 import org.apache.iotdb.db.queryengine.common.header.DatasetHeaderFactory;
@@ -35,7 +36,6 @@ import 
org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTas
 import org.apache.iotdb.db.queryengine.plan.udf.BuiltinAggregationFunction;
 import org.apache.iotdb.db.queryengine.plan.udf.BuiltinScalarFunction;
 import 
org.apache.iotdb.db.queryengine.plan.udf.BuiltinTimeSeriesGeneratingFunction;
-import org.apache.iotdb.db.queryengine.plan.udf.TableUDFUtils;
 import org.apache.iotdb.db.queryengine.plan.udf.TreeUDFUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/DataNodeTableOperatorGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/DataNodeTableOperatorGenerator.java
index 82fc54055a5..7659c54c8e7 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/DataNodeTableOperatorGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/DataNodeTableOperatorGenerator.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.schema.table.TsTable;
 import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
+import 
org.apache.iotdb.db.calc_commons.execution.relational.ColumnTransformerBuilder;
 import org.apache.iotdb.db.calc_commons.plan.planner.TableOperatorGenerator;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.leaf.LeafColumnTransformer;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.unary.scalar.DateBinFunctionColumnTransformer;
@@ -88,7 +89,6 @@ import 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.Tree
 import 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.TreeToTableViewAdaptorOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggregation.LastDescAccumulator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggregation.TableAggregator;
-import 
org.apache.iotdb.db.queryengine.execution.relational.ColumnTransformerBuilder;
 import 
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.DataNodeTTLCache;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.read.CountSchemaMergeNode;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorGeneratorUtil.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorGeneratorUtil.java
index 071b064c141..9815bb4cd44 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorGeneratorUtil.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorGeneratorUtil.java
@@ -28,7 +28,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-import static 
org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.UNKNOWN_DATATYPE;
+import static 
org.apache.iotdb.db.calc_commons.plan.planner.OperatorGeneratorUtils.UNKNOWN_DATATYPE;
 
 public class OperatorGeneratorUtil {
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
index fd5a73de56f..52fdb04822e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
@@ -28,6 +28,15 @@ import org.apache.iotdb.commons.path.IFullPath;
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.NonAlignedFullPath;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.BinaryConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.BooleanConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.DoubleConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.FloatConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.IntConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.LongConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.identity.IdentityFill;
+import org.apache.iotdb.db.calc_commons.plan.planner.OperatorGeneratorUtils;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.ColumnTransformer;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.leaf.LeafColumnTransformer;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -85,37 +94,6 @@ import 
org.apache.iotdb.db.queryengine.execution.operator.process.TreeLinearFill
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TreeMergeSortOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TreeSortOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TreeTopKOperator;
-import org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFillFilter;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.ILinearFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.BinaryConstantFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.BooleanConstantFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.DoubleConstantFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.FloatConstantFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.IntConstantFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.LongConstantFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.filter.FixedIntervalFillFilter;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.filter.MonthIntervalMSFillFilter;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.filter.MonthIntervalNSFillFilter;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.filter.MonthIntervalUSFillFilter;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.identity.IdentityFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.identity.IdentityLinearFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.linear.DoubleLinearFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.linear.FloatLinearFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.linear.IntLinearFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.linear.LongLinearFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.BinaryPreviousFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.BinaryPreviousFillWithTimeDuration;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.BooleanPreviousFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.BooleanPreviousFillWithTimeDuration;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.DoublePreviousFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.DoublePreviousFillWithTimeDuration;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.FloatPreviousFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.FloatPreviousFillWithTimeDuration;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.IntPreviousFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.IntPreviousFillWithTimeDuration;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.LongPreviousFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.LongPreviousFillWithTimeDuration;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.join.FullOuterTimeJoinOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.join.HorizontallyConcatOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.join.InnerTimeJoinOperator;
@@ -291,7 +269,6 @@ import 
org.apache.tsfile.read.filter.operator.TimeFilterOperators.TimeGtEq;
 import org.apache.tsfile.read.reader.series.PaginationController;
 import org.apache.tsfile.utils.Binary;
 import org.apache.tsfile.utils.Pair;
-import org.apache.tsfile.utils.TimeDuration;
 import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.slf4j.Logger;
@@ -328,7 +305,6 @@ import static 
org.apache.iotdb.db.queryengine.plan.expression.leaf.TimestampOper
 import static 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.AggregationDescriptor.getAggregationTypeByFuncName;
 import static 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.SeriesScanOptions.updateFilterUsingTTL;
 import static 
org.apache.iotdb.db.queryengine.plan.statement.component.Ordering.ASC;
-import static 
org.apache.iotdb.db.utils.TimestampPrecisionUtils.TIMESTAMP_PRECISION;
 
 /** This Visitor is responsible for transferring PlanNode Tree to Operator 
Tree. */
 public class OperatorTreeGenerator implements PlanVisitor<Operator, 
LocalExecutionPlanContext> {
@@ -347,14 +323,10 @@ public class OperatorTreeGenerator implements 
PlanVisitor<Operator, LocalExecuti
 
   public static final IdentityFill IDENTITY_FILL = new IdentityFill();
 
-  private static final IdentityLinearFill IDENTITY_LINEAR_FILL = new 
IdentityLinearFill();
-
   private static final Comparator<Binary> ASC_BINARY_COMPARATOR = 
Comparator.naturalOrder();
 
   private static final Comparator<Binary> DESC_BINARY_COMPARATOR = 
Comparator.reverseOrder();
 
-  public static final String UNKNOWN_DATATYPE = "Unknown data type: ";
-
   @Override
   public Operator visitPlan(PlanNode node, LocalExecutionPlanContext context) {
     throw new UnsupportedOperationException("should call the concrete 
visitXX() method");
@@ -1350,7 +1322,7 @@ public class OperatorTreeGenerator implements 
PlanVisitor<Operator, LocalExecuti
       case PREVIOUS:
         return new TreeFillOperator(
             operatorContext,
-            getPreviousFill(
+            OperatorGeneratorUtils.getPreviousFill(
                 inputColumns,
                 inputDataTypes,
                 descriptor.getTimeDurationThreshold(),
@@ -1358,7 +1330,9 @@ public class OperatorTreeGenerator implements 
PlanVisitor<Operator, LocalExecuti
             child);
       case LINEAR:
         return new TreeLinearFillOperator(
-            operatorContext, getLinearFill(inputColumns, inputDataTypes), 
child);
+            operatorContext,
+            OperatorGeneratorUtils.getLinearFill(inputColumns, inputDataTypes),
+            child);
       default:
         throw new IllegalArgumentException("Unknown fill policy: " + 
fillPolicy);
     }
@@ -1398,133 +1372,13 @@ public class OperatorTreeGenerator implements 
PlanVisitor<Operator, LocalExecuti
           constantFill[i] = new DoubleConstantFill(literal.getDouble());
           break;
         default:
-          throw new IllegalArgumentException(UNKNOWN_DATATYPE + 
inputDataTypes.get(i));
+          throw new IllegalArgumentException(
+              OperatorGeneratorUtils.UNKNOWN_DATATYPE + inputDataTypes.get(i));
       }
     }
     return constantFill;
   }
 
-  public static IFill[] getPreviousFill(
-      int inputColumns,
-      List<TSDataType> inputDataTypes,
-      TimeDuration timeDurationThreshold,
-      ZoneId zoneId) {
-    IFillFilter filter;
-    if (timeDurationThreshold == null) {
-      filter = null;
-    } else if (!timeDurationThreshold.containsMonth()) {
-      filter = new 
FixedIntervalFillFilter(timeDurationThreshold.nonMonthDuration);
-    } else {
-      switch (TIMESTAMP_PRECISION) {
-        case "ms":
-          filter =
-              new MonthIntervalMSFillFilter(
-                  timeDurationThreshold.monthDuration,
-                  timeDurationThreshold.nonMonthDuration,
-                  zoneId);
-          break;
-        case "us":
-          filter =
-              new MonthIntervalUSFillFilter(
-                  timeDurationThreshold.monthDuration,
-                  timeDurationThreshold.nonMonthDuration,
-                  zoneId);
-          break;
-        case "ns":
-          filter =
-              new MonthIntervalNSFillFilter(
-                  timeDurationThreshold.monthDuration,
-                  timeDurationThreshold.nonMonthDuration,
-                  zoneId);
-          break;
-        default:
-          // this case will never reach
-          throw new UnsupportedOperationException(
-              "not supported time_precision: " + TIMESTAMP_PRECISION);
-      }
-    }
-
-    IFill[] previousFill = new IFill[inputColumns];
-    for (int i = 0; i < inputColumns; i++) {
-      switch (inputDataTypes.get(i)) {
-        case BOOLEAN:
-          previousFill[i] =
-              filter == null
-                  ? new BooleanPreviousFill()
-                  : new BooleanPreviousFillWithTimeDuration(filter);
-          break;
-        case TEXT:
-        case STRING:
-        case BLOB:
-        case OBJECT:
-          previousFill[i] =
-              filter == null
-                  ? new BinaryPreviousFill()
-                  : new BinaryPreviousFillWithTimeDuration(filter);
-          break;
-        case INT32:
-        case DATE:
-          previousFill[i] =
-              filter == null ? new IntPreviousFill() : new 
IntPreviousFillWithTimeDuration(filter);
-          break;
-        case INT64:
-        case TIMESTAMP:
-          previousFill[i] =
-              filter == null
-                  ? new LongPreviousFill()
-                  : new LongPreviousFillWithTimeDuration(filter);
-          break;
-        case FLOAT:
-          previousFill[i] =
-              filter == null
-                  ? new FloatPreviousFill()
-                  : new FloatPreviousFillWithTimeDuration(filter);
-          break;
-        case DOUBLE:
-          previousFill[i] =
-              filter == null
-                  ? new DoublePreviousFill()
-                  : new DoublePreviousFillWithTimeDuration(filter);
-          break;
-        default:
-          throw new IllegalArgumentException(UNKNOWN_DATATYPE + 
inputDataTypes.get(i));
-      }
-    }
-    return previousFill;
-  }
-
-  public static ILinearFill[] getLinearFill(int inputColumns, List<TSDataType> 
inputDataTypes) {
-    ILinearFill[] linearFill = new ILinearFill[inputColumns];
-    for (int i = 0; i < inputColumns; i++) {
-      switch (inputDataTypes.get(i)) {
-        case INT32:
-        case DATE:
-          linearFill[i] = new IntLinearFill();
-          break;
-        case INT64:
-        case TIMESTAMP:
-          linearFill[i] = new LongLinearFill();
-          break;
-        case FLOAT:
-          linearFill[i] = new FloatLinearFill();
-          break;
-        case DOUBLE:
-          linearFill[i] = new DoubleLinearFill();
-          break;
-        case BOOLEAN:
-        case TEXT:
-        case STRING:
-        case BLOB:
-        case OBJECT:
-          linearFill[i] = IDENTITY_LINEAR_FILL;
-          break;
-        default:
-          throw new IllegalArgumentException(UNKNOWN_DATATYPE + 
inputDataTypes.get(i));
-      }
-    }
-    return linearFill;
-  }
-
   @Override
   public Operator visitTransform(TransformNode node, LocalExecutionPlanContext 
context) {
     final OperatorContext operatorContext =
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionTreeUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionTreeUtils.java
index e2bd46ffeb6..18a367b010f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionTreeUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionTreeUtils.java
@@ -20,6 +20,7 @@
 package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
 
 import 
org.apache.iotdb.commons.udf.builtin.relational.TableBuiltinAggregationFunction;
+import org.apache.iotdb.db.calc_commons.plan.udf.TableUDFUtils;
 import 
org.apache.iotdb.db.node_commons.plan.relational.sql.ast.DereferenceExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.FunctionCall;
@@ -27,7 +28,6 @@ import 
org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
 import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DefaultExpressionTraversalVisitor;
-import org.apache.iotdb.db.queryengine.plan.udf.TableUDFUtils;
 
 import com.google.common.collect.ImmutableList;
 
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 9d8992ae3bb..8d6d7161567 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
@@ -259,8 +259,4 @@ public class PredicatePushIntoMetadataChecker extends 
AstVisitor<Boolean, Void>
   protected Boolean visitNullIfExpression(final NullIfExpression node, final 
Void context) {
     return Boolean.FALSE;
   }
-
-  public static boolean isStringLiteral(final Expression expression) {
-    return expression instanceof StringLiteral;
-  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableMetadataImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableMetadataImpl.java
index ac8f4d725e5..c6351934348 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableMetadataImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableMetadataImpl.java
@@ -29,6 +29,7 @@ import 
org.apache.iotdb.commons.udf.builtin.relational.TableBuiltinAggregationFu
 import 
org.apache.iotdb.commons.udf.builtin.relational.TableBuiltinScalarFunction;
 import org.apache.iotdb.commons.udf.utils.UDFDataTypeTransformer;
 import 
org.apache.iotdb.db.calc_commons.plan.relational.metadata.CommonMetadataUtils;
+import org.apache.iotdb.db.calc_commons.plan.udf.TableUDFUtils;
 import 
org.apache.iotdb.db.exception.load.LoadAnalyzeTableColumnDisorderException;
 import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.node_commons.common.SessionInfo;
@@ -51,7 +52,6 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.TableDev
 import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.TableDeviceSchemaValidator;
 import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.TableHeaderSchemaValidator;
 import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
-import org.apache.iotdb.db.queryengine.plan.udf.TableUDFUtils;
 import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
 import org.apache.iotdb.db.utils.constant.SqlConstant;
 import org.apache.iotdb.udf.api.customizer.analysis.AggregateFunctionAnalysis;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java
index 888f3f51e81..c061fed4405 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.commons.schema.column.ColumnHeader;
 import org.apache.iotdb.commons.schema.filter.SchemaFilter;
 import org.apache.iotdb.commons.schema.table.TsTable;
 import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
+import 
org.apache.iotdb.db.calc_commons.execution.relational.ColumnTransformerBuilder;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.ColumnTransformer;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.leaf.LeafColumnTransformer;
 import org.apache.iotdb.db.node_commons.common.SessionInfo;
@@ -35,7 +36,6 @@ import 
org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import 
org.apache.iotdb.db.queryengine.execution.operator.schema.source.DeviceBlackListConstructor;
 import 
org.apache.iotdb.db.queryengine.execution.operator.schema.source.TableDeviceQuerySource;
-import 
org.apache.iotdb.db.queryengine.execution.relational.ColumnTransformerBuilder;
 import org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils;
 import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
 import org.apache.iotdb.db.queryengine.plan.planner.LocalExecutionPlanner;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
index 82bbf304651..25d65f513a5 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
@@ -37,6 +37,7 @@ import 
org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
 import org.apache.iotdb.commons.utils.FileUtils;
 import org.apache.iotdb.commons.utils.PathUtils;
 import org.apache.iotdb.consensus.ConsensusFactory;
+import 
org.apache.iotdb.db.calc_commons.execution.relational.ColumnTransformerBuilder;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.ColumnTransformer;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.leaf.LeafColumnTransformer;
 import org.apache.iotdb.db.conf.IoTDBConfig;
@@ -54,7 +55,6 @@ import 
org.apache.iotdb.db.queryengine.common.schematree.ClusterSchemaTree;
 import 
org.apache.iotdb.db.queryengine.execution.operator.schema.source.DeviceAttributeUpdater;
 import 
org.apache.iotdb.db.queryengine.execution.operator.schema.source.DeviceBlackListConstructor;
 import 
org.apache.iotdb.db.queryengine.execution.operator.schema.source.TableDeviceQuerySource;
-import 
org.apache.iotdb.db.queryengine.execution.relational.ColumnTransformerBuilder;
 import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
 import org.apache.iotdb.db.queryengine.plan.planner.LocalExecutionPlanner;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.AlterEncodingCompressorNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/FillOperatorTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/FillOperatorTest.java
index 3cac4643200..bec4de93bf4 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/FillOperatorTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/FillOperatorTest.java
@@ -19,6 +19,11 @@
 package org.apache.iotdb.db.queryengine.execution.operator;
 
 import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.constant.DoubleConstantFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter.FixedIntervalFillFilter;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.IntPreviousFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.previous.IntPreviousFillWithTimeDuration;
 import org.apache.iotdb.db.node_commons.plan.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.db.queryengine.common.FragmentInstanceId;
 import org.apache.iotdb.db.queryengine.common.PlanFragmentId;
@@ -27,11 +32,6 @@ import 
org.apache.iotdb.db.queryengine.execution.driver.DriverContext;
 import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContext;
 import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceStateMachine;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TreeFillOperator;
-import org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.constant.DoubleConstantFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.filter.FixedIntervalFillFilter;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.IntPreviousFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.previous.IntPreviousFillWithTimeDuration;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.enums.TSDataType;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/OperatorMemoryTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/OperatorMemoryTest.java
index 2e7dfb726d2..186677df733 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/OperatorMemoryTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/OperatorMemoryTest.java
@@ -25,6 +25,8 @@ import org.apache.iotdb.commons.path.AlignedFullPath;
 import org.apache.iotdb.commons.path.IFullPath;
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.NonAlignedFullPath;
+import org.apache.iotdb.db.calc_commons.execution.operator.process.fill.IFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.linear.LinearFill;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.ColumnTransformer;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.binary.ArithmeticAdditionColumnTransformer;
 import 
org.apache.iotdb.db.calc_commons.transformation.dag.column.binary.CompareLessEqualColumnTransformer;
@@ -52,8 +54,6 @@ import 
org.apache.iotdb.db.queryengine.execution.operator.process.TreeFillOperat
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TreeIntoOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TreeLinearFillOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TreeSortOperator;
-import org.apache.iotdb.db.queryengine.execution.operator.process.fill.IFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.linear.LinearFill;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.join.FullOuterTimeJoinOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.join.HorizontallyConcatOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.last.LastQueryCollectOperator;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/TreeLinearFillOperatorTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/TreeLinearFillOperatorTest.java
index 778c381a581..039db3ded11 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/TreeLinearFillOperatorTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/TreeLinearFillOperatorTest.java
@@ -19,6 +19,10 @@
 package org.apache.iotdb.db.queryengine.execution.operator;
 
 import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.ILinearFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.identity.IdentityLinearFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.linear.FloatLinearFill;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.linear.LinearFill;
 import org.apache.iotdb.db.node_commons.plan.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.db.queryengine.common.FragmentInstanceId;
 import org.apache.iotdb.db.queryengine.common.PlanFragmentId;
@@ -27,10 +31,6 @@ import 
org.apache.iotdb.db.queryengine.execution.driver.DriverContext;
 import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContext;
 import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceStateMachine;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TreeLinearFillOperator;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.ILinearFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.identity.IdentityLinearFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.linear.FloatLinearFill;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.fill.linear.LinearFill;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.enums.TSDataType;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalFillFilterTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalFillFilterTest.java
index 04c81eb15f7..2cc5e6bb172 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalFillFilterTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/filter/MonthIntervalFillFilterTest.java
@@ -19,6 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.execution.operator.process.fill.filter;
 
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter.MonthIntervalMSFillFilter;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter.MonthIntervalNSFillFilter;
+import 
org.apache.iotdb.db.calc_commons.execution.operator.process.fill.filter.MonthIntervalUSFillFilter;
+
 import org.junit.Test;
 
 import java.time.Instant;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMetadata.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMetadata.java
index bbcbfd169af..f152a9edff2 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMetadata.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMetadata.java
@@ -27,6 +27,7 @@ import org.apache.iotdb.commons.path.PathPatternTree;
 import org.apache.iotdb.commons.schema.table.InsertNodeMeasurementInfo;
 import org.apache.iotdb.commons.schema.table.TsTable;
 import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
+import org.apache.iotdb.db.calc_commons.plan.udf.TableUDFUtils;
 import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.node_commons.common.SessionInfo;
 import org.apache.iotdb.db.node_commons.plan.relational.function.OperatorType;
@@ -59,7 +60,6 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.TreeDeviceViewSc
 import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.TableHeaderSchemaValidator;
 import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
 import org.apache.iotdb.db.queryengine.plan.udf.BuiltinAggregationFunction;
-import org.apache.iotdb.db.queryengine.plan.udf.TableUDFUtils;
 import org.apache.iotdb.db.schemaengine.table.InformationSchemaUtils;
 import org.apache.iotdb.mpp.rpc.thrift.TRegionRouteReq;
 import org.apache.iotdb.udf.api.relational.TableFunction;

Reply via email to