1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-06-13 16:01:32 +03:00

MCOL-1793-regr_* functions get wrong answer. Pretty up some code.

This commit is contained in:
David Hall
2018-11-06 10:30:38 -06:00
parent e58c4c3381
commit 1426b4d99b

View File

@ -187,30 +187,26 @@ void WindowFunction::operator()()
prevFrame = w;
}
// UDAnF functions may have a dropValue function implemented.
// If they do, we can optimize by calling dropValue() for those
// values leaving the window and nextValue for those entering, rather
// than a resetData() and then iterating over the entire window.
// Built-in functions may have this functionality added in the future.
// If b > e then the frame is entirely outside of the partition
// and there's no values to drop
if (b <= e)
if (!firstTime && b <= e)
{
// UDAnF functions may have a dropValue function implemented.
// If they do, we can optimize by calling dropValue() for those
// values leaving the window and nextValue for those entering, rather
// than a resetData() and then iterating over the entire window.
// Built-in functions may have this functionality added in the future.
// If b > e, then nothing to drop.
if (!firstTime)
if (fFunctionType->dropValues(prevFrame.first, w.first))
{
if (fFunctionType->dropValues(prevFrame.first, w.first))
{
// Adjust the beginning of the frame for nextValue
// to start where the previous frame left off.
b = prevFrame.second + 1;
}
else
{
// dropValues failed or doesn't exist
// so do the entire frame.
fFunctionType->resetData();
}
// Adjust the beginning of the frame for nextValue
// to start where the previous frame left off.
b = prevFrame.second + 1;
}
else
{
// dropValues failed or doesn't exist
// so calculate the entire frame.
fFunctionType->resetData();
}
}
fFunctionType->operator()(b, e, i); // UDAnF: Calls nextValue and evaluate
@ -230,7 +226,7 @@ void WindowFunction::operator()()
}
catch (...)
{
fStep->handleException("unknow exception", logging::ERR_EXECUTE_WINDOW_FUNCTION);
fStep->handleException("unknown exception", logging::ERR_EXECUTE_WINDOW_FUNCTION);
}
}