Uploaded image for project: 'MariaDB ColumnStore'
  1. MariaDB ColumnStore
  2. MCOL-4629

Add a helper method mcsv1_UDAF::toDouble()

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • 6.1.1
    • 6.1.1
    • ExeMgr, PrimProc
    • None
    • 2021-5

    Description

      This task is a prerequisite for MCOL-4361 and is intended to make the patch MCOL-4361 much smaller.

      This code in corr::nextValue() in utils/regr/corr.cpp:

          static_any::any& valIn_y = valsIn[0].columnData;
          static_any::any& valIn_x = valsIn[1].columnData;
          struct  corr_data* data = (struct corr_data*)context->getUserData()->data;
          double valx = 0.0;
          double valy = 0.0;
       
          valx = convertAnyTo<double>(valIn_x);
          valy = convertAnyTo<double>(valIn_y);
       
          // For decimal types, we need to move the decimal point.
          uint32_t scaley = valsIn[0].scale;
       
          if (valy != 0 && scaley > 0)
          {
              valy /= pow(10.0, (double)scaley);
          }
          ...
          // For decimal types, we need to move the decimal point.
          uint32_t scalex = valsIn[1].scale;
       
          if (valx != 0 && scalex > 0)
          {
              valx /= pow(10.0, (double)scalex);
          }
      

      repeats a fair amount of time at least in this files:

      • utils/regr/corr.cpp
      • utils/regr/covar_pop.cpp
      • utils/regr/covar_samp.cpp
      • utils/regr/regr_avgx.cpp
      • utils/regr/regr_avgy.cpp
      • utils/regr/regr_intercept.cpp
      • utils/regr/regr_r2.cpp
      • utils/regr/regr_slope.cpp
      • utils/regr/regr_sxx.cpp
      • utils/regr/regr_sxy.cpp
      • utils/regr/regr_syy.cpp
      • utils/udfsdk/avg_mode.cpp
      • utils/udfsdk/avgx.cpp
      • utils/udfsdk/mcsv1_udaf.h
      • utils/udfsdk/ssq.cpp

      Let's implement a method mcsv1_UDAF::toDouble() with approximately this content:

          double toDouble(ColumnDatum &datum) const
          {
              double val = convertAnyTo<double>(datum.columnData);
              if (val != 0 && datum.scale > 0)
                  val /= pow(10.0, (double) scale);
              return val;
          }
      

      and reuse it in the mentioned files, so the code in corr.cpp and other similar files can be replaced just to these two lines:

          double valy = toDouble(valsIn[0]);
          double valx = toDouble(valsIn[1]);
      

      Later, during MCOL-4361 work, the pow() call will be replaced to a dictionary lookup.

      Attachments

        Issue Links

          Activity

            People

              tntnatbry Gagan Goel (Inactive)
              bar Alexander Barkov
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.