bit-strings with white space

Started by PG Bug reporting formalmost 8 years ago4 messagesdocs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/9.6/static/sql-syntax-lexical.html
Description:

Postgresql 9.6, section 4.1.2.5 says that bit-strings can spill over
multiple lines, same as regular string constants. I tried SELECTing such and
found that they may only contain characters '0' and '1'.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: PG Bug reporting form (#1)
Re: bit-strings with white space

=?utf-8?q?PG_Doc_comments_form?= <noreply@postgresql.org> writes:

Postgresql 9.6, section 4.1.2.5 says that bit-strings can spill over
multiple lines, same as regular string constants. I tried SELECTing such and
found that they may only contain characters '0' and '1'.

As indeed the text says. What the continuation mention is talking
about is this syntax:

regression=# select b'10001'
'00100';
?column?
------------
1000100100
(1 row)

which works like

regression=# select 'foo'
'bar';
?column?
----------
foobar
(1 row)

Perhaps there's something we could change to make this clearer,
but I'm not sure what.

regards, tom lane

#3Jim Nasby
Jim.Nasby@BlueTreble.com
In reply to: Tom Lane (#2)
Re: bit-strings with white space

On 4/22/18 12:18 PM, Tom Lane wrote:

regression=# select 'foo'
'bar';
?column?
----------
foobar
(1 row)

Perhaps there's something we could change to make this clearer,
but I'm not sure what.

I had no idea you could do that. While there's probably some wordy
description that could explain this, I think an example is probably the
best bet. Are there any other data types that work like this?
--
Jim C. Nasby, Data Architect jim@nasby.net
512.569.9461 (cell) http://jim.nasby.net

#4David G. Johnston
david.g.johnston@gmail.com
In reply to: Jim Nasby (#3)
Re: bit-strings with white space

On Sunday, April 22, 2018, Jim Nasby <jim@nasby.net> wrote:

On 4/22/18 12:18 PM, Tom Lane wrote:

regression=# select 'foo'
'bar';
?column?
----------
foobar
(1 row)

Perhaps there's something we could change to make this clearer,
but I'm not sure what.

I had no idea you could do that. While there's probably some wordy
description that could explain this, I think an example is probably the
best bet. Are there any other data types that work like this?

This structural "normalization" gets applied before types get involved.
Two literals only separated by a newline are concatenated together. Any
type name prefix, E or b prefix, :: cast, or cast() application then gets
applied to the combined literal.

The sql syntax section on this could maybe use another example or two but
does communicate the behavior reasonably well.

https://www.postgresql.org/docs/10/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS

David J.