From 0e9571566eb04b2064f0abdee7fc090c9f5b1ce9 Mon Sep 17 00:00:00 2001
From: Dries Buytaert <dries@buytaert.net>
Date: Mon, 9 Oct 2006 20:05:14 +0000
Subject: [PATCH] - Patch #85486 by sammys: greatest() function for PostgreSQL.
  Critical bugfix.

---
 modules/system/system.install | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/modules/system/system.install b/modules/system/system.install
index 758b4a17d5a8..c48c960175b0 100644
--- a/modules/system/system.install
+++ b/modules/system/system.install
@@ -550,6 +550,38 @@ function system_install() {
       db_query("CREATE DOMAIN smallint_unsigned smallint CHECK (VALUE >= 0)");
       db_query("CREATE DOMAIN bigint_unsigned bigint CHECK (VALUE >= 0)");
 
+      /* create functions */
+      db_query('CREATE OR REPLACE FUNCTION "greatest"(numeric, numeric) RETURNS numeric AS
+        \'SELECT CASE WHEN (($1 > $2) OR ($2 IS NULL)) THEN $1 ELSE $2 END;\'
+        LANGUAGE \'sql\''
+      );
+      db_query('CREATE OR REPLACE FUNCTION "greatest"(numeric, numeric, numeric) RETURNS numeric AS
+        \'SELECT greatest($1, greatest($2, $3));\'
+        LANGUAGE \'sql\''
+      );
+      if (!db_result(db_query("SELECT COUNT(*) FROM pg_proc WHERE proname = 'concat'"))) {
+        db_query('CREATE OR REPLACE FUNCTION "rand"() RETURNS float AS
+          \'SELECT random();\'
+          LANGUAGE \'sql\''
+        );
+      }
+
+      if (!db_result(db_query("SELECT COUNT(*) FROM pg_proc WHERE proname = 'concat'"))) {
+        db_query('CREATE OR REPLACE FUNCTION "concat"(text, text) RETURNS text AS
+          \'SELECT $1 || $2;\'
+          LANGUAGE \'sql\''
+        );
+      }
+      db_query('CREATE OR REPLACE FUNCTION "if"(boolean, text, text) RETURNS text AS
+        \'SELECT CASE WHEN $1 THEN $2 ELSE $3 END;\'
+        LANGUAGE \'sql\''
+      );
+      db_query('CREATE OR REPLACE FUNCTION "if"(boolean, integer, integer) RETURNS integer AS
+        \'SELECT CASE WHEN $1 THEN $2 ELSE $3 END;\'
+        LANGUAGE \'sql\''
+      );
+
+      /* create tables */
       db_query("CREATE TABLE {access} (
         aid serial,
         mask varchar(255) NOT NULL default '',
-- 
GitLab