You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@paimon.apache.org by lz...@apache.org on 2024/01/08 09:31:41 UTC
(incubator-paimon) 04/05: [core] Add projection test for TableQueryImpl
This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-paimon.git
commit f5170455a255dadd688a83e4869abf4a6ca6e6e4
Author: Jingsong <ji...@gmail.com>
AuthorDate: Mon Jan 8 16:31:03 2024 +0800
[core] Add projection test for TableQueryImpl
---
.../org/apache/paimon/table/query/TableQuery.java | 5 +++++
.../apache/paimon/table/query/TableQueryImpl.java | 1 +
.../paimon/table/PrimaryKeyFileStoreTableTest.java | 24 ++++++++++++++++------
3 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/query/TableQuery.java b/paimon-core/src/main/java/org/apache/paimon/table/query/TableQuery.java
index 7d956b72f..8418ca6af 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/query/TableQuery.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/query/TableQuery.java
@@ -24,6 +24,7 @@ import org.apache.paimon.data.BinaryRow;
import org.apache.paimon.data.InternalRow;
import org.apache.paimon.disk.IOManager;
import org.apache.paimon.io.DataFileMeta;
+import org.apache.paimon.utils.Projection;
import javax.annotation.Nullable;
@@ -34,6 +35,10 @@ import java.util.List;
/** A query of Table to perform lookup. */
public interface TableQuery extends Closeable {
+ default TableQuery withValueProjection(int[] projection) {
+ return withValueProjection(Projection.of(projection).toNestedIndexes());
+ }
+
TableQuery withValueProjection(int[][] projection);
TableQuery withIOManager(IOManager ioManager);
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/query/TableQueryImpl.java b/paimon-core/src/main/java/org/apache/paimon/table/query/TableQueryImpl.java
index ed3f2c5b1..053cc44a5 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/query/TableQueryImpl.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/query/TableQueryImpl.java
@@ -185,5 +185,6 @@ public class TableQueryImpl implements TableQuery {
bucket.getValue().close();
}
}
+ tableView.clear();
}
}
diff --git a/paimon-core/src/test/java/org/apache/paimon/table/PrimaryKeyFileStoreTableTest.java b/paimon-core/src/test/java/org/apache/paimon/table/PrimaryKeyFileStoreTableTest.java
index 288d6136e..517e6a6b7 100644
--- a/paimon-core/src/test/java/org/apache/paimon/table/PrimaryKeyFileStoreTableTest.java
+++ b/paimon-core/src/test/java/org/apache/paimon/table/PrimaryKeyFileStoreTableTest.java
@@ -1173,13 +1173,13 @@ public class PrimaryKeyFileStoreTableTest extends FileStoreTableTestBase {
// first write
write.write(rowData(1, 10, 100L));
- List<CommitMessage> commitMessages = write.prepareCommit(true, 0);
- commit.commit(0, commitMessages);
+ List<CommitMessage> commitMessages1 = write.prepareCommit(true, 0);
+ commit.commit(0, commitMessages1);
TableQuery query = table.newTableQuery();
query.withIOManager(ioManager);
- refreshTableService(query, commitMessages);
+ refreshTableService(query, commitMessages1);
InternalRow value = query.lookup(row(1), 0, row(10));
assertThat(value).isNotNull();
assertThat(BATCH_ROW_TO_STRING.apply(value))
@@ -1189,10 +1189,10 @@ public class PrimaryKeyFileStoreTableTest extends FileStoreTableTestBase {
write.write(rowData(1, 10, 200L));
write.write(rowData(3, 10, 300L));
- commitMessages = write.prepareCommit(true, 0);
- commit.commit(0, commitMessages);
+ List<CommitMessage> commitMessages2 = write.prepareCommit(true, 0);
+ commit.commit(0, commitMessages2);
- refreshTableService(query, commitMessages);
+ refreshTableService(query, commitMessages2);
value = query.lookup(row(1), 0, row(10));
assertThat(value).isNotNull();
@@ -1209,6 +1209,18 @@ public class PrimaryKeyFileStoreTableTest extends FileStoreTableTestBase {
value = query.lookup(row(1), 0, row(20));
assertThat(value).isNull();
+ // projection
+
+ query.close();
+ query.withValueProjection(new int[] {2, 1, 0});
+ refreshTableService(query, commitMessages1);
+ refreshTableService(query, commitMessages2);
+ value = query.lookup(row(1), 0, row(10));
+ assertThat(value).isNotNull();
+ Function<InternalRow, String> projectToString =
+ rowData -> rowData.getLong(0) + "|" + rowData.getInt(1) + "|" + rowData.getInt(2);
+ assertThat(projectToString.apply(value)).isEqualTo("200|10|1");
+
query.close();
write.close();
commit.close();