[postgis-devel] Re: Binary Output Functions
Paul Ramsey
pramsey at refractions.net
Fri May 27 11:02:26 PDT 2005
Here is what I did to try and enable this idea (I have not tested it
with ArcMap yet). I did this for PostgreSQL 7.4. For version 8.0 the
bytea() case would not be required:
create function geometrysend(geometry) returns bytea as 'select
bytea(asbinary($1))' language sql;
update pg_type set typsend='geometrysend' where oid = (select oid from
pg_type where typname = 'geometry');
Paul
Paul Ramsey wrote:
> Nevermind, with a little poking into the system catalogues, I found the
> answer:
>
> The "binary send format" is controlled by the "typsend" attribute in the
> "pg_type" catalogue. So for example, for int4, the "typsend" is defined
> as "int4send" and the C code is:
>
> Datum
> int4send(PG_FUNCTION_ARGS)
> {
> int32 arg1 = PG_GETARG_INT32(0);
> StringInfoData buf;
>
> pq_begintypsend(&buf);
> pq_sendint(&buf, arg1, sizeof(int32));
> PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
> }
>
> So the return is a BYTEA. I am not sure what the right return type is
> for geometry in this case to get interoperability with ESRI, whether it
> is the OpenGIS WKB format or something else. Probably WKB. The user
> could probably test this by simply updating the "geometry" entry in
> pg_type and setting the typsend function to be "asbinary". This returns
> (in postgis 1.0) a bytea in the OGC WKB format, which is (probably) what
> ESRI is expecting.
>
> Paul
>
>
>> Shachar,
>> You wrote (in response to a question about PgOleDB and PostGIS):
>>
>>
>> "OleDb, and accordingly, PgOleDb, is a binary interface driver. As such,
>> it gets all data types in binary form from the database. In order for a
>> datatype to be supported, two conditions must be satisfied:
>> 1. The data type must have a binary output function defined in PG itself.
>> 2. PgOleDb must know how to handle this type, to translate it to the
>> binary interface OLE DB is expected to return said type."
>>
>> Could you elabourate on item 1. above? What is the function signature
>> that PgOleDB expects for the binary output function? It is a typecast
>> to bytea? Something else? In a binary cursor, if you ask for a column,
>> you should just get back the backend struct, which would then drop the
>> system into your problem 2. above. And for that the guy you were
>> talking to will actually need to start hacking in PgOleDb. ESRI has
>> some directions on doing spatial OLEDB, but the documentation is very
>> very thin...
>>
>> http://arcgisdeveloperonline.esri.com/ArcGISDeveloper/ArcGISDevHelp/TechnicalDocuments/Geodatabase/Arc8_provider.htm
>>
>
>
>
>
>
>
More information about the postgis-devel
mailing list