Re: temporal version of generate_series() - Mailing list pgsql-patches

From Pavel Stehule
Subject Re: temporal version of generate_series()
Date
Msg-id 162867790805011136x2cf282c2n3a0530805f5b1427@mail.gmail.com
Whole thread Raw
In response to Re: temporal version of generate_series()  (H.Harada <umi.tanuki@gmail.com>)
List pgsql-patches
2008/5/1 H. Harada <umi.tanuki@gmail.com>:
> 2008/5/1 H. Harada <umi.tanuki@gmail.com>:
>> 2008/5/1 Pavel Stehule <pavel.stehule@gmail.com>:
>>
>> > Hello
>>  >
>>  >  why you don't use polymorphic types?
>>  Ah, good idea. I didn't think we could fix the third argument to
>>  "interval" but "anyelement".
>>  For a temporal version, it's reasonable.
>
> I was thinking about it again. There are 3 points:
>
> a. It will get complicated in the function to resolve operator for
> polymorphic types, including search for namespace and error (not
> found) handling.

yes, it's true;

> b. Other temporal data types than timestamp is easy to be casted from
> timestamp results.
> c. In the integer version of generate_series also it is possible to
> cast the results to other numerical types though harder to cast them
> to temporal data types.
>
> So it would be better to keep current patch, isn't it?
>

I missing generator for date  - casting from and to timestemp is
little bit ugly - but polymorphic types in C isn't good idea, I see
it.

Regards
Pavel Stehule
>
> postgres=# select generate_series('2008/05/01 20:00'::timestamp,
> '2008/05/02 08:00'::timestamp
> , '1 hour'::interval);
>   generate_series
> ---------------------
>  2008-05-01 20:00:00
>  2008-05-01 21:00:00
>  2008-05-01 22:00:00
>  2008-05-01 23:00:00
>  2008-05-02 00:00:00
>  2008-05-02 01:00:00
>  2008-05-02 02:00:00
>  2008-05-02 03:00:00
>  2008-05-02 04:00:00
>  2008-05-02 05:00:00
>  2008-05-02 06:00:00
>  2008-05-02 07:00:00
>  2008-05-02 08:00:00
> (13 rows)
>
> postgres=# select generate_series('2008/05/01 20:00'::timestamp,
> '2008/05/02 08:00'::timestamp
> , '1 hour'::interval)::time;
>  generate_series
> -----------------
>  20:00:00
>  21:00:00
>  22:00:00
>  23:00:00
>  00:00:00
>  01:00:00
>  02:00:00
>  03:00:00
>  04:00:00
>  05:00:00
>  06:00:00
>  07:00:00
>  08:00:00
> (13 rows)
>
> postgres=# select generate_series('2008/05/01 20:00'::timestamp,
> '2008/05/02 08:00'::timestamp
> , '1 hour'::interval)::timestamptz;
>    generate_series
> ------------------------
>  2008-05-01 20:00:00+09
>  2008-05-01 21:00:00+09
>  2008-05-01 22:00:00+09
>  2008-05-01 23:00:00+09
>  2008-05-02 00:00:00+09
>  2008-05-02 01:00:00+09
>  2008-05-02 02:00:00+09
>  2008-05-02 03:00:00+09
>  2008-05-02 04:00:00+09
>  2008-05-02 05:00:00+09
>  2008-05-02 06:00:00+09
>  2008-05-02 07:00:00+09
>  2008-05-02 08:00:00+09
> (13 rows)
>
> postgres=# select generate_series('2008/05/01 20:00'::timestamp,
> '2008/05/02 08:00'::timestamp
> , '1 hour'::interval)::date;
>  generate_series
> -----------------
>  2008-05-01
>  2008-05-01
>  2008-05-01
>  2008-05-01
>  2008-05-02
>  2008-05-02
>  2008-05-02
>  2008-05-02
>  2008-05-02
>  2008-05-02
>  2008-05-02
>  2008-05-02
>  2008-05-02
> (13 rows)
>
>
> Hitoshi Harada
>
> 2008/5/1 H. Harada <umi.tanuki@gmail.com>:
>> 2008/5/1 Pavel Stehule <pavel.stehule@gmail.com>:
>>
>> > Hello
>>  >
>>  >  why you don't use polymorphic types?
>>  Ah, good idea. I didn't think we could fix the third argument to
>>  "interval" but "anyelement".
>>  For a temporal version, it's reasonable.
>>
>>  Also, the name "generate_time_series" is better than before?
>>
>>  Hitoshi Harada
>>
>>
>>  2008/5/1 Pavel Stehule <pavel.stehule@gmail.com>:
>>
>>
>> > Hello
>>  >
>>  >  why you don't use polymorphic types?
>>  >
>>  >  like:
>>  >
>>  >  create or replace function generate_time_series(anyelement,
>>  >  anyelement, interval, OUT result anyelement)
>>  >  returns setof anyelement as $$
>>  >  begin
>>  >   result := $1;
>>  >   while (result <= $2) loop
>>  >     return next;
>>  >     result := result + $3;
>>  >   end loop;
>>  >   return;
>>  >  end;
>>  >  $$ language plpgsql;
>>  >
>>  >  Regards
>>  >  Pavel Stehule
>>  >
>>  >
>>  >
>>  >  2008/5/1 H. Harada <umi.tanuki@gmail.com>:
>>  >
>>  >
>>  > > Here's the sync and updated patch.
>>  >  > It contains "strict" in catalog as well.
>>  >  >
>>  >  > Hitoshi Harada
>>  >  >
>>  >  > 2008/4/24 H. Harada <umi.tanuki@gmail.com>:
>>  >  >> 2008/4/23 Alvaro Herrera <alvherre@commandprompt.com>:
>>  >  >>
>>  >  >> > H.Harada escribió:
>>  >  >>  >
>>  >  >>  >
>>  >  >>  >  > # This is my first time to send a patch. If I did something wrong, I
>>  >  >>  >  > appreciate your pointing me out.
>>  >  >>  >
>>  >  >>  >  Brace positioning is off w.r.t. our conventions -- please fix that and
>>  >  >>  >  resubmit.
>>  >  >>
>>  >  >>  Here's updated version. Thanks for your advice.
>>  >  >>
>>  >  >>  Hitoshi Harada
>>  >  >>
>>  >  >>  2008/4/23 Alvaro Herrera <alvherre@commandprompt.com>:
>>  >  >>
>>  >  >>
>>  >  >> > H.Harada escribió:
>>  >  >>  >
>>  >  >>  >
>>  >  >>  >  > # This is my first time to send a patch. If I did something wrong, I
>>  >  >>  >  > appreciate your pointing me out.
>>  >  >>  >
>>  >  >>  >  Brace positioning is off w.r.t. our conventions -- please fix that and
>>  >  >>  >  resubmit.
>>  >  >>  >
>>  >  >>  >  I have added this patch to the May commitfest.
>>  >  >>  >
>>  >  >>  >  --
>>  >  >>  >  Alvaro Herrera                                http://www.CommandPrompt.com/
>>  >  >>  >  The PostgreSQL Company - Command Prompt, Inc.
>>  >  >>  >
>>  >  >>
>>  >  >
>>  >  >
>>  >  > --
>>  >  > Sent via pgsql-patches mailing list (pgsql-patches@postgresql.org)
>>  >  > To make changes to your subscription:
>>  >  > http://www.postgresql.org/mailpref/pgsql-patches
>>  >  >
>>  >  >
>>  >
>>
>

pgsql-patches by date:

Previous
From: "Jaime Casanova"
Date:
Subject: Re: plpgsql CASE statement - last version
Next
From: Tom Lane
Date:
Subject: Re: Removing NONSEG mode