Re: 7.4 Wishlist - Mailing list pgsql-hackers

From Hannu Krosing
Subject Re: 7.4 Wishlist
Date
Msg-id 1038942416.17102.64.camel@huli
Whole thread Raw
In response to Re: 7.4 Wishlist  (Bruce Momjian <pgman@candle.pha.pa.us>)
Responses Re: 7.4 Wishlist
List pgsql-hackers
On Tue, 2002-12-03 at 16:00, Bruce Momjian wrote:
> Is WITH a TODO item?

It is disguised as 

Exotic Features
===============

* Add sql3 recursive unions

Which was added at my request in dark times, possibly when PostgreSQL
was called postgres95 ;)

This should be changed  to two items

* Add SQL99 WITH clause to SELECT

* Add SQL99 WITH RECURSIVE to SELECT


> ---------------------------------------------------------------------------
> 
> Hannu Krosing wrote:
> > On Tue, 2002-12-03 at 09:20, Dennis Bj?rklund wrote:
> > > On Tue, 3 Dec 2002, Magnus Naeslund(f) wrote:
> > > 
> > > > Now convert this query so that it only evaluates the date_part thing
> > > > ONCE:
> > > > 
> > > > select t.id, date_part('days',now()-t.stamp) from table_name t where
> > > > date_part('days',now()-t.stamp) > 20;
> > > 
> > > Something like this could work:
> > > 
> > > select *
> > >   from (select t.id, date_part('days',now()-t.stamp) AS d
> > >           from table_name t) AS t1
> > >  where t1.d > 20;
> > > 
> > > That aside I also would like some sort of local names. Something like the
> > > let construct used in many functional languages (not exaclty what you want
> > > above, but still):
> > > 
> > > let t1 = select * from foo;
> > >     t2 = select * from bar;
> > > in select * from t1 natural join t2;
> > > 
> > > But even though I would like to give name to subexpressions like above, I
> > > still think postgresql should stick to standards as close as possible.
> > 
> > the standard way of doing it would be SQL99's WITH :
> > 
> > with t1 as (select * from foo)
> >      t2 as (select * from bar)
> > select * from t1 natural join t2;
> > 
> > you can even use preceeding queries
> > 
> > with t1 as (select a,b from foo)
> >      t1less as (select a,b from t1 where a < 0)
> >      t1zero as (select a,b from t1 where a = 0)
> > select * from t1zero, t1less, where t1zero.b = t1less.a;
> > 
> > Having working WITH clause is also a prerequisite to implementing SQL99
> > recursive queries (where each query in WITH clause sees all other
> > queries in the WITH clause)
> > 
> > I sent a patch to this list recently that implements the above syntax,
> > but I currently dont have knowledge (nor time to aquire it), so if
> > someone else does not do it it will have to wait until January.
> > 
> > OTOH, I think that turning my parsetree to a plan would be quite easy
> > for someone familiar with turning parestrees into plans ;)
> > 
> > I offer to check if it works in current (and make it work again if it
> > does not) if someone would be willing to hold my hand in implementation
> > parsetree-->plan part ;). 
> > 
> > I think that for non-recursive queries this is all that needs to be
> > done, i.e. the plan would not care if the subqueries were from FROM,
> > from WITH or from separately defined views.
> > 
> > -- 
> > Hannu Krosing <hannu@tm.ee>
> > 
> > ---------------------------(end of broadcast)---------------------------
> > TIP 3: if posting/reading through Usenet, please send an appropriate
> > subscribe-nomail command to majordomo@postgresql.org so that your
> > message can get through to the mailing list cleanly
> > 
-- 
Hannu Krosing <hannu@tm.ee>


pgsql-hackers by date:

Previous
From: Henner Zeller
Date:
Subject: Re: [GENERAL] 7.3 -> pg_atoi: zero-length string
Next
From: Bruce Momjian
Date:
Subject: Re: [GENERAL] 7.3 -> pg_atoi: zero-length string