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 =