From 14b976991b348e401c781d7931b8e6201e1b0eac Mon Sep 17 00:00:00 2001 From: mariadb-AndreyPiskunov Date: Fri, 2 Sep 2022 14:14:33 +0300 Subject: [PATCH] Remade dropValue --- utils/regr/regr_sxy.cpp | 21 ++++++++++++++------- utils/regr/regr_sxy.h | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/utils/regr/regr_sxy.cpp b/utils/regr/regr_sxy.cpp index 5354306ac..6b7cf2c2e 100644 --- a/utils/regr/regr_sxy.cpp +++ b/utils/regr/regr_sxy.cpp @@ -147,20 +147,27 @@ mcsv1_UDAF::ReturnCode regr_sxy::evaluate(mcsv1Context* context, static_any::any } return mcsv1_UDAF::SUCCESS; } -/* + mcsv1_UDAF::ReturnCode regr_sxy::dropValue(mcsv1Context* context, ColumnDatum* valsDropped) { double valy = toDouble(valsDropped[0]); double valx = toDouble(valsDropped[1]); struct regr_sxy_data* data = (struct regr_sxy_data*)context->getUserData()->data; - data->avgy -= valy; - - data->avgx -= valx; - - data->cxy -= valx * valy; + long double avgyPrev = data->avgy; + long double avgxPrev = data->avgx; + long double cxyPrev = data->cxy; --data->cnt; + uint64_t cnt = data->cnt; + long double dx = valx - avgxPrev; + + avgyPrev -= (valy - avgyPrev) / cnt; + avgxPrev -= dx / cnt; + cxyPrev -= dx * (valy - avgyPrev); + + data->avgx = avgxPrev; + data->avgy = avgyPrev; + data->cxy = cxyPrev; return mcsv1_UDAF::SUCCESS; } -*/ \ No newline at end of file diff --git a/utils/regr/regr_sxy.h b/utils/regr/regr_sxy.h index 6bcbf6500..bdfffc14a 100644 --- a/utils/regr/regr_sxy.h +++ b/utils/regr/regr_sxy.h @@ -70,7 +70,7 @@ class regr_sxy : public mcsv1_UDAF virtual ReturnCode evaluate(mcsv1Context* context, static_any::any& valOut); - // virtual ReturnCode dropValue(mcsv1Context* context, ColumnDatum* valsDropped); + virtual ReturnCode dropValue(mcsv1Context* context, ColumnDatum* valsDropped); protected: };