New: Possibilité d'imposer la version minimale de la base dans les scripts de migration ou .sql.

Pour cela il faut mettre devant l'ordre sql, la sequence --Vx.x pour executer l'ordre SQL uniquement si base en version x.x ou superieur.
This commit is contained in:
Laurent Destailleur 2006-06-17 00:58:51 +00:00
parent 4889b4193e
commit 3566ef2692
7 changed files with 99 additions and 17 deletions

View File

@ -112,8 +112,10 @@ if ($_POST["action"] == "set")
if ($ok) if ($ok)
{ {
$version=$db->getVersion(); $version=$db->getVersion();
print '<tr><td>'; $versionarray=$db->getVersionArray();
print $langs->trans("DatabaseVersion").'</td><td>'.$version.'</td></tr>'; print '<tr><td>'.$langs->trans("DatabaseVersion").'</td>';
print '<td align="right">'.$version.'</td></tr>';
//print '<td align="right">'.join('.',$versionarray).'</td></tr>';
} }
/************************************************************************************** /**************************************************************************************
@ -213,12 +215,17 @@ 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 (eregi('^-- V([0-9]+)',$buf,$reg)) if (eregi('^-- V([0-9\.]+)',$buf,$reg))
{ {
if ($reg[1] && $reg[1] <= $version) $versioncommande=split('\.',$reg[1]);
//print var_dump($versioncommande);
//print var_dump($versionarray);
if (sizeof($versioncommande) && sizeof($versionarray)
&& versioncompare($versioncommande,$versionarray) <= 0)
{ {
$buf=eregi_replace('^-- V([0-9]+)','',$buf); // Version qualified, delete SQL comments
//print $buf.'<br>'; $buf=eregi_replace('^-- V([0-9\.]+)','',$buf);
//print "Ligne $i qualifiée par version: ".$buf.'<br>';
} }
} }

View File

@ -26,6 +26,9 @@
\version $Revision$ \version $Revision$
*/ */
require_once('../translate.class.php');
// Forcage du parametrage PHP magic_quots_gpc (Sinon il faudrait a chaque POST, conditionner // Forcage du parametrage PHP magic_quots_gpc (Sinon il faudrait a chaque POST, conditionner
// la lecture de variable par stripslashes selon etat de get_magic_quotes). // la lecture de variable par stripslashes selon etat de get_magic_quotes).
// En mode off (recommande il faut juste faire addslashes au moment d'un insert/update. // En mode off (recommande il faut juste faire addslashes au moment d'un insert/update.
@ -45,9 +48,8 @@ if (get_magic_quotes_gpc())
$docurl = '<a href="doc/dolibarr-install.html">documentation</a>'; $docurl = '<a href="doc/dolibarr-install.html">documentation</a>';
$conffile = "../conf/conf.php"; $conffile = "../conf/conf.php";
// Defini objet langs
require_once('../translate.class.php');
// Defini objet langs
$langs = new Translate('../langs'); $langs = new Translate('../langs');
$langs->setDefaultLang('auto'); $langs->setDefaultLang('auto');
$langs->setPhpLang(); $langs->setPhpLang();
@ -103,6 +105,7 @@ function pFooter($nonext=0,$setuplang='')
print '</html>'; print '</html>';
} }
function dolibarr_syslog($message) function dolibarr_syslog($message)
{ {
// Les fonctions syslog ne sont pas toujours install豠ou autoris褳 chez les h补rgeurs // Les fonctions syslog ne sont pas toujours install豠ou autoris褳 chez les h补rgeurs
@ -117,4 +120,27 @@ function dolibarr_syslog($message)
// } // }
} }
} }
/**
\brief Compare 2 versions
\param versionarray1 Tableau de version (vermajeur,vermineur,autre)
\param versionarray2 Tableau de version (vermajeur,vermineur,autre)
\return int <0 si versionarray1<versionarray2, 0 si =, >0 si versionarray1>versionarray2
*/
function versioncompare($versionarray1,$versionarray2)
{
$ret=0;
$i=0;
while ($i < max(sizeof($versionarray1),sizeof($versionarray1)))
{
$operande1=isset($versionarray1[$i])?$versionarray1[$i]:0;
$operande2=isset($versionarray2[$i])?$versionarray2[$i]:0;
if ($operande1 < $operande2) { $ret = -1; break; }
if ($operande1 > $operande2) { $ret = 1; break; }
$i++;
}
return $ret;
}
?> ?>

View File

@ -103,7 +103,6 @@ if (! isset($_GET["action"]) || $_GET["action"] == "upgrade")
{ {
if($db->database_selected == 1) if($db->database_selected == 1)
{ {
dolibarr_syslog("Connexion réussie à la base : $dolibarr_main_db_name"); dolibarr_syslog("Connexion réussie à la base : $dolibarr_main_db_name");
} }
else else
@ -112,6 +111,17 @@ if (! isset($_GET["action"]) || $_GET["action"] == "upgrade")
} }
} }
// Affiche version
if ($ok)
{
$version=$db->getVersion();
$versionarray=$db->getVersionArray();
print '<tr><td>'.$langs->trans("DatabaseVersion").'</td>';
print '<td align="right">'.$version.'</td></tr>';
//print '<td align="right">'.join('.',$versionarray).'</td></tr>';
}
/*************************************************************************************** /***************************************************************************************
* *
@ -141,9 +151,27 @@ if (! isset($_GET["action"]) || $_GET["action"] == "upgrade")
while (!feof ($fp)) while (!feof ($fp))
{ {
$buf = fgets($fp, 4096); $buf = fgets($fp, 4096);
$buf = ereg_replace('--(.*)','',$buf); // Delete SQL comments
//print $buf.'<br>'; // Cas special de lignes autorisees pour certaines versions uniquement
$buffer .= $buf; if (eregi('^-- V([0-9\.]+)',$buf,$reg))
{
$versioncommande=split('\.',$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=eregi_replace('^-- V([0-9\.]+)','',$buf);
//print "Ligne $i qualifiée par version: ".$buf.'<br>';
}
}
// Ajout ligne si non commentaire
if (! eregi('^--',$buf)) $buffer .= $buf;
// print $buf.'<br>';
if (eregi(';',$buffer)) if (eregi(';',$buffer))
{ {
// Found new request // Found new request

View File

@ -57,7 +57,7 @@ function versiontostring($versionarray)
\brief Compare 2 versions \brief Compare 2 versions
\param versionarray1 Tableau de version (vermajeur,vermineur,autre) \param versionarray1 Tableau de version (vermajeur,vermineur,autre)
\param versionarray2 Tableau de version (vermajeur,vermineur,autre) \param versionarray2 Tableau de version (vermajeur,vermineur,autre)
\return int <0 si versionarray1>versionarray2, 0 si =, >0 si versionarray1>versionarray2 \return int <0 si versionarray1<versionarray2, 0 si =, >0 si versionarray1>versionarray2
*/ */
function versioncompare($versionarray1,$versionarray2) function versioncompare($versionarray1,$versionarray2)
{ {

View File

@ -206,6 +206,16 @@ class DoliDb
} }
/**
\brief Renvoie la version du serveur dans un tableau
\return array Tableau de chaque niveau de version
*/
function getVersionArray()
{
return split('\.',$this->getVersion());
}
/** /**
\brief Renvoie l'id de la connection \brief Renvoie l'id de la connection
\return string Id connection \return string Id connection

View File

@ -177,6 +177,17 @@ class DoliDb
{ {
return '?'; return '?';
} }
/**
\brief Renvoie la version du serveur dans un tableau
\return array Tableau de chaque niveau de version
*/
function getVersionArray()
{
return split('\.',$this->getVersion());
}
/** /**

View File

@ -1,9 +1,9 @@
-- $Revision$ -- $Revision$
-- --
-- Attention à l ordre des requetes -- Attention à l ordre des requetes.
-- ce fichier doit être chargé sur une version 2.0.0 -- Ce fichier doit être chargé sur une version 2.0.0
-- sans AUCUNE erreur ni warning -- sans AUCUNE erreur ni warning
-- --
create table llx_paiementfourn_facturefourn create table llx_paiementfourn_facturefourn
@ -290,7 +290,7 @@ alter table llx_accountingsystem_det rename to llx_accountingaccount;
insert into llx_rights_def (id, libelle, module, type, bydefault, subperms, perms) values (262,'Consulter tous les clients','commercial','r',1,'voir','client'); insert into llx_rights_def (id, libelle, module, type, bydefault, subperms, perms) values (262,'Consulter tous les clients','commercial','r',1,'voir','client');
insert into llx_user_rights(fk_user,fk_id) select distinct fk_user, '262' from llx_user_rights where fk_id = 261; -- V4.1 insert into llx_user_rights(fk_user,fk_id) select distinct fk_user, '262' from llx_user_rights where fk_id = 261;
update llx_rights_def set subperms='creer' where subperms='supprimer' AND module='user' AND perms='self' AND id=255; update llx_rights_def set subperms='creer' where subperms='supprimer' AND module='user' AND perms='self' AND id=255;
alter table llx_commandedet add column rang integer DEFAULT 0; alter table llx_commandedet add column rang integer DEFAULT 0;