[BUGS] BUG #8191: Wrong bit conversion

2013-05-31 Thread gerald
The following bug has been logged on the website:

Bug reference:  8191
Logged by:  Gerald Luger
Email address:  ger...@hexboss.com
PostgreSQL version: 9.2.1
Operating system:   Windows 8
Description:

SELECT b'1'::bit(64), x'1'::bit(64), 1::bit(64)

RESULT:
1000,
0001,
0001



-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #8191: Wrong bit conversion

2013-05-31 Thread Tom Lane
ger...@hexboss.com writes:
 SELECT b'1'::bit(64), x'1'::bit(64), 1::bit(64)

 RESULT:
 1000,
 0001,
 0001

I believe those are all operating as intended.

regards, tom lane


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #8191: Wrong bit conversion

2013-05-31 Thread Gerald Luger
Shouldn't I expect all results to be 000...0001?

Otherwise it would be
1 != 1?


-Original Message-
From: Tom Lane [mailto:t...@sss.pgh.pa.us] 
Sent: Friday, May 31, 2013 5:34 PM
To: Gerald Luger
Cc: pgsql-bugs@postgresql.org
Subject: Re: [BUGS] BUG #8191: Wrong bit conversion

ger...@hexboss.com writes:
 SELECT b'1'::bit(64), x'1'::bit(64), 1::bit(64)

 RESULT:
 1000,
 0001,
 0001

I believe those are all operating as intended.

regards, tom lane


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #8191: Wrong bit conversion

2013-05-31 Thread John R Pierce

On 5/31/2013 4:29 PM, Gerald Luger wrote:

Shouldn't I expect all results to be 000...0001?

Otherwise it would be
1 != 1?


SQL's BIT type is big endian, a hangover from its IBM mainframe heritage.





--
john r pierce  37N 122W
somewhere on the middle of the left coast



--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #8191: Wrong bit conversion

2013-05-31 Thread Gavin Flower

On 01/06/13 12:29, John R Pierce wrote:

On 5/31/2013 4:29 PM, Gerald Luger wrote:

Shouldn't I expect all results to be 000...0001?

Otherwise it would be
1 != 1?


SQL's BIT type is big endian, a hangover from its IBM mainframe heritage.





I don't think it has anything to do with byte sex (I know of 3 ways to 
store integers in memory, and I suspect there are more !).


Don't confuse how things are displayed with how they are stored in memory.

Just that
1 = two to the power of zero
so it seems logical to start numbering the bits to represent the powers 
of 2.



Cheers,
Gavin


Re: [BUGS] BUG #8191: Wrong bit conversion

2013-05-31 Thread Gavin Flower

On 01/06/13 13:01, Gavin Flower wrote:

On 01/06/13 12:29, John R Pierce wrote:

On 5/31/2013 4:29 PM, Gerald Luger wrote:

Shouldn't I expect all results to be 000...0001?

Otherwise it would be
1 != 1?


SQL's BIT type is big endian, a hangover from its IBM mainframe 
heritage.






I don't think it has anything to do with byte sex (I know of 3 ways to 
store integers in memory, and I suspect there are more !).


Don't confuse how things are displayed with how they are stored in memory.

Just that
1 = two to the power of zero
so it seems logical to start numbering the bits to represent the 
powers of 2.



Cheers,
Gavin

Hmm...

On second thoughts, it is strange that the first 2 examples affect bits 
on the left hand side!


So now I think, that all 3 examples should logically be:

RESULT:
0001,

BUT, But, But...

It appears for varchar padding is done on the right hand side, so maybe that is 
why the first 2examples are as they are (suggestive, not proof!).


Cheers,
Gavin




Re: [BUGS] BUG #8191: Wrong bit conversion

2013-05-31 Thread John R Pierce

On 5/31/2013 6:01 PM, Gavin Flower wrote:
SQL's BIT type is big endian, a hangover from its IBM mainframe 
heritage.






I don't think it has anything to do with byte sex (I know of 3 ways to 
store integers in memory, and I suspect there are more !).


I was thinking of bit sex, not byte.

IBM numbers bits such that bit 0 is the most significant bit of a word.


--
john r pierce  37N 122W
somewhere on the middle of the left coast



Re: [BUGS] BUG #8191: Wrong bit conversion

2013-05-31 Thread Tom Lane
Gerald Luger geraldlu...@hexboss.com writes:
 Shouldn't I expect all results to be 000...0001?

Well, no.

The SQL spec is pretty clear about the interpretation of this:
b'1'::bit(64)
You're taking a bit string of length 1 and casting it to bit string
of length 64.  That's done by appending zeroes on the right, per spec.

The x'1' notation isn't in SQL99 AFAICS, but we consider that x'1'
means the same as b'0001', and then the conversion from bit(4) to
bit(64) is done by padding zeroes on the right.

Your last case,
1::bit(64)
represents casting an integer to bit(64).  This operation isn't in the
SQL spec either, unless I missed something.  We treat this as conversion
of the integer's twos-complement representation to a bit string,
presuming big-endian representation of the integer.

Now you can quibble with various of the details above, but in the end
they are all arbitrary decisions.  We've made them that way, and it
would take a pretty impressive argument to persuade us to break existing
applications by changing them.

regards, tom lane


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs