Thread: Classes, Inheritance, and Children

Classes, Inheritance, and Children

From
Thomas Swan
Date:
<br /> I think I may have asked this before... If I did I'm sorry, but maybe this attempt, assuming a prior one, may be
alittle more clear.<br /><br /> create table foo (id int8);<br /> create table bar1 (name text) inherits (foo);<br />
createtable bar2 (data text) inherits (foo);<br /> create table hybrid ( ) inherits (bar1, bar2);<br /><br /><b>INSERT
INTOfoo VALUES (1);<br /> INSERT INTO bar1 VALUES (2,'myname');<br /> INSERT INTO bar2 VALUES (3,'mydata');<br />
INSERTINTO hybrid VALUES (4,'morename','moredata');<br /><br /><br /></b>I want to do a <b>SELECT * FROM foo*</b>; but
Ionly get the 'id' column as in :<br /><br /><font face="Courier, Courier">id <br /> ---<br />  1<br />  2<br />  3<br
/> 4<br /><br /><br /></font>What would be the query to get the following table or a magical way to expand children?<br
/><br/> I had originally hoped that <b>SELECT * FROM foo*</b> would yield the following, but it's not so.<br /><br
/><fontface="Courier, Courier">id | name       | data<br /> ---+------------+-------------<br />  1 | null       |
null<br/>  2 | 'myname'   | null<br />  3 | null       | 'mydata'<br />  4 | 'morename' | 'moredata'<br />   
|           |<br /><br /></font>I tried <b>SELECT id, name AS NULL, data AS NULL FROM foo*</b>; but that didn't do
anythingbut make 2 null columns...<br /><br /> Any help would be ... helpful...<br /><br /> Thanks,<br /> Thomas 

Re: Classes, Inheritance, and Children

From
"Oliver Elphick"
Date:
Thomas Swan wrote: >I think I may have asked this before... If I did I'm sorry, but maybe this  >attempt, assuming a
priorone, may be a little more clear. > >create table foo (id int8); >create table bar1 (name text) inherits (foo);
>createtable 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
thatSELECT * 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.Elphick@lfix.co.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