Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/tcop/variable.c140
-rw-r--r--src/backend/utils/adt/datetime.c3
2 files changed, 141 insertions, 2 deletions
diff --git a/src/backend/tcop/variable.c b/src/backend/tcop/variable.c
index e3041361394..424e3d08fbd 100644
--- a/src/backend/tcop/variable.c
+++ b/src/backend/tcop/variable.c
@@ -1,14 +1,152 @@
+/*
+ * Routines for handling of SET var TO statements
+ *
+ * $Id: variable.c,v 1.3 1997/04/17 13:50:30 scrappy Exp $
+ *
+ * $Log: variable.c,v $
+ * Revision 1.3 1997/04/17 13:50:30 scrappy
+ * From: "Martin J. Laubach" <mjl@CSlab.tuwien.ac.at>
+ * Subject: [HACKERS] Patch: set date to euro/us postgres/iso/sql
+ *
+ * Here a patch that implements a SET date for use by the datetime
+ * stuff. The syntax is
+ *
+ * SET date TO 'val[,val,...]'
+ *
+ * where val is us (us dates), euro (european dates), postgres,
+ * iso or sql.
+ *
+ * Thomas is working on the integration in his datetime module.
+ * I just needed to get the patch out before it went stale :)
+ *
+ * Revision 1.1 1997/04/10 16:52:07 mjl
+ * Initial revision
+ */
+/*-----------------------------------------------------------------------*/
+
+#include <string.h>
#include "postgres.h"
#include "tcop/variable.h"
+/*-----------------------------------------------------------------------*/
+#if USE_EURODATES
+#define DATE_EURO TRUE
+#else
+#define DATE_EURO FALSE
+#endif
+
+/*-----------------------------------------------------------------------*/
+struct PGVariables PGVariables =
+ {
+ { DATE_EURO, Date_Postgres }
+ };
+
+/*-----------------------------------------------------------------------*/
+static const char *get_token(char *buf, int size, const char *str)
+ {
+ if(!*str)
+ return NULL;
+
+ /* skip white space */
+ while(*str && (*str == ' ' || *str == '\t'))
+ str++;
+
+ /* copy until we hit white space or comma or end of string */
+ while(*str && *str != ' ' && *str != '\t' && *str != ',' && size-- > 1)
+ *buf++ = *str++;
+
+ *buf = '\0';
+
+ /* skip white space and comma*/
+ while(*str && (*str == ' ' || *str == '\t' || *str == ','))
+ str++;
+
+ return str;
+ }
+
+/*-----------------------------------------------------------------------*/
+static bool parse_null(const char *value)
+ {
+ return TRUE;
+ }
+
+static bool parse_date(const char *value)
+ {
+ char tok[32];
+ int dcnt = 0, ecnt = 0;
+
+ while(value = get_token(tok, sizeof(tok), value))
+ {
+ /* Ugh. Somebody ought to write a table driven version -- mjl */
+
+ if(!strcasecmp(tok, "iso"))
+ {
+ PGVariables.date.format = Date_ISO;
+ dcnt++;
+ }
+ else if(!strcasecmp(tok, "sql"))
+ {
+ PGVariables.date.format = Date_SQL;
+ dcnt++;
+ }
+ else if(!strcasecmp(tok, "postgres"))
+ {
+ PGVariables.date.format = Date_Postgres;
+ dcnt++;
+ }
+ else if(!strcasecmp(tok, "euro"))
+ {
+ PGVariables.date.euro = TRUE;
+ ecnt++;
+ }
+ else if(!strcasecmp(tok, "us"))
+ {
+ PGVariables.date.euro = FALSE;
+ ecnt++;
+ }
+ else
+ {
+ elog(WARN, "Bad value for date (%s)", tok);
+ }
+ }
+
+ if(dcnt > 1 || ecnt > 1)
+ elog(NOTICE, "Conflicting settings for date");
+
+ return TRUE;
+ }
+
+/*-----------------------------------------------------------------------*/
+struct VariableParsers
+ {
+ const char *name;
+ bool (*parser)(const char *);
+ } VariableParsers[] =
+ {
+ { "date", parse_date },
+ { "timezone", parse_null },
+ { NULL }
+ };
+
+/*-----------------------------------------------------------------------*/
bool SetPGVariable(const char *name, const char *value)
{
- elog(NOTICE, "Variable %s set to \"%s\"", name, value);
+ struct VariableParsers *vp;
+
+ for(vp = VariableParsers; vp->name; vp++)
+ {
+ if(!strcasecmp(vp->name, name))
+ return (vp->parser)(value);
+ }
+
+ elog(NOTICE, "No such variable %s", name);
return TRUE;
}
+/*-----------------------------------------------------------------------*/
const char *GetPGVariable(const char *varName)
{
return NULL;
}
+/*-----------------------------------------------------------------------*/
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index 2adedf88987..07113bd7cf2 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -7,12 +7,13 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.3 1997/04/04 08:55:29 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.4 1997/04/17 13:50:34 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
#include <stdio.h> /* for sprintf() */
#include <string.h>
+#include <limits.h>
#include "postgres.h"
#ifdef HAVE_FLOAT_H