You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-29 08:21:15 +03:00
MCOL-1793-regr_* functions get wrong answer. Pretty up some code.
This commit is contained in:
@ -187,30 +187,26 @@ void WindowFunction::operator()()
|
|||||||
prevFrame = w;
|
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
|
// If b > e then the frame is entirely outside of the partition
|
||||||
// and there's no values to drop
|
// and there's no values to drop
|
||||||
if (b <= e)
|
if (!firstTime && b <= e)
|
||||||
{
|
{
|
||||||
// UDAnF functions may have a dropValue function implemented.
|
if (fFunctionType->dropValues(prevFrame.first, w.first))
|
||||||
// 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))
|
// Adjust the beginning of the frame for nextValue
|
||||||
{
|
// to start where the previous frame left off.
|
||||||
// Adjust the beginning of the frame for nextValue
|
b = prevFrame.second + 1;
|
||||||
// to start where the previous frame left off.
|
}
|
||||||
b = prevFrame.second + 1;
|
else
|
||||||
}
|
{
|
||||||
else
|
// dropValues failed or doesn't exist
|
||||||
{
|
// so calculate the entire frame.
|
||||||
// dropValues failed or doesn't exist
|
fFunctionType->resetData();
|
||||||
// so do the entire frame.
|
|
||||||
fFunctionType->resetData();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fFunctionType->operator()(b, e, i); // UDAnF: Calls nextValue and evaluate
|
fFunctionType->operator()(b, e, i); // UDAnF: Calls nextValue and evaluate
|
||||||
@ -230,7 +226,7 @@ void WindowFunction::operator()()
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
fStep->handleException("unknow exception", logging::ERR_EXECUTE_WINDOW_FUNCTION);
|
fStep->handleException("unknown exception", logging::ERR_EXECUTE_WINDOW_FUNCTION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user