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

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

commit b7def7aab58fd00e7c023fb213d25dabb7474cdd
Author: Beyyes <[email protected]>
AuthorDate: Wed Sep 25 10:57:15 2024 +0800

    fix it
---
 .../org/apache/iotdb/db/it/utils/TestUtils.java    |  4 +-
 .../db/it/IoTDBMultiIDsWithAttributesTableIT.java  | 73 +++++++++++-----------
 .../relational/TableFullOuterJoinOperator.java     |  4 +-
 3 files changed, 40 insertions(+), 41 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java
index 5bcafe500e5..d95f5f60e89 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java
@@ -252,8 +252,8 @@ public class TestUtils {
             for (int i = 1; i <= expectedHeader.length; i++) {
               builder.append(resultSet.getString(i)).append(",");
             }
-            // assertEquals(expectedRetArray[cnt], builder.toString());
-            System.out.println(String.format("\"%s\",", builder.toString()));
+            assertEquals(expectedRetArray[cnt], builder.toString());
+            // System.out.println(String.format("\"%s\",", 
builder.toString()));
             cnt++;
           }
           assertEquals(expectedRetArray.length, cnt);
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiIDsWithAttributesTableIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiIDsWithAttributesTableIT.java
index 26b2e6e2378..cef98a46984 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiIDsWithAttributesTableIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiIDsWithAttributesTableIT.java
@@ -593,64 +593,63 @@ public class IoTDBMultiIDsWithAttributesTableIT {
   @Test
   public void fullOuterJoinTest2() {
     String[] expectedHeader =
-        new String[] {
-          "time", "time", "device", "level", "t1_num_add", "device", "attr2", 
"num", "str"
-        };
+        new String[] {"time", "device", "level", "t1_num_add", "device", 
"attr2", "num", "str"};
     String[] retArray =
         new String[] {
+          "1970-01-01T00:00:00.000Z,null,null,null,d1,d,3,coconut,",
+          "1970-01-01T00:00:00.000Z,null,null,null,d2,c,3,coconut,",
+          "1970-01-01T00:00:00.020Z,null,null,null,d1,zz,2,pineapple,",
+          "1970-01-01T00:00:00.020Z,null,null,null,d2,null,2,pineapple,",
+          "1970-01-01T00:00:00.040Z,null,null,null,d1,a,1,apricot,",
+          "1970-01-01T00:00:00.040Z,null,null,null,d2,null,1,apricot,",
           "1970-01-01T00:00:00.080Z,d1,l4,10,d1,null,9,apple,",
           "1970-01-01T00:00:00.080Z,d1,l4,10,d2,null,9,apple,",
+          "1970-01-01T00:00:00.080Z,d1,l2,11,d2,null,10,pumelo,",
           "1970-01-01T00:00:00.080Z,d2,l4,10,d1,null,9,apple,",
+          "1970-01-01T00:00:00.080Z,d2,l2,11,d1,zz,10,pumelo,",
           "1970-01-01T00:00:00.080Z,d2,l4,10,d2,null,9,apple,",
+          "1970-01-01T00:00:00.080Z,d2,l2,11,d2,null,10,pumelo,",
+          "1970-01-01T00:00:00.080Z,null,null,null,d1,null,9,apple,",
+          "1970-01-01T00:00:00.080Z,null,null,null,d2,null,9,apple,",
           "1971-01-01T00:00:00.100Z,d1,l2,11,d1,zz,10,pumelo,",
-          "1971-01-01T00:00:00.100Z,d1,l2,11,d2,null,10,pumelo,",
-          "1971-01-01T00:00:00.100Z,d2,l2,11,d1,zz,10,pumelo,",
-          "1971-01-01T00:00:00.100Z,d2,l2,11,d2,null,10,pumelo,",
-          "1971-01-01T00:00:00.500Z,d1,l3,5,d1,a,4,peach,",
+          "1971-01-01T00:00:00.100Z,d1,l3,5,d1,a,4,peach,",
+          "1971-01-01T00:00:00.100Z,null,null,null,d1,zz,10,pumelo,",
+          "1971-01-01T00:00:00.100Z,null,null,null,d2,null,10,pumelo,",
+          "1971-01-01T00:00:00.500Z,d1,l4,6,d1,null,5,orange,",
           "1971-01-01T00:00:00.500Z,d1,l3,5,d2,null,4,peach,",
+          "1971-01-01T00:00:00.500Z,d1,l4,6,d2,null,5,orange,",
           "1971-01-01T00:00:00.500Z,d2,l3,5,d1,a,4,peach,",
+          "1971-01-01T00:00:00.500Z,d2,l4,6,d1,null,5,orange,",
           "1971-01-01T00:00:00.500Z,d2,l3,5,d2,null,4,peach,",
-          "1971-01-01T00:00:01.000Z,d1,l4,6,d1,null,5,orange,",
-          "1971-01-01T00:00:01.000Z,d1,l4,6,d2,null,5,orange,",
-          "1971-01-01T00:00:01.000Z,d2,l4,6,d1,null,5,orange,",
-          "1971-01-01T00:00:01.000Z,d2,l4,6,d2,null,5,orange,",
+          "1971-01-01T00:00:00.500Z,d2,l4,6,d2,null,5,orange,",
+          "1971-01-01T00:00:00.500Z,null,null,null,d1,a,4,peach,",
+          "1971-01-01T00:00:00.500Z,null,null,null,d2,null,4,peach,",
+          "1971-01-01T00:00:00.500Z,null,null,null,d2,null,5,orange,",
+          "1971-01-01T00:00:01.000Z,null,null,null,d1,null,5,orange,",
+          "1971-01-01T00:00:10.000Z,d1,l5,8,null,null,null,null,",
+          "1971-01-01T00:00:10.000Z,d2,l5,8,null,null,null,null,",
+          "1971-04-26T17:46:40.000Z,d1,l2,13,null,null,null,null,",
+          "1971-04-26T17:46:40.020Z,d2,l3,15,null,null,null,null,",
+          "1971-04-26T18:01:40.000Z,d1,l4,14,null,null,null,null,",
+          "1971-08-20T11:33:20.000Z,d2,l5,16,null,null,null,null,",
         };
 
     // join on
     String sql =
-        "SELECT t1.time, t2.time, t1.device, t1.level, t1_num_add, t2.device, 
t2.attr2, t2.num, t2.str\n"
+        "SELECT COALESCE(t1.time, t2.time) as time, t1.device, t1.level, 
t1_num_add, t2.device, t2.attr2, t2.num, t2.str\n"
             + "FROM (SELECT *,num+1 as t1_num_add FROM table0 WHERE TIME>=80 
AND level!='l1' AND cast(num as double)>0) t1 \n"
             + "FULL JOIN (SELECT * FROM table0 WHERE TIME<=31536001000 AND 
floatNum<1000 AND device in ('d1','d2')) t2 \n"
             + "ON t1.time = t2.time \n"
-            + "ORDER BY t1.time, t1.device, t2.device";
-    tableResultSetEqualTest(sql, expectedHeader, retArray, DATABASE_NAME);
-
-    sql =
-        "SELECT t1.time, t2.time, t1.device, t1.level, t1_num_add, t2.device, 
t2.attr2, t2.num, t2.str\n"
-            + "FROM (SELECT *,num+1 as t1_num_add FROM table0) t1 \n"
-            + "FULL JOIN (SELECT * FROM table0) t2 ON t1.time = t2.time \n"
-            + "WHERE t1.TIME>=80 AND cast(t1.num as double)>0 AND 
t1.level!='l1' \n"
-            + "AND t2.time<=31536001000 AND t2.floatNum<1000 AND t2.device in 
('d1','d2')\n"
-            + "ORDER BY t1.time, t1.device, t2.device LIMIT 20";
-    tableResultSetEqualTest(sql, expectedHeader, retArray, DATABASE_NAME);
-
-    sql =
-        "SELECT t1.time, t2.time,t1.device, t1.level, t1_num_add, t2.device, 
t2.attr2, t2.num, t2.str\n"
-            + "FROM (SELECT *,num+1 as t1_num_add FROM table0 WHERE time>=80) 
t1 \n"
-            + "FULL JOIN (SELECT * FROM table0 WHERE floatNum<1000) t2 ON 
t1.time = t2.time \n"
-            + "WHERE cast(t1.num as double)>0 AND t1.level!='l1' \n"
-            + "AND t2.time<=31536001000 AND t2.device in ('d1','d2')\n"
-            + "ORDER BY t1.time, t1.device, t2.device LIMIT 20";
+            + "ORDER BY time, t1.device, t2.device";
     tableResultSetEqualTest(sql, expectedHeader, retArray, DATABASE_NAME);
 
     // join using
     sql =
-        "SELECT time,t1.device, t1.level, t1_num_add, t2.device, t2.attr2, 
t2.num, t2.str\n"
-            + "FROM (SELECT *,num+1 as t1_num_add FROM table0 WHERE time>=80) 
t1 \n"
-            + "FULL JOIN (SELECT * FROM table0 WHERE floatNum<1000) t2 
USING(time) \n"
-            + "WHERE cast(t1.num as double)>0 AND t1.level!='l1' \n"
-            + "AND t2.time<=31536001000 AND t2.device in ('d1','d2')\n"
-            + "ORDER BY t1.time, t1.device, t2.device LIMIT 20";
+        "SELECT time, t1.device, t1.level, t1_num_add, t2.device, t2.attr2, 
t2.num, t2.str\n"
+            + "FROM (SELECT *,num+1 as t1_num_add FROM table0 WHERE TIME>=80 
AND level!='l1' AND cast(num as double)>0) t1 \n"
+            + "FULL JOIN (SELECT * FROM table0 WHERE TIME<=31536001000 AND 
floatNum<1000 AND device in ('d1','d2')) t2 \n"
+            + "USING(time) \n"
+            + "ORDER BY time, t1.device, t2.device";
     tableResultSetEqualTest(sql, expectedHeader, retArray, DATABASE_NAME);
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableFullOuterJoinOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableFullOuterJoinOperator.java
index 8e6ecca98b6..8013fd1ad59 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableFullOuterJoinOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableFullOuterJoinOperator.java
@@ -310,10 +310,10 @@ public class TableFullOuterJoinOperator extends 
AbstractOperator {
   private void appendResult(long leftTime) {
 
     while (comparator.lessThan(getCurrentRightTime(), leftTime)) {
-      rightIndex++;
-
       appendOneRightRowWithEmptyLeft();
 
+      rightIndex++;
+
       if (rightIndex >= 
rightBlockList.get(rightBlockListIdx).getPositionCount()) {
         rightBlockListIdx++;
         rightIndex = 0;

Reply via email to