Re: point -> double,double ? - Mailing list pgsql-general

From Greg Stark
Subject Re: point -> double,double ?
Date
Msg-id 87adhy28fy.fsf@stark.dyndns.tv
Whole thread Raw
In response to Re: point -> double,double ?  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: point -> double,double ?
List pgsql-general
Tom Lane <tgl@sss.pgh.pa.us> writes:

> Greg Stark <gsstark@mit.edu> writes:
> > Hm, this seems odd
>
> > slo=> select b,b[0],b[0][0] from t;
> >                        b                       |           b            | b
> > -----------------------------------------------+------------------------+---
> >  (-75.493906,44.854114),(-75.493906,44.854114) | (-75.493906,44.854114) |
> > (1 row)
>
> The problem here is that foo[m][n] is our notation for a
> doubly-subscripted array --- and we don't have any concept in the type
> system that a one-dimensional array is different from a two-dimensional
> array.  So the code goes down the primrose path of assuming that "b"
> is a 2-D array of points, rather than expecting b[0] to yield a
> separate datatype that should be separately subscripted.

I guess arrays must be some deep voodoo. [] doesn't show up in the list of
operators. I would be happy if there was at least some way to trick the parser
into doing the right thing. I'm surprised something like this doesn't work:

slo=> select (b[0])[0] from t;
ERROR:  parser: parse error at or near "[" at character 14

> We could perhaps hack something for this particular case, since box is
> known not to be a general array but only a hardwired one-dimensional
> array of points.  I don't see a good general solution though.
> Any thoughts?

If [] were a normal operator then other datatypes could define operations
similar to point and box, but I imagine it's the way it is for some good
reason in the parser level.


--
greg

pgsql-general by date:

Previous
From: "Carmen Wai"
Date:
Subject: Re: Support for unicode
Next
From: Gavin Atkinson
Date:
Subject: Re: change in behaviour? Is this a regression in function?