Skip to content
Extraits de code Groupes Projets
Valider f2e7c559 rédigé par esj's avatar esj
Parcourir les fichiers

Scories dans la série des mises à jour, blindage de la fonction qui les gère...

Scories dans la série des mises à jour, blindage de la fonction qui les gère pour qu'on en soit prévenu, et complément au portage de l'instruction ALTER en PG.
parent ddf5255e
Branches
Étiquettes
Aucune requête de fusion associée trouvée
...@@ -151,35 +151,37 @@ function spip_pg_alter_change($table, $arg, $serveur='') ...@@ -151,35 +151,37 @@ function spip_pg_alter_change($table, $arg, $serveur='')
// http://doc.spip.org/@spip_pg_alter_add // http://doc.spip.org/@spip_pg_alter_add
function spip_pg_alter_add($table, $arg, $serveur='') { function spip_pg_alter_add($table, $arg, $serveur='') {
if (!preg_match('/^(INDEX|KEY|PRIMARY\s+KEY|)\s*`?(\w+)`?(.*)$/', $arg, $r)) if (!preg_match('/^(INDEX|KEY|PRIMARY\s+KEY|)\s*(.*)$/', $arg, $r)) {
spip_log("drop $arg incompris", 'pg'); spip_log("alter add $arg incompris", 'pg');
else { return NULL;
if (!$r[1]) }
return spip_pg_query("ALTER TABLE $table ADD " . $r[2] . ' ' . mysql2pg_type($r[3]), $serveur); if (!$r[1]) {
elseif ($r[1][0] = 'P') preg_match('/`?(\w+)`?(.*)/',$r[2], $m);
return spip_pg_query("ALTER TABLE $table ADD PRIMARY KEY " . $r[2], $serveur); return spip_pg_query("ALTER TABLE $table ADD " . $m[1] . ' ' . mysql2pg_type($m[2]), $serveur);
else { } elseif ($r[1][0] == 'P') {
return spip_pg_query("CREATE INDEX " . $table . '_' . $r[2] . "ON $table", $serveur); preg_match('/\(`?(\w+)`?\)/',$r[2], $m);
} return spip_pg_query("ALTER TABLE $table ADD CONSTRAINT $table" .'_pkey PRIMARY KEY (' . $m[1] . ')', $serveur);
} else {
preg_match('/`?(\w+)`?\s*(\([^)]*\))/',$r[2], $m);
return spip_pg_query("CREATE INDEX " . $table . '_' . $m[1] . " ON $table " . str_replace("`","",$m[2]), $serveur);
} }
} }
// http://doc.spip.org/@spip_pg_alter_drop // http://doc.spip.org/@spip_pg_alter_drop
function spip_pg_alter_drop($table, $arg, $serveur='') { function spip_pg_alter_drop($table, $arg, $serveur='') {
if (!preg_match('/^(INDEX|KEY|PRIMARY\s+KEY|)\s*`?(\w+)`?/', $arg, $r)) if (!preg_match('/^(INDEX|KEY|PRIMARY\s+KEY|)\s*`?(\w*)`?/', $arg, $r))
spip_log("alter drop: $arg incompris", 'pg'); spip_log("alter drop: $arg incompris", 'pg');
else { else {
if (!$r[1]) if (!$r[1])
return spip_pg_query("ALTER TABLE $table DROP " . $r[2], $serveur); return spip_pg_query("ALTER TABLE $table DROP " . $r[2], $serveur);
elseif ($r[1][0] = 'P') elseif ($r[1][0] == 'P')
return spip_pg_query("ALTER TABLE $table DROP CONSTRAINT PRIMARY", $serveur); return spip_pg_query("ALTER TABLE $table DROP CONSTRAINT $table" . '_pkey', $serveur);
else { else {
return spip_pg_query("DROP INDEX " . $table . '_' . $r[2], $serveur); return spip_pg_query("DROP INDEX " . $table . '_' . $r[2], $serveur);
} }
} }
} }
// http://doc.spip.org/@spip_pg_explain // http://doc.spip.org/@spip_pg_explain
function spip_pg_explain($query, $serveur=''){ function spip_pg_explain($query, $serveur=''){
if (strpos($query, 'SELECT') !== 0) return array(); if (strpos($query, 'SELECT') !== 0) return array();
......
...@@ -104,13 +104,16 @@ function maj_while($version_installee, $version_cible) ...@@ -104,13 +104,16 @@ function maj_while($version_installee, $version_cible)
// http://doc.spip.org/@serie_alter // http://doc.spip.org/@serie_alter
function serie_alter($serie, $q = array()) { function serie_alter($serie, $q = array()) {
$etape = intval(@$GLOBALS['meta']['upgrade_etape_'.$serie]); $etape = intval(@$GLOBALS['meta']['upgrade_etape_'.$serie]);
foreach ($q as $i => $req) { foreach ($q as $i => $r) {
if ($i >= $etape) { if ($i >= $etape) {
$f = array_shift($req); if (is_array($r)
spip_log("maj $serie etape $i: $f ".join(',',$req),'maj'); AND function_exists($f = array_shift($r))) {
if (function_exists($f)) { spip_log("$serie/$i: $f " . join(',',$r),'maj');
call_user_func_array($f, $req); call_user_func_array($f, $r);
ecrire_meta('upgrade_etape_'.$serie, $i+1); ecrire_meta('upgrade_etape_'.$serie, $i+1);
} else {
echo "maj $serie etape $i incorrecte";
exit;
} }
} }
} }
......
...@@ -378,7 +378,7 @@ function maj_1_952() { ...@@ -378,7 +378,7 @@ function maj_1_952() {
if (!$ok) die('echec sur maj_1_952()'); if (!$ok) die('echec sur maj_1_952()');
} }
$GLOBALS['maj'][1][952] = array('maj_1_952'); $GLOBALS['maj'][1][952] = array(array('maj_1_952'));
function maj_1_953() function maj_1_953()
{ {
...@@ -387,7 +387,7 @@ function maj_1_953() ...@@ -387,7 +387,7 @@ function maj_1_953()
creer_base_types_doc($tables_principales['spip_types_documents']); creer_base_types_doc($tables_principales['spip_types_documents']);
} }
$GLOBALS['maj'][1][953] = array('maj_1_953'); $GLOBALS['maj'][1][953] = array(array('maj_1_953'));
$GLOBALS['maj'][1][954] = array( $GLOBALS['maj'][1][954] = array(
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter