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:      [EMAIL PROTECTED]
> 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   [EMAIL PROTECTED]
  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;
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to