From f999884397471e47b574293e33c85e91f3a0d695 Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@users.sourceforge.net>
Date: Tue, 20 Jul 2010 21:14:42 +0000
Subject: [PATCH] Fix: Error in creating function with postgresql

---
 htdocs/install/etape1.php                    |  8 ++++----
 htdocs/install/etape2.php                    | 14 ++++++++------
 htdocs/install/pgsql/functions/functions.sql |  7 ++++++-
 3 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/htdocs/install/etape1.php b/htdocs/install/etape1.php
index efbd24a4c3b..15b0dae5b9c 100644
--- a/htdocs/install/etape1.php
+++ b/htdocs/install/etape1.php
@@ -201,7 +201,7 @@ if ($_POST["action"] == "set")
 			}
 		}
 	}
-	
+
 	// Force https
 	$_POST["main_force_https"] = ((isset($_POST["main_force_https"]) && $_POST["main_force_https"] == "on")?'1':'0');
 
@@ -356,7 +356,7 @@ if ($_POST["action"] == "set")
 					print $langs->trans("DatabaseCreation").' : ';
 					print $dolibarr_main_db_name;
 					print '</td>';
-					print '<td>'.$langs->trans("Error").' '.$db->lasterrno().'</td></tr>';
+					print '<td>'.$langs->trans("Error").' '.$db->lasterrno().'<br>'.$db->lasterror().'</td></tr>';
 
 					// Affiche aide diagnostique
 					print '<tr><td colspan="2"><br>';
@@ -365,7 +365,7 @@ if ($_POST["action"] == "set")
 					print '<br>';
 					print '</td></tr>';
 
-					dolibarr_install_syslog('etape1: Failed to create database '.$dolibarr_main_db_name.' '.$db->lasterrno(), LOG_ERR);
+					dolibarr_install_syslog('etape1: Failed to create database '.$dolibarr_main_db_name.' '.$db->lasterrno().' '.$db->lasterror(), LOG_ERR);
 					$error++;
 				}
 				$db->close();
@@ -562,7 +562,7 @@ function write_conf_file($conffile)
 		/* Authentication */
 		fputs($fp, '$dolibarr_main_authentication=\'dolibarr\';');
 		fputs($fp,"\n");
-		
+
 		fputs($fp, '$dolibarr_main_force_https=\''.$_POST["main_force_https"].'\';');
 		fputs($fp,"\n");
 
diff --git a/htdocs/install/etape2.php b/htdocs/install/etape2.php
index 83392bfe2cd..f0775cb2902 100644
--- a/htdocs/install/etape2.php
+++ b/htdocs/install/etape2.php
@@ -388,14 +388,14 @@ if ($_POST["action"] == "set")
 					$buf = fgets($fp, 4096);
 					if (substr($buf, 0, 2) <> '--')
 					{
-						$buffer .= $buf;
+						$buffer .= $buf."§";
 					}
 				}
 				fclose($fp);
 			}
+			//$buffer=preg_replace('/;\';/',";'§",$buffer);
 
-			// Si plusieurs requetes, on boucle sur chaque
-			$buffer=preg_replace('/;\';/',";'§",$buffer);
+			// If several requests, we loop on each of them
 			$listesql=explode('§',$buffer);
 			foreach ($listesql as $buffer)
 			{
@@ -403,6 +403,7 @@ if ($_POST["action"] == "set")
 				if ($buffer)
 				{
 					dolibarr_install_syslog("Request: ".$buffer,LOG_DEBUG);
+					print "<!-- Insert line : ".$buffer."<br>-->\n";
 					$resql=$db->query($buffer);
 					if ($resql)
 					{
@@ -411,14 +412,15 @@ if ($_POST["action"] == "set")
 					}
 					else
 					{
-						if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
+						if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS'
+						|| $db->errno() == 'DB_ERROR_KEY_NAME_ALREADY_EXISTS')
 						{
-							// print "<tr><td>Insertion ligne : $buffer</td><td>
+							//print "Insert line : ".$buffer."<br>\n";
 						}
 						else
 						{
 							$ok = 0;
-							print $langs->trans("ErrorSQL")." : ".$db->errno()." - '$buffer' - ".$db->lastqueryerror()."<br>";
+							print $langs->trans("ErrorSQL")." : ".$db->errno()." - '".$buffer."'<br>\n";
 						}
 					}
 				}
diff --git a/htdocs/install/pgsql/functions/functions.sql b/htdocs/install/pgsql/functions/functions.sql
index a44d6f7de3e..47c4a2540dc 100644
--- a/htdocs/install/pgsql/functions/functions.sql
+++ b/htdocs/install/pgsql/functions/functions.sql
@@ -1,5 +1,6 @@
 -- ============================================================================
--- Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
+-- Copyright (C) 2004 Benoit Mortier       <benoit.mortier@opensides.be>
+-- Copyright (C) 2010 Laurent Destailleur  <eldy@users.sourceforge.net>
 --
 -- This program is free software; you can redistribute it and/or modify
 -- it under the terms of the GNU General Public License as published by
@@ -18,6 +19,9 @@
 -- $Id$
 -- ============================================================================
 
+CREATE LANGUAGE plpgsql;
+
+
 CREATE OR REPLACE FUNCTION UNIX_TIMESTAMP(TIMESTAMP WITHOUT TIME ZONE) RETURNS BIGINT LANGUAGE SQL IMMUTABLE STRICT AS 'SELECT EXTRACT(EPOCH FROM $1)::bigint;';
 
 CREATE OR REPLACE FUNCTION UNIX_TIMESTAMP(TIMESTAMP WITH TIME ZONE) RETURNS BIGINT LANGUAGE SQL IMMUTABLE STRICT AS 'SELECT EXTRACT(EPOCH FROM $1)::bigint;';
@@ -33,6 +37,7 @@ CREATE OR REPLACE FUNCTION MONTH(TIMESTAMP WITH TIME ZONE) RETURNS INTEGER AS $$
 
 CREATE OR REPLACE FUNCTION MONTH(DATE) RETURNS INTEGER AS $$ SELECT EXTRACT(MONTH FROM $1)::INTEGER; $$ LANGUAGE SQL IMMUTABLE;
 
+
 CREATE OR REPLACE FUNCTION DAY(TIMESTAMP without TIME ZONE) RETURNS INTEGER AS $$ SELECT EXTRACT(DAY FROM $1)::INTEGER; $$ LANGUAGE SQL IMMUTABLE;
 
 CREATE OR REPLACE FUNCTION DAY(TIMESTAMP WITH TIME ZONE) RETURNS INTEGER AS $$ SELECT EXTRACT(DAY FROM $1)::INTEGER; $$ LANGUAGE SQL STABLE;
-- 
GitLab