22 messages in org.postgresql.pgsql-jdbcRe: Binary tx format for an array?
FromSent OnAttachments
Michael GuyverJun 21, 2006 10:26 am 
Dave CramerJun 21, 2006 12:55 pm 
Mark LewisJun 21, 2006 1:31 pm 
Tom LaneJun 21, 2006 3:40 pm 
Michael GuyverJun 22, 2006 1:16 am 
Tom LaneJun 22, 2006 9:54 am 
Mark LewisJun 22, 2006 12:15 pm 
Michael GuyverJun 23, 2006 1:22 am 
Dave CramerJun 23, 2006 4:43 am 
Markus SchaberJun 23, 2006 4:59 am 
Michael GuyverJun 23, 2006 5:46 am 
Dave CramerJun 23, 2006 5:56 am 
Dave CramerJun 23, 2006 6:16 am 
Tom LaneJun 23, 2006 9:18 am 
Mark LewisJun 23, 2006 1:31 pm 
Dave CramerJun 23, 2006 1:39 pm 
Kris JurkaJun 23, 2006 1:46 pm 
Mark LewisJun 23, 2006 1:59 pm 
Marc HerbertJul 10, 2006 2:19 am 
Mark LewisJul 10, 2006 9:18 am 
Marc HerbertJul 10, 2006 10:53 am 
Mark LewisJul 10, 2006 11:59 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: Binary tx format for an array?Actions...
From:Mark Lewis (mark@mir3.com)
Date:Jun 21, 2006 1:31:58 pm
List:org.postgresql.pgsql-jdbc

The definition of Oid is in postgres_ext.h:

typedef unsigned int Oid;

All the architectures that I'm familiar with (x86, x86_64, Sparc-64) use 32-bit unsigned int data types. Also, the JDBC driver code always uses 32-bit integers for Oid types, so I think you're pretty safe using a 32- bit integer.

There might be some weirdness at the 2GB boundary because Java doesn't support natively unsigned integers, but if there is then it would probably occur across the whole driver and not just in the code you want to write.

-- Mark

On Wed, 2006-06-21 at 18:26 +0100, Michael Guyver wrote:

Hi there,

My question relates to trying to implement the binary transmission protocol for an Array type. I understand that the only place the format is documented is in the Postgres C source code.

I've had a look through it and it seems comprehensible enough (to a non-C programmer), but I was wondering how the following expression would evaluate:

// arrayfuncs.c, in array_recv element_type = pq_getmsgint(buf, sizeof(Oid));

or more specifically, the

int size = sizeof(Oid);

expression. Knowing this value would mean knowing how many bytes describing the Oid to transmit.

Cheers

Michael

---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend