Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ class ApproxPercentileAggregate : public exec::Aggregate {
vector_size_t index) {
digest.estimateQuantiles(percentiles, rawValues + elementsCount);
result->setOffsetAndSize(index, elementsCount, percentiles.size());
result->setNull(index, false);
elementsCount += percentiles.size();
});
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,12 @@
#include "velox/exec/tests/utils/AssertQueryBuilder.h"
#include "velox/exec/tests/utils/PlanBuilder.h"
#include "velox/functions/lib/aggregates/tests/utils/AggregationTestBase.h"
#include "velox/functions/lib/window/tests/WindowTestBase.h"

using namespace facebook::velox::exec;
using namespace facebook::velox::exec::test;
using namespace facebook::velox::functions::aggregate::test;
using namespace facebook::velox::window::test;

namespace facebook::velox::aggregate::test {

Expand Down Expand Up @@ -565,5 +567,32 @@ TEST_F(ApproxPercentileTest, nullPercentile) {
"Percentile cannot be null");
}

class ApproxPercentileWindowTest : public WindowTestBase {
protected:
void SetUp() override {
WindowTestBase::SetUp();
random::setSeed(0);
}
};

TEST_F(ApproxPercentileWindowTest, window) {
auto data = makeRowVector(
{makeFlatVector<int32_t>({1, 2, 3}),
makeNullableFlatVector<int32_t>({10, std::nullopt, 30}),
makeArrayVectorFromJson<double>({"[0.5]", "[0.5]", "[0.5]"})});
auto expected = makeRowVector({
makeFlatVector<int32_t>({1, 2, 3}),
makeNullableFlatVector<int32_t>({10, std::nullopt, 30}),
makeArrayVectorFromJson<double>({"[0.5]", "[0.5]", "[0.5]"}),
makeNullableArrayVector<int32_t>({{{10}}, std::nullopt, {{30}}}),
});
testWindowFunction(
{data},
"approx_percentile(c1, c2)",
"order by c0",
"rows between current row and current row",
expected);
}

} // namespace
} // namespace facebook::velox::aggregate::test