Qual: More portable SQL
This commit is contained in:
parent
a3b57d20e5
commit
fe6563b755
@ -2,6 +2,9 @@
|
|||||||
This file describe changes made on external library after beeing included
|
This file describe changes made on external library after beeing included
|
||||||
in Dolibarr root.
|
in Dolibarr root.
|
||||||
|
|
||||||
|
ALL:
|
||||||
|
----
|
||||||
|
Replace "& new" by "new"
|
||||||
|
|
||||||
|
|
||||||
FPDF:
|
FPDF:
|
||||||
|
|||||||
@ -122,7 +122,7 @@ if ($_POST["action"] == "set")
|
|||||||
|
|
||||||
$ok = 0;
|
$ok = 0;
|
||||||
$handle=opendir($dir);
|
$handle=opendir($dir);
|
||||||
dolibarr_install_syslog("Ouverture repertoire ".$dir." handle=".$handle,LOG_DEBUG);
|
dolibarr_install_syslog("Open tables directory ".$dir." handle=".$handle,LOG_DEBUG);
|
||||||
$tablefound = 0;
|
$tablefound = 0;
|
||||||
while (($file = readdir($handle))!==false)
|
while (($file = readdir($handle))!==false)
|
||||||
{
|
{
|
||||||
@ -166,15 +166,16 @@ if ($_POST["action"] == "set")
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ($db->errno() == 'DB_ERROR_TABLE_ALREADY_EXISTS')
|
if ($db->errno() == 'DB_ERROR_TABLE_ALREADY_EXISTS' ||
|
||||||
|
$db->errno() == 'DB_ERROR_TABLE_OR_KEY_ALREADY_EXISTS')
|
||||||
{
|
{
|
||||||
//print "<td>Deja existante</td></tr>";
|
//print "<td>Deja existante</td></tr>";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print "<tr><td>".$langs->trans("CreateTableAndPrimaryKey",$name);
|
print "<tr><td>".$langs->trans("CreateTableAndPrimaryKey",$name);
|
||||||
print "<br>".$langs->trans("Request").' '.$requestnb.' : '.$buffer;
|
print "<br>\n".$langs->trans("Request").' '.$requestnb.' : '.$buffer;
|
||||||
print "</td>";
|
print "\n</td>";
|
||||||
print "<td>".$langs->trans("Error")." ".$db->errno()." ".$db->error()."</td></tr>";
|
print "<td>".$langs->trans("Error")." ".$db->errno()." ".$db->error()."</td></tr>";
|
||||||
$error++;
|
$error++;
|
||||||
}
|
}
|
||||||
@ -222,7 +223,7 @@ if ($_POST["action"] == "set")
|
|||||||
|
|
||||||
$okkeys = 0;
|
$okkeys = 0;
|
||||||
$handle=opendir($dir);
|
$handle=opendir($dir);
|
||||||
dolibarr_install_syslog("Ouverture repertoire tables ".$dir." handle=".$handle,LOG_DEBUG);
|
dolibarr_install_syslog("Open keys directory ".$dir." handle=".$handle,LOG_DEBUG);
|
||||||
while (($file = readdir($handle))!==false)
|
while (($file = readdir($handle))!==false)
|
||||||
{
|
{
|
||||||
if (preg_match('/\.sql$/i',$file) && preg_match('/^llx_/i',$file) && preg_match('/\.key\.sql$/i',$file))
|
if (preg_match('/\.sql$/i',$file) && preg_match('/^llx_/i',$file) && preg_match('/\.key\.sql$/i',$file))
|
||||||
@ -238,7 +239,7 @@ if ($_POST["action"] == "set")
|
|||||||
$buf = fgets($fp, 4096);
|
$buf = fgets($fp, 4096);
|
||||||
|
|
||||||
// Cas special de lignes autorisees pour certaines versions uniquement
|
// Cas special de lignes autorisees pour certaines versions uniquement
|
||||||
if (preg_match('/^--\sV([0-9\.]+)/i',$buf,$reg))
|
if ($choix == 1 && preg_match('/^--\sV([0-9\.]+)/i',$buf,$reg))
|
||||||
{
|
{
|
||||||
$versioncommande=explode('.',$reg[1]);
|
$versioncommande=explode('.',$reg[1]);
|
||||||
//print var_dump($versioncommande);
|
//print var_dump($versioncommande);
|
||||||
@ -247,7 +248,20 @@ if ($_POST["action"] == "set")
|
|||||||
&& versioncompare($versioncommande,$versionarray) <= 0)
|
&& versioncompare($versioncommande,$versionarray) <= 0)
|
||||||
{
|
{
|
||||||
// Version qualified, delete SQL comments
|
// Version qualified, delete SQL comments
|
||||||
$buf=preg_replace('/^-- V([0-9\.]+)/i','',$buf);
|
$buf=preg_replace('/^--\sV([0-9\.]+)/i','',$buf);
|
||||||
|
//print "Ligne $i qualifiee par version: ".$buf.'<br>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($choix == 2 && preg_match('/^--\sPOSTGRESQL\sV([0-9\.]+)/i',$buf,$reg))
|
||||||
|
{
|
||||||
|
$versioncommande=explode('.',$reg[1]);
|
||||||
|
//print var_dump($versioncommande);
|
||||||
|
//print var_dump($versionarray);
|
||||||
|
if (sizeof($versioncommande) && sizeof($versionarray)
|
||||||
|
&& versioncompare($versioncommande,$versionarray) <= 0)
|
||||||
|
{
|
||||||
|
// Version qualified, delete SQL comments
|
||||||
|
$buf=preg_replace('/^--\sPOSTGRESQL\sV([0-9\.]+)/i','',$buf);
|
||||||
//print "Ligne $i qualifiee par version: ".$buf.'<br>';
|
//print "Ligne $i qualifiee par version: ".$buf.'<br>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -281,6 +295,7 @@ if ($_POST["action"] == "set")
|
|||||||
if ($db->errno() == 'DB_ERROR_KEY_NAME_ALREADY_EXISTS' ||
|
if ($db->errno() == 'DB_ERROR_KEY_NAME_ALREADY_EXISTS' ||
|
||||||
$db->errno() == 'DB_ERROR_CANNOT_CREATE' ||
|
$db->errno() == 'DB_ERROR_CANNOT_CREATE' ||
|
||||||
$db->errno() == 'DB_ERROR_PRIMARY_KEY_ALREADY_EXISTS' ||
|
$db->errno() == 'DB_ERROR_PRIMARY_KEY_ALREADY_EXISTS' ||
|
||||||
|
$db->errno() == 'DB_ERROR_TABLE_OR_KEY_ALREADY_EXISTS' ||
|
||||||
preg_match('/duplicate key name/i',$db->error()))
|
preg_match('/duplicate key name/i',$db->error()))
|
||||||
{
|
{
|
||||||
//print "<td>Deja existante</td></tr>";
|
//print "<td>Deja existante</td></tr>";
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
-- ===================================================================
|
-- ===================================================================
|
||||||
-- Copyright (C) 2006-2007 Laurent Destailleur <eldy@users.sourceforge.net>
|
-- Copyright (C) 2006-2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
--
|
--
|
||||||
-- This program is free software; you can redistribute it and/or modify
|
-- 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
|
-- it under the terms of the GNU General Public License as published by
|
||||||
@ -21,8 +21,10 @@
|
|||||||
|
|
||||||
ALTER TABLE llx_boxes ADD UNIQUE INDEX uk_boxes (box_id, position, fk_user);
|
ALTER TABLE llx_boxes ADD UNIQUE INDEX uk_boxes (box_id, position, fk_user);
|
||||||
|
|
||||||
-- Supprime orphelins pour permettre montée de la clé
|
-- Supprime orphelins pour permettre montee de la cle
|
||||||
-- V4 DELETE llx_boxes FROM llx_boxes LEFT JOIN llx_boxes_def ON llx_boxes.box_id = llx_boxes_def.rowid WHERE llx_boxes_def.rowid IS NULL;
|
-- V4 DELETE llx_boxes FROM llx_boxes LEFT JOIN llx_boxes_def ON llx_boxes.box_id = llx_boxes_def.rowid WHERE llx_boxes_def.rowid IS NULL;
|
||||||
|
-- POSTGRESQL V8 DELETE FROM llx_boxes USING llx_boxes_def WHERE llx_boxes.box_id NOT IN (SELECT llx_boxes_def.rowid FROM llx_boxes_def);
|
||||||
|
|
||||||
ALTER TABLE llx_boxes ADD INDEX idx_boxes_boxid (box_id);
|
ALTER TABLE llx_boxes ADD INDEX idx_boxes_boxid (box_id);
|
||||||
ALTER TABLE llx_boxes ADD CONSTRAINT fk_boxes_box_id FOREIGN KEY (box_id) REFERENCES llx_boxes_def (rowid);
|
ALTER TABLE llx_boxes ADD CONSTRAINT fk_boxes_box_id FOREIGN KEY (box_id) REFERENCES llx_boxes_def (rowid);
|
||||||
|
|
||||||
|
|||||||
@ -18,16 +18,7 @@
|
|||||||
--
|
--
|
||||||
-- $Id$
|
-- $Id$
|
||||||
-- ========================================================================
|
-- ========================================================================
|
||||||
-- Defini les types de contact d'un element sert de reference pour
|
|
||||||
-- la table llx_element_contact
|
|
||||||
--
|
|
||||||
-- element est le nom de la table utilisant le type de contact.
|
|
||||||
-- i.e. contact, facture, projet, societe (sans le llx_ devant).
|
|
||||||
-- Libelle est un texte décrivant le type de contact.
|
|
||||||
-- active précide si cette valeur est active ou 'archivé'.
|
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE llx_c_type_contact ADD UNIQUE INDEX idx_c_type_contact_uk (element, source, code);
|
||||||
ALTER TABLE llx_c_type_contact
|
|
||||||
ADD UNIQUE INDEX idx_c_type_contact_uk (element, source, code);
|
|
||||||
|
|
||||||
|
|||||||
@ -21,8 +21,8 @@
|
|||||||
--
|
--
|
||||||
-- element est le nom de la table utilisant le type de contact.
|
-- element est le nom de la table utilisant le type de contact.
|
||||||
-- i.e. contact, facture, projet, societe (sans le llx_ devant).
|
-- i.e. contact, facture, projet, societe (sans le llx_ devant).
|
||||||
-- Libelle est un texte décrivant le type de contact.
|
-- Libelle est un texte decrivant le type de contact.
|
||||||
-- active précide si cette valeur est active ou 'archivé'.
|
-- active precise si cette valeur est 'active' ou 'archive'.
|
||||||
--
|
--
|
||||||
-- $Id$
|
-- $Id$
|
||||||
-- ========================================================================
|
-- ========================================================================
|
||||||
|
|||||||
@ -18,5 +18,4 @@
|
|||||||
-- $Id$
|
-- $Id$
|
||||||
-- ===========================================================================
|
-- ===========================================================================
|
||||||
|
|
||||||
|
|
||||||
ALTER TABLE llx_dolibarr_modules ADD PRIMARY KEY pk_dolibarr_modules (numero, entity);
|
ALTER TABLE llx_dolibarr_modules ADD PRIMARY KEY pk_dolibarr_modules (numero, entity);
|
||||||
|
|||||||
@ -20,13 +20,9 @@
|
|||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
|
|
||||||
|
|
||||||
ALTER TABLE llx_element_contact
|
ALTER TABLE llx_element_contact ADD UNIQUE INDEX idx_element_contact_idx1 (element_id, fk_c_type_contact, fk_socpeople);
|
||||||
ADD UNIQUE INDEX idx_element_contact_idx1 (element_id, fk_c_type_contact, fk_socpeople);
|
|
||||||
|
|
||||||
ALTER TABLE llx_element_contact
|
ALTER TABLE llx_element_contact ADD CONSTRAINT fk_element_contact_fk_c_type_contact FOREIGN KEY (fk_c_type_contact) REFERENCES llx_c_type_contact(rowid);
|
||||||
ADD CONSTRAINT fk_element_contact_fk_c_type_contact
|
|
||||||
FOREIGN KEY (fk_c_type_contact) REFERENCES llx_c_type_contact(rowid);
|
|
||||||
|
|
||||||
|
|
||||||
ALTER TABLE llx_element_contact ADD INDEX idx_element_contact_fk_socpeople (fk_socpeople);
|
ALTER TABLE llx_element_contact ADD INDEX idx_element_contact_fk_socpeople (fk_socpeople);
|
||||||
-- Pas de contraite sur fk_socpeople car point sur llx_socpeople mais aussi llx_user
|
-- Pas de contraite sur fk_socpeople car point sur llx_socpeople mais aussi llx_user
|
||||||
|
|||||||
@ -19,8 +19,7 @@
|
|||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
|
|
||||||
|
|
||||||
ALTER TABLE llx_element_element
|
ALTER TABLE llx_element_element ADD UNIQUE INDEX idx_element_element_idx1 (sourceid, sourcetype, targetid, targettype);
|
||||||
ADD UNIQUE INDEX idx_element_element_idx1 (sourceid, sourcetype, targetid, targettype);
|
|
||||||
|
|
||||||
|
|
||||||
ALTER TABLE llx_element_element ADD INDEX idx_element_element_targetid (targetid);
|
ALTER TABLE llx_element_element ADD INDEX idx_element_element_targetid (targetid);
|
||||||
|
|||||||
@ -19,7 +19,7 @@
|
|||||||
-- ===================================================================
|
-- ===================================================================
|
||||||
|
|
||||||
|
|
||||||
-- Supprimme orhpelins pour permettre mont<EFBFBD>e de la cl<63>
|
-- Supprimme orhpelins pour permettre montee de la cle
|
||||||
-- V4 DELETE llx_facturedet FROM llx_facturedet LEFT JOIN llx_facture ON llx_facturedet.fk_facture = llx_facture.rowid WHERE llx_facture.rowid IS NULL;
|
-- V4 DELETE llx_facturedet FROM llx_facturedet LEFT JOIN llx_facture ON llx_facturedet.fk_facture = llx_facture.rowid WHERE llx_facture.rowid IS NULL;
|
||||||
|
|
||||||
ALTER TABLE llx_facturedet ADD INDEX idx_facturedet_fk_facture (fk_facture);
|
ALTER TABLE llx_facturedet ADD INDEX idx_facturedet_fk_facture (fk_facture);
|
||||||
|
|||||||
@ -217,15 +217,23 @@ class DoliDb
|
|||||||
$line=preg_replace('/unique index\s*\((\w+\s*,\s*\w+)\)/i','UNIQUE\(\\1\)',$line);
|
$line=preg_replace('/unique index\s*\((\w+\s*,\s*\w+)\)/i','UNIQUE\(\\1\)',$line);
|
||||||
}
|
}
|
||||||
|
|
||||||
# alter table create [unique] index (field1, field2 ...)
|
# alter table add primary key (field1, field2 ...) -> We remove the primary key name not accepted by PostGreSQL
|
||||||
# ALTER TABLE llx_accountingaccount ADD INDEX idx_accountingaccount_fk_pcg_version (fk_pcg_version)
|
# ALTER TABLE llx_dolibarr_modules ADD PRIMARY KEY pk_dolibarr_modules (numero, entity);
|
||||||
if (preg_match('/ALTER\s*TABLE\s*(.*)\s*ADD\s*(UNIQUE)?\s*(INDEX)?\s*(.*)\s*\(([\w,\s]+)\)/i',$line,$reg))
|
if (preg_match('/ALTER\s+TABLE\s*(.*)\s*ADD\s+PRIMARY\s+KEY\s*(.*)\s*\((.*)$/i',$line,$reg))
|
||||||
{
|
{
|
||||||
$fieldlist=$reg[5];
|
$line = "-- ".$line." replaced by --\n";
|
||||||
$idxname=$reg[4];
|
$line.= "ALTER TABLE ".$reg[1]." ADD PRIMARY KEY (".$reg[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
# alter table add [unique] [index] (field1, field2 ...)
|
||||||
|
# ALTER TABLE llx_accountingaccount ADD INDEX idx_accountingaccount_fk_pcg_version (fk_pcg_version)
|
||||||
|
if (preg_match('/ALTER\s+TABLE\s*(.*)\s*ADD\s+(UNIQUE INDEX|INDEX|UNIQUE)\s+(.*)\s*\(([\w,\s]+)\)/i',$line,$reg))
|
||||||
|
{
|
||||||
|
$fieldlist=$reg[4];
|
||||||
|
$idxname=$reg[3];
|
||||||
$tablename=$reg[1];
|
$tablename=$reg[1];
|
||||||
$line = "-- ".$line." replaced by --\n";
|
$line = "-- ".$line." replaced by --\n";
|
||||||
$line.= "CREATE ".($reg[2]?$reg[2].' ':'')."INDEX ".$idxname." ON ".$tablename." (".$fieldlist.")";
|
$line.= "CREATE ".(preg_match('/UNIQUE/',$reg[2])?'UNIQUE ':'')."INDEX ".$idxname." ON ".$tablename." (".$fieldlist.")";
|
||||||
}
|
}
|
||||||
} # END of if ($create_sql ne "") i.e. were inside create table statement so processed datatypes
|
} # END of if ($create_sql ne "") i.e. were inside create table statement so processed datatypes
|
||||||
else { # not inside create table
|
else { # not inside create table
|
||||||
@ -686,7 +694,7 @@ class DoliDb
|
|||||||
1044 => 'DB_ERROR_ACCESSDENIED',
|
1044 => 'DB_ERROR_ACCESSDENIED',
|
||||||
1046 => 'DB_ERROR_NODBSELECTED',
|
1046 => 'DB_ERROR_NODBSELECTED',
|
||||||
1048 => 'DB_ERROR_CONSTRAINT',
|
1048 => 'DB_ERROR_CONSTRAINT',
|
||||||
'42P07' => 'DB_ERROR_TABLE_ALREADY_EXISTS',
|
'42P07' => 'DB_ERROR_TABLE_OR_KEY_ALREADY_EXISTS',
|
||||||
1051 => 'DB_ERROR_NOSUCHTABLE',
|
1051 => 'DB_ERROR_NOSUCHTABLE',
|
||||||
1054 => 'DB_ERROR_NOSUCHFIELD',
|
1054 => 'DB_ERROR_NOSUCHFIELD',
|
||||||
1060 => 'DB_ERROR_COLUMN_ALREADY_EXISTS',
|
1060 => 'DB_ERROR_COLUMN_ALREADY_EXISTS',
|
||||||
@ -694,7 +702,7 @@ class DoliDb
|
|||||||
1062 => 'DB_ERROR_RECORD_ALREADY_EXISTS',
|
1062 => 'DB_ERROR_RECORD_ALREADY_EXISTS',
|
||||||
'42704' => 'DB_ERROR_SYNTAX',
|
'42704' => 'DB_ERROR_SYNTAX',
|
||||||
'42601' => 'DB_ERROR_SYNTAX',
|
'42601' => 'DB_ERROR_SYNTAX',
|
||||||
1068 => 'DB_ERROR_PRIMARY_KEY_ALREADY_EXISTS',
|
'42P16' => 'DB_ERROR_PRIMARY_KEY_ALREADY_EXISTS',
|
||||||
1075 => 'DB_ERROR_CANT_DROP_PRIMARY_KEY',
|
1075 => 'DB_ERROR_CANT_DROP_PRIMARY_KEY',
|
||||||
1091 => 'DB_ERROR_NOSUCHFIELD',
|
1091 => 'DB_ERROR_NOSUCHFIELD',
|
||||||
1100 => 'DB_ERROR_NOT_LOCKED',
|
1100 => 'DB_ERROR_NOT_LOCKED',
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user