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;
