Position() Bug ? In PostgreSQL 9.2

Started by dinesh kumaralmost 13 years ago4 messagesgeneral
Jump to latest
#1dinesh kumar
dineshkumar02@gmail.com

Hello Team,

I would like to know whether the following behavior is a BUG or an expected
behavior. If this is a duplicated case, then kindly ignore.

postgres=# SELECT version();
version
-------------------------------------------------------------
PostgreSQL 9.2.3, compiled by Visual C++ build 1600, 32-bit
(1 row)

postgres=# select position('P' in 'PostgreSQL');
position
----------
1
(1 row)

postgres=# select position('' in 'PostgreSQL'); *// position(Substring as
an empty string) is returning 1.*
position
----------
1
(1 row)

Kindly let me know, if anything i miss here.

Regards,
Dinesh
manojadinesh.blogspot.com

#2Amit Langote
Langote_Amit_f8@lab.ntt.co.jp
In reply to: dinesh kumar (#1)
Re: Position() Bug ? In PostgreSQL 9.2

This behavior is similar to strstr(3) ('needle in a haystack'
substring locating C function).

char *strstr(const char *haystack, const char *needle)

which returns haystack (that is main string) if needle (string to be
located) is empty.

Assuming position() tries to do something similar, it returns first
index (which is 1) of the main string (haystack!). Although this does
not answer if it's a bug or not, I tend to think it is deliberate.

On Thu, May 2, 2013 at 9:09 PM, dinesh kumar <dineshkumar02@gmail.com> wrote:

Hello Team,

I would like to know whether the following behavior is a BUG or an expected
behavior. If this is a duplicated case, then kindly ignore.

postgres=# SELECT version();
version
-------------------------------------------------------------
PostgreSQL 9.2.3, compiled by Visual C++ build 1600, 32-bit
(1 row)

postgres=# select position('P' in 'PostgreSQL');
position
----------
1
(1 row)

postgres=# select position('' in 'PostgreSQL'); // position(Substring as an
empty string) is returning 1.
position
----------
1
(1 row)

Kindly let me know, if anything i miss here.

Regards,
Dinesh
manojadinesh.blogspot.com

--

Amit Langote

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

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: dinesh kumar (#1)
Re: Position() Bug ? In PostgreSQL 9.2

dinesh kumar <dineshkumar02@gmail.com> writes:

postgres=# select position('' in 'PostgreSQL'); *// position(Substring as
an empty string) is returning 1.*
position
----------
1
(1 row)

This is correct according to the SQL standard:

<position expression> determines the first position, if any, at
which one string, S1, occurs within another, S2. If S1 is of length
zero, then it occurs at position 1 (one) for any value of S2. If S1
does not occur in S2, then zero is returned.

regards, tom lane

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

#4dinesh kumar
dineshkumar02@gmail.com
In reply to: Tom Lane (#3)
Re: Position() Bug ? In PostgreSQL 9.2

Hi Tom,

Thank you very much for the clarification.

Let me set an empty string validation, before passing it to position()
from API.

Thank you once again.

Regards,
Dinesh
manojadinesh.blogspot.com
On 2 May 2013 19:19, "Tom Lane" <tgl@sss.pgh.pa.us> wrote:

Show quoted text

dinesh kumar <dineshkumar02@gmail.com> writes:

postgres=# select position('' in 'PostgreSQL'); *// position(Substring as
an empty string) is returning 1.*
position
----------
1
(1 row)

This is correct according to the SQL standard:

<position expression> determines the first position, if any, at
which one string, S1, occurs within another, S2. If S1 is of
length
zero, then it occurs at position 1 (one) for any value of S2. If
S1
does not occur in S2, then zero is returned.

regards, tom lane