Thread: Nested composite types again

Nested composite types again

From
Michael Kolomeitsev
Date:
Hi,

but it didn't help.

CREATE TABLE nodes (
  id SERIAL NOT NULL PRIMARY KEY,
  name TEXT NOT NULL
);

CREATE TYPE pathId AS (
  id INTEGER,
  node nodes
);

CREATE OR REPLACE FUNCTION test_AEN7304() RETURNS void AS $$
DECLARE
  r pathId;
  n nodes;
BEGIN
  n.name := 'abc';
  r.id := 1;
  r.node := n; -- All is ok
--  r.node.name := 'def'; -- << Error here
--  (r).node.name := 'def'; -- << and here
  ((r).node).name := 'def'; -- << and here
END;
$$ LANGUAGE 'plpgsql';

And I can't even make 'n' as ALIAS FOR r.node (to simulate C-like pointer).

What is the right syntax?
Thanks

Re: Nested composite types again

From
Vibhor Kumar
Date:
On Nov 28, 2012, at 5:02 AM, Michael Kolomeitsev <mkolomeitsev@gmail.com> wrote:

> Hi,
>
> I have already read this
> http://www.postgresql.org/docs/9.2/static/rowtypes.html#AEN7304
> but it didn't help.
>
> CREATE TABLE nodes (
>  id SERIAL NOT NULL PRIMARY KEY,
>  name TEXT NOT NULL
> );
>
> CREATE TYPE pathId AS (
>  id INTEGER,
>  node nodes
> );
>
> CREATE OR REPLACE FUNCTION test_AEN7304() RETURNS void AS $$
> DECLARE
>  r pathId;
>  n nodes;
> BEGIN
>  n.name := 'abc';
>  r.id := 1;
>  r.node := n; -- All is ok
> --  r.node.name := 'def'; -- << Error here
> --  (r).node.name := 'def'; -- << and here
>  ((r).node).name := 'def'; -- << and here
> END;
> $$ LANGUAGE 'plpgsql';
>
> And I can't even make 'n' as ALIAS FOR r.node (to simulate C-like pointer).
>
> What is the right syntax?
> Thanks

I have verified that plpgsql doesn't allow assignment like r.node.name='def' or (r).node.name or ((r).node).name

In Above case, you can use some variable like n and update the n composite variable and assigned it to r.node as you
havealready done in plpgsql. 

Thanks & Regards,
Vibhor Kumar
EnterpriseDB Corporation
The Enterprise PostgreSQL Company
Blog:http://vibhork.blogspot.com



Re: Nested composite types again

From
Michael Kolomeitsev
Date:

Ok.
How do you think should I report this as a bug?

On Nov 28, 2012 10:37 PM, "Vibhor Kumar" <vibhor.kumar@enterprisedb.com> wrote:

On Nov 28, 2012, at 5:02 AM, Michael Kolomeitsev <mkolomeitsev@gmail.com> wrote:

> Hi,
>
> I have already read this
> http://www.postgresql.org/docs/9.2/static/rowtypes.html#AEN7304
> but it didn't help.
>
> CREATE TABLE nodes (
>  id SERIAL NOT NULL PRIMARY KEY,
>  name TEXT NOT NULL
> );
>
> CREATE TYPE pathId AS (
>  id INTEGER,
>  node nodes
> );
>
> CREATE OR REPLACE FUNCTION test_AEN7304() RETURNS void AS $$
> DECLARE
>  r pathId;
>  n nodes;
> BEGIN
>  n.name := 'abc';
>  r.id := 1;
>  r.node := n; -- All is ok
> --  r.node.name := 'def'; -- << Error here
> --  (r).node.name := 'def'; -- << and here
>  ((r).node).name := 'def'; -- << and here
> END;
> $$ LANGUAGE 'plpgsql';
>
> And I can't even make 'n' as ALIAS FOR r.node (to simulate C-like pointer).
>
> What is the right syntax?
> Thanks

I have verified that plpgsql doesn't allow assignment like r.node.name='def' or (r).node.name or ((r).node).name

In Above case, you can use some variable like n and update the n composite variable and assigned it to r.node as you have already done in plpgsql.

Thanks & Regards,
Vibhor Kumar
EnterpriseDB Corporation
The Enterprise PostgreSQL Company
Blog:http://vibhork.blogspot.com

Re: Nested composite types again

From
Christian Hammers
Date:
Hello

Try http://www.postgresql.org/support/submitbug/

bye,

-christian-


On Wed, 28 Nov 2012 23:51:52 +0700
Michael Kolomeitsev <mkolomeitsev@gmail.com> wrote:

> Ok.
> How do you think should I report this as a bug?
> On Nov 28, 2012 10:37 PM, "Vibhor Kumar" <vibhor.kumar@enterprisedb.com>
> wrote:
>
> >
> > On Nov 28, 2012, at 5:02 AM, Michael Kolomeitsev <mkolomeitsev@gmail.com>
> > wrote:
> >
> > > Hi,
> > >
> > > I have already read this
> > > http://www.postgresql.org/docs/9.2/static/rowtypes.html#AEN7304
> > > but it didn't help.
> > >
> > > CREATE TABLE nodes (
> > >  id SERIAL NOT NULL PRIMARY KEY,
> > >  name TEXT NOT NULL
> > > );
> > >
> > > CREATE TYPE pathId AS (
> > >  id INTEGER,
> > >  node nodes
> > > );
> > >
> > > CREATE OR REPLACE FUNCTION test_AEN7304() RETURNS void AS $$
> > > DECLARE
> > >  r pathId;
> > >  n nodes;
> > > BEGIN
> > >  n.name := 'abc';
> > >  r.id := 1;
> > >  r.node := n; -- All is ok
> > > --  r.node.name := 'def'; -- << Error here
> > > --  (r).node.name := 'def'; -- << and here
> > >  ((r).node).name := 'def'; -- << and here
> > > END;
> > > $$ LANGUAGE 'plpgsql';
> > >
> > > And I can't even make 'n' as ALIAS FOR r.node (to simulate C-like
> > pointer).
> > >
> > > What is the right syntax?
> > > Thanks
> >
> > I have verified that plpgsql doesn't allow assignment like r.node.name='def'
> > or (r).node.name or ((r).node).name
> >
> > In Above case, you can use some variable like n and update the n composite
> > variable and assigned it to r.node as you have already done in plpgsql.
> >
> > Thanks & Regards,
> > Vibhor Kumar
> > EnterpriseDB Corporation
> > The Enterprise PostgreSQL Company
> > Blog:http://vibhork.blogspot.com
> >
> >


--
Network Engineering & Design; Content Delivery Platform & IP

NETCOLOGNE Gesellschaft für Telekommunikation mbH
Am Coloneum 9 | 50829 Köln
Tel: 0221 2222-8711 | Fax: 0221 2222-78711
www.netcologne.de

Geschäftsführer:
Dr. Hans Konle (Sprecher)
Dipl.-Ing. Karl-Heinz Zankel
HRB 25580, AG Köln



Diese Nachricht (inklusive aller Anhänge) ist vertraulich. Sollten Sie diese
Nachricht versehentlich erhalten haben, bitten wir, den Absender (durch
Antwort-E-Mail) hiervon unverzüglich zu informieren und die Nachricht zu
löschen. Die E-Mail darf in diesem Fall weder vervielfältigt noch in anderer
Weise verwendet werden.