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

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

commit b68e924e1de716313441dd64a55069c166ae3594
Author: JackieTien97 <[email protected]>
AuthorDate: Mon Jan 12 14:16:07 2026 +0800

    Disable READ_OBJECT Function
---
 .../it/query/object/IoTDBObjectQuery2IT.java       | 326 ---------------------
 .../it/query/object/IoTDBObjectQueryIT.java        | 309 -------------------
 .../relational/ColumnTransformerBuilder.java       |  36 ---
 .../iotdb/db/queryengine/plan/QueryInfo.java       |  56 ++++
 .../iotdb/db/queryengine/plan/StatedQueryInfo.java |  22 ++
 .../relational/metadata/TableMetadataImpl.java     |  18 --
 .../binary/ReadObject2ColumnTransformer.java       |  78 -----
 .../ternary/ReadObject3ColumnTransformer.java      |  99 -------
 .../unary/scalar/ReadObjectColumnTransformer.java  | 126 --------
 .../relational/TableBuiltinScalarFunction.java     |   1 -
 10 files changed, 78 insertions(+), 993 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/object/IoTDBObjectQuery2IT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/object/IoTDBObjectQuery2IT.java
deleted file mode 100644
index d5d194b0416..00000000000
--- 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/object/IoTDBObjectQuery2IT.java
+++ /dev/null
@@ -1,326 +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.relational.it.query.object;
-
-import org.apache.iotdb.isession.ITableSession;
-import org.apache.iotdb.isession.SessionDataSet;
-import org.apache.iotdb.it.env.EnvFactory;
-import org.apache.iotdb.it.framework.IoTDBTestRunner;
-import org.apache.iotdb.itbase.category.TableClusterIT;
-import org.apache.iotdb.itbase.category.TableLocalStandaloneIT;
-import org.apache.iotdb.itbase.env.BaseEnv;
-import org.apache.iotdb.rpc.IoTDBConnectionException;
-import org.apache.iotdb.rpc.StatementExecutionException;
-
-import org.apache.tsfile.utils.Binary;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
-
-import java.sql.Connection;
-import java.sql.Statement;
-import java.time.LocalDate;
-
-@RunWith(IoTDBTestRunner.class)
-@Category({TableLocalStandaloneIT.class, TableClusterIT.class})
-public class IoTDBObjectQuery2IT {
-
-  private static final String DATABASE_NAME = "test";
-
-  @BeforeClass
-  public static void setUp() throws Exception {
-    
EnvFactory.getEnv().getConfig().getCommonConfig().setDataReplicationFactor(1);
-    EnvFactory.getEnv().initClusterEnvironment();
-    try (Connection connection = 
EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT);
-        Statement statement = connection.createStatement()) {
-      statement.execute("CREATE DATABASE " + DATABASE_NAME);
-      statement.execute("USE " + DATABASE_NAME);
-      statement.execute(
-          "CREATE TABLE table1(device STRING TAG, s4 DATE FIELD, s5 TIMESTAMP 
FIELD, s6 BLOB FIELD, s7 STRING FIELD, s8 OBJECT FIELD, s9 OBJECT FIELD)");
-      for (int i = 1; i <= 10; i++) {
-        for (int j = 0; j < 10; j++) {
-          statement.execute(
-              String.format(
-                  "insert into table1(time, device, s4, s5, s6, s7, s8) "
-                      + "values(%d, '%s', '%s', %d, %s, '%s', %s)",
-                  j,
-                  "d" + i,
-                  LocalDate.of(2024, 5, i % 31 + 1),
-                  j,
-                  "X'cafebabe'",
-                  j,
-                  "to_object(true, 0, X'cafebabe')"));
-        }
-      }
-    }
-  }
-
-  @AfterClass
-  public static void tearDown() {
-    EnvFactory.getEnv().cleanClusterEnvironment();
-  }
-
-  @Test
-  public void testObjectLength() throws IoTDBConnectionException, 
StatementExecutionException {
-    try (ITableSession session = 
EnvFactory.getEnv().getTableSessionConnection()) {
-      session.executeNonQueryStatement("USE " + DATABASE_NAME);
-      SessionDataSet sessionDataSet =
-          session.executeQueryStatement("select length(s8) from table1 limit 
1");
-      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
-      while (iterator.next()) {
-        long length = iterator.getLong(1);
-        Assert.assertEquals(4, length);
-      }
-    }
-  }
-
-  @Test
-  public void testReadObject() throws IoTDBConnectionException, 
StatementExecutionException {
-    try (ITableSession session = 
EnvFactory.getEnv().getTableSessionConnection()) {
-      session.executeNonQueryStatement("USE " + DATABASE_NAME);
-      SessionDataSet sessionDataSet =
-          session.executeQueryStatement("select read_object(s8) from table1 
where device = 'd2'");
-      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
-      byte[] expected = new byte[] {(byte) 0xCA, (byte) 0xFE, (byte) 0xBA, 
(byte) 0xBE};
-      while (iterator.next()) {
-        Binary blob = iterator.getBlob(1);
-        Assert.assertArrayEquals(expected, blob.getValues());
-      }
-
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select read_object(s8, 1) from table1 where device = 'd3'");
-      iterator = sessionDataSet.iterator();
-      expected = new byte[] {(byte) 0xFE, (byte) 0xBA, (byte) 0xBE};
-      while (iterator.next()) {
-        Binary blob = iterator.getBlob(1);
-        Assert.assertArrayEquals(expected, blob.getValues());
-      }
-      sessionDataSet.close();
-
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select read_object(s8, 1, 2) from table1 where device = 'd1'");
-      iterator = sessionDataSet.iterator();
-      expected = new byte[] {(byte) 0xFE, (byte) 0xBA};
-      while (iterator.next()) {
-        Binary blob = iterator.getBlob(1);
-        Assert.assertArrayEquals(expected, blob.getValues());
-      }
-      sessionDataSet.close();
-
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select read_object(s8, 1, 1000) from table1 where device = 
'd1'");
-      iterator = sessionDataSet.iterator();
-      expected = new byte[] {(byte) 0xFE, (byte) 0xBA, (byte) 0xBE};
-      while (iterator.next()) {
-        Binary blob = iterator.getBlob(1);
-        Assert.assertArrayEquals(expected, blob.getValues());
-      }
-      sessionDataSet.close();
-
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select count(*) from table1 where device = 'd1' and s6 = 
read_object(s8)");
-      iterator = sessionDataSet.iterator();
-      while (iterator.next()) {
-        long count = iterator.getLong(1);
-        Assert.assertEquals(10, count);
-      }
-      sessionDataSet.close();
-
-      // read_object are not pushed down. Read remote files
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select read_object(t1_s8) from (select t1.s8 as t1_s8, t2.s8 as 
t2_s8 from table1 as t1 inner join table1 as t2 using(time))");
-      iterator = sessionDataSet.iterator();
-      expected = new byte[] {(byte) 0xCA, (byte) 0xFE, (byte) 0xBA, (byte) 
0xBE};
-      while (iterator.next()) {
-        Binary blob = iterator.getBlob(1);
-        Assert.assertArrayEquals(expected, blob.getValues());
-      }
-      sessionDataSet.close();
-    }
-  }
-
-  @Test
-  public void testFunctionAndClauses()
-      throws IoTDBConnectionException, StatementExecutionException {
-    try (ITableSession session = 
EnvFactory.getEnv().getTableSessionConnection()) {
-      session.executeNonQueryStatement("USE " + DATABASE_NAME);
-
-      SessionDataSet sessionDataSet =
-          session.executeQueryStatement(
-              "select length(s8) from table1 where device = 'd2' and s8 is not 
null limit 1");
-      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
-      while (iterator.next()) {
-        Assert.assertEquals(4, iterator.getLong(1));
-      }
-      sessionDataSet.close();
-
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select count(s8), first(s8), last(s8), first_by(s8, time), 
last_by(s8, time) from table1 where device = 'd1' and cast(s8 as string) = 
'(Object) 4 B' and try_cast(s8 as string) = '(Object) 4 B'");
-      iterator = sessionDataSet.iterator();
-      while (iterator.next()) {
-        Assert.assertEquals(10, iterator.getLong(1));
-        Assert.assertEquals("(Object) 4 B", iterator.getString(2));
-        Assert.assertEquals("(Object) 4 B", iterator.getString(3));
-        Assert.assertEquals("(Object) 4 B", iterator.getString(4));
-        Assert.assertEquals("(Object) 4 B", iterator.getString(5));
-      }
-      sessionDataSet.close();
-
-      sessionDataSet = session.executeQueryStatement("select coalesce(s9, s8) 
from table1");
-      iterator = sessionDataSet.iterator();
-      while (iterator.next()) {
-        Assert.assertEquals("(Object) 4 B", iterator.getString(1));
-      }
-      sessionDataSet.close();
-
-      // MATCH_RECOGNIZE
-      Assert.assertThrows(
-          StatementExecutionException.class,
-          () ->
-              session.executeNonQueryStatement(
-                  "select m.cnt from table1 match_recognize (order by s8 
measures RPR_LAST(time) as cnt one row per match pattern (B+) define B as B.s6 
= prev(B.s6)) as m"));
-      Assert.assertThrows(
-          StatementExecutionException.class,
-          () ->
-              session.executeNonQueryStatement(
-                  "select m.cnt from table1 match_recognize (partition by s8 
measures RPR_LAST(time) as cnt one row per match pattern (B+) define B as B.s6 
= prev(B.s6)) as m"));
-
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select m.value from table1 match_recognize(partition by s6 
measures prev(s8) as value one row per match pattern (B+) define B as 
B.s6=prev(B.s6)) as m");
-      iterator = sessionDataSet.iterator();
-      while (iterator.next()) {
-        Assert.assertEquals("(Object) 4 B", iterator.getString(1));
-      }
-      sessionDataSet.close();
-
-      // WHERE
-      session.executeQueryStatement(
-          "select time, s8 from table1 where device = 'd10' and s8 is not 
null");
-      iterator = sessionDataSet.iterator();
-      while (iterator.next()) {
-        Assert.assertEquals("(Object) 4 B", iterator.getString(2));
-      }
-      sessionDataSet.close();
-
-      // GROUP BY
-      Assert.assertThrows(
-          StatementExecutionException.class,
-          () -> session.executeQueryStatement("select count(*) from table1 
group by s8"));
-
-      // ORDER BY
-      Assert.assertThrows(
-          StatementExecutionException.class,
-          () -> session.executeQueryStatement("select count(*) from table1 
order by s8"));
-
-      // FILL
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select time, s8 from table1 where device = 'd10' fill method 
linear");
-      sessionDataSet.close();
-
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select time, s8 from table1 where device = 'd10' fill method 
previous");
-      iterator = sessionDataSet.iterator();
-      while (iterator.next()) {
-        Assert.assertEquals("(Object) 4 B", iterator.getString(2));
-      }
-      sessionDataSet.close();
-
-      // HAVING
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select device, count(s8) from table1 group by device having 
count(s8) > 0");
-      iterator = sessionDataSet.iterator();
-      while (iterator.next()) {
-        long count = iterator.getLong(2);
-        Assert.assertEquals(10, count);
-      }
-      sessionDataSet.close();
-
-      // WINDOW
-      Assert.assertThrows(
-          StatementExecutionException.class,
-          () ->
-              session.executeQueryStatement(
-                  "select *, nth_value(s8,2) over(partition by s8) from 
table1"));
-      Assert.assertThrows(
-          StatementExecutionException.class,
-          () ->
-              session.executeQueryStatement(
-                  "select *, nth_value(s8,2) over(order by s8) from table1"));
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select *, nth_value(s8,2) over(partition by device) from 
table1");
-      sessionDataSet.close();
-
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select *, lead(s8) over(partition by device order by time) from 
table1");
-      sessionDataSet.close();
-
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select *, first_value(s8) over(partition by device) from 
table1");
-      sessionDataSet.close();
-
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select *, last_value(s8) over(partition by device) from 
table1");
-      sessionDataSet.close();
-
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select *, lag(s8) over(partition by device order by time) from 
table1");
-      sessionDataSet.close();
-
-      // Table-value function
-      Assert.assertThrows(
-          StatementExecutionException.class,
-          () ->
-              session.executeQueryStatement(
-                  "select * from session(data => table1 partition by s8, 
timecol => 'time', gap => 1ms)"));
-      Assert.assertThrows(
-          StatementExecutionException.class,
-          () ->
-              session.executeQueryStatement(
-                  "select * from session(data => table1 order by s8, timecol 
=> 'time', gap => 1ms)"));
-      sessionDataSet =
-          session.executeQueryStatement(
-              "select * from hop(data => table1, timecol => 'time', slide => 
1ms, size => 2ms)");
-      iterator = sessionDataSet.iterator();
-      while (iterator.next()) {
-        String str = iterator.getString("s8");
-        Assert.assertEquals("(Object) 4 B", str);
-      }
-      sessionDataSet.close();
-    }
-  }
-}
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/object/IoTDBObjectQueryIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/object/IoTDBObjectQueryIT.java
deleted file mode 100644
index fadcf72d578..00000000000
--- 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/object/IoTDBObjectQueryIT.java
+++ /dev/null
@@ -1,309 +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.relational.it.query.object;
-
-import org.apache.iotdb.isession.ITableSession;
-import org.apache.iotdb.isession.SessionConfig;
-import org.apache.iotdb.isession.SessionDataSet;
-import org.apache.iotdb.it.env.EnvFactory;
-import org.apache.iotdb.it.framework.IoTDBTestRunner;
-import org.apache.iotdb.itbase.category.TableClusterIT;
-import org.apache.iotdb.itbase.category.TableLocalStandaloneIT;
-import org.apache.iotdb.itbase.env.BaseEnv;
-import org.apache.iotdb.rpc.IoTDBConnectionException;
-import org.apache.iotdb.rpc.StatementExecutionException;
-
-import org.apache.tsfile.enums.TSDataType;
-import org.apache.tsfile.read.common.Field;
-import org.apache.tsfile.read.common.RowRecord;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import static org.apache.iotdb.db.it.utils.TestUtils.prepareTableData;
-import static org.apache.iotdb.jdbc.IoTDBJDBCResultSet.OBJECT_ERR_MSG;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-@RunWith(IoTDBTestRunner.class)
-@Category({TableLocalStandaloneIT.class, TableClusterIT.class})
-public class IoTDBObjectQueryIT {
-
-  private static final String DATABASE_NAME = "test_db";
-
-  private static final String TIME_ZONE = "+00:00";
-
-  private static final String[] createSqls =
-      new String[] {
-        "CREATE DATABASE " + DATABASE_NAME,
-        "USE " + DATABASE_NAME,
-        "CREATE TABLE t1(device_id STRING TAG, o1 OBJECT, b1 BLOB, s1 STRING, 
l1 INT64, l2 INT64)",
-        "INSERT INTO t1(time, device_id, b1, o1, s1, l1, l2) VALUES(1, 'd1', 
X'cafebabe01', to_object(true, 0, X'cafebabe01'), 'cafebabe01', 0, 100)",
-        "INSERT INTO t1(time, device_id, b1, o1, s1, l1, l2) VALUES(2, 'd1', 
X'cafebabe0202', to_object(true, 0, X'cafebabe02'), 'cafebabe02', 0, 100)",
-        "INSERT INTO t1(time, device_id, b1, o1, s1, l1, l2) VALUES(3, 'd1', 
X'cafebabe0303', to_object(true, 0, X'cafebabe03'), 'cafebabe03', 0, 100)",
-        "INSERT INTO t1(time, device_id, b1, o1, s1, l1, l2) VALUES(4, 'd1', 
X'cafebabe04', to_object(true, 0, X'cafebabe04'), 'cafebabe04', 0, 100)",
-        "INSERT INTO t1(time, device_id, b1, o1, s1, l1, l2) VALUES(1, 'd2', 
X'cafebade01', to_object(true, 0, X'cafebade01'), 'cafebade01', 0, 100)",
-        "INSERT INTO t1(time, device_id, b1, o1, s1, l1, l2) VALUES(2, 'd2', 
X'cafebade0202', to_object(true, 0, X'cafebade02'), 'cafebade02', 0, 100)",
-        "INSERT INTO t1(time, device_id, b1, o1, s1, l1, l2) VALUES(3, 'd2', 
X'cafebade0302', to_object(true, 0, X'cafebade03'), 'cafebade03', 0, 100)",
-        "INSERT INTO t1(time, device_id, b1, o1, s1, l1, l2) VALUES(4, 'd2', 
X'cafebade04', to_object(true, 0, X'cafebade04'), 'cafebade04', 0, 100)",
-        "FLUSH",
-      };
-
-  @BeforeClass
-  public static void classSetUp() {
-    EnvFactory.getEnv().initClusterEnvironment();
-    prepareTableData(createSqls);
-  }
-
-  @AfterClass
-  public static void classTearDown() {
-    EnvFactory.getEnv().cleanClusterEnvironment();
-  }
-
-  @Test
-  public void jdbcTest() {
-    try (Connection connection =
-        EnvFactory.getEnv()
-            .getConnection(
-                SessionConfig.DEFAULT_USER,
-                SessionConfig.DEFAULT_PASSWORD,
-                BaseEnv.TABLE_SQL_DIALECT)) {
-      connection.setClientInfo("time_zone", TIME_ZONE);
-      try (Statement statement = connection.createStatement()) {
-        statement.execute("use " + DATABASE_NAME);
-        try (ResultSet resultSet =
-            statement.executeQuery(
-                "SELECT time, b1, o1, s1 FROM t1 WHERE device_id = 'd1' ORDER 
BY time")) {
-          int cnt = 0;
-          while (resultSet.next()) {
-            cnt++;
-            try {
-              resultSet.getBlob(3);
-              fail();
-            } catch (SQLException e) {
-              assertEquals(OBJECT_ERR_MSG, e.getMessage());
-            }
-
-            try {
-              resultSet.getBytes("o1");
-              fail();
-            } catch (SQLException e) {
-              assertEquals(OBJECT_ERR_MSG, e.getMessage());
-            }
-
-            String s = resultSet.getString(3);
-            assertEquals("(Object) 5 B", s);
-          }
-          assertEquals(4, cnt);
-        }
-
-        try (ResultSet resultSet =
-            statement.executeQuery(
-                "SELECT time, b1, READ_OBJECT(o1), s1 FROM t1 WHERE device_id 
= 'd2' AND READ_OBJECT(o1)=b1 ORDER BY time")) {
-          int cnt = 0;
-          String[] ans = {"0xcafebade01", "0xcafebade04"};
-          while (resultSet.next()) {
-            String s = resultSet.getString(3);
-            assertEquals(ans[cnt], s);
-            cnt++;
-          }
-          assertEquals(2, cnt);
-        }
-
-        try (ResultSet resultSet =
-            statement.executeQuery(
-                "SELECT time, b1, READ_OBJECT(o1, 0, -1), s1 FROM t1 WHERE 
device_id = 'd2' AND READ_OBJECT(o1)=b1 ORDER BY time")) {
-          int cnt = 0;
-          String[] ans = {"0xcafebade01", "0xcafebade04"};
-          while (resultSet.next()) {
-            String s = resultSet.getString(3);
-            assertEquals(ans[cnt], s);
-            cnt++;
-          }
-          assertEquals(2, cnt);
-        }
-
-        try (ResultSet resultSet =
-            statement.executeQuery(
-                "SELECT time, b1, READ_OBJECT(o1, l1), s1 FROM t1 WHERE 
device_id = 'd2' AND READ_OBJECT(o1)=b1 ORDER BY time")) {
-          int cnt = 0;
-          String[] ans = {"0xcafebade01", "0xcafebade04"};
-          while (resultSet.next()) {
-            String s = resultSet.getString(3);
-            assertEquals(ans[cnt], s);
-            cnt++;
-          }
-          assertEquals(2, cnt);
-        }
-
-        try (ResultSet resultSet =
-            statement.executeQuery(
-                "SELECT time, b1, READ_OBJECT(o1, l1, l2), s1 FROM t1 WHERE 
device_id = 'd2' AND READ_OBJECT(o1)=b1 ORDER BY time")) {
-          int cnt = 0;
-          String[] ans = {"0xcafebade01", "0xcafebade04"};
-          while (resultSet.next()) {
-            String s = resultSet.getString(3);
-            assertEquals(ans[cnt], s);
-            cnt++;
-          }
-          assertEquals(2, cnt);
-        }
-
-        try (ResultSet resultSet =
-            statement.executeQuery(
-                "SELECT time, b1, READ_OBJECT(o1, l1, -1), s1 FROM t1 WHERE 
device_id = 'd2' AND READ_OBJECT(o1)=b1 ORDER BY time")) {
-          int cnt = 0;
-          String[] ans = {"0xcafebade01", "0xcafebade04"};
-          while (resultSet.next()) {
-            String s = resultSet.getString(3);
-            assertEquals(ans[cnt], s);
-            cnt++;
-          }
-          assertEquals(2, cnt);
-        }
-
-        try (ResultSet resultSet =
-            statement.executeQuery(
-                "SELECT time, b1, READ_OBJECT(o1, 0, l2), s1 FROM t1 WHERE 
device_id = 'd2' AND READ_OBJECT(o1)=b1 ORDER BY time")) {
-          int cnt = 0;
-          String[] ans = {"0xcafebade01", "0xcafebade04"};
-          while (resultSet.next()) {
-            String s = resultSet.getString(3);
-            assertEquals(ans[cnt], s);
-            cnt++;
-          }
-          assertEquals(2, cnt);
-        }
-
-        try (ResultSet resultSet =
-            statement.executeQuery(
-                "SELECT time, b1, o1, s1 FROM t1 WHERE device_id = 'd1' FILL 
METHOD LINEAR")) {
-          int cnt = 0;
-          while (resultSet.next()) {
-            cnt++;
-            String s = resultSet.getString(3);
-            assertEquals("(Object) 5 B", s);
-          }
-          assertEquals(4, cnt);
-        }
-      }
-    } catch (SQLException e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
-  }
-
-  @Test
-  public void sessionTest() {
-    try (ITableSession session = 
EnvFactory.getEnv().getTableSessionConnection()) {
-      session.executeNonQueryStatement("USE " + DATABASE_NAME);
-
-      // SessionDataSet
-      try (SessionDataSet dataSet =
-          session.executeQueryStatement(
-              "SELECT time, b1, o1, s1 FROM t1 WHERE device_id = 'd1' ORDER BY 
time")) {
-        int cnt = 0;
-        while (dataSet.hasNext()) {
-          cnt++;
-          RowRecord rowRecord = dataSet.next();
-          Field field = rowRecord.getField(2);
-          String s = field.getStringValue();
-          assertEquals("(Object) 5 B", s);
-          Object blob = field.getObjectValue(TSDataType.OBJECT);
-          assertTrue(blob instanceof String);
-          assertEquals("(Object) 5 B", blob);
-
-          try {
-            field.getBinaryV();
-            fail();
-          } catch (UnsupportedOperationException e) {
-            assertEquals("OBJECT Type only support getStringValue", 
e.getMessage());
-          }
-        }
-        assertEquals(4, cnt);
-      }
-
-      // SessionDataSet.DataIterator
-      try (SessionDataSet dataSet =
-          session.executeQueryStatement(
-              "SELECT time, b1, o1, s1 FROM t1 WHERE device_id = 'd2' ORDER BY 
time")) {
-        SessionDataSet.DataIterator iterator = dataSet.iterator();
-        int cnt = 0;
-        while (iterator.next()) {
-          cnt++;
-          Object o = iterator.getObject(3);
-          assertTrue(o instanceof String);
-          assertEquals("(Object) 5 B", o);
-          String s = iterator.getString("o1");
-          assertEquals("(Object) 5 B", s);
-          try {
-            iterator.getBlob(3);
-            fail();
-          } catch (StatementExecutionException e) {
-            assertEquals("OBJECT Type only support getString", e.getMessage());
-          }
-        }
-        assertEquals(4, cnt);
-      }
-    } catch (IoTDBConnectionException | StatementExecutionException e) {
-      fail(e.getMessage());
-    }
-  }
-
-  @Test
-  public void testIllegalObjectValue() {
-    try (ITableSession session = 
EnvFactory.getEnv().getTableSessionConnection()) {
-      session.executeNonQueryStatement("USE " + DATABASE_NAME);
-      try {
-        session.executeNonQueryStatement(
-            "INSERT INTO t1(time, device_id, b1, o1, s1, l1, l2) VALUES(1, 
'd1', X'cafebabe01', 1, 'cafebabe01', 0, 100)");
-        fail();
-      } catch (StatementExecutionException e) {
-        Assert.assertTrue(e.getMessage().contains("data type is not 
consistent"));
-      }
-
-      try {
-        session.executeNonQueryStatement(
-            "INSERT INTO t1(time, device_id, b1, o1, s1, l1, l2) VALUES(1, 
'd1', X'cafebabe01', 'test', 'cafebabe01', 0, 100)");
-        fail();
-      } catch (StatementExecutionException e) {
-        Assert.assertTrue(e.getMessage().contains("data type is not 
consistent"));
-      }
-
-      try {
-        session.executeNonQueryStatement(
-            "INSERT INTO t1(time, device_id, b1, o1, s1, l1, l2) VALUES(1, 
'd1', X'cafebabe01', X'cafebabe01', 'cafebabe01', 0, 100)");
-      } catch (StatementExecutionException e) {
-        Assert.assertTrue(e.getMessage().contains("data type is not 
consistent"));
-      }
-    } catch (IoTDBConnectionException | StatementExecutionException e) {
-      fail(e.getMessage());
-    }
-  }
-}
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/queryengine/execution/relational/ColumnTransformerBuilder.java
index f34070c5e9a..7400aa7fb23 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/queryengine/execution/relational/ColumnTransformerBuilder.java
@@ -85,7 +85,6 @@ import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.CompareL
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.CompareNonEqualColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.HmacColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.Like2ColumnTransformer;
-import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.ReadObject2ColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.factory.HmacStrategiesFactory;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.leaf.ConstantColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.leaf.IdentityColumnTransformer;
@@ -106,7 +105,6 @@ import 
org.apache.iotdb.db.queryengine.transformation.dag.column.multi.LogicalOr
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.ternary.BetweenColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.ternary.Like3ColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.ternary.LpadColumnTransformer;
-import 
org.apache.iotdb.db.queryengine.transformation.dag.column.ternary.ReadObject3ColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.ternary.RpadColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.udf.UserDefineScalarFunctionTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.IsNullColumnTransformer;
@@ -170,7 +168,6 @@ import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.scalar.Ob
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.scalar.RTrim2ColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.scalar.RTrimColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.scalar.RadiansColumnTransformer;
-import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.scalar.ReadObjectColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.scalar.RegexpLike2ColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.scalar.RegexpLikeColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.scalar.Replace2ColumnTransformer;
@@ -1462,39 +1459,6 @@ public class ColumnTransformerBuilder
           this.process(children.get(0), context),
           this.process(children.get(1), context),
           this.process(children.get(2), context));
-    } else if (TableBuiltinScalarFunction.READ_OBJECT
-        .getFunctionName()
-        .equalsIgnoreCase(functionName)) {
-      ColumnTransformer first = this.process(children.get(0), context);
-      if (children.size() == 1) {
-        return new ReadObjectColumnTransformer(BLOB, first, 
context.fragmentInstanceContext);
-      } else if (children.size() == 2) {
-        Expression offset = children.get(1);
-        if (isLongLiteral(offset)) {
-          return new ReadObjectColumnTransformer(
-              BLOB,
-              ((LongLiteral) children.get(1)).getParsedValue(),
-              first,
-              context.fragmentInstanceContext);
-        } else {
-          return new ReadObject2ColumnTransformer(
-              BLOB, first, this.process(offset, context), 
context.fragmentInstanceContext);
-        }
-      } else {
-        if (isLongLiteral(children.get(1)) && isLongLiteral(children.get(2))) {
-          long offset = ((LongLiteral) children.get(1)).getParsedValue();
-          long length = ((LongLiteral) children.get(2)).getParsedValue();
-          return new ReadObjectColumnTransformer(
-              BLOB, offset, length, first, context.fragmentInstanceContext);
-        } else {
-          return new ReadObject3ColumnTransformer(
-              BLOB,
-              first,
-              this.process(children.get(1), context),
-              this.process(children.get(2), context),
-              context.fragmentInstanceContext);
-        }
-      }
     } else {
       // user defined function
       if (TableUDFUtils.isScalarFunction(functionName)) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/QueryInfo.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/QueryInfo.java
new file mode 100644
index 00000000000..cb4c99b020e
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/QueryInfo.java
@@ -0,0 +1,56 @@
+package org.apache.iotdb.db.queryengine.plan;
+
+public class QueryInfo {
+  private final String queryId;
+  private final long startTime;
+  private final long endTime;
+  private final long costTime;
+  private final String statement;
+  private final String user;
+  private final String clientHost;
+
+  public QueryInfo(
+      String queryId,
+      long startTime,
+      long endTime,
+      long costTime,
+      String statement,
+      String user,
+      String clientHost) {
+    this.queryId = queryId;
+    this.startTime = startTime;
+    this.endTime = endTime;
+    this.costTime = costTime;
+    this.statement = statement;
+    this.user = user;
+    this.clientHost = clientHost;
+  }
+
+  public String getQueryId() {
+    return queryId;
+  }
+
+  public long getStartTime() {
+    return startTime;
+  }
+
+  public long getEndTime() {
+    return endTime;
+  }
+
+  public long getCostTime() {
+    return costTime;
+  }
+
+  public String getStatement() {
+    return statement;
+  }
+
+  public String getUser() {
+    return user;
+  }
+
+  public String getClientHost() {
+    return clientHost;
+  }
+}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/StatedQueryInfo.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/StatedQueryInfo.java
new file mode 100644
index 00000000000..fc973026dcf
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/StatedQueryInfo.java
@@ -0,0 +1,22 @@
+package org.apache.iotdb.db.queryengine.plan;
+
+public class StatedQueryInfo extends QueryInfo {
+  private final String queryState;
+
+  public StatedQueryInfo(
+      String queryId,
+      long startTime,
+      long endTime,
+      long costTime,
+      String statement,
+      String user,
+      String clientHost,
+      String queryState) {
+    super(queryId, startTime, endTime, costTime, statement, user, clientHost);
+    this.queryState = queryState;
+  }
+
+  public String getQueryState() {
+    return queryState;
+  }
+}
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 7786876e19a..5df442d4d32 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
@@ -35,9 +35,7 @@ import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import org.apache.iotdb.db.queryengine.plan.analyze.ClusterPartitionFetcher;
-import org.apache.iotdb.db.queryengine.plan.analyze.IModelFetcher;
 import org.apache.iotdb.db.queryengine.plan.analyze.IPartitionFetcher;
-import org.apache.iotdb.db.queryengine.plan.analyze.ModelFetcher;
 import org.apache.iotdb.db.queryengine.plan.relational.function.OperatorType;
 import 
org.apache.iotdb.db.queryengine.plan.relational.function.TableBuiltinTableFunction;
 import 
org.apache.iotdb.db.queryengine.plan.relational.function.arithmetic.AdditionResolver;
@@ -99,8 +97,6 @@ public class TableMetadataImpl implements Metadata {
 
   private final DataNodeTableCache tableCache = 
DataNodeTableCache.getInstance();
 
-  private final IModelFetcher modelFetcher = ModelFetcher.getInstance();
-
   @Override
   public boolean tableExists(final QualifiedObjectName name) {
     return tableCache.getTable(name.getDatabaseName(), name.getObjectName(), 
false) != null;
@@ -1081,20 +1077,6 @@ public class TableMetadataImpl implements Metadata {
                 functionName));
       }
       return BLOB;
-    } else if (TableBuiltinScalarFunction.READ_OBJECT
-        .getFunctionName()
-        .equalsIgnoreCase(functionName)) {
-      if (argumentTypes.isEmpty()
-          || argumentTypes.size() > 3
-          || !isObjectType(argumentTypes.get(0))
-          || (argumentTypes.size() >= 2 && 
!isIntegerNumber(argumentTypes.get(1)))
-          || (argumentTypes.size() >= 3 && 
!isIntegerNumber(argumentTypes.get(2)))) {
-        throw new SemanticException(
-            "Scalar function "
-                + functionName.toLowerCase(Locale.ENGLISH)
-                + " must have at 1~3 arguments, and first argument must be 
OBJECT type, other arguments must be int32 or int64 type");
-      }
-      return BLOB;
     }
 
     // builtin aggregation function
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/ReadObject2ColumnTransformer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/ReadObject2ColumnTransformer.java
deleted file mode 100644
index e382f0f8f65..00000000000
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/ReadObject2ColumnTransformer.java
+++ /dev/null
@@ -1,78 +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.queryengine.transformation.dag.column.binary;
-
-import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContext;
-import 
org.apache.iotdb.db.queryengine.transformation.dag.column.ColumnTransformer;
-
-import org.apache.tsfile.block.column.Column;
-import org.apache.tsfile.block.column.ColumnBuilder;
-import org.apache.tsfile.read.common.type.Type;
-
-import java.util.Optional;
-
-import static 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.scalar.ReadObjectColumnTransformer.transform;
-
-public class ReadObject2ColumnTransformer extends BinaryColumnTransformer {
-
-  private final Optional<FragmentInstanceContext> fragmentInstanceContext;
-
-  public ReadObject2ColumnTransformer(
-      Type returnType,
-      ColumnTransformer leftTransformer,
-      ColumnTransformer rightTransformer,
-      Optional<FragmentInstanceContext> fragmentInstanceContext) {
-    super(returnType, leftTransformer, rightTransformer);
-    this.fragmentInstanceContext = fragmentInstanceContext;
-  }
-
-  @Override
-  protected void doTransform(
-      Column leftColumn, Column rightColumn, ColumnBuilder builder, int 
positionCount) {
-    for (int i = 0; i < positionCount; i++) {
-      if (!leftColumn.isNull(i) && !rightColumn.isNull(i)) {
-        transform(leftColumn, builder, i, rightColumn.getLong(i), -1, 
this.fragmentInstanceContext);
-      } else {
-        builder.appendNull();
-      }
-    }
-  }
-
-  @Override
-  protected void doTransform(
-      Column leftColumn,
-      Column rightColumn,
-      ColumnBuilder builder,
-      int positionCount,
-      boolean[] selection) {
-    for (int i = 0; i < positionCount; i++) {
-      if (selection[i] && !leftColumn.isNull(i) && !rightColumn.isNull(i)) {
-        transform(leftColumn, builder, i, rightColumn.getLong(i), -1, 
this.fragmentInstanceContext);
-      } else {
-        builder.appendNull();
-      }
-    }
-  }
-
-  @Override
-  protected void checkType() {
-    // do nothing
-  }
-}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/ternary/ReadObject3ColumnTransformer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/ternary/ReadObject3ColumnTransformer.java
deleted file mode 100644
index 73381ebfe90..00000000000
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/ternary/ReadObject3ColumnTransformer.java
+++ /dev/null
@@ -1,99 +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.queryengine.transformation.dag.column.ternary;
-
-import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContext;
-import 
org.apache.iotdb.db.queryengine.transformation.dag.column.ColumnTransformer;
-
-import org.apache.tsfile.block.column.Column;
-import org.apache.tsfile.block.column.ColumnBuilder;
-import org.apache.tsfile.read.common.type.Type;
-
-import java.util.Optional;
-
-import static 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.scalar.ReadObjectColumnTransformer.transform;
-
-public class ReadObject3ColumnTransformer extends TernaryColumnTransformer {
-
-  private final Optional<FragmentInstanceContext> fragmentInstanceContext;
-
-  public ReadObject3ColumnTransformer(
-      Type returnType,
-      ColumnTransformer firstColumnTransformer,
-      ColumnTransformer secondColumnTransformer,
-      ColumnTransformer thirdColumnTransformer,
-      Optional<FragmentInstanceContext> fragmentInstanceContext) {
-    super(returnType, firstColumnTransformer, secondColumnTransformer, 
thirdColumnTransformer);
-    this.fragmentInstanceContext = fragmentInstanceContext;
-  }
-
-  @Override
-  protected void checkType() {
-    // do nothing
-  }
-
-  @Override
-  protected void doTransform(
-      Column firstColumn,
-      Column secondColumn,
-      Column thirdColumn,
-      ColumnBuilder builder,
-      int positionCount) {
-    for (int i = 0; i < positionCount; i++) {
-      if (!firstColumn.isNull(i) && !secondColumn.isNull(i) && 
!thirdColumn.isNull(i)) {
-        transform(
-            firstColumn,
-            builder,
-            i,
-            secondColumn.getLong(i),
-            thirdColumn.getLong(i),
-            this.fragmentInstanceContext);
-      } else {
-        builder.appendNull();
-      }
-    }
-  }
-
-  @Override
-  protected void doTransform(
-      Column firstColumn,
-      Column secondColumn,
-      Column thirdColumn,
-      ColumnBuilder builder,
-      int positionCount,
-      boolean[] selection) {
-    for (int i = 0; i < positionCount; i++) {
-      if (selection[i]
-          && !firstColumn.isNull(i)
-          && !secondColumn.isNull(i)
-          && !thirdColumn.isNull(i)) {
-        transform(
-            firstColumn,
-            builder,
-            i,
-            secondColumn.getLong(i),
-            thirdColumn.getLong(i),
-            this.fragmentInstanceContext);
-      } else {
-        builder.appendNull();
-      }
-    }
-  }
-}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/unary/scalar/ReadObjectColumnTransformer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/unary/scalar/ReadObjectColumnTransformer.java
deleted file mode 100644
index 33b32de2327..00000000000
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/unary/scalar/ReadObjectColumnTransformer.java
+++ /dev/null
@@ -1,126 +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.queryengine.transformation.dag.column.unary.scalar;
-
-import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContext;
-import 
org.apache.iotdb.db.queryengine.transformation.dag.column.ColumnTransformer;
-import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.UnaryColumnTransformer;
-import org.apache.iotdb.db.utils.ObjectTypeUtils;
-
-import org.apache.tsfile.block.column.Column;
-import org.apache.tsfile.block.column.ColumnBuilder;
-import org.apache.tsfile.enums.TSDataType;
-import org.apache.tsfile.read.common.type.Type;
-import org.apache.tsfile.utils.Binary;
-import org.apache.tsfile.utils.Pair;
-
-import java.util.Optional;
-
-public class ReadObjectColumnTransformer extends UnaryColumnTransformer {
-
-  private final Optional<FragmentInstanceContext> fragmentInstanceContext;
-  private long offset = 0;
-  private long length = -1;
-
-  public ReadObjectColumnTransformer(
-      Type type,
-      ColumnTransformer childColumnTransformer,
-      Optional<FragmentInstanceContext> fragmentInstanceContext) {
-    super(type, childColumnTransformer);
-    this.fragmentInstanceContext = fragmentInstanceContext;
-  }
-
-  public ReadObjectColumnTransformer(
-      Type type,
-      long offset,
-      ColumnTransformer childColumnTransformer,
-      Optional<FragmentInstanceContext> fragmentInstanceContext) {
-    super(type, childColumnTransformer);
-    this.offset = offset;
-    this.fragmentInstanceContext = fragmentInstanceContext;
-  }
-
-  public ReadObjectColumnTransformer(
-      Type type,
-      long offset,
-      long length,
-      ColumnTransformer childColumnTransformer,
-      Optional<FragmentInstanceContext> fragmentInstanceContext) {
-    super(type, childColumnTransformer);
-    this.offset = offset;
-    this.length = length;
-    this.fragmentInstanceContext = fragmentInstanceContext;
-  }
-
-  @Override
-  protected void doTransform(Column column, ColumnBuilder columnBuilder) {
-    for (int i = 0, n = column.getPositionCount(); i < n; i++) {
-      if (!column.isNull(i)) {
-        transform(column, columnBuilder, i, this.offset, this.length, 
this.fragmentInstanceContext);
-      } else {
-        columnBuilder.appendNull();
-      }
-    }
-  }
-
-  @Override
-  protected void doTransform(Column column, ColumnBuilder columnBuilder, 
boolean[] selection) {
-    for (int i = 0, n = column.getPositionCount(); i < n; i++) {
-      if (selection[i] && !column.isNull(i)) {
-        transform(column, columnBuilder, i, this.offset, this.length, 
this.fragmentInstanceContext);
-      } else {
-        columnBuilder.appendNull();
-      }
-    }
-  }
-
-  public static void transform(
-      Column column,
-      ColumnBuilder columnBuilder,
-      int i,
-      long offset,
-      long length,
-      Optional<FragmentInstanceContext> fragmentInstanceContext) {
-    // BinaryColumn.getDataType() returns TSDataType.TEXT
-    if (TSDataType.TEXT == column.getDataType()) {
-      Binary binary = column.getBinary(i);
-      columnBuilder.writeBinary(readObject(binary, offset, length, 
fragmentInstanceContext));
-    } else {
-      throw new IllegalStateException("read_object function only accept a 
BinaryColumn.");
-    }
-  }
-
-  public static Binary readObject(
-      Binary binary,
-      long offset,
-      long length,
-      Optional<FragmentInstanceContext> fragmentInstanceContext) {
-    Pair<Long, String> objectLengthPathPair =
-        ObjectTypeUtils.parseObjectBinaryToSizeStringPathPair(binary);
-    long fileLength = objectLengthPathPair.getLeft();
-    String relativePath = objectLengthPathPair.getRight();
-    int actualReadSize =
-        ObjectTypeUtils.getActualReadSize(relativePath, fileLength, offset, 
length);
-    fragmentInstanceContext.ifPresent(
-        context -> 
context.getMemoryReservationContext().reserveMemoryCumulatively(actualReadSize));
-    return new Binary(
-        ObjectTypeUtils.readObjectContent(relativePath, offset, 
actualReadSize, true).array());
-  }
-}
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/relational/TableBuiltinScalarFunction.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/relational/TableBuiltinScalarFunction.java
index 5d22ff58d81..e20ca4dd073 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/relational/TableBuiltinScalarFunction.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/relational/TableBuiltinScalarFunction.java
@@ -111,7 +111,6 @@ public enum TableBuiltinScalarFunction {
   SPOOKY_HASH_V2_64("spooky_hash_v2_64"),
   LPAD("lpad"),
   RPAD("rpad"),
-  READ_OBJECT("read_object"),
   ;
 
   private final String functionName;

Reply via email to