← Back to team overview

maria-developers team mailing list archive

Re: [GSOC] ColumnStore: Add full support for DECIMAL

 

Hi Daniil,

Yes, it is currently stored as an int64. We want to extend it but also
some of the internal functionality converts it to a double (see
utils/funcexp/func_math.cpp for example). Every function would need to
be fully tested to make sure that it uses DECIMAL end-to-end and handles
overflow scenarios correctly.

At the moment ColumnStore's integer storage can only handle fixed 1, 2,
4 and 8 byte columns. 2, 4 and 8 are used for DECIMAL. It should be
somewhat easily extendible to 16 byte columns. I believe this will give
us the capability to store the same amount of digits as MariaDB. If at
CREATE TABLE it is determined that a DECIMAL will only require 8 bytes
it should only use an 8 byte column, if it needs bigger it should use a
16 byte column.

In addition the DDL code in ColumnStore will need modifying to handle
the range.

The ability to have 16 byte columns will also help us at a later date
with other potential data types in the future too.

Here is the first attempt at implementing 16byte columns in InfiniDB.
This work has not made its way into ColumnStore yet and there are likely
quite a few things this doesn't touch:

https://github.com/infinidb/infinidb/commit/eb1e2df76bda95a43cd2948890bff98f8785a805

Kind Regards
Andrew

On 20/03/17 21:57, Даниил Медведев wrote:
> I looked at the code (for better understanding of problem), and now I
> have some questions:
> Do I understand correctly, that now it is stored as an int64 value with
> a scale and we want to extend it, and store maximum 65 digits as in
> documentation?
> https://github.com/mariadb-corporation/mariadb-columnstore-engine/blob/master/dbcon/execplan/treenode.h#L62
> 
> We will use fixed size type or extandable?
> 
> I think that I will find all answers of my questions in specification,
> and there is no point in asking more questions.
> 
> Regards,
> Daniil Medvedev
> 
> 2017-03-20 21:51 GMT+03:00 Andrew Hutchings <andrew@xxxxxxxxxxxxxxx
> <mailto:andrew@xxxxxxxxxxxxxxx>>:
> 
>     Hi Daniil,
> 
>     Many thanks for your interest. We haven't fully specified it yet (I'll
>     build a full specification later this week). But I suspect the following
>     would be involved:
> 
>     * Implementation of methods to handle MariaDB's DECIMAL format
>     * Support for a longer than 8-byte numeric column type (there is an
>     InfiniDB tree with work for this already)
>     * Modification of the primitives processor for the math
>     * Modification of the function expression processor to handle the
>     new type
>     * Version upgrade support for DECIMAL from the current form to the
>     new form
> 
>     In the mean time please let me know if you have any questions.
> 
>     Kind Regards
>     Andrew
>     (Senior Software Engineer, MariaDB ColumnStore)
> 
>     On 19/03/17 23:09, Даниил Медведев wrote:
>     > Hello,
>     >
>     > I took part in GSoC last year, and closed one of MariaDB tasks. Now I
>     > want to continue programming with MariaDB developers and solve a
>     new task.
>     > I considered some of proposed tasks, and was interested in
>     "ColumnStore:
>     > Add full support for DECIMAL".
>     > I think this task is doable in the given time and I might solve it.
>     >
>     > P.S. My github link: https://github.com/medvdanil
>     >
>     > Regards,
>     > Daniil Medvedev
>     >
>     >
>     >
>     > _______________________________________________
>     > Mailing list: https://launchpad.net/~maria-developers
>     <https://launchpad.net/~maria-developers>
>     > Post to     : maria-developers@xxxxxxxxxxxxxxxxxxx
>     <mailto:maria-developers@xxxxxxxxxxxxxxxxxxx>
>     > Unsubscribe : https://launchpad.net/~maria-developers
>     <https://launchpad.net/~maria-developers>
>     > More help   : https://help.launchpad.net/ListHelp
>     <https://help.launchpad.net/ListHelp>
>     >
> 
>     --
>     Andrew Hutchings - LinuxJedi - http://www.linuxjedi.co.uk/
> 
> 

-- 
Andrew Hutchings - LinuxJedi - http://www.linuxjedi.co.uk/


Follow ups

References