You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/07/04 11:52:55 UTC

[iotdb] 03/03: [IOTDB-3724] Fix Incorrect result when querying with linear fill & order by time desc

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

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

commit a7e61084471dc3a47c3154dd7e7cfae455b82b55
Author: JackieTien97 <ja...@gmail.com>
AuthorDate: Mon Jul 4 19:52:36 2022 +0800

    [IOTDB-3724] Fix Incorrect result when querying with linear fill & order by time desc
---
 .../db/mpp/plan/planner/LocalExecutionPlanner.java |   3 +-
 .../execution/operator/LinearFillOperatorTest.java | 358 ++++++++++-----------
 2 files changed, 181 insertions(+), 180 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java
index 2659a6fb86..e4f34d448e 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java
@@ -665,7 +665,8 @@ public class LocalExecutionPlanner {
                   context.getNextOperatorId(),
                   node.getPlanNodeId(),
                   LinearFillOperator.class.getSimpleName()),
-              getLinearFill(inputColumns, inputDataTypes, false),
+              getLinearFill(
+                  inputColumns, inputDataTypes, node.getScanOrder() == OrderBy.TIMESTAMP_ASC),
               child);
         default:
           throw new IllegalArgumentException("Unknown fill policy: " + fillPolicy);
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/LinearFillOperatorTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/LinearFillOperatorTest.java
index d44d72ec30..9852707056 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/LinearFillOperatorTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/LinearFillOperatorTest.java
@@ -266,10 +266,10 @@ public class LinearFillOperatorTest {
       TimeComparator timeComparator = new DescTimeComparator();
       LinearFill[] fillArray =
           new LinearFill[] {
-              new FloatLinearFill(ascending, timeComparator),
-              new FloatLinearFill(ascending, timeComparator),
-              new FloatLinearFill(ascending, timeComparator),
-              new FloatLinearFill(ascending, timeComparator)
+            new FloatLinearFill(ascending, timeComparator),
+            new FloatLinearFill(ascending, timeComparator),
+            new FloatLinearFill(ascending, timeComparator),
+            new FloatLinearFill(ascending, timeComparator)
           };
       LinearFillOperator fillOperator =
           new LinearFillOperator(
@@ -279,51 +279,51 @@ public class LinearFillOperatorTest {
                 private int index = 0;
                 private final float[][][] value =
                     new float[][][] {
-                        {
-                            {1.0f, 0.0f, 3.0f, 4.0f},
-                            {11.0f, 12.0f, 13.0f, 0.0f},
-                            {21.0f, 22.0f, 0.0f, 0.0f},
-                            {0.0f, 32.0f, 0.0f, 0.0f},
-                            {0.0f, 0.0f, 43.0f, 0.0f}
-                        },
-                        {
-                            {51.0f, 0.0f, 53.0f, 0.0f},
-                            {61.0f, 62.0f, 63.0f, 0.0f},
-                            {71.0f, 72.0f, 0.0f, 74.0f},
-                            {0.0f, 82.0f, 0.0f, 0.0f},
-                            {0.0f, 0.0f, 93.0f, 0.0f}
-                        },
-                        {
-                            {101.0f, 0.0f, 103.0f, 0.0f},
-                            {111.0f, 112.0f, 113.0f, 114.0f},
-                            {121.0f, 122.0f, 0.0f, 124.0f},
-                            {0.0f, 132.0f, 0.0f, 0.0f},
-                            {0.0f, 0.0f, 143.0f, 0.0f}
-                        }
+                      {
+                        {1.0f, 0.0f, 3.0f, 4.0f},
+                        {11.0f, 12.0f, 13.0f, 0.0f},
+                        {21.0f, 22.0f, 0.0f, 0.0f},
+                        {0.0f, 32.0f, 0.0f, 0.0f},
+                        {0.0f, 0.0f, 43.0f, 0.0f}
+                      },
+                      {
+                        {51.0f, 0.0f, 53.0f, 0.0f},
+                        {61.0f, 62.0f, 63.0f, 0.0f},
+                        {71.0f, 72.0f, 0.0f, 74.0f},
+                        {0.0f, 82.0f, 0.0f, 0.0f},
+                        {0.0f, 0.0f, 93.0f, 0.0f}
+                      },
+                      {
+                        {101.0f, 0.0f, 103.0f, 0.0f},
+                        {111.0f, 112.0f, 113.0f, 114.0f},
+                        {121.0f, 122.0f, 0.0f, 124.0f},
+                        {0.0f, 132.0f, 0.0f, 0.0f},
+                        {0.0f, 0.0f, 143.0f, 0.0f}
+                      }
                     };
                 final boolean[][][] isNull =
                     new boolean[][][] {
-                        {
-                            {false, true, false, false},
-                            {false, false, false, true},
-                            {false, false, true, true},
-                            {true, false, true, true},
-                            {true, true, false, true}
-                        },
-                        {
-                            {false, true, false, true},
-                            {false, false, false, true},
-                            {false, false, true, false},
-                            {true, false, true, true},
-                            {true, true, false, true}
-                        },
-                        {
-                            {false, true, false, true},
-                            {false, false, false, false},
-                            {false, false, true, false},
-                            {true, false, true, true},
-                            {true, true, false, true}
-                        }
+                      {
+                        {false, true, false, false},
+                        {false, false, false, true},
+                        {false, false, true, true},
+                        {true, false, true, true},
+                        {true, true, false, true}
+                      },
+                      {
+                        {false, true, false, true},
+                        {false, false, false, true},
+                        {false, false, true, false},
+                        {true, false, true, true},
+                        {true, true, false, true}
+                      },
+                      {
+                        {false, true, false, true},
+                        {false, false, false, false},
+                        {false, false, true, false},
+                        {true, false, true, true},
+                        {true, true, false, true}
+                      }
                     };
 
                 @Override
@@ -368,51 +368,51 @@ public class LinearFillOperatorTest {
 
       float[][][] res =
           new float[][][] {
-              {
-                  {1.0f, 0.0f, 3.0f, 4.0f},
-                  {11.0f, 12.0f, 13.0f, 39.0f},
-                  {21.0f, 22.0f, 28.0f, 39.0f},
-                  {36.0f, 32.0f, 28.0f, 39.0f},
-                  {36.0f, 47.0f, 43.0f, 39.0f}
-              },
-              {
-                  {51.0f, 47.0f, 53.0f, 39.0f},
-                  {61.0f, 62.0f, 63.0f, 39.0f},
-                  {71.0f, 72.0f, 78.0f, 74.0f},
-                  {86.0f, 82.0f, 78.0f, 94.0f},
-                  {86.0f, 97.0f, 93.0f, 94.0f}
-              },
-              {
-                  {101.0f, 97.0f, 103.0f, 94.0f},
-                  {111.0f, 112.0f, 113.0f, 114.0f},
-                  {121.0f, 122.0f, 128.0f, 124.0f},
-                  {0.0f, 132.0f, 128.0f, 0.0f},
-                  {0.0f, 0.0f, 143.0f, 0.0f}
-              }
+            {
+              {1.0f, 0.0f, 3.0f, 4.0f},
+              {11.0f, 12.0f, 13.0f, 39.0f},
+              {21.0f, 22.0f, 28.0f, 39.0f},
+              {36.0f, 32.0f, 28.0f, 39.0f},
+              {36.0f, 47.0f, 43.0f, 39.0f}
+            },
+            {
+              {51.0f, 47.0f, 53.0f, 39.0f},
+              {61.0f, 62.0f, 63.0f, 39.0f},
+              {71.0f, 72.0f, 78.0f, 74.0f},
+              {86.0f, 82.0f, 78.0f, 94.0f},
+              {86.0f, 97.0f, 93.0f, 94.0f}
+            },
+            {
+              {101.0f, 97.0f, 103.0f, 94.0f},
+              {111.0f, 112.0f, 113.0f, 114.0f},
+              {121.0f, 122.0f, 128.0f, 124.0f},
+              {0.0f, 132.0f, 128.0f, 0.0f},
+              {0.0f, 0.0f, 143.0f, 0.0f}
+            }
           };
       boolean[][][] isNull =
           new boolean[][][] {
-              {
-                  {false, true, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false}
-              },
-              {
-                  {false, false, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false}
-              },
-              {
-                  {false, false, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false},
-                  {true, false, false, true},
-                  {true, true, false, true}
-              }
+            {
+              {false, true, false, false},
+              {false, false, false, false},
+              {false, false, false, false},
+              {false, false, false, false},
+              {false, false, false, false}
+            },
+            {
+              {false, false, false, false},
+              {false, false, false, false},
+              {false, false, false, false},
+              {false, false, false, false},
+              {false, false, false, false}
+            },
+            {
+              {false, false, false, false},
+              {false, false, false, false},
+              {false, false, false, false},
+              {true, false, false, true},
+              {true, true, false, true}
+            }
           };
 
       boolean[] nullBlock = new boolean[] {true, false, false, false};
@@ -666,10 +666,10 @@ public class LinearFillOperatorTest {
       TimeComparator timeComparator = new DescTimeComparator();
       LinearFill[] fillArray =
           new LinearFill[] {
-              new FloatLinearFill(ascending, timeComparator),
-              new FloatLinearFill(ascending, timeComparator),
-              new FloatLinearFill(ascending, timeComparator),
-              new FloatLinearFill(ascending, timeComparator)
+            new FloatLinearFill(ascending, timeComparator),
+            new FloatLinearFill(ascending, timeComparator),
+            new FloatLinearFill(ascending, timeComparator),
+            new FloatLinearFill(ascending, timeComparator)
           };
       LinearFillOperator fillOperator =
           new LinearFillOperator(
@@ -679,51 +679,51 @@ public class LinearFillOperatorTest {
                 private int index = 0;
                 private final float[][][] value =
                     new float[][][] {
-                        {
-                            {1.0f, 0.0f, 3.0f, 4.0f},
-                            {11.0f, 12.0f, 13.0f, 0.0f},
-                            {21.0f, 22.0f, 0.0f, 0.0f},
-                            {0.0f, 32.0f, 0.0f, 0.0f},
-                            {0.0f, 0.0f, 0.0f, 0.0f}
-                        },
-                        {
-                            {51.0f, 0.0f, 0.0f, 0.0f},
-                            {61.0f, 62.0f, 0.0f, 0.0f},
-                            {71.0f, 72.0f, 0.0f, 74.0f},
-                            {0.0f, 82.0f, 0.0f, 0.0f},
-                            {0.0f, 0.0f, 0.0f, 0.0f}
-                        },
-                        {
-                            {101.0f, 0.0f, 103.0f, 0.0f},
-                            {111.0f, 112.0f, 0.0f, 114.0f},
-                            {121.0f, 122.0f, 0.0f, 124.0f},
-                            {0.0f, 132.0f, 0.0f, 0.0f},
-                            {0.0f, 0.0f, 0.0f, 0.0f}
-                        }
+                      {
+                        {1.0f, 0.0f, 3.0f, 4.0f},
+                        {11.0f, 12.0f, 13.0f, 0.0f},
+                        {21.0f, 22.0f, 0.0f, 0.0f},
+                        {0.0f, 32.0f, 0.0f, 0.0f},
+                        {0.0f, 0.0f, 0.0f, 0.0f}
+                      },
+                      {
+                        {51.0f, 0.0f, 0.0f, 0.0f},
+                        {61.0f, 62.0f, 0.0f, 0.0f},
+                        {71.0f, 72.0f, 0.0f, 74.0f},
+                        {0.0f, 82.0f, 0.0f, 0.0f},
+                        {0.0f, 0.0f, 0.0f, 0.0f}
+                      },
+                      {
+                        {101.0f, 0.0f, 103.0f, 0.0f},
+                        {111.0f, 112.0f, 0.0f, 114.0f},
+                        {121.0f, 122.0f, 0.0f, 124.0f},
+                        {0.0f, 132.0f, 0.0f, 0.0f},
+                        {0.0f, 0.0f, 0.0f, 0.0f}
+                      }
                     };
                 final boolean[][][] isNull =
                     new boolean[][][] {
-                        {
-                            {false, true, false, false},
-                            {false, false, false, true},
-                            {false, false, true, true},
-                            {true, false, true, true},
-                            {true, true, true, true}
-                        },
-                        {
-                            {false, true, true, true},
-                            {false, false, true, true},
-                            {false, false, true, false},
-                            {true, false, true, true},
-                            {true, true, true, true}
-                        },
-                        {
-                            {false, true, false, true},
-                            {false, false, true, false},
-                            {false, false, true, false},
-                            {true, false, true, true},
-                            {true, true, true, true}
-                        }
+                      {
+                        {false, true, false, false},
+                        {false, false, false, true},
+                        {false, false, true, true},
+                        {true, false, true, true},
+                        {true, true, true, true}
+                      },
+                      {
+                        {false, true, true, true},
+                        {false, false, true, true},
+                        {false, false, true, false},
+                        {true, false, true, true},
+                        {true, true, true, true}
+                      },
+                      {
+                        {false, true, false, true},
+                        {false, false, true, false},
+                        {false, false, true, false},
+                        {true, false, true, true},
+                        {true, true, true, true}
+                      }
                     };
 
                 @Override
@@ -769,51 +769,51 @@ public class LinearFillOperatorTest {
       int count = 0;
       float[][][] res =
           new float[][][] {
-              {
-                  {1.0f, 0.0f, 3.0f, 4.0f},
-                  {11.0f, 12.0f, 13.0f, 39.0f},
-                  {21.0f, 22.0f, 58.0f, 39.0f},
-                  {36.0f, 32.0f, 58.0f, 39.0f},
-                  {36.0f, 47.0f, 58.0f, 39.0f}
-              },
-              {
-                  {51.0f, 47.0f, 58.0f, 39.0f},
-                  {61.0f, 62.0f, 58.0f, 39.0f},
-                  {71.0f, 72.0f, 58.0f, 74.0f},
-                  {86.0f, 82.0f, 58.0f, 94.0f},
-                  {86.0f, 97.0f, 58.0f, 94.0f}
-              },
-              {
-                  {101.0f, 97.0f, 103.0f, 94.0f},
-                  {111.0f, 112.0f, 0.0f, 114.0f},
-                  {121.0f, 122.0f, 0.0f, 124.0f},
-                  {0.0f, 132.0f, 0.0f, 0.0f},
-                  {0.0f, 0.0f, 0.0f, 0.0f}
-              }
+            {
+              {1.0f, 0.0f, 3.0f, 4.0f},
+              {11.0f, 12.0f, 13.0f, 39.0f},
+              {21.0f, 22.0f, 58.0f, 39.0f},
+              {36.0f, 32.0f, 58.0f, 39.0f},
+              {36.0f, 47.0f, 58.0f, 39.0f}
+            },
+            {
+              {51.0f, 47.0f, 58.0f, 39.0f},
+              {61.0f, 62.0f, 58.0f, 39.0f},
+              {71.0f, 72.0f, 58.0f, 74.0f},
+              {86.0f, 82.0f, 58.0f, 94.0f},
+              {86.0f, 97.0f, 58.0f, 94.0f}
+            },
+            {
+              {101.0f, 97.0f, 103.0f, 94.0f},
+              {111.0f, 112.0f, 0.0f, 114.0f},
+              {121.0f, 122.0f, 0.0f, 124.0f},
+              {0.0f, 132.0f, 0.0f, 0.0f},
+              {0.0f, 0.0f, 0.0f, 0.0f}
+            }
           };
       boolean[][][] isNull =
           new boolean[][][] {
-              {
-                  {false, true, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false}
-              },
-              {
-                  {false, false, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false},
-                  {false, false, false, false}
-              },
-              {
-                  {false, false, false, false},
-                  {false, false, true, false},
-                  {false, false, true, false},
-                  {true, false, true, true},
-                  {true, true, true, true}
-              }
+            {
+              {false, true, false, false},
+              {false, false, false, false},
+              {false, false, false, false},
+              {false, false, false, false},
+              {false, false, false, false}
+            },
+            {
+              {false, false, false, false},
+              {false, false, false, false},
+              {false, false, false, false},
+              {false, false, false, false},
+              {false, false, false, false}
+            },
+            {
+              {false, false, false, false},
+              {false, false, true, false},
+              {false, false, true, false},
+              {true, false, true, true},
+              {true, true, true, true}
+            }
           };
 
       boolean[] nullBlock = new boolean[] {true, true, false, false, false};
@@ -978,11 +978,11 @@ public class LinearFillOperatorTest {
                 private int index = 0;
                 private final float[][][] value =
                     new float[][][] {
-                        {{0.0f}}, {{2.0f}}, {{3.0f}}, {{4.0f}}, {{0.0f}}, {{0.0f}}, {{0.0f}}
+                      {{0.0f}}, {{2.0f}}, {{3.0f}}, {{4.0f}}, {{0.0f}}, {{0.0f}}, {{0.0f}}
                     };
                 final boolean[][][] isNull =
                     new boolean[][][] {
-                        {{true}}, {{false}}, {{false}}, {{false}}, {{true}}, {{true}}, {{true}}
+                      {{true}}, {{false}}, {{false}}, {{false}}, {{true}}, {{true}}, {{true}}
                     };
 
                 @Override
@@ -1024,7 +1024,7 @@ public class LinearFillOperatorTest {
           new float[][][] {{{0.0f}}, {{2.0f}}, {{3.0f}}, {{4.0f}}, {{0.0f}}, {{0.0f}}, {{0.0f}}};
       boolean[][][] isNull =
           new boolean[][][] {
-              {{true}}, {{false}}, {{false}}, {{false}}, {{true}}, {{true}}, {{true}}
+            {{true}}, {{false}}, {{false}}, {{false}}, {{true}}, {{true}}, {{true}}
           };
 
       boolean[] nullBlock =