Re: [INTERFACES] Re: [HACKERS] changes in 6.4 - Mailing list pgsql-hackers

From Hannu Krosing
Subject Re: [INTERFACES] Re: [HACKERS] changes in 6.4
Date
Msg-id 35AEFAAB.2C8CC9B0@trust.ee
Whole thread Raw
In response to Re: [INTERFACES] Re: [HACKERS] changes in 6.4  (Bruce Momjian <maillist@candle.pha.pa.us>)
List pgsql-hackers
Thomas G. Lockhart wrote:
>
> > And there is no way of doing (at least presently):
> >
> > select * from table where (val1,val2,val3)
> >  in (select 1,1,1 union select 1,1,2);
>
> I'll look at that...

Could it be a good idea to have the syntax (at least for constants),
changed to (or at least allowed ;) to the following:

select * from table
 where (val1,val2,val3)
 in ( (1,1,3), (1,1,2), (1,1,1) );

Which brings us to another issue:

Should (val1,val2,val3) be just some construct that gets rewritten to
"something else" in parser, or should it create an instance of
anonymus row type ?

Allowing anonymus row type creation on the fly would allow us many nice
things, for example a way to create new types of aggregate functions,
like
FOR_MAX((price,date)), so that we could do the following in only one
pass

SELECT
  FOR_MAX((price,sales_datetime)) as last_price,
  MAX(sales_datetime) as last_sale,
  WEEK(sales_datetime) week_nr
GROUP BY
  week_nr
;

This would get the prices and dates of each weeks last sale, and is
much hairier to do using just standard sql.

Hannu

pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] proposals for LLL, part 1
Next
From: David Gross
Date:
Subject: using C++ to define new functions