Re: User Defined Types in Java - Mailing list pgsql-hackers

From Thomas Hallgren
Subject Re: User Defined Types in Java
Date
Msg-id 43F0DA4D.3000702@tada.se
Whole thread Raw
In response to Re: User Defined Types in Java  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Tom Lane wrote:
> Thomas Hallgren <thomas@tada.se> writes:
>   
>> What I'm proposing should be an addition that also can be seen as the 
>> beginning of a path to migrate the CREATE TYPE construct to conform with 
>> the SQL 2003 standard.
>>     
>
> I'd be interested to see where in the SQL2003 spec the syntax you are
> proposing can be found.
>   
The PostgreSQL specific semantics with input/output/receive/send is are 
not in the SQL 2003 standard. But it does define how methods can be 
declared on a type and to me, the input/output/receive/send are as close 
to constructors and instance methods as you can get. I'm *not* 
suggesting a full implementation of this. I am merely stating that 
moving functions into the type and adding a column to the pg_proc table 
that allows a function to be tied to a type is a step in that direction:

Here's an example using SQL 2003 syntax (from JRT-2003). The BNF is below:

CREATE TYPE addr EXTERNAL NAME 'address_classes_jar:Address'   LANGUAGE JAVA   AS (       street_attr CHARACTER
VARYING(50)EXTERNAL NAME 'street',       zip_attr CHARACTER(10) EXTERNAL NAME 'zip'       )   CONSTRUCTOR METHOD addr
()      RETURNS addr SELF AS RESULT       EXTERNAL NAME 'Address',   CONSTRUCTOR METHOD addr (s_parm CHARACTER
VARYING(50),z_parm 
 
CHARACTER(10))       RETURNS addr SELF AS RESULT       EXTERNAL NAME 'Address',   METHOD to_string ()       RETURNS
CHARACTERVARYING(255)       EXTERNAL NAME 'toString',   STATIC METHOD contiguous (A1 addr, A2 addr)       RETURNS
CHARACTER(3)      EXTERNAL NAME 'contiguous';
 

<user-defined type definition> ::= CREATE TYPE <user-defined type body>
<user-defined type body> ::=   <schema-resolved user-defined type name>   [ <subtype clause> ]   [ AS <representation>
]  [ <user-defined type option list> ]   [ <method specification list> ]
 

...

<method specification list> ::=  <method specification> [ { <comma> <method specification> }... ]

<method specification> ::=  <original method specification>| <overriding method specification>

<original method specification> ::=  <partial method specification> [ SELF AS RESULT ] [ SELF AS LOCATOR ]  [ <method
characteristics>]
 

<overriding method specification> ::= OVERRIDING <partial method 
specification>

<partial method specification> ::=  [ INSTANCE | STATIC | CONSTRUCTOR ]  METHOD <method name> <SQL parameter
declarationlist>  <returns clause>  [ SPECIFIC <specific method name> ]
 
<specific method name> ::= [ <schema name> <period> ]<qualified identifier>

<method characteristics> ::= <method characteristic>...

<method characteristic> ::=   <language clause> | <parameter style clause> | <deterministic characteristic> | <SQL-data
accessindication> | <null-call clause>
 

Regards,
Thomas Hallgren



pgsql-hackers by date:

Previous
From: "Mark Woodward"
Date:
Subject: Re: Why don't we allow DNS names in pg_hba.conf?
Next
From: Tom Lane
Date:
Subject: Re: Using stats_command_string for xact statistics