Inconsistent ::bit(N) and get_bit()?
| От | Boszormenyi Zoltan |
|---|---|
| Тема | Inconsistent ::bit(N) and get_bit()? |
| Дата | |
| Msg-id | 4C62AA44.6000503@cybertec.at обсуждение исходный текст |
| Ответы |
Re: Inconsistent ::bit(N) and get_bit()?
|
| Список | pgsql-hackers |
Hi, I just came across the following confusing thing. zozo=# create table bit_test(i integer); CREATE TABLE zozo=# insert into bit_test values (1), (2), (3); INSERT 0 3 zozo=# select i, i::bit(2), get_bit(i::bit(2), 1) as bit1, get_bit(i::bit(2), 0) as bit0 from bit_test;i | i | bit1 | bit0 ---+----+------+------1 | 01 | 1 | 02 | 10 | 0 | 13 | 11 | 1 | 1 (3 rows) So, conversion from int to bitstring creates a readable bitstring, i.e. the least significant bit is the rightmost one. But get_bit() on the same bit string works in the opposite order. The only description about get_bit I found in the 9.0beta docs are in http://www.postgresql.org/docs/9.0/static/functions-binarystring.html#FUNCTIONS-BINARYSTRING-OTHER ------------------------------------- Function Return Type Description Example Result || |get_bit|(string, offset) int Extract bit from string get_bit(E'Th\\000omas'::bytea, 45) 1 ------------------------------------- || and in http://www.postgresql.org/docs/9.0/static/functions-bitstring.html ------------------------------------- ||The following functions work on bit strings as well as binary strings: |get_bit|, |set_bit|. ------------------------------------- Shouldn't it at least be documented in more depth? Say, get_bit(, N) provides the Nth bit (0-based) counting from the leftmost bit? I would certainly appreciate a warning spelled out about this so if you convert a number to bitstring of length N and you want the Mth bit (according to any programming language) then you need to use get_bit(..., N-1-M). Best regards, Zoltán Böszörményi
В списке pgsql-hackers по дате отправления: