]> granicus.if.org Git - postgresql/commitdiff
Have boolean pset values checked against typical boolean values, rather
authorBruce Momjian <bruce@momjian.us>
Wed, 7 May 2008 02:33:52 +0000 (02:33 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 7 May 2008 02:33:52 +0000 (02:33 +0000)
than only 'off'.

src/bin/psql/variables.c

index 52ee0bd710cec1dbb3a6acf3985642d43f01f1b9..76b9294cf08cd14f077c3222f927390e0354f612 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2008, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/variables.c,v 1.28 2008/01/01 19:45:56 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/variables.c,v 1.29 2008/05/07 02:33:52 momjian Exp $
  */
 #include "postgres_fe.h"
 #include "common.h"
@@ -48,21 +48,48 @@ GetVariable(VariableSpace space, const char *name)
        return NULL;
 }
 
+/*
+ * Try to interpret value as boolean value.  Valid values are: true,
+ * false, yes, no, on, off, 1, 0; as well as unique prefixes thereof.
+ */
 bool
-ParseVariableBool(const char *val)
+ParseVariableBool(const char *value)
 {
-       if (val == NULL)
+       size_t          len;
+
+       if (value == NULL)
                return false;                   /* not set -> assume "off" */
-       if (pg_strcasecmp(val, "off") == 0)
-               return false;                   /* accept "off" or "OFF" as true */
 
-       /*
-        * for backwards compatibility, anything except "off" or "OFF" is taken as
-        * "true"
-        */
+       len = strlen(value);
+
+       if (pg_strncasecmp(value, "true", len) == 0)
+               return true;
+       else if (pg_strncasecmp(value, "false", len) == 0)
+               return false;
+       else if (pg_strncasecmp(value, "yes", len) == 0)
+               return true;
+       else if (pg_strncasecmp(value, "no", len) == 0)
+               return false;
+       /* 'o' is not unique enough */
+       else if (pg_strncasecmp(value, "on", (len > 2 ? len : 2)) == 0)
+               return true;
+       else if (pg_strncasecmp(value, "off", (len > 2 ? len : 2)) == 0)
+               return false;
+       else if (pg_strcasecmp(value, "1") == 0)
+               return true;
+       else if (pg_strcasecmp(value, "0") == 0)
+               return false;
+       else
+       {
+               /* NULL is treated as false, so a non-matching value is 'true' */
+               psql_error("unrecognized boolean value; assuming \"on\".\n");
+               return true;
+       }
+       /* suppress compiler warning */
        return true;
 }
 
+
 /*
  * Read numeric variable, or defaultval if it is not set, or faultval if its
  * value is not a valid numeric string.  If allowtrail is false, this will