diff options
Diffstat (limited to 'src/backend/commands')
-rw-r--r-- | src/backend/commands/define.c | 34 | ||||
-rw-r--r-- | src/backend/commands/variable.c | 43 |
2 files changed, 63 insertions, 14 deletions
diff --git a/src/backend/commands/define.c b/src/backend/commands/define.c index cd69f079113..2090076f2e4 100644 --- a/src/backend/commands/define.c +++ b/src/backend/commands/define.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.38 2000/01/26 05:56:13 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.39 2000/04/07 13:39:24 thomas Exp $ * * DESCRIPTION * The "DefineFoo" routines take the parse tree and pick out the @@ -377,24 +377,22 @@ DefineOperator(char *oprName, if (!strcasecmp(defel->defname, "leftarg")) { - /* see gram.y, must be setof */ - if (nodeTag(defel->arg) == T_TypeName) + if ((nodeTag(defel->arg) == T_TypeName) + && (((TypeName *)defel->arg)->setof)) elog(ERROR, "setof type not implemented for leftarg"); - if (nodeTag(defel->arg) == T_String) - typeName1 = defGetString(defel); - else + typeName1 = defGetString(defel); + if (typeName1 == NULL) elog(ERROR, "type for leftarg is malformed."); } else if (!strcasecmp(defel->defname, "rightarg")) { - /* see gram.y, must be setof */ - if (nodeTag(defel->arg) == T_TypeName) + if ((nodeTag(defel->arg) == T_TypeName) + && (((TypeName *)defel->arg)->setof)) elog(ERROR, "setof type not implemented for rightarg"); - if (nodeTag(defel->arg) == T_String) - typeName2 = defGetString(defel); - else + typeName2 = defGetString(defel); + if (typeName2 == NULL) elog(ERROR, "type for rightarg is malformed."); } else if (!strcasecmp(defel->defname, "procedure")) @@ -700,9 +698,19 @@ DefineType(char *typeName, List *parameters) static char * defGetString(DefElem *def) { - if (nodeTag(def->arg) != T_String) + char *string; + + if (nodeTag(def->arg) == T_String) + string = strVal(def->arg); + else if (nodeTag(def->arg) == T_TypeName) + string = ((TypeName *)def->arg)->name; + else + string = NULL; +#if 0 elog(ERROR, "Define: \"%s\" = what?", def->defname); - return strVal(def->arg); +#endif + + return string; } static double diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index 482b9a23ae0..6432d3c2b8f 100644 --- a/src/backend/commands/variable.c +++ b/src/backend/commands/variable.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.32 2000/03/17 05:29:04 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.33 2000/04/07 13:39:24 thomas Exp $ * *------------------------------------------------------------------------- */ @@ -93,6 +93,9 @@ static bool parse_max_expr_depth(char *); static bool show_XactIsoLevel(void); static bool reset_XactIsoLevel(void); static bool parse_XactIsoLevel(char *); +static bool parse_random_seed(char *); +static bool show_random_seed(void); +static bool reset_random_seed(void); /* * get_token @@ -1066,6 +1069,41 @@ reset_pg_options(void) } +/* + * Random number seed + */ +static bool +parse_random_seed(char *value) +{ + double seed = 0; + + if (value == NULL) + reset_random_seed(); + else + { + sscanf(value, "%lf", &seed); + setseed(&seed); + } + return (TRUE); +} + +static bool +show_random_seed(void) +{ + elog(NOTICE, "Seed for random number generator is not known"); + return (TRUE); +} + +static bool +reset_random_seed(void) +{ + double seed = 0.5; + + setseed(&seed); + return (TRUE); +} + + /*-----------------------------------------------------------------------*/ static struct VariableParsers @@ -1156,6 +1194,9 @@ static struct VariableParsers "pg_options", parse_pg_options, show_pg_options, reset_pg_options }, { + "seed", parse_random_seed, show_random_seed, reset_random_seed + }, + { NULL, NULL, NULL, NULL } }; |