Index: doc/src/sgml/catalogs.sgml =================================================================== RCS file: /home/gsmith/cvsrepo/pgsql/doc/src/sgml/catalogs.sgml,v retrieving revision 2.172 diff -c -r2.172 catalogs.sgml *** doc/src/sgml/catalogs.sgml 30 Jul 2008 17:05:04 -0000 2.172 --- doc/src/sgml/catalogs.sgml 1 Sep 2008 23:55:25 -0000 *************** *** 6414,6419 **** --- 6414,6436 ---- Allowed values in enum parameters (NULL for non-enum values) + + default_val + text + Default value if the parameter is not explicitly set + + + sourcefile + text + Input file the current value was set from (if any), helpful + when using configuration include directives + + + sourceline + text + Line number within the sourcefile the current value was set + from + Index: src/backend/utils/adt/ri_triggers.c =================================================================== RCS file: /home/gsmith/cvsrepo/pgsql/src/backend/utils/adt/ri_triggers.c,v retrieving revision 1.109 diff -c -r1.109 ri_triggers.c *** src/backend/utils/adt/ri_triggers.c 19 May 2008 04:14:24 -0000 1.109 --- src/backend/utils/adt/ri_triggers.c 1 Sep 2008 23:27:02 -0000 *************** *** 2738,2743 **** --- 2738,2744 ---- snprintf(workmembuf, sizeof(workmembuf), "%d", maintenance_work_mem); (void) set_config_option("work_mem", workmembuf, PGC_USERSET, PGC_S_SESSION, + NULL, 0, GUC_ACTION_LOCAL, true); if (SPI_connect() != SPI_OK_CONNECT) *************** *** 2827,2832 **** --- 2828,2834 ---- snprintf(workmembuf, sizeof(workmembuf), "%d", old_work_mem); (void) set_config_option("work_mem", workmembuf, PGC_USERSET, PGC_S_SESSION, + NULL, 0, GUC_ACTION_LOCAL, true); return true; Index: src/backend/utils/misc/guc-file.l =================================================================== RCS file: /home/gsmith/cvsrepo/pgsql/src/backend/utils/misc/guc-file.l,v retrieving revision 1.56 diff -c -r1.56 guc-file.l *** src/backend/utils/misc/guc-file.l 22 Aug 2008 00:20:40 -0000 1.56 --- src/backend/utils/misc/guc-file.l 1 Sep 2008 23:27:02 -0000 *************** *** 39,44 **** --- 39,46 ---- { char *name; char *value; + char *filename; + int sourceline; struct name_value_pair *next; }; *************** *** 232,238 **** } if (!set_config_option(item->name, item->value, context, ! PGC_S_FILE, GUC_ACTION_SET, false)) goto cleanup_list; } --- 234,240 ---- } if (!set_config_option(item->name, item->value, context, ! PGC_S_FILE, NULL, 0, GUC_ACTION_SET, false)) goto cleanup_list; } *************** *** 280,286 **** /* Now we can re-apply the wired-in default */ set_config_option(gconf->name, NULL, context, PGC_S_DEFAULT, ! GUC_ACTION_SET, true); } /* --- 282,288 ---- /* Now we can re-apply the wired-in default */ set_config_option(gconf->name, NULL, context, PGC_S_DEFAULT, ! NULL, 0, GUC_ACTION_SET, true); } /* *************** *** 296,314 **** envvar = getenv("PGDATESTYLE"); if (envvar != NULL) set_config_option("datestyle", envvar, PGC_POSTMASTER, ! PGC_S_ENV_VAR, GUC_ACTION_SET, true); envvar = getenv("PGCLIENTENCODING"); if (envvar != NULL) set_config_option("client_encoding", envvar, PGC_POSTMASTER, ! PGC_S_ENV_VAR, GUC_ACTION_SET, true); /* If we got here all the options checked out okay, so apply them. */ for (item = head; item; item = item->next) { set_config_option(item->name, item->value, context, ! PGC_S_FILE, GUC_ACTION_SET, true); } /* Remember when we last successfully loaded the config file. */ --- 298,317 ---- envvar = getenv("PGDATESTYLE"); if (envvar != NULL) set_config_option("datestyle", envvar, PGC_POSTMASTER, ! PGC_S_ENV_VAR, NULL, 0, GUC_ACTION_SET, true); envvar = getenv("PGCLIENTENCODING"); if (envvar != NULL) set_config_option("client_encoding", envvar, PGC_POSTMASTER, ! PGC_S_ENV_VAR, NULL, 0, GUC_ACTION_SET, true); /* If we got here all the options checked out okay, so apply them. */ for (item = head; item; item = item->next) { set_config_option(item->name, item->value, context, ! PGC_S_FILE, item->filename, item->sourceline, ! GUC_ACTION_SET, true); } /* Remember when we last successfully loaded the config file. */ *************** *** 483,488 **** --- 486,493 ---- pfree(item->value); item->name = opt_name; item->value = opt_value; + item->filename = pstrdup(config_file); + item->sourceline = ConfigFileLineno-1; } else { *************** *** 490,495 **** --- 495,502 ---- item = palloc(sizeof *item); item->name = opt_name; item->value = opt_value; + item->filename = pstrdup(config_file); + item->sourceline = ConfigFileLineno-1; item->next = *head_p; *head_p = item; if (*tail_p == NULL) *************** *** 502,507 **** --- 509,516 ---- item = palloc(sizeof *item); item->name = opt_name; item->value = opt_value; + item->filename = pstrdup(config_file); + item->sourceline = ConfigFileLineno-1; item->next = NULL; if (*head_p == NULL) *head_p = item; *************** *** 553,558 **** --- 562,568 ---- pfree(item->name); pfree(item->value); + pfree(item->filename); pfree(item); item = next; } Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /home/gsmith/cvsrepo/pgsql/src/backend/utils/misc/guc.c,v retrieving revision 1.470 diff -c -r1.470 guc.c *** src/backend/utils/misc/guc.c 25 Aug 2008 15:11:00 -0000 1.470 --- src/backend/utils/misc/guc.c 1 Sep 2008 23:37:09 -0000 *************** *** 3200,3205 **** --- 3200,3209 ---- gconf->reset_source = PGC_S_DEFAULT; gconf->source = PGC_S_DEFAULT; gconf->stack = NULL; + gconf->sourcefile = NULL; + gconf->sourceline = 0; + gconf->reset_sourcefile = NULL; + gconf->reset_sourceline = 0; switch (gconf->vartype) { *************** *** 3541,3547 **** PGC_S_SESSION)) elog(ERROR, "failed to reset %s", conf->gen.name); *conf->variable = conf->reset_val; - conf->gen.source = conf->gen.reset_source; break; } case PGC_INT: --- 3545,3550 ---- *************** *** 3553,3559 **** PGC_S_SESSION)) elog(ERROR, "failed to reset %s", conf->gen.name); *conf->variable = conf->reset_val; - conf->gen.source = conf->gen.reset_source; break; } case PGC_REAL: --- 3556,3561 ---- *************** *** 3565,3571 **** PGC_S_SESSION)) elog(ERROR, "failed to reset %s", conf->gen.name); *conf->variable = conf->reset_val; - conf->gen.source = conf->gen.reset_source; break; } case PGC_STRING: --- 3567,3572 ---- *************** *** 3594,3600 **** } set_string_field(conf, conf->variable, str); - conf->gen.source = conf->gen.reset_source; break; } case PGC_ENUM: --- 3595,3600 ---- *************** *** 3606,3616 **** PGC_S_SESSION)) elog(ERROR, "failed to reset %s", conf->gen.name); *conf->variable = conf->reset_val; - conf->gen.source = conf->gen.reset_source; break; } } if (gconf->flags & GUC_REPORT) ReportGUCOption(gconf); } --- 3606,3621 ---- PGC_S_SESSION)) elog(ERROR, "failed to reset %s", conf->gen.name); *conf->variable = conf->reset_val; break; } } + gconf->source = gconf->reset_source; + if (gconf->sourcefile) + free(gconf->sourcefile); + gconf->sourcefile = gconf->reset_sourcefile; + gconf->sourceline = gconf->reset_sourceline; + if (gconf->flags & GUC_REPORT) ReportGUCOption(gconf); } *************** *** 4499,4504 **** --- 4504,4534 ---- return result; } + /* + * Set the fields for source file and line number the setting came from. + * If the setting came from something that's not a file, clear the fields. + */ + static void + set_config_sourcefile(struct config_generic *conf, const char *sourcefile, + int sourceline) + { + if (conf->source != PGC_S_FILE) + { + if (conf->sourcefile) + free(conf->sourcefile); + conf->sourcefile = NULL; + conf->sourceline = 0; + } + else + { + /* NULL sourcefile means don't touch what's in the field */ + if (sourcefile == NULL) + return; + + conf->sourcefile = guc_strdup(ERROR, sourcefile); + conf->sourceline = sourceline; + } + } /* * Sets option `name' to given value. The value should be a string *************** *** 4530,4535 **** --- 4560,4566 ---- bool set_config_option(const char *name, const char *value, GucContext context, GucSource source, + const char *sourcefile, int sourceline, GucAction action, bool changeVal) { struct config_generic *record; *************** *** 4722,4727 **** --- 4753,4760 ---- { newval = conf->reset_val; source = conf->gen.reset_source; + sourcefile = conf->gen.reset_sourcefile; + sourceline = conf->gen.reset_sourceline; } /* Save old value to support transaction abort */ *************** *** 4742,4747 **** --- 4775,4781 ---- { *conf->variable = newval; conf->gen.source = source; + set_config_sourcefile(&conf->gen, sourcefile, sourceline); } if (makeDefault) { *************** *** 4751,4756 **** --- 4785,4794 ---- { conf->reset_val = newval; conf->gen.reset_source = source; + if (conf->gen.reset_sourcefile) + free(conf->gen.reset_sourcefile); + conf->gen.reset_sourcefile = sourcefile ? guc_strdup(elevel, sourcefile) : NULL; + conf->gen.reset_sourceline = sourceline; } for (stack = conf->gen.stack; stack; stack = stack->prev) { *************** *** 4797,4802 **** --- 4835,4842 ---- { newval = conf->reset_val; source = conf->gen.reset_source; + sourcefile = conf->gen.reset_sourcefile; + sourceline = conf->gen.reset_sourceline; } /* Save old value to support transaction abort */ *************** *** 4817,4822 **** --- 4857,4863 ---- { *conf->variable = newval; conf->gen.source = source; + set_config_sourcefile(&conf->gen, sourcefile, sourceline); } if (makeDefault) { *************** *** 4826,4831 **** --- 4867,4876 ---- { conf->reset_val = newval; conf->gen.reset_source = source; + if (conf->gen.reset_sourcefile) + free(conf->gen.reset_sourcefile); + conf->gen.reset_sourcefile = sourcefile ? guc_strdup(elevel, sourcefile) : NULL; + conf->gen.reset_sourceline = sourceline; } for (stack = conf->gen.stack; stack; stack = stack->prev) { *************** *** 4869,4874 **** --- 4914,4921 ---- { newval = conf->reset_val; source = conf->gen.reset_source; + sourcefile = conf->gen.reset_sourcefile; + sourceline = conf->gen.reset_sourceline; } /* Save old value to support transaction abort */ *************** *** 4889,4894 **** --- 4936,4942 ---- { *conf->variable = newval; conf->gen.source = source; + set_config_sourcefile(&conf->gen, sourcefile, sourceline); } if (makeDefault) { *************** *** 4898,4903 **** --- 4946,4955 ---- { conf->reset_val = newval; conf->gen.reset_source = source; + if (conf->gen.reset_sourcefile) + free(conf->gen.reset_sourcefile); + conf->gen.reset_sourcefile = sourcefile ? guc_strdup(elevel, sourcefile) : NULL; + conf->gen.reset_sourceline = sourceline; } for (stack = conf->gen.stack; stack; stack = stack->prev) { *************** *** 4956,4961 **** --- 5008,5015 ---- return false; } source = conf->gen.reset_source; + sourcefile = conf->gen.reset_sourcefile; + sourceline = conf->gen.reset_sourceline; } /* Save old value to support transaction abort */ *************** *** 5003,5008 **** --- 5057,5063 ---- { set_string_field(conf, conf->variable, newval); conf->gen.source = source; + set_config_sourcefile(&conf->gen, sourcefile, sourceline); } if (makeDefault) { *************** *** 5012,5017 **** --- 5067,5076 ---- { set_string_field(conf, &conf->reset_val, newval); conf->gen.reset_source = source; + if (conf->gen.reset_sourcefile) + free(conf->gen.reset_sourcefile); + conf->gen.reset_sourcefile = sourcefile ? guc_strdup(elevel, sourcefile) : NULL; + conf->gen.reset_sourceline = sourceline; } for (stack = conf->gen.stack; stack; stack = stack->prev) { *************** *** 5056,5061 **** --- 5115,5122 ---- { newval = conf->reset_val; source = conf->gen.reset_source; + sourcefile = conf->gen.reset_sourcefile; + sourceline = conf->gen.reset_sourceline; } /* Save old value to support transaction abort */ *************** *** 5077,5082 **** --- 5138,5144 ---- { *conf->variable = newval; conf->gen.source = source; + set_config_sourcefile(&conf->gen, sourcefile, sourceline); } if (makeDefault) { *************** *** 5086,5091 **** --- 5148,5157 ---- { conf->reset_val = newval; conf->gen.reset_source = source; + if (conf->gen.reset_sourcefile) + free(conf->gen.reset_sourcefile); + conf->gen.reset_sourcefile = sourcefile ? guc_strdup(elevel, sourcefile) : NULL; + conf->gen.reset_sourceline = sourceline; } for (stack = conf->gen.stack; stack; stack = stack->prev) { *************** *** 5111,5127 **** * Set a config option to the given value. See also set_config_option, * this is just the wrapper to be called from outside GUC. NB: this * is used only for non-transactional operations. */ void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source) { ! (void) set_config_option(name, value, context, source, GUC_ACTION_SET, true); } - /* * Fetch the current value of the option `name'. If the option doesn't exist, * throw an ereport and don't return. --- 5177,5195 ---- * Set a config option to the given value. See also set_config_option, * this is just the wrapper to be called from outside GUC. NB: this * is used only for non-transactional operations. + * + * Note: there is no support here for setting source file/line, as it + * is currently not needed. */ void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source) { ! (void) set_config_option(name, value, context, source, NULL, 0, GUC_ACTION_SET, true); } /* * Fetch the current value of the option `name'. If the option doesn't exist, * throw an ereport and don't return. *************** *** 5424,5429 **** --- 5492,5498 ---- ExtractSetVariableArgs(stmt), (superuser() ? PGC_SUSET : PGC_USERSET), PGC_S_SESSION, + NULL, 0, action, true); break; *************** *** 5481,5486 **** --- 5550,5556 ---- NULL, (superuser() ? PGC_SUSET : PGC_USERSET), PGC_S_SESSION, + NULL, 0, action, true); break; *************** *** 5526,5531 **** --- 5596,5602 ---- argstring, (superuser() ? PGC_SUSET : PGC_USERSET), PGC_S_SESSION, + NULL, 0, is_local ? GUC_ACTION_LOCAL : GUC_ACTION_SET, true); } *************** *** 5569,5574 **** --- 5640,5646 ---- value, (superuser() ? PGC_SUSET : PGC_USERSET), PGC_S_SESSION, + NULL, 0, is_local ? GUC_ACTION_LOCAL : GUC_ACTION_SET, true); *************** *** 5661,5666 **** --- 5733,5739 ---- if (value) set_config_option(name, value, pHolder->gen.context, pHolder->gen.source, + NULL, 0, GUC_ACTION_SET, true); /* *************** *** 6056,6061 **** --- 6129,6136 ---- { case PGC_BOOL: { + struct config_bool *lconf = (struct config_bool *) conf; + /* min_val */ values[9] = NULL; *************** *** 6064,6069 **** --- 6139,6148 ---- /* enumvals */ values[11] = NULL; + + /* default_val */ + snprintf(buffer, sizeof(buffer), "%s", lconf->boot_val ? "on" : "off"); + values[12] = pstrdup(buffer); } break; *************** *** 6081,6086 **** --- 6160,6169 ---- /* enumvals */ values[11] = NULL; + + /* default_val */ + snprintf(buffer, sizeof(buffer), "%d", lconf->boot_val); + values[12] = pstrdup(buffer); } break; *************** *** 6098,6108 **** --- 6181,6197 ---- /* enumvals */ values[11] = NULL; + + /* default_val */ + snprintf(buffer, sizeof(buffer), "%g", lconf->boot_val); + values[12] = pstrdup(buffer); } break; case PGC_STRING: { + struct config_string *lconf = (struct config_string *) conf; + /* min_val */ values[9] = NULL; *************** *** 6111,6121 **** --- 6200,6222 ---- /* enumvals */ values[11] = NULL; + + /* default_val */ + if (lconf->boot_val == NULL) + { + values[12] = NULL; + } else + { + snprintf(buffer, sizeof(buffer), "%s", lconf->boot_val); + values[12] = pstrdup(buffer); + } } break; case PGC_ENUM: { + struct config_enum *lconf = (struct config_enum *) conf; + /* min_val */ values[9] = NULL; *************** *** 6124,6129 **** --- 6225,6234 ---- /* enumvals */ values[11] = config_enum_get_options((struct config_enum *) conf, "", ""); + + /* default_val */ + snprintf(buffer, sizeof(buffer), "%s", config_enum_lookup_by_value(lconf, lconf->boot_val)); + values[12] = pstrdup(buffer); } break; *************** *** 6141,6149 **** --- 6246,6270 ---- /* enumvals */ values[11] = NULL; + + /* default_val */ + values[12] = NULL; } break; } + + /* If the setting came from a config file, set the source location */ + if (conf->source == PGC_S_FILE) + { + values[13] = conf->sourcefile; + snprintf(buffer, sizeof(buffer), "%d", conf->sourceline); + values[14] = pstrdup(buffer); + } + else + { + values[13] = NULL; + values[14] = NULL; + } } /* *************** *** 6179,6185 **** * show_all_settings - equiv to SHOW ALL command but implemented as * a Table Function. */ ! #define NUM_PG_SETTINGS_ATTS 12 Datum show_all_settings(PG_FUNCTION_ARGS) --- 6300,6306 ---- * show_all_settings - equiv to SHOW ALL command but implemented as * a Table Function. */ ! #define NUM_PG_SETTINGS_ATTS 15 Datum show_all_settings(PG_FUNCTION_ARGS) *************** *** 6231,6236 **** --- 6352,6363 ---- TEXTOID, -1, 0); TupleDescInitEntry(tupdesc, (AttrNumber) 12, "enumvals", TEXTOID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 13, "default_val", + TEXTOID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 14, "sourcefile", + TEXTOID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 15, "sourceline", + INT4OID, -1, 0); /* * Generate attribute metadata needed later to produce tuples from raw *************** *** 6702,6708 **** elog(FATAL, "invalid format of exec config params file"); (void) set_config_option(varname, varvalue, record->context, ! varsource, GUC_ACTION_SET, true); free(varname); free(varvalue); } --- 6829,6835 ---- elog(FATAL, "invalid format of exec config params file"); (void) set_config_option(varname, varvalue, record->context, ! varsource, NULL, 0, GUC_ACTION_SET, true); free(varname); free(varvalue); } *************** *** 6799,6805 **** continue; } ! (void) set_config_option(name, value, context, source, action, true); free(name); if (value) --- 6926,6932 ---- continue; } ! (void) set_config_option(name, value, context, source, NULL, 0, action, true); free(name); if (value) *************** *** 6826,6832 **** /* test if the option is valid */ set_config_option(name, value, superuser() ? PGC_SUSET : PGC_USERSET, ! PGC_S_TEST, GUC_ACTION_SET, false); /* convert name to canonical spelling, so we can use plain strcmp */ (void) GetConfigOptionByName(name, &varname); --- 6953,6959 ---- /* test if the option is valid */ set_config_option(name, value, superuser() ? PGC_SUSET : PGC_USERSET, ! PGC_S_TEST, NULL, 0, GUC_ACTION_SET, false); /* convert name to canonical spelling, so we can use plain strcmp */ (void) GetConfigOptionByName(name, &varname); *************** *** 6904,6910 **** /* test if the option is valid */ set_config_option(name, NULL, superuser() ? PGC_SUSET : PGC_USERSET, ! PGC_S_TEST, GUC_ACTION_SET, false); /* convert name to canonical spelling, so we can use plain strcmp */ (void) GetConfigOptionByName(name, &varname); --- 7031,7037 ---- /* test if the option is valid */ set_config_option(name, NULL, superuser() ? PGC_SUSET : PGC_USERSET, ! PGC_S_TEST, NULL, 0, GUC_ACTION_SET, false); /* convert name to canonical spelling, so we can use plain strcmp */ (void) GetConfigOptionByName(name, &varname); Index: src/include/catalog/pg_proc.h =================================================================== RCS file: /home/gsmith/cvsrepo/pgsql/src/include/catalog/pg_proc.h,v retrieving revision 1.512 diff -c -r1.512 pg_proc.h *** src/include/catalog/pg_proc.h 25 Aug 2008 11:18:43 -0000 1.512 --- src/include/catalog/pg_proc.h 1 Sep 2008 23:27:02 -0000 *************** *** 3157,3163 **** DESCR("SHOW X as a function"); DATA(insert OID = 2078 ( set_config PGNSP PGUID 12 1 0 0 f f f f v 3 25 "25 25 16" _null_ _null_ _null_ set_config_by_name _null_ _null_ _null_ )); DESCR("SET X as a function"); ! DATA(insert OID = 2084 ( pg_show_all_settings PGNSP PGUID 12 1 1000 0 f f t t s 0 2249 "" "{25,25,25,25,25,25,25,25,25,25,25,25}" "{o,o,o,o,o,o,o,o,o,o,o,o}" "{name,setting,unit,category,short_desc,extra_desc,context,vartype,source,min_val,max_val,enumvals}" show_all_settings _null_ _null_ _null_ )); DESCR("SHOW ALL as a function"); DATA(insert OID = 1371 ( pg_lock_status PGNSP PGUID 12 1 1000 0 f f t t v 0 2249 "" "{25,26,26,23,21,25,28,26,26,21,25,23,25,16}" "{o,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{locktype,database,relation,page,tuple,virtualxid,transactionid,classid,objid,objsubid,virtualtransaction,pid,mode,granted}" pg_lock_status _null_ _null_ _null_ )); DESCR("view system lock information"); --- 3157,3163 ---- DESCR("SHOW X as a function"); DATA(insert OID = 2078 ( set_config PGNSP PGUID 12 1 0 0 f f f f v 3 25 "25 25 16" _null_ _null_ _null_ set_config_by_name _null_ _null_ _null_ )); DESCR("SET X as a function"); ! DATA(insert OID = 2084 ( pg_show_all_settings PGNSP PGUID 12 1 1000 0 f f t t s 0 2249 "" "{25,25,25,25,25,25,25,25,25,25,25,25,25,25,23}" "{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{name,setting,unit,category,short_desc,extra_desc,context,vartype,source,min_val,max_val,enumvals,default_val,sourcefile,sourceline}" show_all_settings _null_ _null_ _null_ )); DESCR("SHOW ALL as a function"); DATA(insert OID = 1371 ( pg_lock_status PGNSP PGUID 12 1 1000 0 f f t t v 0 2249 "" "{25,26,26,23,21,25,28,26,26,21,25,23,25,16}" "{o,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{locktype,database,relation,page,tuple,virtualxid,transactionid,classid,objid,objsubid,virtualtransaction,pid,mode,granted}" pg_lock_status _null_ _null_ _null_ )); DESCR("view system lock information"); Index: src/include/utils/guc.h =================================================================== RCS file: /home/gsmith/cvsrepo/pgsql/src/include/utils/guc.h,v retrieving revision 1.98 diff -c -r1.98 guc.h *** src/include/utils/guc.h 23 Jul 2008 17:29:53 -0000 1.98 --- src/include/utils/guc.h 1 Sep 2008 23:27:02 -0000 *************** *** 229,234 **** --- 229,235 ---- extern bool parse_real(const char *value, double *result); extern bool set_config_option(const char *name, const char *value, GucContext context, GucSource source, + const char *sourcefile, int sourceline, GucAction action, bool changeVal); extern char *GetConfigOptionByName(const char *name, const char **varname); extern void GetConfigOptionByNum(int varnum, const char **values, bool *noshow); Index: src/include/utils/guc_tables.h =================================================================== RCS file: /home/gsmith/cvsrepo/pgsql/src/include/utils/guc_tables.h,v retrieving revision 1.41 diff -c -r1.41 guc_tables.h *** src/include/utils/guc_tables.h 17 Mar 2008 17:45:09 -0000 1.41 --- src/include/utils/guc_tables.h 1 Sep 2008 23:27:02 -0000 *************** *** 126,131 **** --- 126,135 ---- GucSource reset_source; /* source of the reset_value */ GucSource source; /* source of the current actual value */ GucStack *stack; /* stacked prior values */ + char *sourcefile; /* file this settings is from (NULL if not file) */ + int sourceline; /* line in source file */ + char *reset_sourcefile; /* file that the reset_val is from */ + int reset_sourceline; /* line in source file for reset_val */ }; /* bit values in flags field */ Index: src/test/regress/expected/rules.out =================================================================== RCS file: /home/gsmith/cvsrepo/pgsql/src/test/regress/expected/rules.out,v retrieving revision 1.141 diff -c -r1.141 rules.out *** src/test/regress/expected/rules.out 25 Aug 2008 11:18:43 -0000 1.141 --- src/test/regress/expected/rules.out 1 Sep 2008 23:27:02 -0000 *************** *** 1287,1293 **** pg_prepared_xacts | SELECT p.transaction, p.gid, p.prepared, u.rolname AS owner, d.datname AS database FROM ((pg_prepared_xact() p(transaction, gid, prepared, ownerid, dbid) LEFT JOIN pg_authid u ON ((p.ownerid = u.oid))) LEFT JOIN pg_database d ON ((p.dbid = d.oid))); pg_roles | SELECT pg_authid.rolname, pg_authid.rolsuper, pg_authid.rolinherit, pg_authid.rolcreaterole, pg_authid.rolcreatedb, pg_authid.rolcatupdate, pg_authid.rolcanlogin, pg_authid.rolconnlimit, '********'::text AS rolpassword, pg_authid.rolvaliduntil, pg_authid.rolconfig, pg_authid.oid FROM pg_authid; pg_rules | SELECT n.nspname AS schemaname, c.relname AS tablename, r.rulename, pg_get_ruledef(r.oid) AS definition FROM ((pg_rewrite r JOIN pg_class c ON ((c.oid = r.ev_class))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (r.rulename <> '_RETURN'::name); ! pg_settings | SELECT a.name, a.setting, a.unit, a.category, a.short_desc, a.extra_desc, a.context, a.vartype, a.source, a.min_val, a.max_val, a.enumvals FROM pg_show_all_settings() a(name, setting, unit, category, short_desc, extra_desc, context, vartype, source, min_val, max_val, enumvals); pg_shadow | SELECT pg_authid.rolname AS usename, pg_authid.oid AS usesysid, pg_authid.rolcreatedb AS usecreatedb, pg_authid.rolsuper AS usesuper, pg_authid.rolcatupdate AS usecatupd, pg_authid.rolpassword AS passwd, (pg_authid.rolvaliduntil)::abstime AS valuntil, pg_authid.rolconfig AS useconfig FROM pg_authid WHERE pg_authid.rolcanlogin; pg_stat_activity | SELECT s.datid, d.datname, s.procpid, s.usesysid, u.rolname AS usename, s.current_query, s.waiting, s.xact_start, s.query_start, s.backend_start, s.client_addr, s.client_port FROM pg_database d, pg_stat_get_activity(NULL::integer) s(datid, procpid, usesysid, current_query, waiting, xact_start, query_start, backend_start, client_addr, client_port), pg_authid u WHERE ((s.datid = d.oid) AND (s.usesysid = u.oid)); pg_stat_all_indexes | SELECT c.oid AS relid, i.oid AS indexrelid, n.nspname AS schemaname, c.relname, i.relname AS indexrelname, pg_stat_get_numscans(i.oid) AS idx_scan, pg_stat_get_tuples_returned(i.oid) AS idx_tup_read, pg_stat_get_tuples_fetched(i.oid) AS idx_tup_fetch FROM (((pg_class c JOIN pg_index x ON ((c.oid = x.indrelid))) JOIN pg_class i ON ((i.oid = x.indexrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = ANY (ARRAY['r'::"char", 't'::"char"])); --- 1287,1293 ---- pg_prepared_xacts | SELECT p.transaction, p.gid, p.prepared, u.rolname AS owner, d.datname AS database FROM ((pg_prepared_xact() p(transaction, gid, prepared, ownerid, dbid) LEFT JOIN pg_authid u ON ((p.ownerid = u.oid))) LEFT JOIN pg_database d ON ((p.dbid = d.oid))); pg_roles | SELECT pg_authid.rolname, pg_authid.rolsuper, pg_authid.rolinherit, pg_authid.rolcreaterole, pg_authid.rolcreatedb, pg_authid.rolcatupdate, pg_authid.rolcanlogin, pg_authid.rolconnlimit, '********'::text AS rolpassword, pg_authid.rolvaliduntil, pg_authid.rolconfig, pg_authid.oid FROM pg_authid; pg_rules | SELECT n.nspname AS schemaname, c.relname AS tablename, r.rulename, pg_get_ruledef(r.oid) AS definition FROM ((pg_rewrite r JOIN pg_class c ON ((c.oid = r.ev_class))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (r.rulename <> '_RETURN'::name); ! pg_settings | SELECT a.name, a.setting, a.unit, a.category, a.short_desc, a.extra_desc, a.context, a.vartype, a.source, a.min_val, a.max_val, a.enumvals, a.default_val, a.sourcefile, a.sourceline FROM pg_show_all_settings() a(name, setting, unit, category, short_desc, extra_desc, context, vartype, source, min_val, max_val, enumvals, default_val, sourcefile, sourceline); pg_shadow | SELECT pg_authid.rolname AS usename, pg_authid.oid AS usesysid, pg_authid.rolcreatedb AS usecreatedb, pg_authid.rolsuper AS usesuper, pg_authid.rolcatupdate AS usecatupd, pg_authid.rolpassword AS passwd, (pg_authid.rolvaliduntil)::abstime AS valuntil, pg_authid.rolconfig AS useconfig FROM pg_authid WHERE pg_authid.rolcanlogin; pg_stat_activity | SELECT s.datid, d.datname, s.procpid, s.usesysid, u.rolname AS usename, s.current_query, s.waiting, s.xact_start, s.query_start, s.backend_start, s.client_addr, s.client_port FROM pg_database d, pg_stat_get_activity(NULL::integer) s(datid, procpid, usesysid, current_query, waiting, xact_start, query_start, backend_start, client_addr, client_port), pg_authid u WHERE ((s.datid = d.oid) AND (s.usesysid = u.oid)); pg_stat_all_indexes | SELECT c.oid AS relid, i.oid AS indexrelid, n.nspname AS schemaname, c.relname, i.relname AS indexrelname, pg_stat_get_numscans(i.oid) AS idx_scan, pg_stat_get_tuples_returned(i.oid) AS idx_tup_read, pg_stat_get_tuples_fetched(i.oid) AS idx_tup_fetch FROM (((pg_class c JOIN pg_index x ON ((c.oid = x.indrelid))) JOIN pg_class i ON ((i.oid = x.indexrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = ANY (ARRAY['r'::"char", 't'::"char"]));