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


The following commit(s) were added to refs/heads/master by this push:
     new f6c8c468c [Bug] Fix the incorrect lookup join result when lookup from 
level0 (#2913)
f6c8c468c is described below

commit f6c8c468c9565bf67d95cccabf4c3929f29643ba
Author: Aitozi <[email protected]>
AuthorDate: Tue Feb 27 19:07:10 2024 +0800

    [Bug] Fix the incorrect lookup join result when lookup from level0 (#2913)
---
 .../org/apache/paimon/mergetree/LookupUtils.java   | 11 +++----
 .../apache/paimon/mergetree/LookupLevelsTest.java  | 35 ++++++++++++++++++++++
 2 files changed, 41 insertions(+), 5 deletions(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/mergetree/LookupUtils.java 
b/paimon-core/src/main/java/org/apache/paimon/mergetree/LookupUtils.java
index d048bfe0f..8ada282a4 100644
--- a/paimon-core/src/main/java/org/apache/paimon/mergetree/LookupUtils.java
+++ b/paimon-core/src/main/java/org/apache/paimon/mergetree/LookupUtils.java
@@ -39,14 +39,15 @@ public class LookupUtils {
             BiFunctionWithIOE<InternalRow, SortedRun, T> lookup,
             BiFunctionWithIOE<InternalRow, TreeSet<DataFileMeta>, T> 
level0Lookup)
             throws IOException {
-        if (startLevel == 0) {
-            return level0Lookup.apply(key, levels.level0());
-        }
 
         T result = null;
         for (int i = startLevel; i < levels.numberOfLevels(); i++) {
-            SortedRun level = levels.runOfLevel(i);
-            result = lookup.apply(key, level);
+            if (i == 0) {
+                result = level0Lookup.apply(key, levels.level0());
+            } else {
+                SortedRun level = levels.runOfLevel(i);
+                result = lookup.apply(key, level);
+            }
             if (result != null) {
                 break;
             }
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/mergetree/LookupLevelsTest.java 
b/paimon-core/src/test/java/org/apache/paimon/mergetree/LookupLevelsTest.java
index a959d3413..4dc7504e5 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/mergetree/LookupLevelsTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/mergetree/LookupLevelsTest.java
@@ -215,6 +215,41 @@ public class LookupLevelsTest {
         assertThat(kv).isNotNull();
     }
 
+    @Test
+    public void testLookupLevel0() throws Exception {
+        Levels levels =
+                new Levels(
+                        comparator,
+                        Arrays.asList(
+                                newFile(0, kv(1, 0)),
+                                newFile(1, kv(1, 11), kv(3, 33), kv(5, 5)),
+                                newFile(2, kv(2, 22), kv(5, 55))),
+                        3);
+        LookupLevels lookupLevels = createLookupLevels(levels, 
MemorySize.ofMebiBytes(10));
+
+        KeyValue kv = lookupLevels.lookup(row(1), 0);
+        assertThat(kv).isNotNull();
+        assertThat(kv.sequenceNumber()).isEqualTo(UNKNOWN_SEQUENCE);
+        assertThat(kv.level()).isEqualTo(0);
+        assertThat(kv.value().getInt(1)).isEqualTo(0);
+
+        levels =
+                new Levels(
+                        comparator,
+                        Arrays.asList(
+                                newFile(1, kv(1, 11), kv(3, 33), kv(5, 5)),
+                                newFile(2, kv(2, 22), kv(5, 55))),
+                        3);
+        lookupLevels = createLookupLevels(levels, MemorySize.ofMebiBytes(10));
+
+        // not in level 0
+        kv = lookupLevels.lookup(row(1), 0);
+        assertThat(kv).isNotNull();
+        assertThat(kv.sequenceNumber()).isEqualTo(UNKNOWN_SEQUENCE);
+        assertThat(kv.level()).isEqualTo(1);
+        assertThat(kv.value().getInt(1)).isEqualTo(11);
+    }
+
     private LookupLevels createLookupLevels(Levels levels, MemorySize 
maxDiskSize) {
         return new LookupLevels(
                 levels,

Reply via email to