Const-ify the parse table passed to fillRelOptions. The previous coding
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 23 Mar 2009 16:36:27 +0000 (16:36 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 23 Mar 2009 16:36:27 +0000 (16:36 +0000)
meant it had to be built on-the-fly at each entry to default_reloptions.

src/backend/access/common/reloptions.c
src/include/access/reloptions.h

index 0060be6a0285e7951618259b3f76526f98b907a5..b926689c5cbee8e6ddc521c89b6207b0a85d12f7 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/access/common/reloptions.c,v 1.22 2009/02/28 00:10:51 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/access/common/reloptions.c,v 1.23 2009/03/23 16:36:27 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -175,7 +175,7 @@ static relopt_real realRelOpts[] =
        { { NULL } }
 };
 
-static relopt_string stringRelOpts[] = 
+static relopt_string stringRelOpts[] =
 {
        /* list terminator */
        { { NULL } }
@@ -739,7 +739,7 @@ extractRelOptions(HeapTuple tuple, TupleDesc tupdesc, Oid amoptions)
                        options = NULL;         /* keep compiler quiet */
                        break;
        }
-       
+
        return options;
 }
 
@@ -972,16 +972,17 @@ allocateReloptStruct(Size base, relopt_value *options, int numoptions)
  * struct (previously allocated with allocateReloptStruct) with the parsed
  * values.
  *
- * rdopts is the pointer to the allocated struct to be filled; basesize is
- * the sizeof(struct) that was passed to allocateReloptStruct.  options and
- * numoptions are parseRelOptions' output.  elems and numelems is the array
- * of elements to be parsed.  Note that when validate is true, it is expected
- * that all options are also in elems.
+ * rdopts is the pointer to the allocated struct to be filled.
+ * basesize is the sizeof(struct) that was passed to allocateReloptStruct.
+ * options, of length numoptions, is parseRelOptions' output.
+ * elems, of length numelems, is the table describing the allowed options.
+ * When validate is true, it is expected that all options appear in elems.
  */
 void
-fillRelOptions(void *rdopts, Size basesize, relopt_value *options,
-                          int numoptions, bool validate, relopt_parse_elt *elems,
-                          int numelems)
+fillRelOptions(void *rdopts, Size basesize,
+                          relopt_value *options, int numoptions,
+                          bool validate,
+                          const relopt_parse_elt *elems, int numelems)
 {
        int             i;
        int             offset = basesize;
@@ -1044,7 +1045,7 @@ fillRelOptions(void *rdopts, Size basesize, relopt_value *options,
                        }
                }
                if (validate && !found)
-                       elog(ERROR, "storate parameter \"%s\" not found in parse table",
+                       elog(ERROR, "reloption \"%s\" not found in parse table",
                                 options[i].gen->name);
        }
        SET_VARSIZE(rdopts, offset);
@@ -1061,7 +1062,7 @@ default_reloptions(Datum reloptions, bool validate, relopt_kind kind)
        relopt_value   *options;
        StdRdOptions   *rdopts;
        int                             numoptions;
-       relopt_parse_elt tab[] = {
+       static const relopt_parse_elt tab[] = {
                {"fillfactor", RELOPT_TYPE_INT, offsetof(StdRdOptions, fillfactor)},
                {"autovacuum_enabled", RELOPT_TYPE_BOOL,
                        offsetof(StdRdOptions, autovacuum) + offsetof(AutoVacOpts, enabled)},
index 7c02f3b12b38f5fcbd62b960f2a66b073c6f6859..b40d95a0fba8af50b07d843fafa33146d60e9f21 100644 (file)
@@ -11,7 +11,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/access/reloptions.h,v 1.12 2009/02/02 19:31:39 alvherre Exp $
+ * $PostgreSQL: pgsql/src/include/access/reloptions.h,v 1.13 2009/03/23 16:36:27 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -106,12 +106,12 @@ typedef struct relopt_string
        char            default_val[1]; /* variable length, zero-terminated */
 } relopt_string;
 
-/* This is the input type for fillRelOptions */
+/* This is the table datatype for fillRelOptions */
 typedef struct
 {
-       char   *optname;
-       relopt_type     opttype;
-       int             offset;
+       const char *optname;            /* option's name */
+       relopt_type     opttype;                /* option's datatype */
+       int                     offset;                 /* offset of field in result struct */
 } relopt_parse_elt;
 
 
@@ -149,8 +149,8 @@ typedef struct
  *     }
  *
  *     Note that this is more or less the same that fillRelOptions does, so only
- *     use this if you need to do something non-standard within some options'
- *     block.
+ *     use this if you need to do something non-standard within some option's
+ *     code block.
  */
 #define HAVE_RELOPTION(optname, option) \
        (pg_strncasecmp(option.gen->name, optname, option.gen->namelen + 1) == 0)
@@ -252,9 +252,10 @@ extern relopt_value *parseRelOptions(Datum options, bool validate,
                                relopt_kind kind, int *numrelopts);
 extern void *allocateReloptStruct(Size base, relopt_value *options,
                                         int numoptions);
-extern void fillRelOptions(void *rdopts, Size basesize, relopt_value *options,
-                          int numoptions, bool validate, relopt_parse_elt *elems,
-                          int nelems);
+extern void fillRelOptions(void *rdopts, Size basesize,
+                                                  relopt_value *options, int numoptions,
+                                                  bool validate,
+                                                  const relopt_parse_elt *elems, int nelems);
 
 extern bytea *default_reloptions(Datum reloptions, bool validate,
                                   relopt_kind kind);