OO resources - Mailing list pgsql-hackers

From Brett McCormick
Subject OO resources
Date
Msg-id 13609.15797.997838.358688@abraxas.scene.com
Whole thread Raw
In response to Re: [HACKERS] On improving OO support in posgresql and relaxing oid bottleneck at the same time  ("Maurice Gittens" <mgittens@gits.nl>)
List pgsql-hackers
are there some good, human-readable documents that outline these and
other basic OO concepts?  I've done some OO programming, but I'm fuzzy
on a lot of issues.  sorry to be so off-topic

--brett

On Mon, 6 April 1998, at 12:49:23, Maurice Gittens wrote:

> -----Original Message-----
> From: Thomas G. Lockhart <lockhart@alumni.caltech.edu>
> To: Maurice Gittens <mgittens@gits.nl>
> Cc: hackers@postgreSQL.org <hackers@postgreSQL.org>
> Date: zondag 5 april 1998 23:56
> Subject: Re: [HACKERS] On improving OO support in posgresql and relaxing oid
> bottleneck at the same time
>
>
> >> I'm currently under the impression that the following change in the
> >> postgresql system would benefict the overall performance and quality
> >> of the system.
> >>
> >> Tuples for a class and all it's derived classes stored in one file.
> >
> >I hate to sound like a "small thinker" here, but I'd be concerned about
> >some issues:
> >
> >1) true OO semantics are difficult/impossible to accomplish with SQL.
> >This is one reason why Postgres is probably in the OR realm rather than
> >true OO.
>
> Ok, let's be more specific. We'll define OO semantics as
> support for:
> 1. identity
> (We already have partial support); we just have to get the details right
> 2. inheritance
> We allready have support. I'm suggesting an implementation which
> is a better overall choice IMO. Because we avoid the system oid
> unique oid requirement while it also provides for an improvent
> in the support for polymorphism.
> 3. polymorphism
> partially supported, but some necesary properties are not yet
> inherited automatically. I believe overriding triggers
> is likely to work automatically. There are however some
> choices which we'll have to make.
>
> As far as I see, these concepts can be implemented without
> any changes to the current definition of the query language in
> postgresql.
>
> Encapsulation would seem to require new syntax. It also
> seems not to fully fit in to the the relation model, so
> we leave it out.
>
> >
> >2) Supporting inheritance using one-file storage probably leads to
> >larger overhead in _all_ file accesses, not just ones containing
> >inherited tables. Tuples would now contain a variable number of fields,
> >with variable definitions, with ... Ack! :)
>
> Yes but this overhead is very small for tables without inheritance.
> An extra statement like:
>
> heap_getnext(ScanDesc scanDesc)
> {
> ...
> while(!done)
> {
>    tuple = readTuple(...)
> ...
> if (IsInstanceOf(tuple -> reloid, scanDesc -> reloid)
> {
>     return tuple;
> }
> ...
> }
>
> The information on inheritance relations between classes can be precomputed
> when a heap scandesc is created.
>
> This IMO this overhead is not significant, when there is no inheritance.
> When there is inheritance we simple use indices to speed things up,
> if it's deemed necesary.
>
> >
> >3) Indices are fundamentally present to speed up access, though we use
> >them for other purposes too (such as enforcing uniqueness). Perhaps the
> >topic of inheritance, uniqueness, and referential integrity (foreign
> >keys, etc) should be solved (or at least discussed) independent of
> >indices, though indices or index-like structures may be involved in the
> >solution.
>
> Lets consider the following mail to the questions list by Brett McCormick
> <brett@work.chicken.org> (copied from the list archive):
>
> > I've got a table that has a primary key with a default of
> > nextval('seq').  I've got another table which inherits this one, but
> > it fails to inherit the unique btree index.  It does inherit the
> > default value.  So, I'm assuming that if I create a unique index for
> > that field on the child table, it won't keep you from inserting values
> > that exist in that field in the parent table (and since they both
> > share the same sequence, that's what I want).
> >
> > So primary keys do not work in this situation.  Are there plans to
> > enhance the inheritance?  I have no idea how it works, is it
> > intelligent?  Seems more klunky than not, but I haven't really looked
> > at the code.  Should I stop using inheritance altogether, considering
> > its drawbacks (no idea what child class it is in when selecting from
> > parent and all children, no shared indices/pkeys) when I don't select
> > from them all at once?
>
> This person identifies a number of problems with the current system.
> - no idea what child class it is when selecting from parent and all children
> - no shared indices/primary keys
> - no inheritance of unique attribute etc.
>
> I can also add similar points
> - triggers should also be inherited. This gives us polymorphism without
>   without introducing any new syntax.
> - etc.
>
> I agree that conceptually indices are present only for speed. But the
> reality is that by inheriting them we give users that which they
> expect. (There are more emails like this one to be found on
> the questions lists).
>
> I think that what Brett wants to do is legitemate.
> Storing the tuples of a same class hierarchy in different files is IMO
> an unfortunate design choice of the original implementors
> of postgresql.
>
> The suggestion I'm making solves all of Brett's problems.
> >
> >4) imho, the roughest areas of existing (or missing) capability in
> >Postgres involve array types and types which require additional support
> >information (such as exact numerics). Focusing on fixing/improving these
> >areas may lead to cleaning up semantics, mechanisms, and capabilities in
> >the backend, and make other (more derived?) features such as constraint
> >inheritance and enforcement easier to implement. Well, it will help
> >something anyway, even if not constraints :)
>
> I see that we have similar ideas about where the system should eventually
> be. I do however believe that we'll get there by means of cleaning up
> the semantics and then using these cleaned semantics to
> make the system as a whole more conceptually pure.
>
> In my experience systems which are conceptually pure can be
> made to be very efficient.
>
> I think that removing the oid bottleneck, while also solving
> a number of fundamental problems (from an OO perspective)
> with one and the same change, is a Good Thing (tm) -:).
>
> Thanks, with regards from Maurice.
>
>

pgsql-hackers by date:

Previous
From: ocie@paracel.com
Date:
Subject: Re: [HACKERS] Developer setup, what works?
Next
From: "Vadim B. Mikheev"
Date:
Subject: Re: [HACKERS] Ack...major(?) bug just found in v6.3.1...