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

#209: adaptation des fonctions de fusions de base de données pour PG....

#209: adaptation des fonctions de fusions de base de données pour PG. L'abstraction de l'insertion dans '''sql_insert''' n'a finalement pas besoin de l'argument Ignore puisque PG n'a pas cette option, ce paramètre inutilisé est reconverti comme recevant la description de la table (pas utilisé dans le code pour le moment). Ca ne marche pas encore en PG car le '''RETURNING''' pour obtenir le numéro de la dernière n'accepte pas qu'on lui donne un clé primaire multiple, il faut probablement déclarer explicitement une ''sequence'' PG ici.

Incidemment MySQL5 et PG refusent une syntaxe que MySQL4 acceptait, c'est réparé. Et le script est un peu plus blindé en amont en refusant d'insérer les tables pour lesquelles les règles de fusion ne sont pas encore définies.
parent 628a1a2d
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -103,10 +103,10 @@ function sql_free($res, $serveur='') ...@@ -103,10 +103,10 @@ function sql_free($res, $serveur='')
} }
// http://doc.spip.org/@sql_insert // http://doc.spip.org/@sql_insert
function sql_insert($table, $noms, $valeurs, $serveur='') function sql_insert($table, $noms, $valeurs, $desc=array(), $serveur='')
{ {
$f = sql_serveur('insert', $serveur); $f = sql_serveur('insert', $serveur);
return $f($table, $noms, $valeurs); return $f($table, $noms, $valeurs, $desc);
} }
// http://doc.spip.org/@sql_update // http://doc.spip.org/@sql_update
...@@ -157,7 +157,7 @@ function sql_multi($sel, $lang, $serveur='') ...@@ -157,7 +157,7 @@ function sql_multi($sel, $lang, $serveur='')
} }
// http://doc.spip.org/@sql_error // http://doc.spip.org/@sql_error
function sql_error($query, $serveur='') { function sql_error($query='requete inconnue', $serveur='') {
$f = sql_serveur('error', $serveur); $f = sql_serveur('error', $serveur);
return $f($query); return $f($query);
} }
......
...@@ -352,8 +352,8 @@ function spip_mysql_free($r) { ...@@ -352,8 +352,8 @@ function spip_mysql_free($r) {
} }
// http://doc.spip.org/@spip_mysql_insert // http://doc.spip.org/@spip_mysql_insert
function spip_mysql_insert($table, $champs, $valeurs, $ignore='') { function spip_mysql_insert($table, $champs, $valeurs, $desc='') {
if (!spip_mysql_query("INSERT $ignore INTO $table $champs VALUES $valeurs")) if (!spip_mysql_query("INSERT INTO $table $champs VALUES $valeurs"))
return 0; return 0;
$r = mysql_insert_id(); $r = mysql_insert_id();
return $r ? $r : (($r===0) ? -1 : 0); return $r ? $r : (($r===0) ? -1 : 0);
......
...@@ -297,25 +297,31 @@ function spip_pg_free($res, $serveur='') { ...@@ -297,25 +297,31 @@ function spip_pg_free($res, $serveur='') {
} }
// http://doc.spip.org/@spip_pg_insert // http://doc.spip.org/@spip_pg_insert
function spip_pg_insert($table, $champs, $valeurs, $ignore='') { function spip_pg_insert($table, $champs, $valeurs, $desc=array()) {
global $tables_principales;
global $spip_pg_link, $table_prefix; global $spip_pg_link, $table_prefix;
include_spip('base/serial'); if (!$desc) {
if (isset($tables_principales[$table]['key']["PRIMARY KEY"])) global $tables_principales;
$ret = " RETURNING " include_spip('base/serial');
. $tables_principales[$table]['key']["PRIMARY KEY"]; $desc = @$tables_principales[$table];
}
if (isset($desc['key']["PRIMARY KEY"]))
$ret = " RETURNING " . $desc['key']["PRIMARY KEY"];
else $ret = ''; else $ret = '';
if ($GLOBALS['table_prefix']) if ($GLOBALS['table_prefix'])
$table = preg_replace('/^spip/', $table = preg_replace('/^spip/',
$GLOBALS['table_prefix'], $GLOBALS['table_prefix'],
$table); $table);
$r = pg_query("INSERT INTO $table $champs VALUES $valeurs $ret"); $r = pg_query($q="INSERT INTO $table $champs VALUES $valeurs $ret");
if (!$r) return 0; if ($r) {
if (!$ret) return -1; if (!$ret) return 0;
$r = pg_fetch_array($r, NULL, PGSQL_NUM); if ($r = pg_fetch_array($r, NULL, PGSQL_NUM))
return $r[0];
}
spip_log("Erreur $q", 'pg'); // trace a minima
return -1;
return $r[0];
} }
// http://doc.spip.org/@spip_pg_update // http://doc.spip.org/@spip_pg_update
......
...@@ -12,22 +12,30 @@ ...@@ -12,22 +12,30 @@
if (!defined("_ECRIRE_INC_VERSION")) return; if (!defined("_ECRIRE_INC_VERSION")) return;
// http://doc.spip.org/@insere_1_init // table des translations
function insere_1_init($request) {
// preparation de la table des translations $spip_translate = array(
$spip_translate = array(
"type" => "VARCHAR(16) NOT NULL", "type" => "VARCHAR(16) NOT NULL",
"ajout" => "ENUM('0', '1')", "ajout" => "ENUM('0', '1')",
"titre" => "text NOT NULL", "titre" => "text NOT NULL",
"id_old" => "BIGINT (21) DEFAULT '0' NOT NULL", "id_old" => "BIGINT (21) DEFAULT '0' NOT NULL",
"id_new" => "BIGINT (21) DEFAULT '0' NOT NULL"); "id_new" => "BIGINT (21) DEFAULT '0' NOT NULL");
$spip_translate_key = array( $spip_translate_key = array(
"PRIMARY KEY" => "id_old, id_new, type", "PRIMARY KEY" => "id_old, id_new, type",
"KEY id_old" => "id_old"); "KEY id_old" => "id_old");
spip_mysql_create('spip_translate', $spip_translate, $spip_translate_key, true); // La rajouter ici car sql_insert en a besoin
global $tables_principales;;
$tables_principales['spip_translate'] =
array('field' => &$spip_translate, 'key' => &$spip_translate_key, 'join' => &$spip_signatures_join);
// http://doc.spip.org/@insere_1_init
function insere_1_init($request) {
global $tables_principales;
$v = $tables_principales['spip_translate'];
sql_create('spip_translate', $v['field'], $v['key'], true);
// au cas ou la derniere fois ce serait terminee anormalement // au cas ou la derniere fois ce serait terminee anormalement
spip_query("DELETE FROM spip_translate"); spip_query("DELETE FROM spip_translate");
return insere_1bis_init($request); return insere_1bis_init($request);
...@@ -40,6 +48,12 @@ function insere_1bis_init($request) { ...@@ -40,6 +48,12 @@ function insere_1bis_init($request) {
$t = array_keys($GLOBALS['tables_principales']); $t = array_keys($GLOBALS['tables_principales']);
// ... mais pas cette table a cause de la duplication des login // ... mais pas cette table a cause de la duplication des login
unset($t[array_search('spip_auteurs', $t)]); unset($t[array_search('spip_auteurs', $t)]);
// ni celle-ci, les qui est liee implicitement a la precedente
unset($t[array_search('spip_messages', $t)]);
// et pour celles-ci restent à programmer les regles
unset($t[array_search('spip_forum', $t)]);
unset($t[array_search('spip_syndic', $t)]);
unset($t[array_search('spip_signatures', $t)]);
return $t; return $t;
} }
...@@ -87,19 +101,18 @@ function translate_init($request) { ...@@ -87,19 +101,18 @@ function translate_init($request) {
// http://doc.spip.org/@import_insere // http://doc.spip.org/@import_insere
function import_insere($values, $table, $desc, $request, $atts) { function import_insere($values, $table, $desc, $request, $atts) {
static $jesais = array();
$type_id = $desc['key']["PRIMARY KEY"]; $type_id = $desc['key']["PRIMARY KEY"];
// reserver une place dans les tables principales si nouveau // reserver une place dans les tables principales si nouveau
$ajout = 0; $ajout = 0;
if ((!function_exists($f = 'import_identifie_' . $type_id)) if ((!function_exists($f = 'import_identifie_' . $type_id))
OR (!($n = $f($values, $table, $desc, $request)))) { OR (!($n = $f($values, $table, $desc, $request)))) {
// pas d'importation de types_doc (a revoir) // pas d'importation de types_doc (a revoir)
if ($table == 'spip_types_documents') return; if ($table == 'spip_types_documents') return;
$n = sql_insert($table, '', '()'); $n = sql_insert($table, '()', '()');
if (!$n) { $ajout=1;
$GLOBALS['erreur_restauration'] = sql_error();
return;
}
$ajout = 1;
} }
if (is_array($n)) if (is_array($n))
...@@ -107,7 +120,7 @@ function import_insere($values, $table, $desc, $request, $atts) { ...@@ -107,7 +120,7 @@ function import_insere($values, $table, $desc, $request, $atts) {
else {$id = $n; $titre = "";} else {$id = $n; $titre = "";}
sql_insert('spip_translate', sql_insert('spip_translate',
"(id_old, id_new, titre, type, ajout)", "(id_old, id_new, titre, type, ajout)",
"(". $values[$type_id] .",$id, " . _q($titre) . ", '$type_id', '$ajout')"); "(". $values[$type_id] .",$id, " . _q($titre) . ", '$type_id', $ajout)");
} }
// Renumerotation des entites collectees // Renumerotation des entites collectees
...@@ -131,14 +144,13 @@ function import_translate($values, $table, $desc, $request, $atts) { ...@@ -131,14 +144,13 @@ function import_translate($values, $table, $desc, $request, $atts) {
// Une synchronisation plus fine serait preferable, cf [8004] // Une synchronisation plus fine serait preferable, cf [8004]
// http://doc.spip.org/@import_inserer_translate // http://doc.spip.org/@import_inserer_translate
function import_inserer_translate($values, $table, $desc, $request, $vals, $atts) { function import_inserer_translate($values, $table, $desc, $request, $atts) {
global $trans; global $trans;
$p = $desc['key']["PRIMARY KEY"]; $p = $desc['key']["PRIMARY KEY"];
$v = $values[$p]; $v = $values[$p];
if (!isset($trans[$p]) OR !isset($trans[$p][$v]) OR $trans[$p][$v][2]){ if (!isset($trans[$p]) OR !isset($trans[$p][$v]) OR $trans[$p][$v][2]){
spip_query("REPLACE $table (" . join(',',array_keys($values)) . ') VALUES (' .substr($vals,1) . ')'); sql_replace($table, $values, $desc);
$on = isset($atts['on']) ? ($atts['on']) : ''; $on = isset($atts['on']) ? ($atts['on']) : '';
$off = isset($atts['off']) ? ($atts['off']) : ''; $off = isset($atts['off']) ? ($atts['off']) : '';
if ($on OR $off) { if ($on OR $off) {
...@@ -164,19 +176,15 @@ function import_inserer_translate($values, $table, $desc, $request, $vals, $atts ...@@ -164,19 +176,15 @@ function import_inserer_translate($values, $table, $desc, $request, $vals, $atts
// http://doc.spip.org/@import_translate_std // http://doc.spip.org/@import_translate_std
function import_translate_std($values, $table, $desc, $request, $atts) { function import_translate_std($values, $table, $desc, $request, $atts) {
$vals = '';
foreach ($values as $k => $v) { foreach ($values as $k => $v) {
if ($k=='id_parent' OR $k=='id_secteur') if ($k=='id_parent' OR $k=='id_secteur')
$k = 'id_rubrique'; $k = 'id_rubrique';
else if (($k=='chapo') AND ($v[0]=='=') AND preg_match(_RACCOURCI_CHAPO, substr($v,1), $m)) else if (($k=='chapo') AND ($v[0]=='=') AND preg_match(_RACCOURCI_CHAPO, substr($v,1), $m))
$v = '=[->' . substr($v,1) . ']'; $v = '=[->' . substr($v,1) . ']';
$v = importe_raccourci($k,importe_translate_maj($k, $v)); $values[$k]= importe_raccourci($k,importe_translate_maj($k, $v));
$vals .= "," . _q($v);
} }
import_inserer_translate($values, $table, $desc, $request, $vals, $atts); import_inserer_translate($values, $table, $desc, $request, $atts);
} }
// http://doc.spip.org/@import_translate_spip_documents // http://doc.spip.org/@import_translate_spip_documents
...@@ -188,14 +196,13 @@ function import_translate_spip_documents($values, $table, $desc, $request, $atts ...@@ -188,14 +196,13 @@ function import_translate_spip_documents($values, $table, $desc, $request, $atts
# $url .= $atts['dir_img']; // deja dans la BD importee # $url .= $atts['dir_img']; // deja dans la BD importee
$values['distant']= 'oui'; $values['distant']= 'oui';
$vals = '';
foreach ($values as $k => $v) { foreach ($values as $k => $v) {
if ($k=='fichier') if ($k=='fichier')
$v = $url .$v; $v = $url .$v;
else $v = importe_raccourci($k,importe_translate_maj($k, $v)); else $v = importe_raccourci($k,importe_translate_maj($k, $v));
$vals .= "," . _q($v); $values[]= $v;
} }
import_inserer_translate($values, $table, $desc, $request, $vals, $atts); import_inserer_translate($values, $table, $desc, $request, $atts);
} }
// Fonction de renumerotation, par delegation aux fonction specialisees // Fonction de renumerotation, par delegation aux fonction specialisees
...@@ -308,7 +315,7 @@ function import_identifie_parent_id_mot($id_groupe, $titre, $v) ...@@ -308,7 +315,7 @@ function import_identifie_parent_id_mot($id_groupe, $titre, $v)
$r = sql_fetch(spip_query("SELECT id_mot FROM spip_mots WHERE titre=$titre AND id_groupe=$new" )); $r = sql_fetch(spip_query("SELECT id_mot FROM spip_mots WHERE titre=$titre AND id_groupe=$new" ));
if ($r) return (0 - $r['id_mot']); if ($r) return (0 - $r['id_mot']);
} }
$r = sql_insert('spip_mots', '', '()'); $r = sql_insert('spip_mots', '()', '()');
spip_query("REPLACE spip_translate (id_old, id_new, titre, type, ajout) VALUES ($v,$r,$titre,'id_mot',1)"); spip_query("REPLACE spip_translate (id_old, id_new, titre, type, ajout) VALUES ($v,$r,$titre,'id_mot',1)");
return $r; return $r;
} }
...@@ -330,7 +337,7 @@ function import_identifie_parent_id_article($id_parent, $titre, $v) ...@@ -330,7 +337,7 @@ function import_identifie_parent_id_article($id_parent, $titre, $v)
$r = sql_fetch(spip_query("SELECT id_article FROM spip_articles WHERE titre=$titre AND id_rubrique=$id_parent AND statut<>'poubelle'" )); $r = sql_fetch(spip_query("SELECT id_article FROM spip_articles WHERE titre=$titre AND id_rubrique=$id_parent AND statut<>'poubelle'" ));
if ($r) return (0 - $r['id_article']); if ($r) return (0 - $r['id_article']);
$r = sql_insert('spip_articles', '', '()'); $r = sql_insert('spip_articles', '()', '()');
spip_query("REPLACE spip_translate (id_old, id_new, titre, type, ajout) VALUES ($v,$r,$titre,'id_article',1)"); spip_query("REPLACE spip_translate (id_old, id_new, titre, type, ajout) VALUES ($v,$r,$titre,'id_article',1)");
return $r; return $r;
} }
...@@ -352,7 +359,7 @@ function import_identifie_parent_id_breve($id_parent, $titre, $v) ...@@ -352,7 +359,7 @@ function import_identifie_parent_id_breve($id_parent, $titre, $v)
$r = sql_fetch(spip_query("SELECT id_breve FROM spip_breves WHERE titre=$titre AND id_rubrique=$id_parent AND statut<>'refuse'" )); $r = sql_fetch(spip_query("SELECT id_breve FROM spip_breves WHERE titre=$titre AND id_rubrique=$id_parent AND statut<>'refuse'" ));
if ($r) return (0 - $r['id_breve']); if ($r) return (0 - $r['id_breve']);
$r = sql_insert('spip_breves', '', '()'); $r = sql_insert('spip_breves', '()', '()');
spip_query("REPLACE spip_translate (id_old, id_new, titre, type, ajout) VALUES ($v,$r,$titre,'id_breve',1)"); spip_query("REPLACE spip_translate (id_old, id_new, titre, type, ajout) VALUES ($v,$r,$titre,'id_breve',1)");
return $r; return $r;
} }
......
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