Thread: ADTs and embedded sql

ADTs and embedded sql

From
"Tony Griffiths(RA)"
Date:
Hi,
I've a question about returning ADT values through embedded SQL. It's 
fine to retrieve values of PostgreSQL's build-in types in to C variables 
of roughly the same type, with only (possibly) a  small impedance 
mismatch. However when we want to retrieve into values of the ADTs, 
i.e., the geometric types, it looks like we have to retrieve them into 
strings, and then manually convert them into the correct type - if this 
is not the case then a posting of how to do this into variables of the 
correct type would be great. This means that:

a) The client-side programmer has to be responsible for parsing the 
returned string, which could cause problems if the output format of the 
ADT is changed, and

b) The impedance mismatch is much greater than that of the built-in types.

Are there any plans to extend the ADT registration process to allow 
output of the actual type (not just the string) (I seem to remember that 
INGRES did this a while ago, with admittedly a much more complex 
registration process), and also for ecpg to be able to correctly parse 
variables other than those built into the database kernel.

Many thanks,

Tony



Re: ADTs and embedded sql

From
Thomas Lockhart
Date:
> a) The client-side programmer has to be responsible for parsing the
> returned string, which could cause problems if the output format of the
> ADT is changed, and

So we need a convention for building client-side libraries.

> b) The impedance mismatch is much greater than that of the built-in types.

A first step would be to make the structure definitions and i/o code for
UDTs available to the client. Perhaps the next step could involve using
those definitions internally in ecpg. But without the first step we
don't have much to build on.
                      - Thomas


Re: ADTs and embedded sql

From
Tom Lane
Date:
"Tony Griffiths(RA)" <griffitt@cs.man.ac.uk> writes:
> a) The client-side programmer has to be responsible for parsing the 
> returned string, which could cause problems if the output format of the 
> ADT is changed, and

You seem to be proposing that we instead expose the internal storage
format of the ADT, which seems to me to be much more likely to change
than the string representation.  (Not to mention that it will open up a
host of platform compatibility issues --- endianness, struct packing,
float format rules for example.)

To give just one example, as of 7.3 there will be two entirely different
internal formats for the datetime-related types.  A client would have
to be prepared to cope with that, on top of possible endian and float
format differences between server and client machines.

Parsing the string representation may be an annoyance, but I suspect
it is the lesser evil.
        regards, tom lane


Re: ADTs and embedded sql

From
Lincoln Yeoh
Date:
At 01:49 PM 6/20/02 +0100, Tony Griffiths(RA) wrote:

>a) The client-side programmer has to be responsible for parsing the 
>returned string, which could cause problems if the output format of the 
>ADT is changed, and
>
>b) The impedance mismatch is much greater than that of the built-in types.

One man's impedance mismatch is another man's layer of abstraction / 
interface :).

Sorry - couldn't resist ;).

Cheerio,
Link.






Re: ADTs and embedded sql

From
Thomas Lockhart
Date:
> > a) The client-side programmer has to be responsible for parsing the
> > returned string, which could cause problems if the output format of the
> > ADT is changed, and
> You seem to be proposing that we instead expose the internal storage
> format of the ADT, which seems to me to be much more likely to change
> than the string representation.  (Not to mention that it will open up a
> host of platform compatibility issues --- endianness, struct packing,
> float format rules for example.)

That is one possibility, but I think the proposal is to expose the
*support* for the data types to client-side apps. So we would have
librar(ies) which allow parsing the stringified representation of a
value into an acceptable internal format on the client, along with some
support code for working with the values.

That is a Good Idea in principle. In practice, someone would need to
take ownership of the project and develop an style and technique for
packaging support for data types in this way...
                     - Thomas


Re: ADTs and embedded sql

From
Tom Lane
Date:
Thomas Lockhart <lockhart@fourpalms.org> writes:
> That is one possibility, but I think the proposal is to expose the
> *support* for the data types to client-side apps.

Ah, I see --- more or less make all of utils/adt/ available to be
linked into clients.

> That is a Good Idea in principle. In practice, ...

Yeah, it'd be a huge amount of work.  For starters, all that code
relies on the backend environment for error handling and memory
management...
        regards, tom lane


Re: ADTs and embedded sql

From
Thomas Lockhart
Date:
> Ah, I see --- more or less make all of utils/adt/ available to be
> linked into clients.
> > That is a Good Idea in principle. In practice, ...
> Yeah, it'd be a huge amount of work.  For starters, all that code
> relies on the backend environment for error handling and memory
> management...

It would be a large amount of work to make *all* of utils/adt available.
However, the initial work would be to support I/O to get values
converted to internal storage. Michael M. already has to do some of this
for ecpg, and presumably we could do this for more types (or maybe *all*
builtin types are already supported in this way by ecpg, in which case
MM has already done all of the hard work, and we might just repackage
it).

A first cut would seem to be appropriate, if someone would like to pick
up the work. Tony?? ;)
                   - Thomas


Re: ADTs and embedded sql

From
Tony Griffiths
Date:

Thomas Lockhart wrote:
> 
> > Ah, I see --- more or less make all of utils/adt/ available to be
> > linked into clients.
> > > That is a Good Idea in principle. In practice, ...
> > Yeah, it'd be a huge amount of work.  For starters, all that code
> > relies on the backend environment for error handling and memory
> > management...
> 
> It would be a large amount of work to make *all* of utils/adt available.
> However, the initial work would be to support I/O to get values
> converted to internal storage. Michael M. already has to do some of this
> for ecpg, and presumably we could do this for more types (or maybe *all*
> builtin types are already supported in this way by ecpg, in which case
> MM has already done all of the hard work, and we might just repackage
> it).
> 
> A first cut would seem to be appropriate, if someone would like to pick
> up the work. Tony?? ;)

I'd love to get involved in this, BUT... no time at the moment, although
if I get a really good Masters student  next semester - I could always
do this as their project. If this is still a requirement in about 3
months then I can set someone on to it.

Tony

> 
>                     - Thomas
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
> 
> http://www.postgresql.org/users-lounge/docs/faq.html

-- 
Tony

---------------------------------
Dr. Tony Griffiths
Research Fellow
Information Management Group,
Department of Computer Science,
The University of Manchester,
Oxford Road,
Manchester M13 9PL, 
United Kingdom

Tel. +44 (0) 161 275 6139
Fax +44 (0) 161 275 6236
email tony.griffiths@cs.man.ac.uk
---------------------------------