Re: Add generate_series(numeric, numeric) - Mailing list pgsql-hackers

From Michael Paquier
Subject Re: Add generate_series(numeric, numeric)
Date
Msg-id CAB7nPqSjBFVbUJSeaxQrfdSy6ve3dvkwmfEp5Jrg-O=qGEZ+hA@mail.gmail.com
Whole thread Raw
In response to Re: Add generate_series(numeric, numeric)  (Michael Paquier <michael.paquier@gmail.com>)
Responses Re: Add generate_series(numeric, numeric)  (Michael Paquier <michael.paquier@gmail.com>)
List pgsql-hackers


On Mon, Sep 29, 2014 at 4:19 PM, Michael Paquier <michael.paquier@gmail.com> wrote:

Michael
Btw, while looking at your patch, I actually hacked it a bit and finished with the attached:
- changed process to use NumericVar instead of Numeric
- addition of custom step values with a function generate_series(numeric,numeric,numeric)
- some cleanup and some comments here and there
That's still WIP, but feel free to use it for future work. If you are able to add documentation and regression tests to this patch, I would recommend that you register it to the next commit fest, where it would get more review, and hopefully it will get committed.
Oops, it seems that I have been too hasty here. With a fresh mind I looked at my own patch again and found two bugs:
- Incorrect initialization of step variable with const_one
- Incorrect calculation of each step's value, making stuff crash, it is necessary to switch to the context of the function to perform operations on a temporary variable first.
Platon (am I writing your name correctly??), feel free to pick up the attached version, it works for me:
=# SELECT * FROM generate_series(0.8, -4, -0.7);
 generate_series
-----------------
             0.8
             0.1
            -0.6
            -1.3
            -2.0
            -2.7
            -3.4
(7 rows)
=# SELECT * FROM generate_series(0.8, 5, 1.2);
 generate_series
-----------------
             0.8
             2.0
             3.2
             4.4
(4 rows)
=# SELECT * FROM generate_series(0.8, 5);
 generate_series
-----------------
             0.8
             1.8
             2.8
             3.8
             4.8
(5 rows)
=# SELECT * FROM generate_series(0.8, 5, 0);
ERROR:  22023: step size cannot equal zero
LOCATION:  generate_series_numeric, numeric.c:1271

This could be polished more, but I'm sure you'll deal with that well. If you are able to have a more accompished version for the next commit fest I'll have a look at it.
Regards,
--
Michael

pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: jsonb format is pessimal for toast compression
Next
From: Michael Paquier
Date:
Subject: Re: Add generate_series(numeric, numeric)