Re: Object-relational features - Mailing list pgsql-sql

From Yasir Malik
Subject Re: Object-relational features
Date
Msg-id Pine.NEB.4.58.0403150902200.19035@dab.cs.stevens-tech.edu
Whole thread Raw
In response to Re: Object-relational features  (John DeSoi <jd@icx.net>)
Responses Re: Object-relational features
List pgsql-sql
Dr. DeSoi
Thanks for your reply.
What is an "immutable strict" and what is an "internal" language?

Does Postgres plan on implenting types as Oracle does?  For example:
create type AddrType as (street char(20), city char(20), zip char(5));
create type CustType as (name varchar(2), addr AddrType);
create table Cust of CustType;

Which is superior to Postgres's way of implementing types (writing a C
function).

Thanks,
Yasir

On Mon, 15 Mar 2004, John DeSoi wrote:

> Date: Mon, 15 Mar 2004 08:28:50 -0500
> From: John DeSoi <jd@icx.net>
> To: Yasir Malik <ymalik@cs.stevens-tech.edu>
> Cc: PostgreSQL <pgsql-sql@postgresql.org>
> Subject: Re: [SQL] Object-relational features
>
>
> On Mar 13, 2004, at 12:30 PM, Yasir Malik wrote:
>
> > For
> > example, using "create type as" is totally worthless because you can't
> > use
> > it as a field type in a table; you can't compose in another "create
> > type
> > as"; and you can't inherit another composite type.  The only way to
> > create
> > a true type is to use "create type" and write C code as a shared
> > object,
> > so I'm basically doing everything C, which is not something I want to
> > do.
>
>
> I'm not sure if this is what you are looking for, but it shows how to
> create a column type based on the text type. So your selects will
> return the column type as your custom type and you can process the
> content accordingly. From reading the docs (and asking on the list) I
> did not think this was possible either without writing external code in
> C. But a post about something else finally provided the clues I needed
> to get it working.
>
> Best,
>
> John DeSoi, Ph.D.
>
>
> ====
> test=# create or replace function lispin(cstring, oid, int4) returns
> lisp as 'varcharin' language 'internal' immutable strict;
> NOTICE:  type "lisp" is not yet defined
> DETAIL:  Creating a shell type definition.
> CREATE FUNCTION
> test=# create or replace function lispout(lisp) returns cstring as
> 'varcharout' language 'internal' immutable strict;
> NOTICE:  argument type lisp is only a shell
> CREATE FUNCTION
> test=# create type lisp (input=lispin, output=lispout,
> internallength=variable);
> CREATE TYPE
> test=# create table tst (a lisp);
> CREATE TABLE
> test=# insert into tst (a) values ('1');
> INSERT 18499 1
> test=# insert into tst (a) values ('(+ 5 5)');
> INSERT 18500 1
> test=# select * from tst;
>      a
> ---------
>   1
>   (+ 5 5)
> (2 rows)
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
>                http://www.postgresql.org/docs/faqs/FAQ.html
>


pgsql-sql by date:

Previous
From: John DeSoi
Date:
Subject: Re: Object-relational features
Next
From: Bruno Wolff III
Date:
Subject: Re: Object-relational features