From: | Yasir Malik <ymalik(at)cs(dot)stevens-tech(dot)edu> |
---|---|
To: | John DeSoi <jd(at)icx(dot)net> |
Cc: | PostgreSQL <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: Object-relational features |
Date: | 2004-03-15 14:06:39 |
Message-ID: | Pine.NEB.4.58.0403150902200.19035@dab.cs.stevens-tech.edu |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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(at)icx(dot)net>
> To: Yasir Malik <ymalik(at)cs(dot)stevens-tech(dot)edu>
> Cc: PostgreSQL <pgsql-sql(at)postgresql(dot)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
>
From | Date | Subject | |
---|---|---|---|
Next Message | Bruno Wolff III | 2004-03-15 15:07:39 | Re: Object-relational features |
Previous Message | John DeSoi | 2004-03-15 13:28:50 | Re: Object-relational features |