aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/parser/sysfunc.c55
-rw-r--r--src/backend/parser/sysfunc.h10
2 files changed, 65 insertions, 0 deletions
diff --git a/src/backend/parser/sysfunc.c b/src/backend/parser/sysfunc.c
new file mode 100644
index 00000000000..c69ca1b5b06
--- /dev/null
+++ b/src/backend/parser/sysfunc.c
@@ -0,0 +1,55 @@
+/*-------------------------------------------------------------------------
+ *
+ * sysfunc.c--
+ * process system functions and return a string result
+ *
+ * Notes:
+ * 1) I return a string result because most of the functions cannot return any
+ * normal type anyway (e.g. SYS_DATE, SYS_TIME, etc...), and the few that
+ * might (SYS_UID or whatever) can just return it as a string - no problem.
+ * This keeps the function flexible enough to be of good use.
+ *
+ * Written by Chad Robinson, chadr@brttech.com
+ * Last modified: 04/27/1996
+ * -------------------------------------------------------------------------
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+/*
+ * Can't get much more obvious than this. Might need to replace localtime()
+ * on older systems...
+ */
+char *Sysfunc_system_date(void)
+{
+ time_t cur_time_secs;
+ struct tm *cur_time_expanded;
+ static char buf[12]; /* Just for safety, y'understand... */
+
+ time(&cur_time_secs);
+ cur_time_expanded = localtime(&cur_time_secs);
+ sprintf(buf, "%02.2d-%02.2d-%04.4d", cur_time_expanded->tm_mon+1,
+ cur_time_expanded->tm_mday, cur_time_expanded->tm_year+1900);
+ return &buf[0];
+}
+
+char *SystemFunctionHandler(char *funct)
+{
+ if (!strcmp(funct, "SYS_DATE"))
+ return Sysfunc_system_date();
+ return "*unknown function*";
+}
+
+#ifdef SYSFUNC_TEST
+/*
+ * Chad's rule of coding #4 - never delete a test function, even a stupid
+ * one - you always need it 10 minutes after you delete it.
+ */
+void main(void)
+{
+ printf("Current system date: %s\n", SystemFunctionHandler("SYS_DATE"));
+ return;
+}
+#endif
diff --git a/src/backend/parser/sysfunc.h b/src/backend/parser/sysfunc.h
new file mode 100644
index 00000000000..b0761d4c351
--- /dev/null
+++ b/src/backend/parser/sysfunc.h
@@ -0,0 +1,10 @@
+/*-------------------------------------------------------------------------
+ *
+ * sysfunc.h--
+ * support for system functions
+ *
+ * -------------------------------------------------------------------------
+ */
+
+extern char *SystemFunctionHandler(char *funct);
+