For sure, I’m thinking of it that way. Thanks for confirming.

What I don’t understand is that if I respond to psql with the
RowDescription indicating the format code is 1 for binary (and encode it
that way, with 4 bytes, in the DataRow) it doesn’t render the number in the
results.

-Tyler


On Apr 20, 2022 at 8:00:18 PM, David G. Johnston <david.g.johns...@gmail.com>
wrote:

> On Wed, Apr 20, 2022 at 4:39 PM Tyler Brock <tyler.br...@gmail.com> wrote:
>
>> I think this makes sense but I wanted to get confirmation:
>>
>> I created a table with a column having the type int4 (integer). When I
>> insert a row with a number into that column and get it back out I've
>> observed a discrepancy:
>>
>> The DataRow message has the field encoded as an ASCII ‘7’ with a column
>> length of 1 despite the RowDescription having a column length 4. I assume
>> that this is because it’s a simple query (Q) and therefore the format code
>> for all columns is 0 (for text format).
>>
>> It makes sense that at the time the RowDescription is written out that it
>> can’t possibly know how many bytes the textual representation of each int
>> will take so it just uses the length of the underlying type.
>>
>> Is this accurate?
>>
>>
> You probably shouldn't think of DataRow as giving you a "column length" -
> it is simply giving you the number of bytes you need to read to retrieve
> all of the bytes for the column and thus position your read pointer at the
> data length Int32 for the subsequent column (which you do iteratively Int16
> column count times).
>
> You now have bytes for columnN - which you need to interpret via
> RowDescription to transform the raw protocol bytes into a meaningful datum.
>
> You don't care whether the source API was simple or not - RowDescription
> will tell you what you need to know to interpret the value - it is all
> self-contained.  But yes, because it is a simple query the RowDescription
> meta-data will inform you that all of the bytes represent (in aggregate ?)
> the textual representation of the data.
>
> David J.
>
>

Reply via email to