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

#209: nouvelle rationnalisation de la fonction '''trouver_table''' introduite...

#209: nouvelle rationnalisation de la fonction '''trouver_table''' introduite par [10133], qui affecte tous son résultat à la globale '''$connexions''' plutot que d'en recalculer une partie à chaque appel. Le tableau construit a toujours  les index '''field''', '''index''', '''table''' (nom SQL) et à présent '''id_table''' qui donne le nom du suivant le '''AS''' dans la requête SQL (il était nommé "type" auparavant, ce qui était trompeur maintenant qu'il existe le type du serveur dans cette structure de données).

Par ailleurs, les jointures dans une base externe ne marchaient plus. Quant aux balises #URL_ utilisées dans une base externe non SPIP, elles provoquaient une récursion infinie débouchant sur un {{{Illegal Instruction}}} par PHP.
parent fc0e6cf6
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -623,9 +623,9 @@ function compile_cas($tableau, $descr, &$boucles, $id_boucle) {
// Si on la trouve, le tableau resultat a les entrees:
// field (comme dans serial.php)
// key (comme dans serial.php)
// serveur = serveur bd associe
// table = nom complet de la table (avec le prefixe spip_ pour les stds)
// type = nom court (i.e. type de boucle)
// table = nom SQL de la table (avec le prefixe spip_ pour les stds)
// id_table = nom SPIP de la table (i.e. type de boucle)
// le compilateur produit FROM $r['table'] AS $r['id_table']
// http://doc.spip.org/@trouver_table
function trouver_table($type, $boucle)
......@@ -640,32 +640,36 @@ function trouver_table($type, $boucle)
// indirection (pour les rares cas ou le nom de la table!=type)
$t = $table_des_tables[$type];
$nom_table = 'spip_' . $t;
if (!isset($connexions[$s]['tables'][$nom_table]))
if (!isset($connexions[$s]['tables'][$nom_table])) {
$connexions[$s]['tables'][$nom_table] =
$tables_principales[$nom_table];
$connexions[$s]['tables'][$nom_table]['table']= $nom_table;
$connexions[$s]['tables'][$nom_table]['id_table']= $t;
}
} elseif ($spip AND isset($tables_auxiliaires['spip_' .$type])) {
$t = $type;
$nom_table = 'spip_' . $t;
if (!isset($connexions[$s]['tables'][$nom_table]))
if (!isset($connexions[$s]['tables'][$nom_table])) {
$connexions[$s]['tables'][$nom_table] =
$tables_auxiliaires[$nom_table];
$connexions[$s]['tables'][$nom_table]['table']= $nom_table;
$connexions[$s]['tables'][$nom_table]['id_table']= $t;
}
} else $nom_table = $t = $type;
spip_log("%%%% $t $nom_table " . isset($connexions[$s]['tables'][$nom_table]));
if (!isset($connexions[$s]['tables'][$nom_table])) {
$desc = sql_showtable($nom_table, $serveur, ($nom_table != $type));
if (!$desc OR !$desc['field']) {
erreur_squelette(_T('zbug_table_inconnue', array('table' => $s ? "$serveur:$type" : $type)),
$boucle->id_boucle);
return null;
} else {
$desc['table']= $nom_table;
$desc['id_table']= $t;
}
$connexions[$s]['tables'][$nom_table] = $desc;
} else $desc = $connexions[$s]['tables'][$nom_table];
$desc['table']= $nom_table;
$desc['serveur']= $s;
$desc['type']= $t;
return $desc;
}
return $connexions[$s]['tables'][$nom_table];
}
// affichage du code produit
......@@ -757,7 +761,7 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect='')
$show = trouver_table($type, $boucles[$id]);
if ($show) {
$nom_table = $show['table'];
$boucles[$id]->id_table = $show['type'];
$boucles[$id]->id_table = $show['id_table'];
$boucles[$id]->primary = $show['key']["PRIMARY KEY"];
$boucles[$id]->descr = &$descr;
if ((!$boucles[$id]->jointures)
......
......@@ -436,8 +436,8 @@ function critere_par_jointure(&$boucle, $join)
if (!$t) {
$type = $boucle->type_requete;
$desc = trouver_table($type, $boucle);
$cle = trouver_champ_exterieur($champ, $boucle->jointures, $boucle);
if ($cle)
$cle = calculer_jointure($boucle, array($desc['table'], $desc), $cle, false);
if ($cle) $t = "L$cle";
......
......@@ -252,9 +252,10 @@ function generer_generer_url($type, $p)
if (!$s)
return "generer_url_$type($_id)";
elseif (!$GLOBALS['connexions'][$s]['spip_connect_version'])
return calculer_champ($p);
else {
elseif (!$GLOBALS['connexions'][$s]['spip_connect_version']) {
erreur_squelette("#URL_" . strtoupper($type). ' ' . _T('zbug_distant_interdit'));
return "";
} else {
$u = "quete_meta('adresse_site', '$s')";
if ($type != 'document')
return "$u . '?page=$type&id_$type=' . " . $_id;
......
......@@ -65,13 +65,13 @@ function index_tables_en_pile($idb, $nom_champ, &$boucles) {
$r = $boucles[$idb]->type_requete;
if ($r == 'boucle') return array();
$desc = trouver_table($r, $boucle);
$desc = trouver_table($r, $boucles[$idb]);
if(!$desc) {
# continuer pour chercher l'erreur suivante
return array("'#" . $r . ':' . $nom_champ . "'",'');
}
$t= $desc['type'];
$t= $desc['id_table'];
$excep = isset($exceptions_des_tables[$r]) ? $exceptions_des_tables[$r] : '';
if ($excep)
$excep = isset($excep[$nom_champ]) ? $excep[$nom_champ] : '';
......@@ -123,7 +123,7 @@ function index_exception(&$boucle, $desc, $nom_champ, $excep)
}
}
}
else $t = $desc['type'];
else $t = $desc['id_table'];
// demander a SQL de gerer le synonyme
// ca permet que excep soit dynamique (Cedric, 2/3/06)
if ($excep != $nom_champ) $excep .= ' AS '. $nom_champ;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter