Обсуждение: BUG #2851: Error in documentation or in code?

Поиск
Список
Период
Сортировка

BUG #2851: Error in documentation or in code?

От
"Gurjeet Singh"
Дата:
The following bug has been logged online:

Bug reference:      2851
Logged by:          Gurjeet Singh
Email address:      singh.gurjeet@gmail.com
PostgreSQL version: 8.2.0
Operating system:   Windows XP Professional
Description:        Error in documentation or in code?
Details:

The documentation at
http://www.postgresql.org/docs/8.2/interactive/config-setting.html states
that:

Boolean values may be written as ON, OFF, TRUE, FALSE, YES, NO, 1, 0 (all
case-insensitive) or any unambiguous prefix of these.

But the following doesn't work:

postgres=# set enable_seqscan = of;
ERROR:  parameter "enable_seqscan" requires a Boolean value
postgres=#

'of' is an unambiguous prefix of OFF, but it clearly doesn't work. Is it the
documentation that needs fix or is it the code?

I tried the following too:

set enable_seqscan = "of"; -- doesn't work
set enable_seqscan = "off"; -- works

BTW, I tried TR, TRU, FA, FAL, FALS, YE. They all work fine.

Re: BUG #2851: Error in documentation or in code?

От
Bruce Momjian
Дата:
Interesting.  The bug was caused because 'on' and 'off' both start with
'o', so the code didn't do tests for partial matches.

The attached, applied patch will do the right thing, checking for at
least two characters for 'on' and 'off'.  The fix will appear in 8.3.

---------------------------------------------------------------------------

Gurjeet Singh wrote:
>
> The following bug has been logged online:
>
> Bug reference:      2851
> Logged by:          Gurjeet Singh
> Email address:      singh.gurjeet@gmail.com
> PostgreSQL version: 8.2.0
> Operating system:   Windows XP Professional
> Description:        Error in documentation or in code?
> Details:
>
> The documentation at
> http://www.postgresql.org/docs/8.2/interactive/config-setting.html states
> that:
>
> Boolean values may be written as ON, OFF, TRUE, FALSE, YES, NO, 1, 0 (all
> case-insensitive) or any unambiguous prefix of these.
>
> But the following doesn't work:
>
> postgres=# set enable_seqscan = of;
> ERROR:  parameter "enable_seqscan" requires a Boolean value
> postgres=#
>
> 'of' is an unambiguous prefix of OFF, but it clearly doesn't work. Is it the
> documentation that needs fix or is it the code?
>
> I tried the following too:
>
> set enable_seqscan = "of"; -- doesn't work
> set enable_seqscan = "off"; -- works
>
> BTW, I tried TR, TRU, FA, FAL, FALS, YE. They all work fine.
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: Have you checked our extensive FAQ?
>
>                http://www.postgresql.org/docs/faq

--
  Bruce Momjian   bruce@momjian.us
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v
retrieving revision 1.362
diff -c -c -r1.362 guc.c
*** src/backend/utils/misc/guc.c    13 Dec 2006 05:54:48 -0000    1.362
--- src/backend/utils/misc/guc.c    23 Dec 2006 00:50:18 -0000
***************
*** 3575,3586 ****
              *result = false;
      }

!     else if (pg_strcasecmp(value, "on") == 0)
      {
          if (result)
              *result = true;
      }
!     else if (pg_strcasecmp(value, "off") == 0)
      {
          if (result)
              *result = false;
--- 3575,3587 ----
              *result = false;
      }

!     /* 'o' is not unique enough */
!     else if (pg_strncasecmp(value, "on", (len > 2 ? len : 2)) == 0)
      {
          if (result)
              *result = true;
      }
!     else if (pg_strncasecmp(value, "off", (len > 2 ? len : 2)) == 0)
      {
          if (result)
              *result = false;