Re: BUG #18239: select position ('' in 'A') returns 1

Lists: pgsql-bugs
From: PG Bug reporting form <noreply(at)postgresql(dot)org>
To: pgsql-bugs(at)lists(dot)postgresql(dot)org
Cc: lucvanlind(dot)en(at)gmail(dot)com
Subject: BUG #18239: select position ('' in 'A') returns 1
Date: 2023-12-10 10:22:35
Message-ID: 18239-50b7f8e43ec7be76@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 18239
Logged by: Luc Van Linden
Email address: lucvanlind(dot)en(at)gmail(dot)com
PostgreSQL version: 15.3
Operating system: windows 10 64 bit
Description:

We simplified the bug, or maybe undocumented behavior to its simplest
testcase.

select position ('' in 'A') returns 1

Thus, case a field has an empty string while, checking positions in another
string, it seems to always fit the position 1.

Not sure if this is intended or not, at least we experience this as a bug.


From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: "lucvanlind(dot)en(at)gmail(dot)com" <lucvanlind(dot)en(at)gmail(dot)com>, "pgsql-bugs(at)lists(dot)postgresql(dot)org" <pgsql-bugs(at)lists(dot)postgresql(dot)org>
Subject: Re: BUG #18239: select position ('' in 'A') returns 1
Date: 2023-12-10 15:20:03
Message-ID: CAKFQuwY3+nE9QjU0vmyDHw1VAH8SWTJX_noX4QZnXDMjpNVMEQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

On Sunday, December 10, 2023, PG Bug reporting form <noreply(at)postgresql(dot)org>
wrote:

> The following bug has been logged on the website:
>
> Bug reference: 18239
> Logged by: Luc Van Linden
> Email address: lucvanlind(dot)en(at)gmail(dot)com
> PostgreSQL version: 15.3
> Operating system: windows 10 64 bit
> Description:
>
> We simplified the bug, or maybe undocumented behavior to its simplest
> testcase.
>
> select position ('' in 'A') returns 1
>
> Thus, case a field has an empty string while, checking positions in another
> string, it seems to always fit the position 1.
>
> Not sure if this is intended or not, at least we experience this as a bug.
>
>
Just as an empty set is a subset of all sets the empty string is a
substring within all strings.

I do not believe we document or refer to this external rule anywhere though.

David J.


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
Cc: "lucvanlind(dot)en(at)gmail(dot)com" <lucvanlind(dot)en(at)gmail(dot)com>, "pgsql-bugs(at)lists(dot)postgresql(dot)org" <pgsql-bugs(at)lists(dot)postgresql(dot)org>
Subject: Re: BUG #18239: select position ('' in 'A') returns 1
Date: 2023-12-10 16:13:00
Message-ID: 1886034.1702224780@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

"David G. Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> writes:
> On Sunday, December 10, 2023, PG Bug reporting form <noreply(at)postgresql(dot)org>
> wrote:
>> select position ('' in 'A') returns 1
>> Thus, case a field has an empty string while, checking positions in another
>> string, it seems to always fit the position 1.

> Just as an empty set is a subset of all sets the empty string is a
> substring within all strings.

Yes. This behavior is explicitly required by the SQL standard:

2) If <string position expression> is specified, then

Case:

a) If the first <string value expression> has a length of 0
(zero), then the result is 1 (one).

b) [ otherwise, ... ]

> I do not believe we document or refer to this external rule anywhere though.

No, our documentation for position() is just one sentence. With the
new function-table layout it'd be possible to add a second example
to exhibit this behavior, but I'm not sure it's worth the trouble.
Personally I don't find this surprising.

regards, tom lane