Re: Classes, Inheritance, and Children

From: "Oliver Elphick" <olly(at)lfix(dot)co(dot)uk>
To: Thomas Swan <tswan(at)olemiss(dot)edu>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: Classes, Inheritance, and Children
Date: 2000-07-27 09:01:50
Message-ID: 200007270901.e6R91pA23448@linda.lfix.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Thomas Swan wrote:
>I think I may have asked this before... If I did I'm sorry, but maybe this
>attempt, assuming a prior one, may be a little more clear.
>
>create table foo (id int8);
>create table bar1 (name text) inherits (foo);
>create table bar2 (data text) inherits (foo);
>create table hybrid ( ) inherits (bar1, bar2);
>
>INSERT INTO foo VALUES (1);
>INSERT INTO bar1 VALUES (2,'myname');
>INSERT INTO bar2 VALUES (3,'mydata');
>INSERT INTO hybrid VALUES (4,'morename','moredata');
>
>
>I want to do a SELECT * FROM foo*; but I only get the 'id' column as in :
>
>id
>---
> 1
> 2
> 3
> 4

This is correct in object-oriented theory. foo only knows about its own
features; it does not know about additional features of its descendants,
nor should it.

>What would be the query to get the following table or a magical way to
>expand children?
>
>I had originally hoped that SELECT * FROM foo* would yield the following,
>but it's not so.
>
>id | name | data
>---+------------+-------------
> 1 | null | null
> 2 | 'myname' | null
> 3 | null | 'mydata'
> 4 | 'morename' | 'moredata'

You need to use a UNION of the four tables, with nulls
supplied where necessary:

select * from hybrid -- specify first to establish the
-- column types
union select id, null, null from foo
union select id, name, null from bar1
union select id, null, data from bar2;

Unfortunately, you can't make this a view, because views of unions are
not yet supported.

--
Oliver Elphick Oliver(dot)Elphick(at)lfix(dot)co(dot)uk
Isle of Wight http://www.lfix.co.uk/oliver
PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47 6B 7E 39 CC 56 E4 C1 47
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C
========================================
"But the wisdom that is from above is first pure, then
peaceable, gentle, and easy to be intreated, full of
mercy and good fruits, without partiality, and without
hypocrisy." James 3:17

Browse pgsql-sql by date

  From Date Subject
Next Message Jan Wieck 2000-07-27 09:39:32 Re: Large text insertion
Previous Message Vladimir Terziev 2000-07-27 08:30:26 Large text insertion