diff --git a/utils/regr/corr.cpp b/utils/regr/corr.cpp index 3c819b86d..9d12680ea 100644 --- a/utils/regr/corr.cpp +++ b/utils/regr/corr.cpp @@ -144,7 +144,7 @@ mcsv1_UDAF::ReturnCode corr::evaluate(mcsv1Context* context, static_any::any& va { struct corr_data* data = (struct corr_data*)context->getUserData()->data; double N = data->cnt; - if (N > 0) + if (N > 1) { double sumx = data->sumx; double sumy = data->sumy; @@ -161,8 +161,7 @@ mcsv1_UDAF::ReturnCode corr::evaluate(mcsv1Context* context, static_any::any& va double var_popy = (sumy2 - (sumy * sumy / N)) / N; if (var_popy == 0) { - // When var_popy is 0, 1 is the result - valOut = 1.0; + // When var_popy is 0, NULL is the result return mcsv1_UDAF::SUCCESS; } double std_popx = sqrt(var_popx); diff --git a/utils/windowfunction/wf_udaf.cpp b/utils/windowfunction/wf_udaf.cpp index 5986c2872..2b7e28abc 100644 --- a/utils/windowfunction/wf_udaf.cpp +++ b/utils/windowfunction/wf_udaf.cpp @@ -84,6 +84,7 @@ void WF_udaf::resetData() getContext().getFunction()->reset(&getContext()); fDistinctMap.clear(); WindowFunctionType::resetData(); + fValOut.reset(); } void WF_udaf::parseParms(const std::vector& parms) @@ -708,7 +709,6 @@ void WF_udaf::operator()(int64_t b, int64_t e, int64_t c) mcsv1sdk::mcsv1_UDAF::ReturnCode rc; uint64_t colOut = fFieldIndex[0]; bool isNull = false; - fValOut.reset(); if ((fFrameUnit == WF__FRAME_ROWS) || (fPrev == -1) || diff --git a/utils/windowfunction/windowfunction.cpp b/utils/windowfunction/windowfunction.cpp index c46259e4a..31ef6ed07 100644 --- a/utils/windowfunction/windowfunction.cpp +++ b/utils/windowfunction/windowfunction.cpp @@ -194,31 +194,21 @@ void WindowFunction::operator()() // 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) && fFunctionType->dropValues(prevFrame.first, w.first)) { - 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. - b = prevFrame.second + 1; - } - else - { - // dropValues failed or doesn't exist - // so calculate the entire frame. - fFunctionType->resetData(); - } - } - else - { - fFunctionType->resetData(); - firstTime = false; - } + // Adjust the beginning of the frame for nextValue + // to start where the previous frame left off. + b = prevFrame.second + 1; + } + else + { + // If dropValues failed or doesn't exist, + // calculate the entire frame. + fFunctionType->resetData(); } fFunctionType->operator()(b, e, i); // UDAnF: Calls nextValue and evaluate prevFrame = w; + firstTime = false; } } }