Re: [PATCHES] libpq type system 0.9a - Mailing list pgsql-hackers

From Andrew Chernow
Subject Re: [PATCHES] libpq type system 0.9a
Date
Msg-id 47FBDA70.2010501@esilo.com
Whole thread Raw
In response to Re: [PATCHES] libpq type system 0.9a  (Andrew Chernow <ac@esilo.com>)
Responses Re: [PATCHES] libpq type system 0.9a  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: [PATCHES] libpq type system 0.9a  (Alvaro Herrera <alvherre@commandprompt.com>)
List pgsql-hackers
Andrew Chernow wrote:
> Martijn van Oosterhout wrote:
>> How tight is the link to libpq? Could it exist as a seperate library:
>> libpqbin or something? Still in core, just only used by the people who
>> want it.
>>
> 
> I gave this a lot of thought and I do think we could abstract this.  The 
> idea is to complie it in or out.
> 
> Add a --with-typesys to configure, which could enable "#ifdef 
> LIBPQ_ENABLE_TYPESYS" everywhere.  If you don't specify --with-typesys, 
> the API calls would still be there but would return ENOSYS, assign an 
> error string or something.  This preserves link capatability.
> 
> This would trim out the 50k everyone is worried about :)  I'm sure there 
> are other ways to acocmplish this, but this one seems easiest and keeps 
> it all centralized.  Just like --with-openssl, except that loads 
> libcrypto.so.
> 

Forgot to say: There is stuff in PGconn, PGresult, PQclear, PQfinish 
(maybe a couple other places).

A separate library would remove the ability to call PQexec followed by 
PQgetf because the result object is no longer aware of the typesys.  You 
would need the separate library to wrap the result object or something:

typesysResult = TypeSysGetResult(PQexec());

Or, you need to wrap the libpq API calls, typesysResult = TypeSysExec();.

Both are doable but not nearly as slick as: res = PQexec; PQgetf(res, 
..); PQclear(res);


-- 
Andrew Chernow
eSilo, LLC
every bit counts
http://www.esilo.com/


pgsql-hackers by date:

Previous
From: Andrew Chernow
Date:
Subject: Re: [PATCHES] libpq type system 0.9a
Next
From: Tom Lane
Date:
Subject: Concurrent psql API